Webhook 服務商行為

端點變慢或當機時,每個發送端會怎麼做,以及它怎麼為送出的內容簽章。這裡的每一項說法都有出處;我們找不到出處的欄位就留白,不拿一個看似合理的數字來填。

簽章欄位

每個服務商都用一個可運作的驗證程式核對過,並由測試套件證明。規格讀錯了,會先在測試失敗,不會上線。

最後檢查於 2026-08-20

傳遞欄位

取自各服務商自己的文件,不採用二手整理。每一列都附上出處連結。

最後檢查於 2026-08-06

傳遞行為

先看回應時限這一欄。真正限制你的,是你接收的發送端裡時限最緊的那一個,不是最熟悉的那一個。

服務商回應時限重試放棄/停用
Slack出處3 秒重試 3 次:立即、1 分鐘後、5 分鐘後60 分鐘內有超過 95% 的嘗試失敗時,停用 Event Subscriptions
LINE出處2 秒

機器人伺服器 2 秒內沒有回應,就記為 request_timeout

Webhook redelivery(Webhook 重新傳送),預設關閉(在頻道的 Messaging API 設定中開啟);次數與間隔未公開機器人伺服器持續無法接收時,可能暫停傳送 Webhook;門檻未公開
Xero出處5 秒

5 秒內回 200,不帶回應主體、不帶 Cookie;簽章錯誤時回 401

未驗證未驗證
Discord出處3 秒

Interaction 端點必須在 3 秒內送出初始回應

未驗證未驗證
Shopify出處5 秒

連線 1 秒,整個請求 5 秒

4 小時內重試 8 次透過 Admin API 建立的訂閱,連續失敗 8 次後會被刪除,並寄警告信給應用程式的緊急開發者聯絡人
Paddle出處5 秒正式環境:大約 2 天內最多嘗試 60 次,第一個小時大約 10 次,第一天大約 45 次。沙箱環境:大約 2 分鐘內嘗試 3 次未驗證
HubSpot出處5 秒

以整個批次計算,一個批次最多可含 100 則通知

最多嘗試 10 次,分散在 24 小時內未驗證
GitHub出處10 秒無。傳遞失敗後,GitHub 不會自動重新傳送不會停用。3 天內可以手動重新傳送,之後紀錄就會消失
Meta (Instagram, Facebook, Threads)出處未公開36 小時內以遞減的頻率重試,之後丟棄。WhatsApp Cloud API 最多重試 7 天未驗證
Twilio出處15 秒

可設定。rt 讀取逾時預設 15000ms(上限 15000),ct 連線預設 5000ms(上限 10000),tt 總時間預設 15000ms

可設定:rc 為 0 到 5,預設 1。rp 決定哪些失敗會重試未驗證
Stripe出處未公開

Stripe 沒有公布數字,文件只說要在任何耗時的邏輯之前回傳 2xx。社群一般以 20 秒估算

正式環境以指數退避重試,最長 3 天。沙箱環境:數小時內嘗試 3 次持續失敗後停用端點,停用前會先寄信通知。事件在 Events API 中保存 30 天
Svix (Clerk, Resend)出處未公開嘗試 8 次:立即、5 秒、5 分鐘、30 分鐘、2 小時、5 小時、10 小時、10 小時。之後發出 message.attempt.exhausted 的 Operational Webhook所有嘗試持續失敗 5 天後,停用端點
WooCommerce出處未公開

傳遞會排入 Action Scheduler,由 WP-Cron 驅動,所以要等下一次有頁面載入才送出,而不是在事件發生時

未驗證連續傳遞失敗超過五次後,停用 Webhook

有兩列值得多看一遍。GitHub 完全不重試,所以傳遞失敗後,除非有人在三天內手動重新傳送,否則就會遺失。Paddle 把 60 次嘗試中的大約 10 次放在第一個小時,大約 45 次放在第一天,對只是比較慢的處理程式,懲罰遠比 Stripe 的曲線重。

簽章機制

最常讓人耗掉好幾個小時的,是「簽章內容」這一欄。只要不是 raw body,就代表不能只對請求主體做雜湊。

服務商演算法簽章內容編碼標頭容許時間差
SlackHMAC-SHA256v0:{timestamp}:{body}hexx-slack-signature = v0=hex5 分鐘
LINEHMAC-SHA256raw bodybase64x-line-signature = base64無
XeroHMAC-SHA256raw bodybase64x-xero-signature = base64無
DiscordEd25519{timestamp}{body}hexx-signature-ed25519 + x-signature-timestamp無
ShopifyHMAC-SHA256raw bodybase64x-shopify-hmac-sha256無
PaddleHMAC-SHA256{timestamp}:{body}hexpaddle-signature = ts=X;h1=hex5 秒
HubSpotHMAC-SHA256POST{decodedUrl}{body}{timestamp}base64x-hubspot-signature-v35 分鐘
GitHubHMAC-SHA256raw bodyhexx-hub-signature-256 = sha256=hex無
Meta (Instagram, Facebook, Threads)HMAC-SHA256raw bodyhexx-hub-signature-256 = sha256=hex無
TwilioHMAC-SHA1full URL + form params sorted by keybase64x-twilio-signature無
StripeHMAC-SHA256{timestamp}.{body}hexstripe-signature = t=X,v1=hex5 分鐘
Svix (Clerk, Resend)HMAC-SHA256{id}.{timestamp}.{body}base64svix-signature = v1,base645 分鐘
WooCommerceHMAC-SHA256raw bodybase64x-wc-webhook-signature無
Lemon SqueezyHMAC-SHA256raw bodyhexx-signature + x-event-name無
PayPalRSA-SHA256{txId}|{txTime}|{webhookId}|{crc32(body)}base64paypal-transmission-sig + 4 more無
SendGridECDSA P-256{timestamp}{body}base64x-twilio-email-event-webhook-signature無
LinearHMAC-SHA256raw bodyhexlinear-signature無
SentryHMAC-SHA256raw body, no timestamphexsentry-hook-signature無
IntercomHMAC-SHA1raw bodyhexx-hub-signature = sha1=hex無
VercelHMAC-SHA1raw bodyhexx-vercel-signature無

使用這份資料

同一份表格也以 JSON 格式提供在 /providers.json,採 CC BY 4.0 授權。可以複製、嵌入、更正。如果這裡的數字有錯,或某家服務商改了什麼,到 repo 開一個 issue,這裡就會修正。

姓名標示:AnyHook,「Webhook 服務商行為參考資料」,https://anyhook.net/zh-tw/providers

這些數字在哪些文章出現