Mit der Merchant Notifications API können Sie Push-Benachrichtigungen zu Änderungen an Produktdaten erhalten. Wenn Sie beispielsweise Benachrichtigungen zu Änderungen des Produktstatus abonnieren, werden Sie in Echtzeit benachrichtigt, wenn ein Produkt abgelehnt wird. Sie können Benachrichtigungen für alle Ihre Unterkonten oder andere verknüpfte Konten abonnieren.
In dieser Anleitung finden Sie Beispiele für die Verwaltung von Benachrichtigungen zu Änderungen des Produktstatus. Sie können diese Beispiele verwenden, um Benachrichtigungen für andere Ereignisse zu verwalten. Dazu müssen Sie den Wert des Felds registeredEvent in Ihren Anfragen ändern. Eine vollständige
Liste der Ereignistypen finden Sie in der Merchant Notifications API
Referenz.
Abonnieren
Um Benachrichtigungen zu erhalten, benötigen Sie einen callBackUri. Ihr Callback-URI muss die folgenden Anforderungen erfüllen:
- Muss eine öffentlich zugängliche HTTPS-Adresse mit einem gültigen SSL-Zertifikat sein, das von einer Zertifizierungsstelle signiert wurde.
- Muss
POST-Anfragen mit dem HeaderContent-Typeund dem Wertapplication/jsonakzeptieren. - Muss einen der folgenden Antwortcodes zurückgeben, um zu bestätigen, dass die Benachrichtigung empfangen wurde.
102200201202204
Sie können denselben Callback-URI für mehrere Abos verwenden. Wir empfehlen, für jedes erweiterte Konto und jeden Ereignistyp einen eindeutigen Callback-URI zu verwenden, um die Last von Push-Anfragen an einen einzelnen URI zu minimieren.
Hier sehen Sie eine Beispielanfrage zum Abonnieren von Benachrichtigungen zu Änderungen des Produktstatus für ein bestimmtes Händlerkonto.
POST https://merchantapi.googleapis.com/notifications/v1/accounts/ACCOUNT_ID/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"targetAccount": "accounts/TARGETACCOUNT_ID",
"callBackUri": "https://example.com"
}
Ersetzen Sie Folgendes:
- ACCOUNT_ID: Die eindeutige ID des Kontos, das die Benachrichtigungen erhalten soll.
- TARGETACCOUNT_ID: Die eindeutige ID des Kontos , zu dem Sie Benachrichtigungen erhalten möchten.
Wenn Ihr Merchant Center-Konto ein eigenständiges Konto ohne verknüpfte Konten ist und Sie Benachrichtigungen für Ihr eigenes Konto erhalten möchten, ersetzen Sie beide Variablen durch Ihre Konto-ID.
Bei erfolgreichen Aufrufen wird ein
name für Ihr
Abo zurückgegeben, einschließlich einer Abo-ID:
{
"name":"accounts/ACCOUNT_ID/notificationsubscriptions/subscriptionId",
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"targetAccount": "accounts/TARGETACCOUNT_ID",
"callBackUri": "https://example.com"
}
Mit diesem name können Sie einzelne Abos GET und DELETE.
Sie können Benachrichtigungen zu Änderungen des Produktstatus für alle Ihre
verknüpften Konten abonnieren, indem Sie in Ihrer Anfrage "allManagedAccounts": true anstelle von
targetAccount angeben:
POST https://merchantapi.googleapis.com/notifications/v1/accounts/ACCOUNT_ID/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"allManagedAccounts": true,
"callBackUri": "https://example.com"
}
Verwenden Sie PATCH mit einer update_mask, um ein vorhandenes Abo zu aktualisieren. Geben Sie die Felder an, die Sie aktualisieren möchten, und die neuen Werte im JSON-Text:
PATCH https://merchantapi.googleapis.com/notifications/v1/accounts/ACCOUNT_ID/notificationsubscriptions/SUBSCRIPTION_ID?update_mask=callBackUri
{
"callBackUri": "https://my-own-personal-domain.com"
}
Benachrichtigungen decodieren
Nachdem Sie ein Abo erstellt haben, erhalten Sie Benachrichtigungen im folgenden Format an den angegebenen callBackUri:
{"message":{"data":"{base64_encoded_string}"}}
Die Benachrichtigungsdaten sind codiert. Sie können die Daten in ein lesbares Textformat decodieren, um sie in Ihrer Implementierung zu verwenden. Hier sehen Sie einen Beispiel-Spring-Boot-Controller, mit dem Sie die codierten Daten verarbeiten können:
@RestController
public class ExampleController {
@RequestMapping(value = "/push",
method = RequestMethod.POST,
consumes = {"application/json"},
produces = {"text/plain"})
@ResponseStatus(HttpStatus.OK)
public void doStuff(@RequestBody String message) {
//wrapped message
JSONObject jsonObject = new JSONObject(message);
JSONObject jsonMessage = jsonObject.getJSONObject("message");
message = jsonMessage.getString("data");
byte[] decodedBytes = Base64.getDecoder().decode(message);
String decodedMessage = new String(decodedBytes);
// Implement your business logic here
}
}
Hier sehen Sie ein Beispiel für einen decodierten base64_encoded_string:
{
"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"
}
Wenn in der Benachrichtigung kein Feld oldValue vorhanden ist, wurde Ihrem Konto ein neues Produkt hinzugefügt. Wenn kein Feld newValue vorhanden ist, wurde das Produkt aus Ihrem Konto gelöscht.
Das Feld expirationTime ist nicht vorhanden, wenn das Produkt gelöscht wurde.
Das Feld reportingContext unterstützt nur (SHOPPING_ADS, LOCAL_INVENTORY_ADS, YOUTUBE_SHOPPING, YOUTUBE_CHECKOUT, YOUTUBE_AFFILIATE, FREE_LISTINGS_UCP_CHECKOUT) aus dem Enum-Wert ReportingContextEnum.
Bei Ereignissen zu Änderungen des Produktstatus haben die Felder oldValue und newValue einen
der folgenden Werte : (approved, pending, disapproved, ``).
Das Feld eventTime enthält die Erstellungszeit des Ereignisses. Wenn Sie Nachrichten sortieren möchten, sollten Sie sich auf den Wert in diesem Feld verlassen und nicht auf die Reihenfolge, in der die Nachrichten empfangen werden.
Weitere Informationen finden Sie unter ProductStatusChangeMessage im Format für.
Die Implementierung testen
Hier sehen Sie eine Beispielbenachrichtigung, mit der Sie Ihren Callback-URI und die Decodierung testen können:
curl --header "Content-Type: application/json" --header "Accept: text/plain" --request POST --data '{"message":{"data":
"ewogICJhY2NvdW50IjogImFjY291bnRzLzEyMzQiLAogICJtYW5hZ2luZ0FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIsCiAgInJlc291cmNlVHlwZSI6ICJQUk9EVUNUIiwKICAiYXR0cmlidXRlIjogIlNUQVRVUyIsCiAgImNoYW5nZXMiOiBbewogICAgIm9sZFZhbHVlIjogImFwcHJvdmVkIiwKICAgICJyZWdpb25Db2RlIjogIlVTIiwKICAgICJyZXBvcnRpbmdDb250ZXh0IjogIlNIT1BQSU5HX0FEUyIKICB9XSwKICAicmVzb3VyY2VJZCI6ICJPTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAicmVzb3VyY2UiOiAiYWNjb3VudHMvMTIzNC9wcm9kdWN0cy9PTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAiZXhwaXJhdGlvblRpbWUiOiAiMjAyNC0xMC0yMlQwMjo0Mzo0Ny40NjE0NjRaIiwKICAiZXZlbnRUaW1lIjogIjIwMjQtMDMtMjFUMDI6NDM6NDcuNDYxNDY0WiIKfQ=="}}' https://{callBackUri}
Als Antwort auf diesen Aufruf sollte Ihr Callback-URI einen erfolgreichen Antwort code zurückgeben. Die decodierte Nachricht sollte den folgenden Wert haben:
{
"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"
}