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