撐得過 45 秒處理程式的 OpenAI Webhook。
你的處理程式在做真正的工作:RAG、另一次模型呼叫、一筆資料庫交易。OpenAI 給它幾秒鐘。AnyHook 約 1 秒就回 200,讓處理程式在運算額度內,最多花到方案的傳遞逾時時間做完。
時限問題
OpenAI 的背景回應、批次作業與微調作業,都透過 HTTP 回報結果,要求幾秒內回 2xx,之後最多重試 72 小時。處理程式只要做點有意思的事(再串一次模型呼叫、做向量搜尋、呼叫 Stripe),就會超過時限。
一超過時限,OpenAI 就會重試,處理程式又跑一次。現在你為 token 付了兩次錢,下游系統也收到重複的資料。解法不是拉長逾時,而是改用先回應、再處理的模式。
72 小時
OpenAI 持續重試漏接 Webhook 的時間
45–90 秒
在處理程式裡跑 agent 的典型延遲
2×
重試觸發時的 token 成本
約 1 秒
AnyHook 邊緣節點的回應時間:閒置一陣子後 1.1 秒,忙碌時更短
直接替換:換掉 Webhook 網址
現有的處理程式不用改。AnyHook 在邊緣節點約 1 秒就回應 OpenAI,再把驗證過的 payload 轉送到你的端點,並提供完整的重試、重播與事件紀錄。
// 1. Point OpenAI's webhook URL at your AnyHook inbound:
// https://in.anyhook.net/{user-slug}/{app-slug}
//
// 2. Keep your existing handler, it now has all the time it needs.
// AnyHook re-signs every delivery with AnyHook-Signature.
import OpenAI from "openai";
import { verifyWebhook } from "anyhook-verify";
const openai = new OpenAI();
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 });
// OpenAI's own event, byte for byte: { type: "response.completed", data: { id }, ... }
const event = await req.json();
if (event.type !== "response.completed") return new Response("ok");
const response = await openai.responses.retrieve(event.data.id);
// Run anything here. AnyHook already returned 200 to OpenAI.
// If you fail, AnyHook retries with backoff (up to 10 attempts on Scale).
await ragPipeline(response); // 25s
await secondModelCall(response); // 18s
await persistResult(response); // 2s
return new Response("ok", { status: 200 });
}團隊常問的問題
- 這樣會失去 OpenAI 的簽章驗證嗎?
- 不會。OpenAI 用 Standard Webhooks 機制簽章(webhook-id、webhook-timestamp、webhook-signature)。把 App(一個接收網址,對應一個 Webhook 來源)的來源設為 Standard Webhooks,貼上這個 Webhook 的簽章密鑰(whsec_...):AnyHook 會在邊緣節點檢查並拒收偽造的請求,再以 AnyHook-Signature 重新簽署每一次送往你端點的傳遞。
- 如果我的處理程式當機一小時,會怎樣?
- AnyHook 會把事件放進佇列,以指數退避重試:Free 方案最多 3 次,Pro 方案 5 次,Scale 方案 10 次。每次嘗試都有紀錄,並可從儀表板重播。OpenAI 看到一次 200 就繼續往下走。
- 涵蓋哪些 OpenAI 事件?
- OpenAI 透過 Webhook 送出的都涵蓋:背景回應(response.completed,以及對應的 failed、cancelled、incomplete)、批次作業、微調作業與 eval 執行。串流不是 Webhook:它是你的程式碼直接讀取的資料流,所以從不經過 AnyHook。
換一個網址。OpenAI 的處理程式不用改。
Free 方案每月涵蓋 10,000 個事件。不用 SDK:把 OpenAI 指向你的 AnyHook 接收網址。