Webhooks 概覽

Listings API 如何將帳戶事件推送至您的伺服器、有哪些事件,以及每次傳送必須通過的 5 項檢查。

透過輪詢 API 得知變更的成本很高,而且總會有些延遲。Webhook 採用相反的方式:當您的帳戶發生事件(收到評論、地點遭到編輯、Google 商家貼文上線)時,Listings API 會在幾秒內,將含有 JSON 主體的 HTTP POST 請求傳送至您控制的 URL。

每個帳戶只有 1 個 webhook URL,而且無法個別訂閱事件。如果您的帳戶已啟用 webhook,且您的端點已通過驗證,本頁列出的所有事件都會傳送至該 URL。請根據 event 欄位分別處理,並忽略您不需要的事件。

傳送流程

所有事件都遵循相同的流程。系統會依序檢查 5 項條件,只要任一項未通過,就完全不會發出 HTTP 請求,但仍會記錄這次嘗試。

您可以接收的事件

共 6 個類別、18 種事件。每種事件都對應到您已透過 REST API 管理的資源,因此 webhook 告訴您何時發生變更,端點則告訴您變更的內容。

類別事件相關 REST 資源
listing.submission1商家資訊
profile.*3 種:created、updated、deleted地點
connection.*6 種:connected、disconnected、reauth、inaccessible、2 種 Google 驗證事件已連結的帳戶
interaction.*2 種:review、response評論
local_post.*4 種:created、published、rejected、deleted貼文
review_analytics.*2 種:每日快照與每週快照分析

完整的欄位表格與酬載範例請見事件參考文件。

不在支援範圍內

平台也會發出其他類別的事件,但 Listings API 未提供這些事件的文件或支援,因為此處沒有對應的已公開 REST 端點。以下列出這些類別,以免看起來像是意外遺漏:

  • 評論邀請活動:campaign.*
  • 排名:rankings.*
  • Social 貼文與加強推廣:social_post.*
  • Social 連結:social_connection.*
  • AI 貼文構想:idea.*、idea_series.*、idea_pipeline.*、idea_image.*
  • Google Business Profile 擁有權:gbp_ownership.*

開始開發前應閱讀的 2 項注意事項

傳送條件

傳送前會依序檢查 5 個條件。第一個未通過的條件就會停止傳送,後續條件不會再檢查。

#條件未通過時的處理方式
1您的方案包含 webhooks。 這是帳號的一項使用權限。不會留下任何記錄。事件不會傳送給您。
2帳號已設定 webhooks URL。不會留下任何記錄。
3端點已通過驗證:僅在已有簽署密鑰時強制執行。記錄為 endpoint_unverified。
4URL 可解析為公用位址(使用 HTTPS,且主機名稱可在公用網路上解析)。記錄為 blocked_url。
5您尚未超過方案的 webhook 限制。記錄為 rate_limited。事件會遭捨棄,不會加入佇列。

方案與限制

所有方案都包含 webhooks 使用權限:Launch、Growth 和 Enterprise。試用期間會使用您選擇的方案,因此試用帳號從第一天起就能使用 webhooks,並受該方案的上限限制。這項使用權限附屬於您的方案,因此會隨方案變更而授予或移除,不會立即生效:預期會在下一次方案變更或註冊同步時生效,而非在您按下升級時立即生效。儀表板的 Webhooks 頁面會顯示您目前的使用權限與上限。

傳送量也會依照您方案的每分鐘與每日上限計量。

方案每分鐘每日
Launch107,200
Growth5036,000
Enterprise無上限無上限

Webhook 上限與您方案的 API 請求限制相同:我們傳送給您的事件配額,等於您傳送給我們的請求配額。

只有在您方案的限制同步至傳送流程後,上限才會開始套用至您的帳號。在此之前,沒有可供檢查的上限,因此不會計量,也不會捨棄任何事件。所以,全新帳號在套用方案上限之前,可能會先收到未經計量的傳送事件。請勿將未出現 rate_limited 視為您尚未超過限制的證據。

計量機制的運作方式:

  • 2 個獨立的固定時間區間:一個以分鐘為單位,另一個以日為單位。Webhook 沒有每小時的時間區間。(請求速率限制器 是另一套系統,使用不同的時間區間;兩者不共用配額。)
  • 時間區間依時鐘與日期對齊,不採滑動計算:每分鐘計數器會在每分鐘開始時重設,每日計數器則在 UTC 每日開始時重設。
  • 超過上限時,事件會遭捨棄。 不會加入佇列、不會延遲傳送,也不會重試:整個對外傳送流程中都沒有重試佇列,也沒有可接收 429 回傳值的呼叫端。這次嘗試會以傳送狀態 rate_limited 記錄,讓您能看出事件遺失,而非毫無記錄。
  • 限制器故障時會允許傳送。 如果限制器本身無法回應,事件仍會傳送,不會遭到捨棄。您不會因為計量機制故障而遺失事件。

事件產生端唯一內建的流量控制,是對 profile.updated 採用防彈跳機制:每個地點每 60 秒最多傳送 1 次,並在時間區間開始時立即傳送。短時間內對同一地點進行的多次編輯會合併為單一事件,而您收到的 changed_fields 只會描述觸發該時間區間的那次編輯。其他事件都不採用防彈跳機制。

由於事件會在時間區間開始時立即傳送,因此您會在 60 秒區間的起點收到事件:收到事件後觸發的回讀只會取得第一次編輯的結果。請安排在時間區間結束後,也就是事件發生至少 60 秒後,進行第二次回讀,並定時核對地點資料,因為事件本身只會嘗試傳送 1 次,不會重試。請參閱遺漏事件後的復原方式。

設定

  1. 架設 HTTPS 端點。此端點必須可透過公用網路解析、具備有效憑證、接受 POST,並在不到 5 秒內回傳 2xx。私人與內部位址(loopback、RFC-1918、link-local、雲端中繼資料 IP 位址)均不接受。
  2. 在儀表板的 Webhooks 頁面上儲存您的 Webhooks URL。每個帳戶使用 1 個 URL,接收所有事件。
  3. 產生簽章密鑰並儲存在您的伺服器上。密鑰只會顯示 1 次。從此刻起,傳送的內容都會附上簽章,且必須完成驗證。
  4. 驗證端點。平台會傳送已簽署的挑戰;您的端點須以 nonce 的十六進位 HMAC 回應。驗證成功後,端點會變更為已驗證狀態,並開始傳送事件。如需確切的介面規範與可執行的程式碼,請參閱簽章與驗證。
  5. 處理事件。驗證簽章、將酬載加入佇列,然後回傳 200。請在請求處理流程之外執行實際工作。如需瞭解逾時限制、僅嘗試傳送 1 次的原則,以及重複事件與事件順序的預期行為,請參閱傳送行為。

後續閱讀

  • 簽章與驗證:X-ListingsAPI-Signature 標頭、原始本文規則與交握流程。
  • 傳送行為:標準酬載、5 秒逾時限制、不重試的原因,以及所有傳送狀態。
  • 事件參考:全部 18 種事件的逐欄位說明。