接收產品狀態異動的推播通知

您可以訂閱 PRODUCT_STATUS_CHANGE 通知,在 Merchant Center 帳戶中的產品核准狀態變更時,即時收到快訊。舉例來說,您可以偵測產品何時遭到拒登,以便修正潛在的資料品質問題。

開始之前,請務必按照「Notifications sub-API 總覽」一文所述規定,設定回呼 URI。

訂閱產品狀態變更

如要訂閱產品狀態變更,請將 POST 要求傳送至 notificationsubscriptions 資源,並將 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:擁有訂閱項目並接收通知的帳戶 ID。
  • TARGETACCOUNT_ID:您要接收通知的帳戶 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,包括專屬訂閱 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"
}