如何將標準 Webhooks 連接到 Shopify Flow

如何將標準 Webhooks 連接到 Shopify Flow

複製頁面

將標準 Webhook 連接到 Shopify Flow,並在每次請求時進行 HMAC 簽名驗證,如此一來,只有可信的事件才會觸發您的工作流程。

「標準 Webhooks」是一項用於簽署 Webhooks 的開放式規範,目前已被 OpenAI、Supabase Auth Hooks 以及越來越多的服務所採用。 一個預設設定即可涵蓋所有這些服務。Workflow Webhooks 會將該呼叫轉化為 Shopify Flow 觸發器,讓您的商店能對此做出反應:為客戶標記、新增訂單備註、發送內部電子郵件、更新元資料欄位 - - 任何 Shopify Flow 能做到的功能皆可實現。

本指南闡述了整個流程 - - Standard Webhooks 發送請求、Workflow Webhooks 接收並驗證,Shopify Flow 執行操作 - - 且每項請求都會驗證 Standard Webhooks 的 HMAC 簽名,因此唯有 Standard Webhooks 才能啟動您的工作流程。

您可以打造什麼

  • 取用 OpenAI 的 webhook(例如已完成的批次工作或回應),並讓 Shopify Flow 根據該結果在您的商店中採取相應行動。
  • 對 Supabase Auth Hook 做出反應,如此一來,當您自己的應用程式中有註冊操作時,便會為對應的 Shopify 客戶加上標籤。
  • 無需設定自訂簽名,即可從任何遵循 standardwebhooks.com 規格的服務接收訊息。

常見的傳送事件:發送服務所定義的任何事件。

該預設設定亦會驗證來自 OpenAI 及 Supabase Auth Hooks 的 Webhook。

開始之前

  • Workflow Webhooks 已安裝在您的 Shopify 商店中。
  • Shopify Flow 已安裝,此應用程式可從 Shopify App Store 免費下載。
  • 一個具備建立 Webhook 權限的 Standard Webhooks 帳戶。

步驟 1 - 在 Workflow Webhooks 建立 Webhook

  1. 開啟 Workflow Webhooks → Webhooks → 建立 Webhook,並為其取一個您在 Shopify Flow 中能認出的名稱,例如 Standard Webhooks events。
  2. 在「驗證」下,選擇 HMAC。
  3. 在「簽名提供者」下,選擇「標準 Webhooks」。應用程式會自動為您填入標頭、演算法、已簽名有效載荷及重播視窗 - - 無需進行其他設定。
  4. 目前請將「密鑰」欄位留空,然後點選**「儲存」**。複製頁面顯示的 webhook URL。

有關其他驗證模式,請參閱 驗證;關於如何選擇哪些欄位會傳送至 Shopify Flow,請參閱 有效載荷映射與 Shopify Flow 變數。

步驟 2 - 在「標準 Webhook」中新增端點

將該網址新增為發送服務中的端點,然後複製系統顯示的簽名密鑰(以 whsec_ 開頭)。

如何查找您的 Standard Webhooks 簽名密鑰

以 whsec_ 開頭的簽名密鑰。請將其完整貼上;若顯示為 v1,whsec_...(Supabase),請省略開頭的「v1,」。

Standard Webhooks 官方關於 webhook 簽名的文件 中,有您帳戶的具體說明文字與螢幕截圖。

將該密鑰貼入 Workflow Webhooks 中的 Webhook**「密鑰」**欄位,並儲存。從此之後,每則 Standard Webhooks 的傳送內容在送達 Shopify Flow 之前,都會經過驗證。

此處檢查的內容

什麼 價值
簽名標題 webhook-signature
簽名的位置 前綴 v1, 之後的標頭值
簽署的內容為何 {header:webhook-id}.{timestamp}.{body}
簽名 HMAC-SHA256,base64 編碼
時間戳記 webhook-timestamp 標頭,以 Unix 秒為單位
重播保護 簽名時間戳與當前時間相差超過 5 分鐘的請求將被拒絕
這個秘密 使用前需先進行 Base64 解碼。解碼前會先移除開頭的 whsec_。請完全按照發送者顯示的內容貼上

在已簽署的載荷中,{body} 代表原始請求正文(逐位元組),{timestamp} 代表上述的時間戳記,而 {header:webhook-id} 則是 webhook-id 的請求標頭。

若請求未能符合上述任一條件,系統將以「401」為由拒絕該請求,並將其記錄於 歷史與故障排除,且該請求絕不會啟動工作流程。

步驟 3 - 建立「Shopify Flow」工作流程

  1. 在 Shopify Flow 中,建立一個工作流程,並選擇「Workflow Webhooks」觸發器。
  2. 按下「記錄事件」,然後從「標準 Webhooks」發送一個測試事件(或使用「Workflow Webhooks」中的「發送測試」功能),讓 Shopify Flow 能學習您的資料結構。
  3. 您擁有的每個 Webhook 都會觸發相同的「Shopify Flow」觸發器,因此請針對 Webhook ID 新增第一個條件,以確保此工作流程僅限於「標準 Webhook」。該 ID 會顯示在 Webhook 頁面中。
  4. 新增您的操作 - - 標記客戶、新增備註、發送內部電子郵件、更新元資料欄位。
Shopify Flow
在 Shopify Flow 中,選擇「選取觸發器」,開啟「Workflow Webhooks」,然後選擇「Webhook 觸發器」。
Shopify Flow 條件:Webhook ID 等於某個 Webhook 的 ID
每個工作流程的第一步:針對 webhook ID 設定條件,以便工作流程僅針對此 webhook 執行。
完成的工作流程:Webhook 觸發器、基於 Webhook ID 的條件,接著在「True」分支上發送內部電子郵件
完成的工作流程:觸發器、基於 webhook ID 的條件,然後在「True」分支上執行您的動作。

步驟 4 - 進行端到端測試

在「標準 Webhooks」中觸發一個真實事件。在 **Workflow Webhooks → 「歷史紀錄」**中,您應會看到狀態為「**成功」**的呼叫記錄。若簽名不正確,您將看到狀態為「失敗」的記錄並附有失敗原因;而 驗證已簽名的 Webhook 則說明了簽名測試工具,該工具會精確顯示哪個步驟失敗。

「History」中開啟了一項呼叫,其中包含其請求標頭、有效載荷、狀態、持續時間及識別碼
「History」中的已傳送事件:狀態為「成功」表示 Shopify Flow 已接受該事件。
簽名不符

依此順序:密鑰(最常見的原因 - - 多餘的空格,或來自錯誤環境的密鑰)、發送者是否使用了其他端點的密鑰,以及在「標準 Webhook」與應用程式之間是否有任何環節重寫了正文。 簽名涵蓋原始位元組,因此若代理伺服器重新格式化 JSON,便會破壞簽名。Webhook 頁面上的簽名測試工具會顯示實際經過簽名的精確文字內容。

每次請求都會出現 401 錯誤

請確認 webhook 的驗證方式已設定為 HMAC,並已選取「標準 webhook」提供者;同時確認已填入密鑰,且「標準 webhook」發送至 URL 的內容完全與應用程式顯示的一致,包括末尾的代碼。

「歷史」中沒有任何記錄

該請求從未送達。請重新檢查「標準 Webhook」中的 URL,並查看「標準 Webhook」自身的傳送日誌,確認其收到的回應。若出現 404,表示 Webhook 錯誤或已被刪除;若出現 429,則表示您已超過方案的呼叫次數限制 - - 請參閱 方案與使用方式。

工作流程針對錯誤的事件執行

您商店中的每個 Webhook 都會觸發相同的「Shopify Flow」觸發器。請在工作流程的第一步中,針對 Webhook ID 新增一個條件,或從「標準 Webhook」中篩選您要傳送的事件。

請求失敗,錯誤訊息為「時間戳記超出容許範圍」

Standard Webhooks 會對時間戳記進行簽名,而應用程式會拒絕任何超過 5 分鐘的事件。這通常是發送端的時間同步問題,或是 Standard Webhooks 在很久之後才重新傳送該事件,並保留了原始的時間戳記。來自同一原始請求的重試事件無法通過驗證;請要求 Standard Webhooks 傳送一個新的事件。

相關