Skip to main content

什麼是 Webhook?

Webhook 讓你可以在系統發生特定「動作(action)」時,透過對你提供的 URL 發起呼叫來收到通知。Webhook 也稱為「URL 回呼」或「HTTP push 呼叫」。你提供的 URL 必須使用 SSL,並以 HTTPS 開頭。

Webhook 動作

查看可用的 Webhook 動作。

認識 Ayrshare Webhook

Webhook 依據特定動作進行分類,並註冊於 Primary Profile 或 User Profile 層級。任何 Primary 或 User Profile 的更新都會先送到該 User Profile 已註冊的 Webhook。若該 User Profile 未註冊 Webhook,則更新會送到 Primary Profile 註冊的 Webhook。 例如:
  • 若某 User Profile 已註冊 Social Action Webhook 並解除 TikTok 的連結,該 User Profile 註冊的 Social Action Webhook URL 會被呼叫。Primary Profile 的 Webhook 不會被呼叫。
  • 若某 User Profile 解除 TikTok 連結且註冊 Social Action Webhook,但 Primary Profile 有註冊 Webhook,則會呼叫 Primary Profile 註冊的 Social Action Webhook URL。

註冊 Webhook

透過將端點 URL 與動作類型提交至 POST /hook/webhook 端點來註冊 Webhook。當該動作發生時,會向你提供的 URL 送出 HTTP POST 訊息。 例如:註冊一個 URL,以便在排程貼文狀態變化時收到通知。 Webhook 端點 URL 不應使用轉址,必須是最終目的地的 URL。 若你只註冊 Primary Profile 的 Webhook,User Profile 會自動繼承 Primary Profile 的 Webhook。 若要為每個 User Profile 設定不同的 Webhook,你必須為每個 User Profile 各別註冊 Webhook。
在你的 Webhook 收到 HTTP POST 之後,你的伺服器必須回應 HTTP 狀態 200,才會將該次呼叫標記為成功。若你的伺服器在 15 秒內未回應,該次嘗試將被記錄為失敗並進行重試。請在收到請求後立即回應,並以非同步方式進行處理——逾時並不代表拒絕,因此若你的處理程式完成了工作但太晚回應,重試會使你重複處理一次。
你也可以在 Developer Dashboard 中註冊 Webhook。

Webhook 重試

若你的伺服器回應 HTTP 狀態不在 200-299 成功範圍內,或你的伺服器在 15 秒內未回應,系統會自動再重試 Webhook 呼叫兩次。第一次重試在 5 秒後進行,第二次重試會在其後 30 秒進行。重試會使用相同的 hookId 與相同的 payload。

傳遞語意與冪等性

Ayrshare 以**至少一次(at least once)**的方式傳遞 Webhook。偶爾出現的重複是正常運作,並非缺陷——每個接收端都需要將冪等性視為長期屬性。 重複會以兩種不同的形式出現,且各自需要不同的鍵: hookId 代表一次事件傳遞。同一次傳遞的每次重試都使用相同的 hookId,因此以它作為判定依據可以安全處理重試——但同一底層事件的新一次通知會帶著新的 hookId 送達,因此僅靠 hookId 無法辨識該情況。 建議的接收端流程:
  1. 先回應。 立即回傳 2xx,然後以非同步方式處理。逾時並不代表拒絕——若你完成了工作但太晚回應,該事件會再次被送出。
  2. 原子式地宣告 hookId——請求一到達時就立即進行,例如使用唯一約束、INSERT ... ON CONFLICT DO NOTHING,或 SET NX——而非先讀後寫的檢查。兩次嘗試可能同時到達,先檢查後動作的做法會讓兩者都通過。
  3. 同時宣告一個由你自行建立的鍵,由 payload 組成,以便帶有新 hookId 的第二次通知也能被辨識。對於 messages,將 idsubAction 組合使用效果不錯。
  4. 然後才進行處理,並將兩個宣告保持足夠久,涵蓋重試視窗與後續可能的再次通知。
payload 中的 id 本身對每一種事件類型並非唯一——同一個 message id 會在編輯與回應中重複出現,而 messageRead 的 payload 並不帶 id——因此請將它與 subAction 搭配使用,而非單獨使用。

傳遞中繼資料標頭

每次傳遞都會帶有兩個標頭來識別該次特定的傳送,讓你可以區分原始傳送與重試:
X-Ayrshare-Delivery-Attempt 在第一次傳送時為 0,之後每次重試遞增 1,因此任何大於 0 的值都代表我們至少已送出過一次。請將其視為無上限的計數器,而非一組固定的值——重試次數屬於可能會變動的操作性細節。X-Ayrshare-Delivery-Id 對每次嘗試而言都是唯一的——回報給客服時附上它,即可精確識別該筆傳遞記錄。 這兩個標頭識別的是傳送;而 hookId 識別的是事件。請以 hookId 而非 delivery id 進行去重——delivery id 依設計本就在每次嘗試時皆不同,若以它做去重將無法辨識任何重複。

Webhook 安全性

你可以選擇加入額外的安全性,將 HMAC 驗證設為 HTTP 請求的一部分。這通常用於防止重放攻擊。Ayrshare 使用 HMAC-SHA256 對訊息主體進行雜湊處理,並將雜湊值與 UNIX 時間戳一起放在 POST 的標頭中。
根據你註冊 Webhook 時設定的密鑰,你可以透過比較標頭 X-Authorization-Content-SHA256 與 POST body 的 HMAC-SHA256 值來驗證此貼文。簽署密鑰為整個 profile 範圍——每個 User Profile 只有一個密鑰,並會套用於該 profile 的所有 Webhook 動作,因此為某個動作設定密鑰時,該 profile 上所有動作的密鑰也會一併變更。多 profile 帳號會為每個 profile 各自管理獨立的密鑰(透過 Profile-Key 標頭指定 profile)。

Webhook 記錄

在 Ayrshare Dashboard 中,你可以查看有效的 Webhook、查看已送出 Webhook 的詳細內容、你的伺服器回應狀態,並可將 Webhook 重新送至已註冊的 URL。 切換到特定 User Profile 即可查看該 Profile 的 Webhook 記錄。

HTTP 回應碼

第一欄會標示 Webhook 是否為成功的 HTTP 回應 ✔️(200、300)或失敗回應 ✖️(400、500)。 切換到特定 User Profile 即可查看該 Profile 的 Webhook 記錄。

錯誤率

在控制台的 Actions 與 Webhook Logs 頁面上,可以查看最近 1,000 則貼文的「錯誤率(Error Rate)」。任何來自你的伺服器且回應為 400-500 的 Webhook 都會被視為錯誤。