You can subscribe to PRODUCT_STATUS_CHANGE notifications to receive real-time alerts whenever product approval statuses change in your Merchant Center accounts. For example, you can detect when a product becomes disapproved so you can fix potential data quality issues.
Прежде чем начать, убедитесь, что ваш 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: The advertising or free listing surface where the status changed. Supported values includeSHOPPING_ADS,LOCAL_INVENTORY_ADS,YOUTUBE_SHOPPING,YOUTUBE_CHECKOUT,YOUTUBE_AFFILIATE, andFREE_LISTINGS_UCP_CHECKOUTfrom the 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"
}