Получайте push-уведомления об изменениях статуса товара.

Вы можете подписаться на уведомления 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 : Идентификатор учетной записи, которой принадлежит подписка и которая получает уведомления.
  • TARGETACCOUNT_ID : Идентификатор учетной записи, о которой вы хотите получать уведомления.

Если ваш аккаунт в Merchant Center является автономным и не связан ни с какими другими аккаунтами, используйте свой собственный идентификатор аккаунта для обеих переменных.

Подпишитесь на все управляемые аккаунты.

Если вы управляете несколькими учетными записями (например, расширенной учетной записью с субучетными записями), вы можете подписаться на уведомления об изменениях статуса продукта для всех управляемых учетных записей, установив параметр 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 вашей подписки, включая уникальный идентификатор подписки:

{
  "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"
}