接收有关商品状态变更的推送通知

您可以订阅PRODUCT_STATUS_CHANGE通知,以便在 Merchant Center 账号中的商品审批状态发生变化时,实时收到提醒。例如,您可以检测到商品何时被拒批,以便解决潜在的数据质量问题。

在开始之前,请确保您的回调 URI 已按照通知子 API 概览中所述的要求进行配置。

订阅商品状态变化

如需订阅商品状态变更,请向 notificationsubscriptions 资源发送 POST 请求,并将 registeredEvent 设置为 PRODUCT_STATUS_CHANGE。

订阅特定目标账号

以下示例请求订阅特定商家账号的产品状态变更:

POST https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions/
{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "targetAccount": "accounts/{TARGETACCOUNT_ID}",
  "callBackUri": "https://example.com/callback"
}

替换以下内容:

  • ACCOUNT_ID:拥有相应订阅并接收通知的账号的标识符。
  • TARGETACCOUNT_ID:您希望接收通知的账号的标识符。

如果您的 Merchant Center 账号是独立账号,未关联任何其他账号,请将您自己的账号 ID 用于这两个变量。

为所有受管理的账号订阅

如果您管理多个账号(例如包含子账号的高级账号),则可以通过设置 allManagedAccounts: true 订阅所有受管理账号的产品状态变化:

POST https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions/
{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "allManagedAccounts": true,
  "callBackUri": "https://example.com/callback"
}

成功调用会返回订阅的 name 标识符,其中包括唯一的订阅 ID:

{
  "name":"accounts/{ACCOUNT_ID}/notificationsubscriptions/{SUBSCRIPTION_ID}",
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "allManagedAccounts": true,
  "callBackUri": "https://example.com/callback"
}

解码商品状态更改载荷

当商品状态发生变化时,您的回调 URI 会收到一条经过 base64 编码的消息。解码后,载荷符合 ProductStatusChangeMessage 格式:

{
  "account": "accounts/{TARGETACCOUNT_ID}",
  "managingAccount": "accounts/{ACCOUNT_ID}",
  "resourceType": "PRODUCT",
  "attribute": "STATUS",
  "changes": [{
    "oldValue": "approved",
    "newValue": "disapproved",
    "regionCode": "US",
    "reportingContext": "SHOPPING_ADS"
  }, {
    "oldValue": "approved",
    "newValue": "disapproved",
    "regionCode": "JP",
    "reportingContext": "SHOPPING_ADS"
  },{
    "oldValue": "approved",
    "newValue": "disapproved",
    "regionCode": "GE",
    "reportingContext": "SHOPPING_ADS"
  }],
  "resourceId": "ONLINE~en~US~1234",
  "resource": "accounts/{TARGETACCOUNT_ID}/products/ONLINE~en~US~1234",
  "expirationTime": "2024-10-22T02:43:47.461464Z",
  "eventTime": "2024-03-21T02:43:47.461464Z"
}

载荷字段和规则

  • oldValue 和 newValue:表示之前和更新后的状态。 可能的值包括 approved、pending、disapproved 或空字符串 ('')。
    • 如果省略 oldValue,则表示商品是新创建的。
    • 如果省略 newValue,则表示商品已被删除。
  • expirationTime:表示商品优惠的到期时间。删除商品时,系统会忽略此字段。
  • reportingContext:状态发生变化的广告或免费商品详情平台。支持的值包括 ReportingContextEnum 中的 SHOPPING_ADS、LOCAL_INVENTORY_ADS、YOUTUBE_SHOPPING、YOUTUBE_CHECKOUT、YOUTUBE_AFFILIATE 和 FREE_LISTINGS_UCP_CHECKOUT。
  • eventTime:生成相应事件时的时间戳。使用此时间戳可确保事件的顺序正确无误。

测试商品状态变更通知

使用以下示例请求测试您的回调端点是否能正确接收、确认和解码商品状态更改消息:

curl --request POST \
'https://{YOUR_CALLBACK_URI}' \
--header 'Content-Type: application/json' \
--header 'Accept: text/plain' \
--data '{"message":{"data": "ewogICJhY2NvdW50IjogImFjY291bnRzLzEyMzQiLAogICJtYW5hZ2luZ0FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIsCiAgInJlc291cmNlVHlwZSI6ICJQUk9EVUNUIiwKICAiYXR0cmlidXRlIjogIlNUQVRVUyIsCiAgImNoYW5nZXMiOiBbewogICAgIm9sZFZhbHVlIjogImFwcHJvdmVkIiwKICAgICJyZWdpb25Db2RlIjogIlVTIiwKICAgICJyZXBvcnRpbmdDb250ZXh0IjogIlNIT1BQSU5HX0FEUyIKICB9XSwKICAicmVzb3VyY2VJZCI6ICJPTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAicmVzb3VyY2UiOiAiYWNjb3VudHMvMTIzNC9wcm9kdWN0cy9PTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAiZXhwaXJhdGlvblRpbWUiOiAiMjAyNC0xMC0yMlQwMjo0Mzo0Ny40NjE0NjRaIiwKICAiZXZlbnRUaW1lIjogIjIwMjQtMDMtMjFUMDI6NDM6NDcuNDYxNDY0WiIKfQ=="}}'

在响应此调用时,您的回调 URI 应返回可接受的 HTTP 状态代码(例如 200 OK)。解码后的消息具有以下内容:

{
  "account": "accounts/1234",
  "managingAccount": "accounts/5678",
  "resourceType": "PRODUCT",
  "attribute": "STATUS",
  "changes": [{
    "oldValue": "approved",
    "regionCode": "US",
    "reportingContext": "SHOPPING_ADS"
  }],
  "resourceId": "ONLINE~en~US~000000000000",
  "resource": "accounts/1234/products/ONLINE~en~US~000000000000",
  "expirationTime": "2024-10-22T02:43:47.461464Z",
  "eventTime": "2024-03-21T02:43:47.461464Z"
}