重複送達防護
大多數系統在未收到即時回覆時,會重新嘗試觸發 webhook。如果第一次嘗試確實送達,您的 Shopify Flow 工作流程就會針對同一事件執行兩次 - - 導致寄出第二封電子郵件、標籤重複,或是訂單備註被重複記錄。
「防止重複傳送」功能可避免這種情況發生。此功能在每個 Webhook 上預設皆為關閉狀態。
運作原理
如果您的發送系統為每個事件都包含一個唯一識別碼,請在**「進階設定」→「重複送達偵測」**中,為攜帶該識別碼的標頭命名。
| 行為 | |
|---|---|
| 具有特定 ID 的第一個請求 | 若按常規處理,將觸發 Shopify Flow |
| 請於 24 小時內重複此操作 | 200 OK 使用 duplicate: true - - 未寄送至 Shopify Flow |
| 一個不同的 ID | 已正常處理 |
| 請勿包含該標頭的請求 | 已正常處理 |
| 該欄位未填寫 | 每個請求均已處理 - - 一切如常 |
常見的標頭名稱:Event-Id、Idempotency-Key、X-Request-Id。比對時不區分大小寫。
bash
# Same Event-Id twice - the second is accepted but not re-sent to Flow
curl -X POST https://your-app-url/webhook/ab12cd34 \
-H "Content-Type: application/json" \
-H "X-Api-Key: your-token" \
-H "Event-Id: evt_12345" \
-d '{"orderId":"1001"}'為什麼重複操作仍會傳回 200
非 2xx 狀態碼的回應,正是讓發送者更難重新嘗試的原因。回傳 200 會告知對方事件已安全處理完畢,因此會停止操作;而若在回應正文中包含 duplicate: true,則能在記錄回應時區分這兩種結果。
重複項目出現在哪裡
一則被隱藏的重複貼文:
- 不會建立任何呼叫記錄,因此不會計入您的方案配額
- 在編輯 webhook 時,它確實會出現在「即時請求檢視器」中, 被標記為「已隱藏的重複內容」
這種組合是經過深思熟慮的:您的通話紀錄和通話配額仍保持完好,但通話絕不會看起來像是悄無聲息地消失了。
選擇合適的標題
該 ID 必須在重試過程中保持穩定,且每個事件都必須是唯一的 - - 這就是整個機制。
正確:事件發生時,由發送方生成一次的事件識別碼或冪等鍵。
不正確,且在儲存時遭拒絕:由代理伺服器控制的標頭,例如 X-Forwarded-For、CF-* 或 X-Signature。由於其值會隨每次請求或每次跳躍而改變,因此永遠無法與重複項目匹配 - - 這類情況會靜默失敗,而非明確報錯。
如果去重儲存區短暫無法使用
傳送操作會被處理,而非直接放棄。相較於事件遺失,工作流程重複執行所造成的問題要輕微得多,因此此功能在設計上採用「開放式失敗」機制。

