OpenAI · webhook 可靠性
讓 OpenAI webhook 撐得住 45 秒的 handler。
你的 handler 在做真的工作——RAG、再一次模型呼叫、寫 DB。OpenAI 在等 10 秒。AnyHook 在 50ms 回 200,handler 用自己的時間跑完。
時序問題
OpenAI 的 Assistants、Batch、fine-tuning 事件都走 HTTP,要求 10 秒內回 2xx。一旦 handler 做點實事——鏈一個 model call、跑 vector search、打 Stripe——就會超時。
超時 OpenAI 就重試,handler 跑第二次。Token 算兩次錢,下游收到重複事件。解法不是把 timeout 拉長,是把 ack 跟 process 分開。
10s
OpenAI webhook 回應 SLA
45–90s
Agent-in-handler 的典型延遲
2×
重試觸發時的 token 成本
50ms
AnyHook edge ack 時間
Drop-in 替換:改一個 webhook URL
現有 handler 不用改。AnyHook 在 edge 50ms 回 200 給 OpenAI,然後把驗過簽的 payload 用 AnyHook-Signature 重新簽過 forward 給你,附帶 retry、replay、event log。
// 1. 把 OpenAI 的 webhook URL 指到你的 AnyHook inbound:
// https://in.anyhook.net/{user-slug}/{app-slug}
//
// 2. Handler 不用改 — 現在有充足時間完成工作。
// AnyHook 每次 delivery 都用 AnyHook-Signature 重新簽。
import { verifyWebhook } from "@anyhook/verify";
export async function POST(req: Request) {
const ok = await verifyWebhook(req, process.env.ANYHOOK_SIGNING_SECRET!);
if (!ok) return new Response("invalid signature", { status: 401 });
const event = await req.json();
// 任意花時間都行。AnyHook 已經回過 200 給 OpenAI。
// 你失敗,AnyHook 用指數退避最多重試 10 次。
await ragPipeline(event.payload); // 25s
await secondModelCall(event.payload); // 18s
await persistResult(event.payload); // 2s
return new Response("ok", { status: 200 });
}工程團隊常問的問題
- 我會失去 OpenAI 的 signature 驗證嗎?
- 不會。AnyHook 在 edge 先驗 OpenAI 的原始簽章,通過才接受事件,然後用 AnyHook-Signature 重新簽過再 forward 給你的 endpoint。你只要驗一個 header,不用記五個。
- Handler 掛一小時會發生什麼?
- AnyHook 把事件入隊,依照你的 plan 用指數退避最多重試 10 次。每次嘗試都有 log、都可以從 dashboard 一鍵 replay。OpenAI 看到一個 200 就過了。
- 支援 Assistants v2 的 streaming 事件嗎?
- 支援。Streaming 完成事件最後會以一般 webhook 形式 deliver。AnyHook 把它當一般事件——驗證、ack、fan out。
改一個 URL,保留你的 OpenAI handler。
Free tier 每月含 3,000 events。沒有 SDK、沒有 code 變更——把 OpenAI 指到你的 AnyHook inbound URL 就好。