Panoramica
L'API Gmail fornisce notifiche push del server che consentono di controllare le modifiche alle caselle di posta di Gmail. Puoi utilizzare questa funzionalità per migliorare il rendimento della tua applicazione. Consente di eliminare i costi aggiuntivi di rete e di calcolo associati al polling delle risorse per determinare se sono cambiate. Ogni volta che una casella di posta cambia, l'API Gmail invia una notifica all'applicazione server di backend.
Configurazione iniziale di Cloud Pub/Sub
L'API Gmail utilizza l'API Cloud Pub/Sub per inviare notifiche push. Ciò consente la notifica tramite una serie di metodi, tra cui webhook e polling su un singolo endpoint di abbonamento.
Prerequisiti
Per completare il resto della configurazione, assicurati di soddisfare i prerequisiti di Cloud Pub/Sub e poi configura un client Cloud Pub/Sub.
Crea un argomento
Utilizzando il client Cloud Pub/Sub, crea l'argomento
a cui l'API Gmail deve
inviare le notifiche. Il nome dell'argomento può essere qualsiasi nome tu scelga nel tuo progetto (ad es. projects/myproject/topics/*
, dove myproject
è l'ID progetto elencato per il tuo progetto in Google Developers Console).
Creare una sottoscrizione
Segui la guida per gli abbonati a Cloud Pub/Sub per configurare un abbonamento all'argomento che hai creato. Configura il tipo di sottoscrizione in modo che sia un push webhook (ovvero un callback POST HTTP) o un pull (ovvero avviato dalla tua app). In questo modo, la tua applicazione riceverà le notifiche per gli aggiornamenti.
Concedere i diritti di pubblicazione sull'argomento
Cloud Pub/Sub richiede che tu conceda a Gmail i privilegi per pubblicare notifiche nel tuo argomento.
Per farlo, devi concedere i privilegi publish
a
[email protected]
. Puoi farlo
utilizzando l'interfaccia delle autorizzazioni della console per sviluppatori Cloud Pub/Sub
seguendo le istruzioni per il controllo dell'accesso a livello di risorsa.
Ricevere aggiornamenti della casella di posta Gmail
Una volta completata la configurazione iniziale di Cloud Pub/Sub, configura gli account Gmail per inviare notifiche per gli aggiornamenti delle caselle postali.
Richiesta di visione
Per configurare gli account Gmail in modo che inviino notifiche all'argomento Cloud Pub/Sub, utilizza semplicemente il client API Gmail per chiamare watch
nella casella di posta dell'utente Gmail in modo simile a qualsiasi altra chiamata API Gmail.
A questo scopo, fornisci il nome dell'argomento creato sopra e qualsiasi altra opzione
nella tua richiesta watch
, ad esempio labels
per
filtrare. Ad esempio, per ricevere una notifica ogni volta che viene apportata una modifica alla Posta in arrivo:
Protocollo
POST "https://www.googleapis.com/gmail/v1/users/me/watch"
Content-type: application/json
{
topicName: "projects/myproject/topics/mytopic",
labelIds: ["INBOX"],
labelFilterBehavior: "INCLUDE",
}
Python
request = {
'labelIds': ['INBOX'],
'topicName': 'projects/myproject/topics/mytopic',
'labelFilterBehavior': 'INCLUDE'
}
gmail.users().watch(userId='me', body=request).execute()
Risposta dello smartwatch
Se la richiesta watch
ha esito positivo,
riceverai una risposta come:
{
historyId: 1234567890
expiration: 1431990098200
}
con la casella historyId
attuale dell'utente. Tutte le modifiche successive a historyId
verranno comunicate al tuo cliente. Se devi elaborare le modifiche
prima di questa data historyId
, consulta la guida alla sincronizzazione.
Inoltre, una chiamata watch
riuscita dovrebbe causare l'invio immediato di una notifica all'argomento Cloud Pub/Sub.
Se ricevi un errore dalla chiamata watch
, i dettagli dovrebbero spiegare
l'origine del problema, che in genere riguarda la configurazione dell'argomento e della sottoscrizione Cloud Pub/Sub. Consulta la
documentazione di Cloud Pub/Sub per verificare che
la configurazione sia corretta e per ricevere assistenza con il debug dei problemi relativi ad argomenti e abbonamenti.
Rinnovo della spia della cassetta postale
Devi richiamare watch
almeno ogni 7 giorni, altrimenti smetterai di ricevere aggiornamenti per l'utente. Ti consigliamo di
chiamare watch
una volta al giorno. La risposta watch
include anche un campo di scadenza con il timestamp della scadenza di watch
.
Ricezione di notifiche.
Ogni volta che si verifica un aggiornamento della casella di posta che corrisponde al tuo watch
, la tua applicazione
riceverà un messaggio di notifica che descrive la modifica.
Se hai configurato un abbonamento push, una notifica webhook al tuo server sarà conforme a un
PubsubMessage
:
POST https://yourserver.example.com/yourUrl
Content-type: application/json
{
message:
{
// This is the actual notification data, as base64url-encoded JSON.
data: "eyJlbWFpbEFkZHJlc3MiOiAidXNlckBleGFtcGxlLmNvbSIsICJoaXN0b3J5SWQiOiAiMTIzNDU2Nzg5MCJ9",
// This is a Cloud Pub/Sub message id, unrelated to Gmail messages.
"messageId": "2070443601311540",
// This is the publish time of the message.
"publishTime": "2021-02-26T19:13:55.749Z",
}
subscription: "projects/myproject/subscriptions/mysubscription"
}
Il corpo della richiesta HTTP POST è JSON e il payload di notifica di Gmail effettivo si trova nel campo
message.data
. Il campo message.data
è una stringa con codifica base64url
che viene decodificata in un oggetto JSON contenente l'indirizzo email e il nuovo ID cronologia
della casella postale per l'utente:
{"emailAddress": "[email protected]", "historyId": "9876543210"}
Puoi quindi utilizzare history.list
per ottenere i dettagli delle modifiche apportate all'utente dall'ultimo ID cronologia noto, come indicato nella guida alla sincronizzazione.
Ad esempio, per utilizzare history.list
per identificare le modifiche apportate tra la chiamata watch
iniziale
e la ricezione del messaggio di notifica condiviso nell'esempio
precedente, passa 1234567890
come startHistoryId
a history.list
.
Successivamente,9876543210
può essere mantenuto come historyId ultima nota per
i casi d'uso futuri.
Se hai configurato un abbonamento pull, consulta gli esempi di codice nella guida al pull per gli abbonati a Cloud Pub/Sub per ulteriori dettagli sulla ricezione dei messaggi.
Rispondere alle notifiche
Tutte le notifiche devono essere confermate. Se utilizzi la consegna push webhook, la risposta corretta (ad es. HTTP 200) confermerà la notifica.
Se utilizzi la distribuzione pull (REST Pull, RPC Pull o RPC StreamingPull), devi eseguire un follow-up con una chiamata di conferma (REST o RPC). Per maggiori dettagli sul riconoscimento dei messaggi in modo asincrono o sincrono utilizzando le librerie client ufficiali basate su RPC, consulta gli esempi di codice nella guida al pull di Cloud Pub/Sub Subscriber.
Se le notifiche non vengono riconosciute (ad es. il callback webhook restituisce un errore o scade), Cloud Pub/Sub riprova a inviare la notifica in un secondo momento.
Interruzione degli aggiornamenti della casella postale
Per interrompere la ricezione di aggiornamenti su una casella postale, chiama
stop
e tutte le nuove notifiche
dovrebbero interrompersi entro pochi minuti.
Limitazioni
Frequenza massima delle notifiche
Ogni utente Gmail monitorato ha una frequenza di notifica massima di 1 evento/secondo. Le notifiche utente al di sopra di questa frequenza verranno eliminate. Fai attenzione quando gestisci le notifiche per evitare di attivarne un'altra e quindi avviare un ciclo di notifiche.
Affidabilità
In genere, tutte le notifiche vengono inviate in modo affidabile entro pochi secondi;
tuttavia, in alcune situazioni estreme, le notifiche potrebbero subire ritardi o non essere inviate.
Assicurati di gestire questa possibilità in modo appropriato, in modo che l'applicazione
continui a sincronizzarsi anche se non vengono ricevuti messaggi push. Ad esempio, ripristina
le chiamate periodiche
history.list
dopo un
periodo senza notifiche per un utente.
Limitazioni di Cloud Pub/Sub
Anche l'API Cloud Pub/Sub ha le sue limitazioni, descritte in dettaglio nella documentazione relativa a prezzi e quote.