Chuyển khỏi Pipedream

Cập nhật 20 tháng 10, 2026

Pipedream Workflows ngừng hoạt động vào ngày 31 tháng 3 năm 2027, và mọi URL …m.pipedream.net cũng ngừng theo. Nếu workflow của bạn bắt đầu từ một webhook, một lịch hẹn giờ (schedule) hay một email, AnyHook cấp cho mỗi workflow một URL bạn giữ được lâu dài và chạy các code step Node.js của bạn, phần lớn giữ nguyên như đã viết. Bạn chỉ đổi URL ở mỗi nhà cung cấp một lần, và mỗi workflow trở thành một file JavaScript thuần mà bạn đọc được, lưu trong git và mang đi đâu cũng được.

TRƯỚC · URL LÀ CỦA PIPEDREAMStripe….m.pipedream.netngừng chạy 2027-03-31workflowbị xóa 2027-04-30SAU · URL LÀ CỦA BẠNStripein.anyhook.net/you/appđược lưu, được thử lạiPipedreamcode của bạntới khi bạn chuyểnhoặc n8n, server bạn

Những gì Pipedream sẽ ngừng

  • Workflows và String ngừng hoạt động vào ngày 31 tháng 3 năm 2027. Pipedream không còn nhận đăng ký hay subscription mới.
  • Toàn bộ dữ liệu Workflows bị xóa trước ngày 30 tháng 4 năm 2027, gồm cả thông tin xác thực và OAuth token của các tài khoản đã kết nối.
  • Pipedream Connect, gồm API, các MCP server và API proxy của nó, vẫn tiếp tục hoạt động.
  • Công cụ export tải cấu trúc các workflow của bạn về dưới dạng JSON, mỗi lần một project.
  • requestbin.com giờ chuyển hướng về trang chủ của Pipedream.

Nguồn: thông báo của Pipedream.

Những gì chuyển sang AnyHook

Trên Pipedream

Trên AnyHook

HTTP trigger
URL của một App (một URL nhận cho một nguồn webhook, ví dụ “Stripe production”), in.anyhook.net/you/app. URL này trả lời bên gửi sau khoảng một giây, giữ mọi sự kiện, và thử lại lượt gửi thất bại sau 5 phút, 30 phút, 3 giờ và 18 giờ trên gói Pro (tổng cộng 5 lần gửi); gói Free dừng ở 3 lần gửi còn Scale tiếp tục thử hằng ngày tới 10 lần. Đổi tên App không làm URL thay đổi.
Node.js code step
Code của App, chạy trong một sandbox (môi trường cô lập) ở mỗi sự kiện. defineComponent, $.export và $.flow.exit chạy đúng như đã viết, và steps.trigger.event mang body và headers của request. Các package npm mà code import được cài khi bạn lưu, kể cả phiên bản ghim cố định như "axios@1.7.9".
Pre-built actions
Template trong trình soạn code: Slack message, Discord message, Telegram message, Email through Resend, Google Sheets row, Airtable record, Notion page, Ask Claude, Any HTTP API. Mỗi template là vài dòng code bạn đọc và sửa được. Template ném lỗi khi một lệnh gọi thất bại, để AnyHook thử lại sự kiện, và template email gắn mỗi lần gửi mail với sự kiện của nó, nên một lần thử lại trong cùng ngày không gửi mail hai lần.
Schedule trigger
Một cron chạy trên cùng đoạn code đó, theo UTC hoặc bất kỳ múi giờ nào, trên một App riêng có nguồn là generic hoặc auto, không có signing secret (khóa bí mật dùng để ký). Mỗi lần kích hoạt đến dưới dạng một sự kiện anyhook.schedule, được tính là một lần chạy và một sự kiện, và chỉ xảy ra khi code đang bật.
Email trigger
Mỗi App có một địa chỉ email, you.app@anyhook.net. Thư đến dưới dạng một sự kiện email.received gồm người gửi, tiêu đề và thư MIME gốc, để code của bạn tự parse. Nguồn của App phải là generic hoặc auto, không có signing secret, và thư lớn hơn giới hạn payload của gói (512 KB trên Free, 2 MB trên Pro, 4 MB trên Scale), tính cả tệp đính kèm, sẽ bị trả lại (bounce).
Environment variables and props
Secret, đọc bằng env.NAME, hoặc process.env.NAME trong một step. Props của step đọc chúng đúng như đã viết: this.channelId là secret CHANNEL_ID.
Connected accounts
this.slack.$auth.oauth_access_token đọc secret SLACK_OAUTH_ACCESS_TOKEN: thêm token vào là step chạy đúng như đã viết. Không có gì tự làm mới token, và $auth không bao giờ đọc store, nên token có hạn dùng (token của Google sống một giờ) cần code lấy token mới bằng một refresh token lưu dưới dạng secret, và giữ token mới nhất trong store.
Data stores
Store của App. Mọi prop data_store trong một step đều là store đó, với get, set (kèm TTL tính bằng giây), has, delete, keys, entries và clear; code thuần dùng nó qua store. Store chứa tối đa 1.000 key, mỗi giá trị tối đa 64.000 byte dưới dạng JSON, và một store Pipedream mà nhiều workflow dùng chung sẽ thành một store riêng trong mỗi App. Bản export của Pipedream không có data store, nên bạn tự làm phần import: một lệnh POST {"entries": {key: value}} tới /api/v1/apps/{slug}/store, lệnh này đặt các key nhưng không kèm TTL.
Event history and replay
Nhật ký sự kiện: mỗi sự kiện kèm mọi lần gửi, log của code dưới dạng phản hồi, và một nút Replay, trong 3 ngày trên gói Free và 30 ngày trên Pro. Sau đó Pro giữ những gì đã nhận, ở chế độ chỉ đọc, trong 1 năm.

Những gì không chuyển sang

AnyHook chạy code của bạn theo sự kiện. AnyHook không phải công cụ dựng workflow, nên những thứ sau cần viết lại hoặc chuyển đi nơi khác:

  • Step Python, Go và Bash. Chưa hỗ trợ.
  • require(). Code là một ES module, nên step nào nạp package bằng require phải đổi sang import.
  • Các trường trigger ngoài body và header. AnyHook không giữ query string, path hay IP của bên gọi, method luôn là POST, và một lịch hẹn giờ hay một email đến dưới dạng body riêng của AnyHook, nên step nào đọc steps.trigger.event.query, path, url hoặc client_ip, hay các trường trigger của schedule hoặc email, cần sửa những dòng đó.
  • $.send, $.flow.delay, $.flow.rerun, $.flow.suspend và $.context. Trong $, một step chỉ có $.export và $.flow.exit.
  • setTtl của data store và vòng lặp for await. Đặt TTL bằng set, và đọc toàn bộ bằng keys hoặc entries.
  • HTTP trigger được gọi bằng GET hoặc bất kỳ method nào khác POST: URL sẽ từ chối các request đó, trừ request GET xác minh của Meta.
  • $.respond(). AnyHook tự trả lời bên gửi, nên workflow nào phải tự gửi phản hồi HTTP của mình, ví dụ một slash command của Slack, cần một server trả lời kịp thời. Bước bắt tay xác minh của Meta được trả lời thay bạn.
  • Trigger polling (định kỳ gọi API để hỏi dữ liệu mới) vào một ứng dụng, ví dụ khi có dòng mới trong Google Sheet.

Với những trường hợp đó, n8n, Make và Zapier có sẵn tích hợp. Một URL AnyHook vẫn có thể đứng trước URL webhook của họ, nên lần chuyển tiếp theo cũng chỉ là đổi đích.

Chuyển đổi, từng workflow một

  1. Tạo một App và thêm endpoint Pipedream của bạn làm đích. Chưa có gì thay đổi: Pipedream vẫn chạy workflow, và AnyHook giữ lại từng sự kiện trên đường đi. Có một điểm khác kể từ bước 2: AnyHook chuyển tiếp mỗi request dưới dạng POST gồm header và body, không kèm query string, phần path sau App hay IP của bên gọi, nên workflow nào đọc những thứ đó sẽ không tìm thấy chúng.
  2. Ở mỗi nhà cung cấp, thay URL Pipedream bằng URL của App. Đây là lần cuối bạn sửa nó ở đó.
  3. Đưa workflow vào mục Code của App và thêm các secret của nó. Một code step dán vào với những thay đổi liệt kê ở trên, một pre-built action bắt đầu từ một template, và nhiều step gộp thành một function theo đúng thứ tự, phần đáng giao cho một AI agent. Trình soạn thảo lưu code mới ở trạng thái tắt; qua API hoặc MCP, hãy truyền "enabled": false, vì lần lưu đầu tiên không có nó sẽ chạy thật ngay. Chạy thử trên sự kiện đã lưu gần nhất và đọc log. Một lần chạy thử làm đúng những gì code làm, nên nếu code ghi dữ liệu ở đâu đó, hãy trỏ nó tới một kênh hoặc bảng test trước.
  4. Gỡ đích Pipedream, rồi bật code lên. Mỗi thay đổi mất tối đa một phút để tới mọi vị trí edge, nên một sự kiện ở giữa vẫn có thể đi tới Pipedream, hoặc được ghi vào nhật ký mà không có đích; hãy phát lại sự kiện đã ghi đó khi code đã bật và code sẽ chạy nó.
  5. Lặp lại trước ngày 31 tháng 3 năm 2027. Sau này nếu chuyển tiếp, sang n8n hay server của riêng bạn, chỉ là đổi đích; các nhà cung cấp vẫn giữ URL.

Với một agent

Bản export của Pipedream (Settings của project, rồi Export Workflows) là một file ZIP chứa trigger của từng workflow, code của các code step và thiết lập của các pre-built action. Thông tin xác thực và biến môi trường không có trong đó, còn giá trị secret của prop hiện là <redacted>; tất cả đều thành secret bạn tự thêm. Như vậy là đủ để một agent làm phần viết lại. Kết nối Claude Code, Codex hay một agent khác với MCP server của AnyHook, https://anyhook.net/mcp, giải nén bản export ở chỗ agent đọc được, rồi dán đoạn sau:

Chuyển các workflow Pipedream của tôi sang AnyHook. Bản export đã giải nén nằm ở ./pipedream-export.
Với mỗi workflow có trigger HTTP, schedule hoặc email:
1. Dùng App AnyHook đang chuyển tiếp URL của workflow này tới Pipedream; chỉ tạo App mới nếu chưa có, với source generic cho trigger schedule hoặc email. Trigger schedule giữ cron của nó làm schedule của code.
2. Viết các step của nó thành một code handler, theo đúng thứ tự. Code step chạy đúng như đã viết, trừ những gì https://anyhook.net/vi/migrate/pipedream liệt kê trong mục “Những gì không chuyển sang”. Viết lại mỗi pre-built action thành một lệnh gọi tới API của dịch vụ đó, bắt đầu từ https://anyhook.net/code-templates.md, và ném lỗi khi một lệnh gọi thất bại.
3. Deploy nó với enabled: false và không kèm giá trị secret nào. Liệt kê các secret nó cần và nơi tôi lấy từng cái.
4. Test nó với một sự kiện mẫu và cho tôi xem kết quả.
Không thay đổi gì ở Pipedream. Tôi sẽ thêm secret, gỡ đích Pipedream, rồi bật code.

Agent làm việc qua anyhook_apps_create, anyhook_code_deploy và anyhook_code_test, và bắt đầu mỗi action từ cùng các template như trình soạn thảo, code-templates.md. Agent deploy mỗi code handler (đoạn JavaScript của bạn chạy ở mỗi lượt gửi) ở trạng thái tắt; bạn thêm secret, gỡ đích Pipedream và bật code. Một lần lưu có cài package mới có thể mất vài phút. Agent nào chạy package npm bằng một key, như Cursor, Windsurf và Claude Desktop, cần anyhook-mcp 0.4.0 trở lên để có các tool này, bản mà npx -y sẽ tải về. Kết nối một agent.

Chi phí

  • Free, $0: 1 App, 10.000 sự kiện mỗi tháng, không có code. Đủ để giữ một URL đứng trước Pipedream hoặc n8n.
  • Pro, $20/tháng: 10 App, 50.000 sự kiện, 3.000 lần chạy code, mỗi lần tối đa 105 giây.
  • Scale, $90/tháng: 50 App, 250.000 sự kiện, 12.000 lần chạy code, mỗi lần tối đa 285 giây.

Một App là một URL kèm code của nó, nên 10 workflow có HTTP trigger vừa với số App của gói Pro. Lần chạy là một giới hạn riêng: một lần thử lại, một lần chạy thử, một lần phát lại và một lần kích hoạt lịch hẹn giờ đều tính là một, và một lịch chạy mỗi 15 phút sẽ kích hoạt khoảng 2.880 lần mỗi tháng. Lần chạy không có phí vượt hạn mức: khi đã dùng hết số lần chạy của tháng, lượt gửi tới code không được chấp nhận và được tạm giữ, không được thử lại, và bạn phát lại khi sang tháng mới hoặc khi nâng cấp gói. Tài liệu liệt kê các giới hạn khác của handler. Bảng giá.

Câu hỏi thường gặp

Khi nào Pipedream Workflows ngừng hoạt động?
Vào ngày 31 tháng 3 năm 2027. Pipedream xóa toàn bộ dữ liệu Workflows trước ngày 30 tháng 4 năm 2027, gồm cả thông tin xác thực và OAuth token của các tài khoản đã kết nối. Pipedream Connect không bị ảnh hưởng.
Các URL webhook *.m.pipedream.net của tôi có còn hoạt động không?
Cho tới ngày 31 tháng 3 năm 2027. Hãy trỏ mỗi nhà cung cấp tới một URL AnyHook ngay bây giờ, chuyển tiếp nó tới endpoint Pipedream của bạn cho tới khi code đã chuyển xong, và nhà cung cấp sẽ không bao giờ cần URL mới nữa.
Code step Node.js của tôi có chạy được trên AnyHook không?
Trên Pro và Scale, phần lớn chạy đúng như đã viết: defineComponent, $.export, $.flow.exit, props và data store đều hoạt động, các package npm mà step import được cài khi bạn lưu, và $auth của một connected account đọc một secret bạn thêm vào. steps.trigger.event mang body và header của request, nên step nào đọc query string, path, url hoặc client_ip, hay các trường trigger của schedule hoặc email, cần sửa những dòng đó. Step Python, Go và Bash, require(), $.respond, $.send, $.flow.delay và $.flow.rerun cần viết lại.
Pre-built action như “Slack: send a message” sẽ ra sao?
Chúng trở thành vài dòng code bạn đọc và sửa được. Trình soạn code có template cho những action này: Slack message, Discord message, Telegram message, Email through Resend, Google Sheets row, Airtable record, Notion page, Ask Claude, Any HTTP API. Một agent có thể viết lại phần còn lại từ bản export Pipedream của bạn, vốn liệt kê từng action kèm thiết lập của nó.
Code của tôi có bị ràng buộc với AnyHook không?
Không. Handler là một function JavaScript nhận sự kiện và các secret của bạn. Sao chép nó từ trình soạn thảo hoặc đọc qua API, lưu trong git, và gọi nó từ server của riêng bạn nếu bạn rời đi.
Tôi có thể chuyển workflow sang n8n, Make hoặc Zapier thay vào đó không?
Có. Đặt một URL AnyHook trước URL webhook của họ: bạn giữ được nhật ký của mọi sự kiện và các lần thử lại, và lần chuyển sau chỉ là đổi đích thay vì phải đổi sang URL mới ở mọi nhà cung cấp. AnyHook chuyển tiếp mỗi request dưới dạng POST gồm header và body, nên workflow ở đó nếu đọc query string sẽ không tìm thấy nó.