事件参考
全部 26 个 Listings API webhook 事件,按资源分组,并提供每个事件的确切字段和示例负载。
26 个事件,按其关联的 REST 资源分组。本页中的每个事件都会发送到您唯一的 webhooks URL。不支持按事件订阅,因此请根据 event 进行分支处理,并忽略不需要的事件。
除下文特别说明的 listing.submission 外,所有事件都使用标准载荷。data 中的可选字段为空时会被省略,而不是以 null 发送。
索引
商家信息
与商家信息端点配合使用,尤其是 GET /locations/{locationId}/listings/premium,该端点会返回每条商家信息引用的 syncStatus 和 listingUrl,即此事件通知的内容。
listing.submission
触发条件:某个地点在某个目录网站上的商家信息引用提交达到最终状态。
顶层:
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 始终作为键存在,但在两个 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 相同,但有两处不同: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。