Stripe · Shopify · GitHub · 19 nguồn khác
Stripe đã gửi. Bạn bỏ lỡ.Nó vẫn còn đây.
Trỏ webhook về AnyHook, chúng tôi chuyển tiếp nó tới bạn. Mọi sự kiện nằm trong một nhật ký, dù server của bạn có phản hồi hay không, và bạn có thể phát lại (replay) bất kỳ sự kiện nào bằng một cú bấm.
Chữ ký được xác minh tại edge (lớp máy chủ biên của Cloudflare) cho 22 nguồn. Thêm signing secret (khóa bí mật dùng để ký) là request giả mạo không bao giờ tới được server của bạn.
- Stripe
- GitHub
- Shopify
- Slack
- LINE
- Discord
- Twilio
- Sentry
- Linear
- Vercel
- Paddle
- Clerk
- Lemon Squeezy
- Intercom
- HubSpot
- Resend
- WooCommerce
- PayPal
- SendGrid
- Svix
- Meta
- Xero
Bên gửi bỏ cuộc. Handler của bạn chạy hai lần.
Shopify chờ 5 giây. Xử lý đơn hàng mất 12 giây.
Đổi một URL.
Không cần SDK. Trả về 200 sau khi xử lý xong, và một lần crash sẽ thành một lần thử lại.
Xem mọi sự kiện.
Những gì đã đến, server của bạn trả lời gì, khi nào sẽ thử lại. Sửa lỗi rồi bấm Replay.
{
"id": 820982911946154508,
"name": "#1042",
"total_price": "129.00",
"financial_status": "paid"
}{ "ok": true }API cho AI agent.
Thêm một URL vào Claude, Codex hoặc VS Code rồi đăng nhập. Agent của bạn thiết lập, kiểm tra và phát lại webhook, qua MCP hoặc REST thông thường.
Tối qua server của chúng tôi ngừng hoạt động và các khoản thanh toán Stripe không hề tới. Xử lý giúp tôi.
{ "count": 12, "events": [{ "eventType": "invoice.paid", "status": "failed", "outboundStatus": 503 }, …] }{ "replayed": true, "appSlug": "stripe-payments", "response": { "replayed": 12, … } }{ "events": [{ "eventType": "invoice.paid", "isReplay": true, "status": "success", "outboundStatus": 200 }, …] }AnyHook đã lưu cả 12 sự kiện trong lúc endpoint của bạn trả về 503 suốt đêm. Tôi đã phát lại chúng và sự kiện nào cũng nhận được 200.
MCP https://anyhook.net/mcp·REST Authorization: Bearer ahk_live_…
Luồng dữ liệu rõ ràng, toàn quyền kiểm soát.
Một sự kiện, bốn chặng bên trong AnyHook.
Bỏ các SDK. Kiểm tra một header.
22 nguồn được kiểm tra tại edge, và mọi lượt gửi đều được ký theo cùng một cách.
import { verifyWebhook } from "anyhook-verify";if (!(await verifyWebhook(req, secret)))return new Response(null, { status: 401 });
Server của bạn ngừng hoạt động.
Không có gì bị mất.
Mọi sự kiện đều được lưu lại. Các lần thử lại tự chạy, Replay gửi phần còn lại.
Dành cho người làm sản phẩm.
Cùng một dịch vụ trung chuyển webhook (webhook relay), ba tình huống mà các team thường gặp đầu tiên.
Bên gửi thử lại. Agent của bạn chạy hai lần.
Bên gửi nhận mã 200 sau khoảng một giây. Agent của bạn có 60–300 giây, tùy gói.
Bảng giá đơn giản.
Bắt đầu miễn phí. Giá các gói trả phí dựa trên thời gian lưu sự kiện và số App (một URL nhận cho một nguồn webhook, ví dụ “Stripe production”) gửi sự kiện tới. Các gói trả phí tính phí vượt hạn mức theo mức dùng thực tế, nên không sự kiện nào bị âm thầm bỏ đi.
- Lịch sử3 ngày
- Sự kiện10.000 / tháng
- Timeout60 giây
Tất cả giới hạn
- Số App1
- Số đích mỗi App3
- Số lần gửi3
- Payload tối đa512 KB
- Phí vượt hạn mứcKhông có
- Kiểm soát gửiKhông bao gồm
- Cảnh báoEmail
- 3 ngày lịch sử
- Giới hạn 1.000 sự kiện / ngày
- Cảnh báo qua email
- Lịch sử1 năm
- Sự kiện50.000 / tháng
- Timeout120 giây
Tất cả giới hạn
- Số App10
- Số đích mỗi App20
- Số lần gửi5
- Payload tối đa2 MB
- Phí vượt hạn mức$0.15 / 1k
- Kiểm soát gửiBộ lọc, giới hạn tốc độ, trì hoãn
- Cảnh báoEmail + Slack / Discord
- Mọi sự kiện được lưu một năm
- Cảnh báo qua Slack / Discord, bộ lọc sự kiện
- Tính phí vượt hạn mức theo mức dùng, tới trần bạn đặt
- Lịch sử7 năm
- Sự kiện250.000 / tháng
- Timeout5 phút
Tất cả giới hạn
- Số App50
- Số đích mỗi App50
- Số lần gửi10
- Payload tối đa4 MB
- Phí vượt hạn mức$0.17 / 1k
- Kiểm soát gửiBộ lọc, giới hạn tốc độ, trì hoãn
- Cảnh báoEmail + Slack / Discord
- Bảy năm, tamper-evident
- Không giới hạn hằng ngày
- Sắp có tên miền tùy chỉnh
- Lịch sửLinh hoạt
- Sự kiệnLinh hoạt
- TimeoutLinh hoạt
Tất cả giới hạn
- Số AppLinh hoạt
- Số đích mỗi AppLinh hoạt
- Số lần gửiLinh hoạt
- Payload tối đaTùy chỉnh
- Phí vượt hạn mứcTùy chỉnh
- Kiểm soát gửiĐã bao gồm
- Cảnh báoEmail + Slack / Discord
- SSO và đánh giá bảo mật
- Hỗ trợ onboarding riêng
- Tùy chọn định tuyến riêng
Gói Pro có thêm một năm lịch sử, cảnh báo qua Slack hoặc Discord, bộ lọc sự kiện và phí vượt hạn mức theo mức dùng thực tế thay vì bỏ sự kiện.
Câu hỏi thường gặp.
Trả lời trước, xử lý sau. Slack chờ mã 2xx của bạn trong 3 giây, Shopify 5 giây, GitHub 10 giây. Một lệnh gọi mô hình thường lâu hơn thế, nên bên gửi thử lại (retry) và bot của bạn chạy hai lần, rồi cuối cùng Slack hoặc Shopify tắt webhook đó.
Trỏ webhook về AnyHook, bên gửi sẽ nhận được mã 200 sau khoảng một giây. Sau đó handler của bạn có 60 giây với gói Free, 120 giây với gói Pro, 5 phút với gói Scale để hoàn tất lệnh gọi, kèm thử lại nếu thất bại. Không cần tự xây hàng đợi.
→ Vì sao handler gọi LLM bị timeout, và cách sửa cho từng nền tảng
Bạn có thể. Đây là những gì bạn sẽ phải lo:
Độ tin cậy: hàng đợi bền vững, xử lý dead-letter (các message không xử lý được), state machine cho backoff. Bỏ sót một trường hợp biên là bạn xử lý một đơn hàng hai lần hoặc âm thầm làm mất một sự kiện. Phần lớn các team phát hiện những bug này trên production, lúc 2 giờ sáng.
Bảo mật: mỗi nhà cung cấp ký một kiểu. Stripe dùng HMAC-SHA256 + dấu thời gian (timestamp), GitHub HMAC-SHA256 dạng hex, Shopify HMAC-SHA256 dạng Base64. Bạn phải duy trì một bộ xác minh cho mỗi nhà cung cấp, lo xoay vòng khóa và lưu trữ mã hóa. Bỏ sót một cái = chấp nhận lưu lượng không có chữ ký.
Khả năng quan sát: debug nghĩa là grep CloudWatch qua từng lần gọi Lambda. Không có nhật ký sự kiện tìm kiếm được, không có phát lại, không có lịch sử payload đầy đủ.
Chi phí: hạ tầng tốn $50–200/tháng. Chi phí thật là $3000–5000/tháng tiền công kỹ sư: ca trực, migration, debug các lần thử lại bị kẹt. AnyHook Pro có giá $20/tháng và không cần bảo trì.
Hai chặng khác nhau. Đồng hồ của Stripe tính trên kết nối tới URL công khai của bạn. Trỏ URL đó về AnyHook thì Stripe chờ edge của chúng tôi, nơi trả về 2xx sau khoảng một giây, trước cả khi code của bạn bắt đầu chạy.
Dòng Timeout là đồng hồ gửi của chúng tôi: thời gian chúng tôi chờ endpoint của bạn phản hồi (60 giây với gói Free, 120 giây với gói Pro, 5 phút với gói Scale). Hầu hết các endpoint phản hồi nhanh hơn thế nhiều. Với tác vụ còn lâu hơn nữa, trả về 202 Accepted rồi xử lý bất đồng bộ.
Zapier/Make là nền tảng tự động hóa low-code: trình soạn thảo trực quan, luồng kéo thả. AnyHook là dịch vụ trung chuyển webhook dành cho lập trình viên: webhook của bạn, endpoint của bạn, code của bạn, hạ tầng của bạn.
Bạn viết code để xử lý webhook? Dùng AnyHook. Bạn xây trên n8n, Make hoặc Zapier? Đặt AnyHook trước webhook trigger của workflow: nhà cung cấp gửi tới AnyHook, AnyHook chuyển tiếp tới URL của trigger, và các sự kiện đến trong lúc workflow ngừng hoạt động sẽ chờ được phát lại thay vì biến mất.
Sự kiện được ghi vào một hàng đợi bền vững trước khi chúng tôi trả 200 cho bên gửi. Nếu bộ chuyển tiếp của chúng tôi ngừng hoạt động, sự kiện chờ trong hàng đợi và được gửi đi khi hệ thống khôi phục: bên gửi đã nhận được mã 200 rồi.
Nếu edge hoàn toàn không lưu được sự kiện (hàng đợi và cả hai phương án dự phòng đều không dùng được), edge trả về 503, để cơ chế thử lại của chính bên gửi xử lý. AnyHook không bao giờ trả 200 cho một sự kiện mà nó không lưu.
Thời gian hoạt động (uptime) được công bố tại status.anyhook.net.
Được: đó chính là việc AnyHook sinh ra để làm. Chúng tôi trả lời Stripe sau khoảng một giây, dù agent của bạn mất bao lâu.
Endpoint của bạn nên trả về 202 Accepted ngay, rồi xử lý bất đồng bộ. Timeout gửi của AnyHook (60 giây với gói Free, 120 giây với gói Pro, 5 phút với gói Scale) chỉ áp dụng cho vòng request/response HTTP ban đầu đó.
Mỗi bên gửi làm gì khi server của bạn ngừng phản hồi.
Bên nào rồi cũng bỏ cuộc, mỗi bên theo một cách. Đây là các quy tắc họ công bố, khoảng thời gian bạn còn để khôi phục và những gì mất hẳn khi khoảng thời gian đó kết thúc.
- Stripe đã vô hiệu hóa endpoint webhook của bạn. Đây là quy trình khôi phục.Stripe đã vô hiệu hóa endpoint webhook của bạn, và thời hạn khôi phục 30 ngày ngắn hơn bạn tưởng. Trình tự: bật lại, lấy bù từ Events API.
- Shopify đã xóa webhook subscription của bạn. Vì sao 5 giây là toàn bộ câu chuyện.Shopify cho endpoint của bạn năm giây, thử lại tám lần trong bốn giờ, rồi xóa subscription. Không có lỗi nào được ném ra. Đơn hàng cứ thế ngừng đến.
- Không nhận được webhook từ GitHub: bạn có một lần gửi và ba ngàyGitHub không thử lại (retry) lượt gửi webhook thất bại, không một lần nào. Bản ghi lượt gửi giữ ba ngày, sau đó sự kiện mất vì deploy lỗi là mất hẳn.
- Webhook WooCommerce không được gửi ngay lúc đặt hàngWooCommerce xếp webhook vào Action Scheduler trên WP-Cron, mà WP-Cron chỉ chạy khi có người vào site. Lỗi hơn năm lần liên tiếp, webhook bị vô hiệu hóa.
Tất cả 28 hướng dẫn, gồm Slack, Twilio, HubSpot, n8n và các bài về chuyện nhận cùng một webhook hai lần.
Vẫn đang tích hợp trên máy local? URL tunnel của bạn đổi sau mỗi lần khởi động lại, và nhà cung cấp không bao giờ cần biết chuyện đó.
Cùng một dạng, chỉ khác đầu bên kia là một mô hình: callback đòi câu trả lời trong vài giây, còn lệnh gọi mô hình trong handler của bạn mất lâu hơn.