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

Вы можете подписаться на уведомления PRODUCT_STATUS_CHANGE, чтобы в реальном времени получать оповещения об изменении статуса рассмотрения товаров в ваших аккаунтах Merchant Center. Например, вы можете узнать, когда товар был отклонен, чтобы устранить возможные проблемы с качеством данных.

Прежде чем начать, убедитесь, что URI обратного вызова настроен в соответствии с требованиями, описанными в обзоре Notifications sub-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"
}