Vous pouvez vous abonner aux notifications PRODUCT_STATUS_CHANGE pour recevoir des alertes en temps réel chaque fois que l'état d'approbation d'un produit change dans vos comptes Merchant Center. Par exemple, vous pouvez détecter quand un produit est refusé afin de corriger d'é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 changements d'état d'un produit, envoyez une requête POST à la ressource notificationsubscriptions avec registeredEvent défini sur PRODUCT_STATUS_CHANGE.
S'abonner pour un compte cible spécifique
L'exemple de requête suivant s'abonne 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 comptes associés, 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 changements d'état des produits pour 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 changement d'état des produits
En cas de changement d'état d'un 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 charge utile
oldValueetnewValue: représentent l'état précédent et l'état mis à jour. Les valeurs possibles sontapproved,pending,disapprovedou une chaîne vide ('').- Si
oldValueest omis, le produit est créé. - Si
newValueest omis, le produit a été supprimé.
- Si
expirationTime: indique la date d'expiration de l'offre du 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 incluentSHOPPING_ADS,LOCAL_INVENTORY_ADS,YOUTUBE_SHOPPING,YOUTUBE_CHECKOUT,YOUTUBE_AFFILIATEetFREE_LISTINGS_UCP_CHECKOUTde 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 classés dans le bon ordre.
Tester les notifications de changement d'état des produits
Utilisez l'exemple de requête suivant pour vérifier si votre point de terminaison de rappel reçoit, accuse réception et décode correctement les messages de changement d'état du produit :
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"
}