Questa guida spiega come utilizzare i webhook per ricevere notifiche asincrone per lo stato delle richieste di esportazione dei segmenti di pubblico. Questa funzionalità è disponibile solo nella versione v1alpha dell'API Data.
Le notifiche webhook sono una funzionalità avanzata dell'API Data di Google Analytics. Per un'introduzione alla funzionalità di esportazione dei segmenti di pubblico, vedi Creare un'esportazione dei segmenti di pubblico.
Senza webhook, dovrai eseguire periodicamente il polling dell'API per determinare quando una richiesta è completata.
Crea un'applicazione webhook di esempio utilizzando Cloud Run
Puoi creare un'applicazione webhook di esempio utilizzando Google Cloud seguendo il tutorial Guida rapida: esegui il deployment di un servizio di esempio in Cloud Run.
Affinché il servizio di esempio possa ascoltare le richieste di notifica webhook POST, sostituisci il file index.js del tutorial di avvio rapido con il seguente codice:
import express from 'express';
const app = express();
app.use(express.json());
app.post('/', (req, res) => {
const channelToken = req.get('X-Goog-Channel-Token');
const bodyJson = JSON.stringify(req.body);
console.log(`channel token: ${channelToken}`);
console.log(`notification body: ${bodyJson}`);
res.sendStatus(200);
});
const port = parseInt(process.env.PORT) || 8080;
app.listen(port, () => {
console.log(`helloworld: listening on port ${port}`);
});
Per ogni notifica webhook in entrata inviata come richiesta POST, questo codice stampa
il corpo JSON della notifica webhook e un valore del token del canale e
restituisce il codice HTTP 200 per indicare l'operazione riuscita.
Una volta completato il tutorial di avvio rapido di Cloud Run ed eseguito il deployment
dell'applicazione webhook utilizzando il comando gcloud run deploy, salva
l'URL in cui è stato eseguito il deployment del servizio.
L'URL del servizio viene visualizzato nella console, ad esempio:
Service URL: https://webhooks-test-abcdef-uc.a.run.app
Questo è l'URI di notifica del server in cui la tua applicazione ascolta le notifiche webhook da Google Analytics.
Crea un elenco del segmento di pubblico e attiva le notifiche webhook
Per richiedere le notifiche webhook, specifica i seguenti valori nell'oggetto webhookNotification:
L'URI di notifica del server contenente l'indirizzo web che riceverà le notifiche webhook.
(Facoltativo) Una stringa arbitraria
channelTokenper proteggere il messaggio dal rischio di spoofing. SpecificachannelTokennell'intestazione HTTPX-Goog-Channel-Tokendella richiesta POST webhook.
Ecco una richiesta di esempio che utilizza i webhook:
Richiesta HTTP
POST https://analyticsdata.googleapis.com/v1alpha/properties/1234567/audienceLists
{
"webhookNotification": {
"uri": "https://webhooks-test-abcdef-uc.a.run.app",
"channelToken": "123456"
},
"audience": "properties/1234567/audiences/12345",
"dimensions": [
{
"dimensionName": "deviceId"
}
]
}
La risposta del metodo audienceLists.create contiene
webhookNotification, che conferma che il webhook specificato ha risposto correttamente
in meno di 5 secondi.
Ecco una risposta di esempio:
Risposta HTTP
{
"response": {
"@type": "type.googleapis.com/google.analytics.data.v1alpha.AudienceList",
"name": "properties/1234567/audienceLists/123",
"audience": "properties/1234567/audiences/12345",
"audienceDisplayName": "Purchasers",
"dimensions": [
{
"dimensionName": "deviceId"
}
],
"state": "ACTIVE",
"beginCreatingTime": "2024-06-10T04:50:09.119726379Z",
"creationQuotaTokensCharged": 51,
"rowCount": 13956,
"percentageCompleted": 100,
"webhookNotification": {
"uri": "https://webhooks-test-abcdef-uc.a.run.app",
"channelToken": "123456"
}
}
}
Se un webhook non risponde o se fornisci un URL del servizio errato, viene restituito un messaggio di errore.
Ecco un esempio di errore che potresti ricevere:
{
"error": {
"code": 400,
"message": "Expected response code of 200 from webhook URI but instead
'404' was received.",
"status": "INVALID_ARGUMENT"
}
}
Elaborare le notifiche webhook
La richiesta POST a un servizio webhook contiene sia una versione JSON della
risorsa dell'operazione a lunga esecuzione
nel corpo sia un campo sentTimestamp. Il timestamp di invio specifica
l'ora Unix epoch in microsecondi in cui è stata inviata la richiesta. Puoi utilizzare questo
timestamp per identificare le notifiche riprodotte.
Durante la creazione di un elenco di segmenti di pubblico, vengono inviate una o due richieste POST al webhook:
- La prima richiesta POST viene inviata immediatamente, mostrando l'elenco del pubblico appena creato nello stato
CREATING. Se la prima richiesta al webhook non va a buon fine, l'operazioneaudienceLists.createrestituisce un errore e i dettagli dell'errore del webhook. - La seconda richiesta POST viene inviata dopo il completamento della creazione dell'elenco del segmento di pubblico. La creazione viene completata quando l'elenco dei segmenti di pubblico raggiunge lo stato
ACTIVEoFAILED.
Ecco un esempio della prima notifica per un elenco di segmenti di pubblico, nello stato
CREATING:
{
"sentTimestamp":"1718261355692983",
"name": "properties/1234567/audienceLists/123",
"audience": "properties/1234567/audiences/12345",
"audienceDisplayName":"Purchasers",
"dimensions":[{"dimensionName":"deviceId"}],
"state":"CREATING",
"beginCreatingTime": "2024-06-10T04:50:09.119726379Z",
"creationQuotaTokensCharged":0,
"rowCount":0,
"percentageCompleted":0,
"webhookNotification":
{
"uri": "https://webhooks-test-abcdef-uc.a.run.app",
"channelToken":"123456"
}
}
Ecco un esempio della seconda notifica per un elenco di segmenti di pubblico, nello stato
ACTIVE:
{
"sentTimestamp":"1718261355692983",
"name": "properties/1234567/audienceLists/123",
"audience": "properties/1234567/audiences/12345",
"audienceDisplayName":"Purchasers",
"dimensions":[{"dimensionName":"deviceId"}],
"state":"ACTIVE",
"beginCreatingTime": "2024-06-10T04:50:09.119726379Z",
"creationQuotaTokensCharged":68,
"rowCount":13956,
"percentageCompleted":100,
"webhookNotification":
{
"uri": "https://webhooks-test-abcdef-uc.a.run.app",
"channelToken":"123456"
}
}
La seconda notifica conferma che l'elenco del segmento di pubblico è stato creato ed è
pronto per essere interrogato utilizzando il metodo audienceLists.query.
Per testare i webhook dopo aver chiamato il metodo audienceLists.create, puoi
controllare i log
della tua applicazione webhook Cloud Run di esempio e visualizzare il corpo JSON di ogni
notifica inviata da Google Analytics.