Puoi iscriverti alle notifiche di PRODUCT_STATUS_CHANGE per ricevere avvisi in tempo reale ogni volta che gli stati di approvazione dei prodotti cambiano nei tuoi account Merchant Center. Ad esempio, puoi rilevare quando un prodotto viene disapprovato in modo da poter risolvere potenziali problemi di qualità dei dati.
Prima di iniziare, assicurati che l'URI di callback sia configurato in base ai requisiti descritti nella panoramica della sub-API Notifications.
Iscriviti alle modifiche allo stato del prodotto
Per iscriverti alle modifiche dello stato del prodotto, invia una richiesta POST alla risorsa notificationsubscriptions con registeredEvent impostato su PRODUCT_STATUS_CHANGE.
Iscriviti per un account target specifico
La seguente richiesta di esempio consente di iscriversi alle modifiche dello stato dei prodotti per un account commerciante specifico:
POST https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"targetAccount": "accounts/{TARGETACCOUNT_ID}",
"callBackUri": "https://example.com/callback"
}
Sostituisci quanto segue:
- ACCOUNT_ID: l'identificatore dell'account proprietario della sottoscrizione che riceve le notifiche.
- TARGETACCOUNT_ID: l'identificatore dell'account per il quale vuoi ricevere le notifiche.
Se il tuo account Merchant Center è un account autonomo senza account collegati, utilizza il tuo ID account per entrambe le variabili.
Iscriviti per tutti gli account gestiti
Se gestisci più account (ad esempio un account avanzato con
subaccount), puoi iscriverti alle modifiche dello stato dei prodotti in tutti gli account
gestiti impostando allManagedAccounts: true:
POST https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"allManagedAccounts": true,
"callBackUri": "https://example.com/callback"
}
Le chiamate riuscite restituiscono un identificatore name per la tua sottoscrizione, incluso un ID sottoscrizione univoco:
{
"name":"accounts/{ACCOUNT_ID}/notificationsubscriptions/{SUBSCRIPTION_ID}",
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"allManagedAccounts": true,
"callBackUri": "https://example.com/callback"
}
Decodifica i payload delle modifiche allo stato dei prodotti
Quando si verifica una modifica dello stato del prodotto, l'URI di callback riceve un messaggio con codifica base64. Una volta decodificato, il payload è conforme al formato 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"
}
Campi e regole del payload
oldValueenewValue: rappresentano lo stato precedente e quello aggiornato. I valori possibili sonoapproved,pending,disapprovedo una stringa vuota ('').- Se
oldValueviene omesso, il prodotto viene creato ex novo. - Se
newValueviene omesso, il prodotto è stato eliminato.
- Se
expirationTime: indica quando scade l'offerta del prodotto. Questo campo viene omesso quando un prodotto viene eliminato.reportingContext: la piattaforma di pubblicità o di schede senza costi in cui lo stato è cambiato. I valori supportati includonoSHOPPING_ADS,LOCAL_INVENTORY_ADS,YOUTUBE_SHOPPING,YOUTUBE_CHECKOUT,YOUTUBE_AFFILIATEeFREE_LISTINGS_UCP_CHECKOUTdi ReportingContextEnum.eventTime: il timestamp della generazione dell'evento. Utilizza questo timestamp per garantire l'ordine corretto degli eventi.
Testa le notifiche di modifica dello stato del prodotto
Utilizza la seguente richiesta di esempio per verificare se l'endpoint di callback riceve, conferma e decodifica correttamente i messaggi di modifica dello stato del prodotto:
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=="}}'In risposta a questa chiamata, l'URI di callback deve restituire un codice di stato HTTP accettabile (ad esempio 200 OK). Il messaggio decodificato ha i seguenti contenuti:
{
"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"
}