Recevoir des notifications push pour les changements d'état des produits

Vous pouvez vous abonner aux notifications PRODUCT_STATUS_CHANGE pour recevoir des alertes en temps réel chaque fois que l'état d'approbation des produits change dans vos comptes Merchant Center. Par exemple, vous pouvez détecter quand un produit est refusé afin de résoudre les éventuels problèmes de qualité des données.

Avant de commencer, assurez-vous que votre URI de rappel est configuré conformément aux exigences décrites dans la présentation de la sous-API Notifications.

S'abonner aux changements d'état des produits

Pour vous abonner aux modifications de l'état des produits, envoyez une requête POST à la ressource notificationsubscriptions avec registeredEvent défini sur PRODUCT_STATUS_CHANGE.

S'abonner à un compte cible spécifique

L'exemple de requête suivant permet de s'abonner aux modifications de l'état des produits pour un compte marchand spécifique :

POST https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions/
{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "targetAccount": "accounts/{TARGETACCOUNT_ID}",
  "callBackUri": "https://example.com/callback"
}

Remplacez les éléments suivants :

  • ACCOUNT_ID : identifiant du compte propriétaire de l'abonnement et qui reçoit les notifications.
  • TARGETACCOUNT_ID : identifiant du compte pour lequel vous souhaitez recevoir des notifications.

Si votre compte Merchant Center est un compte individuel sans compte associé, utilisez votre propre ID de compte pour les deux variables.

S'abonner pour tous les comptes gérés

Si vous gérez plusieurs comptes (par exemple, un compte avancé avec des sous-comptes), vous pouvez vous abonner aux modifications de l'état des produits dans tous les comptes gérés en définissant allManagedAccounts: true :

POST https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions/
{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "allManagedAccounts": true,
  "callBackUri": "https://example.com/callback"
}

Les appels réussis renvoient un identifiant name pour votre abonnement, y compris un ID d'abonnement unique :

{
  "name":"accounts/{ACCOUNT_ID}/notificationsubscriptions/{SUBSCRIPTION_ID}",
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "allManagedAccounts": true,
  "callBackUri": "https://example.com/callback"
}

Décoder les charges utiles de modification de l'état des produits

Lorsqu'un changement d'état d'un produit se produit, votre URI de rappel reçoit un message encodé en base64. Une fois décodée, la charge utile est conforme au format 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"
}

Champs et règles de la charge utile

  • oldValue et newValue : représentent l'état précédent et l'état mis à jour. Les valeurs possibles sont approved, pending, disapproved ou une chaîne vide ('').
    • Si oldValue est omis, le produit est créé.
    • Si newValue est omis, le produit a été supprimé.
  • expirationTime : indique la date d'expiration de l'offre de produit. Ce champ est omis lorsqu'un produit est supprimé.
  • reportingContext : surface publicitaire ou de fiche gratuite où l'état a changé. Les valeurs acceptées incluent SHOPPING_ADS, LOCAL_INVENTORY_ADS, YOUTUBE_SHOPPING, YOUTUBE_CHECKOUT, YOUTUBE_AFFILIATE et FREE_LISTINGS_UCP_CHECKOUT de ReportingContextEnum.
  • eventTime : code temporel de la génération de l'événement. Utilisez ce code temporel pour vous assurer que les événements sont correctement ordonnés.

Tester les notifications de changement d'état des produits

Utilisez l'exemple de requête suivant pour tester si votre point de terminaison de rappel reçoit, reconnaît et décode correctement les messages de modification de l'état des produits :

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=="}}'

En réponse à cet appel, votre URI de rappel doit renvoyer un code d'état HTTP acceptable (tel que 200 OK). Le message décodé présente le contenu suivant :

{
  "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"
}