Otrzymywanie powiadomień push o zmianach stanu produktu

Możesz subskrybować PRODUCT_STATUS_CHANGEpowiadomienia, 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 podrzędnego interfejsu 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 konkretnego konta docelowego

Przykładowa prośba o subskrypcję zmian 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 na które są wysyłane powiadomienia.
  • TARGETACCOUNT_ID: identyfikator konta, o którym chcesz otrzymywać powiadomienia.

Jeśli Twoje konto Merchant Center jest kontem samodzielnym, które nie jest połączone z żadnymi innymi kontami, użyj własnego identyfikatora konta w przypadku obu zmiennych.

Subskrybuj wszystkie zarządzane konta

Jeśli zarządzasz wieloma kontami (np. kontem zaawansowanym z kontami podrzędnymi), 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"
}

Wywołania zakończone powodzeniem zwracają identyfikator subskrypcji name, 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 zmian stanu produktu

Gdy nastąpi zmiana stanu produktu, Twój identyfikator URI wywołania zwrotnego otrzyma zakodowaną w formacie base64 wiadomość. 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

  • oldValuenewValue: reprezentują poprzedni i zaktualizowany stan. Możliwe wartości to approved, pending, disapproved lub pusty ciąg znaków ('').
    • Jeśli pominiesz właściwość oldValue, produkt zostanie utworzony na nowo.
    • Jeśli pominiesz właściwość newValue, produkt zostanie usunięty.
  • expirationTime: wskazuje, kiedy wygasa oferta produktu. To pole jest pomijane, gdy produkt zostanie usunięty.
  • reportingContext: platforma reklamowa lub bezpłatna, na której zmienił się stan. Obsługiwane wartości to SHOPPING_ADS, LOCAL_INVENTORY_ADS, YOUTUBE_SHOPPING, YOUTUBE_CHECKOUT, YOUTUBE_AFFILIATE i FREE_LISTINGS_UCP_CHECKOUT z elementu ReportingContextEnum.
  • eventTime: sygnatura czasowa wygenerowania zdarzenia. Użyj tej sygnatury czasowej, aby zapewnić prawidłową kolejność zdarzeń.

Testowanie powiadomień o zmianach stanu produktu

Użyj poniższej przykładowej prośby, 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"
}