大模型调用超过约 20 秒 → Stripe 判定失败并重试 → 处理程序运行两次 → 重复履约。
/v1/webhook_endpoints · status: failed
你的处理程序调用一次大模型要 45 秒。Stripe 约 20 秒就超时并重试。你的客户被重复履约:发货、入账或发邮件,都会发生两次。
AnyHook 位于发送方和你的处理程序之间。保存、重试、记录和重放一切,不用改动你的处理程序代码。
evt_3Pk2X3b1Lcx
请求超时。Stripe 会按退避策略重试,最多持续 3 天。
$ stripe webhooks update we_1234
--url in.anyhook.net/u/app
✓ Endpoint updated
✓ Delivering to AnyHookevt_3Pk2X3b1Lcx
第 1 次尝试 · 已应答发送方 · 处理程序 47.2 秒
// before
await llm.run(evt); /* 45s */
// after
return Response.json({ ok: true });已避免的发送方重试
127
大模型调用超过约 20 秒 → Stripe 判定失败并重试 → 处理程序运行两次 → 重复履约。
/v1/webhook_endpoints · status: failed
机器人必须在 3 秒内回复。AI 智能体要 30 秒 → Slack 重试 3 次 → 你的机器人最多可能回复 4 次。
应答晚了就算失败:4 小时内重试 8 次,之后反复失败会删除订阅。订单再也不会进来。
面向生产环境的 Webhook 流量。比你自己花 2 周搭建重试机制更便宜。
一次投递是否真的来自我们,你不必只听我们说。签名验证库和 MCP 服务器采用 Apache 2.0 许可:github.com/gba3124/anyhook-mcp。中继服务本身不开源。
用邮箱或 Google 账号注册。AnyHook 会给你一个类似 https://in.anyhook.net/you/app 的接收 URL。Free 套餐无需信用卡。
打开 Stripe Dashboard → Webhooks → 编辑端点 → 粘贴 AnyHook URL。GitHub、Shopify、Slack 的 Events API 和 Paddle 也是同样的改法。你的处理程序代码完全不用动。
AnyHook 保存事件,约 1 秒向发送方返回 200,再转发给你的处理程序并重试(至少一次;按 X-AnyHook-Delivery 去重)。失败的事件留在控制台里,配有一键 Replay 按钮。
适合
不适合
如果你有工程人力去安装 SDK、把处理程序重写成持久化函数,Inngest 很好。AnyHook 适合想在不改变处理程序结构的前提下解决问题的团队:改一个 Webhook URL,保留你现有的代码。
是的。每月 10,000 个事件(每天上限 1,000 个),1 个 App,无需信用卡。我们让它大到足够业余项目上线,又小到生产流量自然会升级。没有套路,也不会过期。
GitHub、Shopify、Slack 的 Events API、Paddle、Linear、Clerk,都可以用同样的换 URL 方式。签名验证方式会根据传入的请求头自动识别。
部分开源,值得说清楚是哪些部分。签名验证库和 MCP 服务器以 Apache 2.0 许可发布在 github.com/gba3124/anyhook-mcp,所以你可以验证我们签名的每次投递,既不用信任我们,也不用依赖我们。负责接收、保存和重试的中继服务不开源,目前也没有可自托管的版本。
我们对它做静态加密存储(AES-256-GCM)。在你套餐的重放窗口内(3 / 30 / 90 天)可以重放;之后 Free 套餐的事件会被删除,付费套餐则保留只读加密归档(Pro 套餐 1 年,Scale 套餐 7 年)。密钥从不离开我们的基础设施。在 Pro 和 Scale 套餐上,你还可以开启零保留模式,事件投递后会从日志中清除它的请求头和请求体;加密归档会保留它的副本。
在 Free 套餐上,超出月度配额的事件会被暂存在你的日志里,最多再暂存配额的 20%,升级后即可重放;超过这个数量或超过每日上限后,边缘节点会返回 429,不保存任何内容,你会收到一封邮件。升级到 Pro 会立即解除限制;Pro 套餐的超额费用是每 1,000 个事件 $0.15,还可以在控制台里设置可选的支出上限,超出上限的事件会被暂存,而不是计费。
免费注册,拿到你的接收 URL,在 Stripe 里换上它。AnyHook 接住所有重试,你的处理程序照今天的方式继续运行。