Możesz zasubskrybować powiadomienia PRODUCT_STATUS_CHANGE, aby otrzymywać alerty w czasie rzeczywistym, gdy zmieni się stan zatwierdzenia produktu na Twoich kontach Merchant Center. Możesz na przykład wykryć, kiedy produkt zostanie odrzucony, aby rozwiązać potencjalne problemy z jakością danych.
Zanim zaczniesz, upewnij się, że identyfikator URI wywołania zwrotnego jest skonfigurowany zgodnie z wymaganiami opisanymi w omówieniu podinterfejsu API powiadomień.
Subskrybowanie zmian stanu produktu
Aby zasubskrybować zmiany stanu produktu, wyślij żądanie POST do zasobu notificationsubscriptions z parametrem registeredEvent ustawionym na PRODUCT_STATUS_CHANGE.
Subskrybowanie określonego konta docelowego
Poniższe przykładowe żądanie subskrybuje zmiany stanu produktu na konkretnym koncie sprzedawcy:
POST https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"targetAccount": "accounts/{TARGETACCOUNT_ID}",
"callBackUri": "https://example.com/callback"
}
Zastąp te elementy:
- ACCOUNT_ID: identyfikator konta, do którego należy subskrypcja i które otrzymuje powiadomienia.
- TARGETACCOUNT_ID: identyfikator konta, o którym chcesz otrzymywać powiadomienia.
Jeśli Twoje konto Merchant Center jest samodzielnym kontem bez połączonych kont, użyj własnego identyfikatora konta w przypadku obu zmiennych.
Subskrybowanie wszystkich zarządzanych kont
Jeśli zarządzasz wieloma kontami (np. kontem zaawansowanym z subkontami), możesz subskrybować zmiany stanu produktów na wszystkich zarządzanych kontach, ustawiając allManagedAccounts: true:
POST https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"allManagedAccounts": true,
"callBackUri": "https://example.com/callback"
}
Udane wywołania zwracają identyfikator name subskrypcji, w tym unikalny identyfikator subskrypcji:
{
"name":"accounts/{ACCOUNT_ID}/notificationsubscriptions/{SUBSCRIPTION_ID}",
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"allManagedAccounts": true,
"callBackUri": "https://example.com/callback"
}
Dekodowanie ładunków dotyczących zmiany stanu produktu
Gdy nastąpi zmiana stanu produktu, Twój identyfikator URI wywołania zwrotnego otrzyma wiadomość zakodowaną w formacie base64. Po zdekodowaniu ładunek jest zgodny z formatem 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"
}
Pola i reguły ładunku
oldValueinewValue: reprezentują poprzedni i zaktualizowany stan. Możliwe wartości toapproved,pending,disapprovedlub pusty ciąg znaków ('').- Jeśli pominiesz właściwość
oldValue, produkt zostanie utworzony od nowa. - Jeśli pominiesz właściwość
newValue, produkt zostanie usunięty.
- Jeśli pominiesz właściwość
expirationTime: wskazuje, kiedy wygasa oferta produktu. To pole jest pomijane, gdy produkt jest usuwany.reportingContext: platforma reklamowa lub platforma bezpłatnych informacji, na której zmienił się stan. Obsługiwane wartości toSHOPPING_ADS,LOCAL_INVENTORY_ADS,YOUTUBE_SHOPPING,YOUTUBE_CHECKOUT,YOUTUBE_AFFILIATEiFREE_LISTINGS_UCP_CHECKOUTz ReportingContextEnum.eventTime: sygnatura czasowa wygenerowania zdarzenia. Używaj tej sygnatury czasowej, aby zapewnić prawidłową kolejność zdarzeń.
Testowanie powiadomień o zmianie stanu produktu
Użyj tego przykładowego żądania, aby sprawdzić, czy punkt końcowy wywołania zwrotnego prawidłowo odbiera, potwierdza i dekoduje wiadomości o zmianie stanu produktu:
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=="}}'W odpowiedzi na to wywołanie identyfikator URI wywołania zwrotnego powinien zwrócić akceptowalny kod stanu HTTP (np. 200 OK). Zdekodowana wiadomość ma następującą treść:
{
"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"
}