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

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

開始前,請確認回呼 URI 已根據通知子 API 總覽中說明的規定設定。

訂閱產品狀態變更

如要訂閱產品狀態變更,請將 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:狀態變更的廣告或免費產品資訊平台。支援的值包括 SHOPPING_ADS、LOCAL_INVENTORY_ADS、YOUTUBE_SHOPPING、YOUTUBE_CHECKOUT、YOUTUBE_AFFILIATE 和 FREE_LISTINGS_UCP_CHECKOUT (來自 ReportingContextEnum)。
  • 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"
}