2015-06-02 14 views
8

Sto utilizzando le notifiche push di Gmail con Google PubSub e ho un'etichetta personalizzata che desidero monitorare per eventuali modifiche. Io uso il seguente codice per registrare un orologio per l'etichetta (Id del marchio è Label_1)API Gmail Guarda non filtrare per etichetta

WatchRequest wr = new WatchRequest(); 
wr.TopicName = "projects/" + primaryLink.ggProjectId + "/topics/iLink" + segmentId; 
if (labels != null && labels.Count > 0) 
{ 
    wr.LabelIds = new List<string>(); 
    wr.LabelIds.Add("Label_1"); 
    wr.LabelFilterAction = "include"; 
} 

WatchResponse wrr = gs.Users.Watch(wr, emailAccount).Execute(); 
return "HistoryId " + wrr.HistoryId.ToString(); 

}

L'orologio registra OK. Il problema è che ricevo notifiche push per qualsiasi modifica a Gmail, non solo quelle sotto l'etichetta.

Sono supportate le etichette personalizzate?

+0

Le etichette degli utenti dovrebbero funzionare bene. Sei sicuro che non sia stata apportata una modifica di etichetta diversa a un messaggio che _also_ aveva Label_1? (ad esempio, un messaggio Label_1 è stato contrassegnato come non letto, ma Label_1 non è stato modificato sul messaggio.) –

+0

Ad esempio, quando si invia un messaggio di posta elettronica, questo non è correlato all'etichetta. Originariamente c'era un orologio per l'utente senza etichette specificate. Un nuovo comando di controllo (con un filtro di etichetta) sostituisce l'orologio precedente? Ho anche provato a chiamare Stop() prima del nuovo comando? – PNC

+0

Un orologio() dovrebbe sovrascrivere quello precedente. Potresti chiamare stop() e lasciarlo in quel modo per un po 'di tempo per assicurarti che il vecchio sia andato via (in tal caso sarebbe un bug che il nuovo orologio() non stia sovrascrivendo quello vecchio). –

risposta

0

Ho notato lo stesso problema ma in seguito l'ho scoperto a causa del modo in cui l'API funziona. È possibile filtrare le e-mail tramite LabelIds ma si riceveranno notifiche solo se le e-mail vengono filtrate direttamente sull'etichetta personalizzata selezionata. Immagino il suo design piuttosto che un difetto nell'API.

Per verificarlo, crea un filtro personalizzato in Gmail che applicherà direttamente l'etichetta personalizzata a un gruppo di e-mail e dovresti ricevere notifiche per tali e-mail.

Modificato (11 giugno 2015): La notifica push invia ID cronologia e nome della cassetta postale dell'utente. In risposta il tuo endpoint dovrebbe chiamare userhistory.list() con HistoryID e LabelId che vuoi monitorare per le modifiche.

$opt_param = array(); 
$opt_param['startHistoryId'] = $historyID; 
$opt_param['labelId'] = $labelID; 
$opt_param['fields'] = 'nextPageToken,historyId,history/messagesAdded'; 

$service->users_history->listUsersHistory($userID, $opt_param); 

è al di sopra un frammento di codice PHP per filtrare l'elenco la storia con historyID e labelID.

+1

Non sono sicuro di aver capito - il mio problema è che ricevo notifiche per tutto ciò che accade in Gmail. Questo nonostante si registri solo per le notifiche relative a una sola etichetta? Sembra che questo non sia ciò che sta accadendo per te? – PNC

+2

@PNC Il problema è che il gancio watch() ottiene solo l'ID cronologia e la casella di posta per ogni evento, indipendentemente dall'etichetta specificata per la creazione della richiesta di controllo. E historyID è ID a livello di casella postale piuttosto che LabelID-wide. Quindi, indipendentemente dall'eventuale modifica del contenuto dell'etichetta, HistoryID verrà incrementato. In risposta alla notifica push, l'endpoint deve chiamare historyList.list(). Qui è dove puoi filtrare i messaggi con labelID che vuoi monitorare. –

+1

Ho ricevuto il seguente aggiornamento da uno dei team di Google per quest'area "Dovresti essere in grado di restringere watch() per id di etichette come stai specificando ma posso confermare che non funziona in questo momento per le etichette * user * La logica e il bug sono piuttosto complicati, ci stiamo lavorando ma nessun ETA " – PNC

Problemi correlati