从 Pipedream 迁出

更新于 2026年10月20日

Pipedream Workflows 将于 2027年3月31日关停,所有 …m.pipedream.net URL 也会随之失效。如果你的工作流由 Webhook、定时任务或邮件触发,AnyHook 会给每个工作流一个可以一直保留的 URL,并运行你的 Node.js 代码步骤,其中大部分不用改。你只需在每个平台上改一次 URL,每个工作流都会变成一个普通的 JavaScript 文件:你能读懂它,放进 git,也能随时带走。

之前 · URL 属于 PipedreamStripe….m.pipedream.net2027-03-31 终止工作流2027-04-30 删除之后 · URL 属于你Stripein.anyhook.net/you/app保存,重试Pipedream你的代码直到你切换或 n8n、你的服务器

Pipedream 要关停什么

  • Workflows 和 String 将于 2027年3月31日停止运行。Pipedream 已不再接受新注册和新订阅。
  • 所有 Workflows 数据会在 2027年4月30日前删除,包括已连接账号的凭据和 OAuth 令牌。
  • Pipedream Connect(包括它的 API、MCP 服务器和 API 代理)会继续运营。
  • 导出工具会把工作流的结构下载为 JSON,一次导出一个项目。
  • requestbin.com 现在会重定向到 Pipedream 的首页。

出处:Pipedream 的公告。

可以迁到 AnyHook 的部分

在 Pipedream

在 AnyHook

HTTP 触发器
App 的 URL,in.anyhook.net/you/app。它约 1 秒应答发送方,保存每个事件;在 Pro 套餐上,投递失败后会分别在 5分钟、30分钟、3小时和18小时后重试(共 5 次尝试);Free 套餐在 3 次尝试后停止,Scale 套餐会继续每天重试,直到第 10 次。重命名 App 不会改变这个 URL。
Node.js 代码步骤
App 的代码,每个事件都会在沙箱里运行它。defineComponent、$.export 和 $.flow.exit 可以原样使用,steps.trigger.event 带有请求的 body 和 headers。代码导入的 npm 包会在你保存时安装,包括 "axios@1.7.9" 这样的固定版本。
预置动作
代码编辑器里的模板:Slack message, Discord message, Telegram message, Email through Resend, Google Sheets row, Airtable record, Notion page, Ask Claude, Any HTTP API。每个模板只有几行,你能读懂,也能修改。调用失败时它会抛出异常,于是 AnyHook 会重试这个事件;邮件模板会把每次发送绑定到对应的事件,所以同一天内的重试不会把邮件发两次。
定时触发器
同一份代码上的 cron 定时任务,可用 UTC 或任意时区;它放在一个单独的 App 上,来源设为 generic 或 auto,且不设签名密钥。每次触发都会以一个 anyhook.schedule 事件到达,既算一次运行,也算一个事件,并且只在代码开启时才会触发。
邮件触发器
每个 App 都有一个邮箱地址:you.app@anyhook.net。邮件会以 email.received 事件到达,带有发件人、主题和原始 MIME 邮件,由你的代码解析。App 的来源必须是 generic 或 auto,且不设签名密钥;超过套餐请求体上限(Free 512 KB,Pro 2 MB,Scale 4 MB)的邮件(附件也算在内)会被退回。
环境变量和 props
密钥,用 env.NAME 读取,在步骤里也可以用 process.env.NAME。步骤的 props 不用改就能读到它们:this.channelId 就是密钥 CHANNEL_ID。
已连接的账号
this.slack.$auth.oauth_access_token 读取的是密钥 SLACK_OAUTH_ACCESS_TOKEN:添加这个令牌,步骤就能原样运行。没有任何机制会刷新它,$auth 也从不读取存储,所以会过期的令牌(Google 的令牌只有一小时有效期)需要你写代码:用保存为密钥的刷新令牌获取新令牌,并把最新的那个存进存储。
数据存储
App 的存储。步骤里的每个 data_store prop 都是这同一个存储,支持 get、set(可带以秒为单位的 TTL)、has、delete、keys、entries 和 clear;普通代码通过 store 使用它。它最多存 1,000 个键,每个值转成 JSON 后最多 64,000 字节;原来由多个工作流共享的 Pipedream 存储,会在每个 App 里各变成一个独立的存储。Pipedream 的导出不包含数据存储,所以导入要你自己做:向 /api/v1/apps/{slug}/store 发一个 POST,请求体为 {"entries": {key: value}},它会写入这些键,但不带 TTL。
事件历史和重放
事件日志:每个事件及其每次投递尝试、作为响应的代码日志,以及一个重放按钮;Free 套餐保留 3 天,Pro 套餐保留 30 天。之后 Pro 套餐还会以只读方式继续保存收到的内容 1 年。

无法迁移的部分

AnyHook 在事件到来时运行你的代码。它不是工作流编排工具,所以下面这些需要重写,或者另找去处:

  • Python、Go 和 Bash 步骤。暂不支持。
  • require()。代码是 ES 模块,所以用 require 加载包的步骤要改成 import。
  • 请求体和请求头以外的触发器字段。AnyHook 不保留查询字符串、路径和调用方 IP,请求方法始终是 POST,定时任务和邮件则以 AnyHook 自己的请求体到达。所以读取 steps.trigger.event.query、path、url 或 client_ip 的步骤,以及读取定时或邮件触发器字段的步骤,都需要改掉这几行。
  • $.send、$.flow.delay、$.flow.rerun、$.flow.suspend 和 $.context。$ 上,步骤只有 $.export 和 $.flow.exit 可用。
  • 数据存储的 setTtl 和 for await 循环。用 set 设置 TTL,用 keys 或 entries 读取全部内容。
  • 用 GET 或 POST 以外的任何方法调用的 HTTP 触发器:这个 URL 会拒收这类请求,Meta 的验证 GET 请求除外。
  • $.respond()。AnyHook 自己应答发送方,所以必须自己返回 HTTP 响应的工作流(比如 Slack 斜杠命令)需要一台能及时应答的服务器。Meta 的验证握手由 AnyHook 替你应答。
  • 轮询某个应用的触发器,比如 Google Sheet 里新增了一行。

这些情况可以交给 n8n、Make 或 Zapier,它们有现成的集成。AnyHook 的 URL 仍然可以放在它们的 Webhook URL 前面,这样下次再迁移,也只是改一下转发目标。

迁移步骤:一次迁一个工作流

  1. 创建一个 App,把你的 Pipedream 端点添加为它的转发目标。这时什么都没变:Pipedream 仍在运行工作流,AnyHook 在途中保存每个事件。从第 2 步起有一处不同:AnyHook 转发每个请求时,只以 POST 发送它的请求头和请求体,不带查询字符串、App 之后的路径和调用方 IP,所以读取这些信息的工作流会读不到。
  2. 到每个平台上,把 Pipedream 的 URL 换成 App 的 URL。这是你最后一次在那里修改它。
  3. 把工作流放进 App 的 Code,并添加它需要的密钥。代码步骤粘贴进来后按上面列出的几处修改即可,预置动作从模板开始写,多个步骤按顺序合并成一个函数,这部分最值得交给智能体去做。编辑器保存的新代码默认处于关闭状态;通过 API 或 MCP 保存时要传 "enabled": false,因为不带它的首次保存会直接上线。用最近一个已保存的事件运行它,然后查看日志。测试运行会真的执行代码所做的一切,所以如果代码会往某处写数据,先把它指向测试频道或测试表。
  4. 删除 Pipedream 这个转发目标,再开启代码。每次改动最多需要一分钟才能同步到所有边缘节点,所以这段时间内的事件仍可能发往 Pipedream,或者被记录下来但没有转发目标;代码开启后,重放这些已记录的事件,代码就会处理它们。
  5. 重复以上步骤,在 2027年3月31日之前完成。以后再迁到 n8n 或你自己的服务器,只需改转发目标;各平台上的 URL 保持不变。

借助智能体

Pipedream 的导出(项目的 Settings,然后 Export Workflows)是一个 ZIP 包,里面有每个工作流的触发器、代码步骤的代码,以及预置动作的设置。凭据和环境变量不在其中,密钥类 prop 的值显示为 <redacted>;这些都要变成由你添加的密钥。这些信息足够让智能体完成重写。把 Claude Code、Codex 或其他智能体连接到 AnyHook 的 MCP 服务器 https://anyhook.net/mcp,把导出包解压到它能读取的位置,然后粘贴这段话:

把我的 Pipedream 工作流迁移到 AnyHook。解压后的导出文件在 ./pipedream-export。
对每个由 HTTP、定时或邮件触发的工作流:
1. 使用已经把这个工作流的 URL 转发到 Pipedream 的那个 AnyHook App;只有在没有的情况下才新建一个,定时或邮件触发的工作流把来源设为 generic。定时触发器的 cron 保留为代码的定时任务。
2. 按顺序把它的步骤写成一个代码处理程序。代码步骤可以原样运行,https://anyhook.net/zh-cn/migrate/pipedream 中“无法迁移的部分”下列出的内容除外。把每个预置动作改写成对相应服务 API 的调用,从 https://anyhook.net/code-templates.md 开始写,调用失败时抛出异常。
3. 以 enabled: false 部署,不填任何密钥的值。列出它需要的密钥,以及每个密钥从哪里获取。
4. 用一个示例事件测试它,把结果给我看。
不要改动 Pipedream 上的任何东西。我会自己添加密钥、删除 Pipedream 转发目标,然后开启代码。

它会调用 anyhook_apps_create、anyhook_code_deploy 和 anyhook_code_test,每个动作都从和编辑器相同的模板 code-templates.md 开始写。它部署的每个处理程序都处于关闭状态;由你添加密钥、删除 Pipedream 转发目标,再开启代码。如果保存时要安装新的包,可能需要几分钟。用 API 密钥运行 npm 包的智能体(Cursor、Windsurf 和 Claude Desktop 都是这样)需要 anyhook-mcp 0.4.0 或更高版本才有这些工具,npx -y 会获取这个版本。连接智能体。

费用

  • Free,$0:1 个 App,每月 10,000 个事件,不能运行代码。足够在 Pipedream 或 n8n 前面挂一个 URL。
  • Pro,$20/月:10 个 App,50,000 个事件,3,000 次代码运行,每次最长 105 秒。
  • Scale,$90/月:50 个 App,250,000 个事件,12,000 次代码运行,每次最长 285 秒。

一个 App 就是一个 URL 加上它的代码,所以 Pro 套餐的 App 数量能装下 10 个使用 HTTP 触发器的工作流。运行次数是另一项限额:一次重试、一次测试运行、一次重放和一次定时触发都各算一次;每 15 分钟触发一次的定时任务,每月大约触发 2,880 次。运行次数没有超额:当月次数用完后,投递给代码的请求会被拒绝并暂存,不重试;等到下个月或套餐升级后,你可以重放它。处理程序的其他限制见文档。价格。

常见问题

Pipedream Workflows 什么时候关停?
2027年3月31日。Pipedream 会在 2027年4月30日前删除所有 Workflows 数据,包括已连接账号的凭据和 OAuth 令牌。Pipedream Connect 不受影响。
我的 *.m.pipedream.net Webhook URL 还能继续用吗?
能用到 2027年3月31日。现在就把每个平台指向一个 AnyHook URL,在代码迁完之前先把它转发到你的 Pipedream 端点,之后平台就再也不用换 URL 了。
我的 Node.js 代码步骤能在 AnyHook 上运行吗?
在 Pro 和 Scale 套餐上,大部分可以原样运行:defineComponent、$.export、$.flow.exit、props 和数据存储都能用,步骤导入的 npm 包会在你保存时安装,已连接账号的 $auth 会读取你添加的密钥。steps.trigger.event 带有请求的请求体和请求头,所以读取查询字符串、path、url 或 client_ip 的步骤,以及读取定时或邮件触发器字段的步骤,需要改掉这几行。Python、Go 和 Bash 步骤,以及 require()、$.respond、$.send、$.flow.delay 和 $.flow.rerun,都需要重写。
“Slack: send a message”这类预置动作怎么办?
它们会变成几行你能读懂、也能修改的代码。代码编辑器为这些动作提供了模板:Slack message, Discord message, Telegram message, Email through Resend, Google Sheets row, Airtable record, Notion page, Ask Claude, Any HTTP API。其余的可以交给智能体,根据你的 Pipedream 导出来改写,导出里列出了每个动作及其设置。
我的代码会被 AnyHook 绑定吗?
不会。处理程序就是一个 JavaScript 函数,接收事件和你的密钥。你可以从编辑器复制它,或者通过 API 读取它,放进 git;如果你离开 AnyHook,就在自己的服务器上调用它。
我可以改为把工作流迁到 n8n、Make 或 Zapier 吗?
可以。在它们的 Webhook URL 前面放一个 AnyHook URL:你会留下每个事件及其重试的日志,以后再迁移时只需改转发目标,不用在每个平台上换新 URL。AnyHook 转发每个请求时只以 POST 发送请求头和请求体,所以那边读取查询字符串的工作流会读不到它。