事件參考
依資源分組列出 Listings API 的全部 26 種 webhook 事件,並提供每種事件的確切欄位與酬載範例。
26 種事件,依其對應的 REST 資源分組。本頁的每種事件都會傳送至您唯一的 webhooks URL。無法針對個別事件訂閱,因此請依 event 分流處理,並忽略您不需要的事件。
除了下方特別說明的 listing.submission,所有事件都使用標準酬載。data 內的選用欄位若為空,會省略,而不會以 null 傳送。
索引
商家資訊
與商家資訊端點搭配使用,尤其是 GET /locations/{locationId}/listings/premium,此端點會傳回本事件所通知的各筆商家引用資訊的 syncStatus 與 listingUrl。
listing.submission
觸發時機:為 1 個地點向 1 個目錄網站提交的商家引用資訊達到最終狀態。
最上層:
data 內部:
{ "event": "listing.submission", "data": { "business_id": 279381, "v4_business_id": "TG9jYXRpb246Mjc5Mzgx", "location_id": "TG9jYXRpb246Mjc5Mzgx", "site": { "id": 42, "name": "Yelp", "url": "https://www.yelp.com" } }, "status": "success", "live_link": "https://www.yelp.com/biz/acme-dental-downtown"}地點
地點生命週期,與 createLocation、updateLocation 和 archiveLocations 一一對應。範圍限定於個別地點:location_id 一律為數字字串。
profile.created
觸發時機:建立新地點。
{ "event": "profile.created", "timestamp": "2026-08-25T10:04:00Z", "account_id": 11073, "location_id": "901234", "data": { "source": "api" }}profile.updated
觸發時機:編輯現有地點的詳細資料。
透過防彈跳處理,限制每個地點每 60 秒傳送 1 次,並在時間區間開始時傳送。區間內的編輯會合併處理,而不會延後傳送。這些編輯的事件永遠不會送達。請將 changed_fields 視為觸發該時間區間的編輯提示,而非完整的差異。
事件會在時間區間開始時送達,因此收到事件後立即讀取地點,只會看到第 1 次編輯。請安排在時間區間結束後,也就是至少 60 秒後,再次讀取,並定時核對地點資料,因為此事件只會嘗試傳送 1 次,且不會重試。請參閱遺漏事件後的復原方式。
{ "event": "profile.updated", "timestamp": "2026-08-25T10:06:12Z", "account_id": 11073, "location_id": "901234", "data": { "source": "user", "changed_fields": ["name", "phone"] }}profile.deleted
觸發時機:封存地點。這是軟刪除。不支援永久刪除,且可使用 cancelArchiveLocations 取消封存,但此操作不會發出事件。
{ "event": "profile.deleted", "timestamp": "2026-08-25T10:20:44Z", "account_id": 11073, "location_id": "901234", "data": { "source": "user" }}已連結帳號
Google 和 Facebook 連線的生命週期與健康狀態,搭配已連結帳號端點使用。範圍限於個別地點。platform 一律為 google 或 facebook;其他供應商不會發出這些事件。
connected_account_id 一律會作為鍵存在,但在 2 種 Google 驗證事件中,其值為 null。
connection.location_connected
觸發條件:Google 或 Facebook 商家資訊連結至地點。
{ "event": "connection.location_connected", "timestamp": "2026-08-25T14:32:10Z", "account_id": 11073, "location_id": "279381", "data": { "platform": "google", "connected_account_id": "ba03bc4b-9f8c-4d3b-8e93-9628034c63cc" }}connection.location_disconnected
觸發條件:Google 或 Facebook 商家資訊與地點解除連結。
{ "event": "connection.location_disconnected", "timestamp": "2026-08-25T14:35:02Z", "account_id": 11073, "location_id": "279381", "data": { "platform": "google", "connected_account_id": "ba03bc4b-9f8c-4d3b-8e93-9628034c63cc" }}connection.reauth_required
觸發條件:已連結帳號的憑證失效。在有人重新授權之前,此連線不會同步任何資料。
{ "event": "connection.reauth_required", "timestamp": "2026-08-25T14:40:18Z", "account_id": 11073, "location_id": "279381", "data": { "platform": "google", "connected_account_id": "ba03bc4b-9f8c-4d3b-8e93-9628034c63cc", "reason": "Google credentials are invalid. Please reconnect." }}connection.listing_inaccessible
觸發條件:已連結帳號無法再存取該地點的商家資訊。這與 reauth_required 不同:憑證可能仍然完全有效,但對該筆商家資訊的存取權已遭移除。
{ "event": "connection.listing_inaccessible", "timestamp": "2026-08-25T14:42:55Z", "account_id": 11073, "location_id": "279381", "data": { "platform": "facebook", "connected_account_id": "cf12de77-2211-4a09-b7c1-0a6f3b2e91aa", "reason": "No longer has access to this listing." }}connection.google_verification_verified
觸發條件:地點的 Google Business Profile 通過驗證。
{ "event": "connection.google_verification_verified", "timestamp": "2026-08-25T14:50:00Z", "account_id": 11073, "location_id": "279381", "data": { "platform": "google", "connected_account_id": null }}connection.google_verification_failed
觸發條件:Google Business Profile 驗證進入最終失敗狀態。沒有可啟動驗證的 REST 呼叫;如上所述,狀態本身可以讀取。
只有最終狀態會發出事件:VERIFIED 會觸發 _verified 事件,而 SUSPENDED 或 DUPLICATE(failure_type rejected)以及 ERROR_WHILE_FETCHING(transient)會觸發此事件。進行中的狀態(PENDING_VERIFICATION、UNDER_REVIEW、NOT_VERIFIED、NOT_CONNECTED)完全不會產生事件,因此不能根據未收到事件來判斷狀態。驗證進行期間,請定期讀取地點以輪詢 googleVerificationStatus。
{ "event": "connection.google_verification_failed", "timestamp": "2026-08-25T14:52:31Z", "account_id": 11073, "location_id": "279381", "data": { "platform": "google", "connected_account_id": null, "failure_type": "rejected", "reason": "This profile is suspended." }}評論
評論與回覆,搭配評論端點使用,包括回覆、編輯回覆和封存回覆。
屬於 Social 類別的評論會被篩除,絕不會傳送。
interaction.review
觸發條件:評論被擷取或發生變更。
{ "event": "interaction.review", "timestamp": "2026-08-25T09:12:44Z", "account_id": 11073, "location_id": "279381", "data": { "interaction": { "id": "6f8a1d20-3e11-4a55-9f7d-2b0c9e5a4471", "type": "Review", "content": "Friendly staff and no waiting.", "rating": 5, "title": null, "author_name": "Dana R.", "author_avatar": "https://lh3.googleusercontent.com/a/example", "date": "2026-08-25T08:58:02Z", "source": "google.com", "permalink": "https://maps.google.com/example-review", "category": "Review", "interaction_status": "unread", "parent_id": null, "interaction_request_id": "3c1e9b74-88a2-4d0e-9c31-77a1f0be5d92" } }}interaction.response
觸發條件:評論回覆被發布、編輯或封存。結構與 interaction.review 相同,但有 2 處差異:type 為 Response,且 parent_id 指向回覆所對應的評論。
interaction.review 下列出的所有其他欄位皆會存在,且意義相同。
{ "event": "interaction.response", "timestamp": "2026-08-25T09:30:07Z", "account_id": 11073, "location_id": "279381", "data": { "interaction": { "id": "b2d7c095-5f43-4e21-8a10-6d9c3f77e208", "type": "Response", "content": "Thanks Dana, see you next time!", "rating": null, "author_name": "Acme Dental Downtown", "date": "2026-08-25T09:29:55Z", "source": "google.com", "permalink": "https://maps.google.com/example-review", "category": "Review", "interaction_status": "responded", "parent_id": "6f8a1d20-3e11-4a55-9f7d-2b0c9e5a4471", "interaction_request_id": "3c1e9b74-88a2-4d0e-9c31-77a1f0be5d92" } }}貼文
Google Business Profile 本地貼文,搭配 貼文端點使用。範圍限定於地點,location_id為數字字串。
這 4 種事件共用同一種data結構,但選用欄位不同。所有選用欄位為空時都會省略。
local_post.created
觸發條件:貼文項目已建立,並已排入佇列,等待提交至 Google。此時尚未上線。
{ "event": "local_post.created", "timestamp": "2026-08-25T11:02:00Z", "account_id": 11073, "location_id": "279381", "data": { "post_id": 88421, "post_item_id": 5512309, "post_type": "STANDARD" }}local_post.published
觸發條件:Google 已接受貼文,且貼文已上線。
{ "event": "local_post.published", "timestamp": "2026-08-25T11:06:41Z", "account_id": 11073, "location_id": "279381", "data": { "post_id": 88421, "post_item_id": 5512309, "post_type": "STANDARD", "post_external_id": "accounts/123/locations/456/localPosts/789" }}local_post.rejected
觸發條件:Google 拒絕貼文,或提交貼文失敗。
{ "event": "local_post.rejected", "timestamp": "2026-08-25T11:07:15Z", "account_id": 11073, "location_id": "279381", "data": { "post_id": 88421, "post_item_id": 5512310, "post_type": "OFFER", "rejection_reason": "Rejected" }}local_post.deleted
觸發條件:貼文項目已刪除。
{ "event": "local_post.deleted", "timestamp": "2026-08-25T15:40:09Z", "account_id": 11073, "location_id": "279381", "data": { "post_id": 88421, "post_item_id": 5512309, "post_type": "STANDARD", "post_external_id": "accounts/123/locations/456/localPosts/789" }}Social
品牌層級的社群發布與連線生命週期,搭配 Social端點使用。共有 9 種事件:5 種貼文事件、4 種連線事件。
account_id與timestamp會照常提供。data內的 ID 與 REST API 使用的一般 UUID 相同,並以字串傳送。
social_post.created
觸發條件:社群貼文已建立。僅在建立時發出;編輯現有貼文不會再次發出事件。
{ "event": "social_post.created", "timestamp": "2026-09-28T14:02:11Z", "account_id": 62570, "location_id": null, "data": { "post_id": "c47a1e58-2b93-4f10-a6d7-58e0c9b12345", "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "status": "scheduled", "created_by": 40122, "platform_ids": [1, 2, 4] }}social_post.published
觸發條件:貼文已完全上線。只有完全成功時才會發出此事件:至少有一個管道發布成功,且沒有任何管道發生錯誤。若僅部分發布成功,則不會發出此事件,而是發出 social_post.failed。
{ "event": "social_post.published", "timestamp": "2026-10-02T13:30:07Z", "account_id": 62570, "location_id": null, "data": { "post_id": "c47a1e58-2b93-4f10-a6d7-58e0c9b12345", "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "status": "published", "published_on": "2026-10-02T13:30:04", "items": [ { "platform": "instagram", "social_platform_id": 2, "connected_account_id": "b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7", "published_url": "https://www.instagram.com/p/CxYz1234abc/", "vendor_post_id": "18029384756012345", "status": "success" } ] }}social_post.failed
觸發條件:發布失敗。這是傳送失敗,與內容審核遭拒不同。此事件會在最後一次重試時觸發,因此貼文仍有剩餘嘗試次數時不會發出。
items僅包含發生錯誤的管道,因此若一則貼文在 2 個平台發布成功、在第 3 個平台失敗,此事件只會包含 1 個項目。
{ "event": "social_post.failed", "timestamp": "2026-10-02T13:34:55Z", "account_id": 62570, "location_id": null, "data": { "post_id": "c47a1e58-2b93-4f10-a6d7-58e0c9b12345", "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "status": "failed", "items": [ { "platform": "linkedin", "social_platform_id": 4, "status": "error", "reason": "Authorization expired", "vendor_error": "The access token is no longer valid." } ] }}social_post.rejected
觸發條件:核准工作流程已拒絕貼文。這是內容審核遭拒,而非傳送失敗:貼文從未送達平台。
{ "event": "social_post.rejected", "timestamp": "2026-09-29T09:11:03Z", "account_id": 62570, "location_id": null, "data": { "post_id": "e08b2d97-6f14-4c22-b7a5-9d3e1f6c4a70", "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "status": "rejected", "rejection_reason": "Please use the updated product name." }}social_post.deleted
觸發條件:貼文已封存,無論是透過 POST /social/posts/cancel,還是由排程封存作業處理。只有狀態確實轉換時才會觸發,因此再次封存已封存的貼文不會發出任何事件。
{ "event": "social_post.deleted", "timestamp": "2026-09-30T16:20:41Z", "account_id": 62570, "location_id": null, "data": { "post_id": "e08b2d97-6f14-4c22-b7a5-9d3e1f6c4a70", "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "status": "archived", "archived_at": "2026-09-30T16:20:39" }}social_connection.connected
觸發條件:品牌管道已啟用,可能是首次連線,也可能是先前已封存的管道重新連線。is_reconnect可區分這 2 種情況。
{ "event": "social_connection.connected", "timestamp": "2026-09-27T11:05:22Z", "account_id": 62570, "location_id": null, "data": { "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "connected_account_id": "b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7", "platform": "instagram", "display_name": "Jenny Home", "is_reconnect": false }}social_connection.disconnected
觸發條件:管道已透過 中斷連線呼叫主動移除。只有管道確實已封存時才會發出此事件,因此中斷連線失敗時不會產生不實事件。
{ "event": "social_connection.disconnected", "timestamp": "2026-10-04T08:47:10Z", "account_id": 62570, "location_id": null, "data": { "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "connected_account_id": "b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7", "platform": "instagram", "display_name": "Jenny Home" }}social_connection.archived
觸發條件:管道非自願地失去連線,原因可能是平台使權杖失效,或狀態核對作業發現已無法存取管道。此情況並非任何人要求執行的操作,這正是它與disconnected的差別。
{ "event": "social_connection.archived", "timestamp": "2026-10-06T02:15:33Z", "account_id": 62570, "location_id": null, "data": { "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "connected_account_id": "2d4e6f80-1c33-4b7a-8e05-9a1b2c3d4e5f", "platform": "facebook", "display_name": "Jenny Home & Co.", "reason": "Access token has been invalidated by the platform." }}評論分析
定期彙總評論,每個地點在每個期間產生 1 個事件。
這 2 種事件使用相同的 data 結構:
地點在該期間沒有活動時,不會發出任何事件;但地點的快照未能送達時,您也不會收到任何事件。快照缺失的原因並不明確,而對這類事件而言,沒有發生問題的可能性最低。可能的原因包括:沒有活動;傳送失敗或逾時(只嘗試 1 次,不會重試);帳戶沒有使用 webhooks 的權限、未設定 URL、尚未通過驗證或已遭封鎖,導致傳送被停用;或者,最可能的情況是觸及每分鐘上限,導致短時間內湧入的部分事件以 rate_limited 遭到捨棄。
切勿僅因快照缺失就記錄為 0。請透過 GET /locations/{locationId}/review-analytics-overview 查詢相同期間的資料並核對;如果該次讀取也失敗,請將該期間標示為無法取得資料,而非 0。
review_analytics.daily_snapshot
觸發條件:每日彙總作業,每個地點每天 1 次。
{ "event": "review_analytics.daily_snapshot", "timestamp": "2026-08-25T02:00:00Z", "account_id": 11073, "location_id": "279381", "data": { "period": "2026-08-24", "granularity": "daily", "total_reviews": 1240, "new_reviews_in_period": 3, "average_rating": 4.6667, "previous_average_rating": 5.0 }}review_analytics.weekly_snapshot
觸發條件:每週彙總作業,每個地點每週 1 次。period 是所彙總週別的第 1 天。
{ "event": "review_analytics.weekly_snapshot", "timestamp": "2026-08-24T02:00:00Z", "account_id": 11073, "location_id": "279381", "data": { "period": "2026-08-17", "granularity": "weekly", "total_reviews": 1237, "new_reviews_in_period": 18, "average_rating": 4.6123, "previous_average_rating": 4.5901 }}您可能收到但不應據以開發功能的事件
平台也會發出其他類別的事件:評論活動、排名、社群貼文加強推廣、社群廣告帳戶狀態變更、AI 貼文構想,以及 Google Business Profile 擁有權。這些事件在 Listings API 中沒有已公開的 REST 端點,本文件也未說明這些事件,且其資料結構不受任何相容性保證涵蓋。由於只有 1 個 URL,且無法個別訂閱事件,您的處理常式應忽略任何無法辨識的 event,並仍然回傳 200。