跳轉到主要內容
Webhook 會讓 Alforse 在訂閱表格中的記錄被插入、更新或刪除時,向您指定的 URL 傳送 HTTP POST。開發人員使用 Webhook 來回應 Alforse 中的變更,而不必輪詢 API。

Webhook 如何運作

  • 每個 Webhook 監看一個表格以及一種或多種觸發操作。
  • 當發生符合的變更時,Alforse 會將傳送排入佇列並以非同步方式送出,通常在片刻之內。
  • 每次傳送都以屬於該 Webhook 的密鑰簽章,讓您的端點能證明請求來自 Alforse。
  • 內文是記錄已變更的通知。在採取動作之前,請先用 API 金鑰取得目前的記錄。

可訂閱的表格

請以 Webhook 表單中的表格下拉選單為準,來確認您的部署接受哪些表格。觸發選項也取決於表格,因為表格只發布部分操作:receipt 發布插入與刪除,而 employee 只發布更新。

設定 Webhook

前往設定 → Webhook 建立並管理 Webhook。填寫以下欄位: Alforse 拒絕傳送到回送位址、私有網路、連結本機(link-local)以及雲端中繼資料位址。這可防止 Webhook 被用來存取內部系統。 Webhook 清單會為每個 Webhook 顯示成功次數與錯誤次數,依傳送嘗試計算。

傳送內容

內文

內文是包含四個欄位的 JSON:

標頭

請使用事件 ID 作為冪等鍵。一項變更在其所有重試中保持同一個事件 ID,而每個新的變更都會取得新的 ID,包括對您已收過通知的記錄所做的第二次更新。

傳送與重試

傳送為至少一次。當您的端點出現下列情況時,Alforse 會將該次嘗試視為失敗並重試,採用指數退避,最多 8 次嘗試:
  • 在 10 秒內沒有回傳成功狀態,或
  • 回傳 5xx 或 429。
其他結果不會重試:
  • 任何其他 4xx 回應會結束該變更的傳送。
  • 3xx 回應視為失敗,因為 Alforse 不會跟隨重新導向。請設定最終的 URL。
  • 傳送到被拒絕的位址不會重試。
最後一次嘗試失敗後,Alforse 會將該變更標記為失敗並捨棄。

設計您的端點

  • 預期會有重複。 在您已處理第一次嘗試之後,重試仍可能抵達。請依 x-omeriva-webhook-event 去重,而不是依 type 加上 record.id,因為對同一筆記錄的不同變更會共用這些值。
  • 中斷後要對帳。 被捨棄的變更不會重新傳送。如果您必須處理每個事件,請在端點停機之後查詢 API 以補上資料。

驗證傳送內容

建立 Webhook 時也會產生專屬於它的簽章密鑰,由 Alforse 加密保存。x-omeriva-webhook-signature 中的簽章,是 `${timestamp}.${body}` 的十六進位 HMAC-SHA256,以密鑰字串作為金鑰。timestamp 是 x-omeriva-webhook-timestamp 的值,body 是原始請求內文。 要驗證一次傳送:
  1. 在解析之前先擷取原始內文。解析後再重新序列化 JSON 會改變位元組,並破壞簽章。
  2. 計算 HMAC,並使用常數時間比較,與 v1= 之後的值比對。
  3. 拒絕與您的時鐘相差超過五分鐘的任何時間戳記,使擷取到的請求無法被重放。每次重試都會以新的時間戳記重新簽章,所以合法的重試仍會通過。

疑難排解

相關內容