2015-06-02 12 views
8

Google PubSub ile Gmail Push Bildirimleri kullanıyorum ve herhangi bir değişiklik için izlemek istediğim özel bir etikete sahibim. Saatin Tamam kaydeder (etiketin Kimliği Label_1 olan)Gmail API İzleme tarafından filtrelenmeyen filtre yok

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(); 

}

etiket için bir saat kaydetmek için aşağıdaki kodu kullanabilirsiniz. Sorun şu ki, yalnızca etiket altındakiler için herhangi bir Gmail değişikliği için push bildirimleri alıyorum.

Özel etiketler destekleniyor mu?

+0

Kullanıcı etiketleri de iyi çalışmalıdır. _also_'un Label_1 adlı bir mesajda farklı bir etiket değişikliği yapılmadığından emin misiniz? (ör. bir Label_1 mesajı okunmamış olarak işaretlendi, ancak Label_1 mesajda değiştirilmedi.) –

+0

Örneğin bir e-posta gönderilirken meydana gelmiyor - bu etiketle ilgili değil. Başlangıçta, etiket belirtilmemiş bir kullanıcı için bir saat vardı. Yeni bir izleme komutu (bir etiket filtresiyle) önceki saati geçersiz kılar mı? Ayrıca yeni komuttan önce Stop() 'ı çağırmayı denedim? – PNC

+0

Bir saat() bir öncekinin üzerine yazmalıdır. Dur() 'ı arayabilir ve eski bir şeyin geçtiğinden emin olmak için bir süre bu şekilde bırakabilirsiniz (bu durumda, yeni saatin() eski olanı geçersiz kılmadığı bir hata olur. –

cevap

0

Aynı sorunun farkına vardım, ancak daha sonra, API'nin çalışma şeklinden dolayı olduğunu öğrendim. E-postaları LabelIds üzerinden filtreleyebilirsiniz, ancak yalnızca e-postalar doğrudan seçili özel etikete filtreleniyorsa bildirim alırsınız. API'deki bir kusurdan ziyade tasarımını tahmin ediyorum.

Bunu test etmek için, Gmail'de özel etiketinizi doğrudan bir e-posta grubuna uygulayacak ve bu e-postalar için bildirim almanız gereken bir özel filtre oluşturun.

Düzenleme (11 Haziran 2015): Anında iletme bildirimi size HistoryID ve kullanıcının posta kutusu adını gönderir. Yanıt olarak, son noktanız, değişiklik yapmak için izlemek istediğiniz historyID ve LabelId ile userhistory.list() öğesini çağırmalıdır.

$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); 

Tarihçe geçmiş listesini historyID ve labelID ile filtrelemek için bir PHP kod snippet'idir.

+1

Anladığım kadarıyla, benim sorunum, gerçekleşen her şey için bildirim almamdır. Gmail'de. Bu sadece bir etiket için sadece bildirim için kayıt olmanıza rağmen? Bunun gibi sesler senin için olan şey değil mi? – PNC

+2

@PNC Sorun, watch isteğini oluştururken belirttiğiniz LabelId ne olursa olsun watch() hook'u her olay için yalnızca HistoryID ve posta kutusunu alır. Ve historyID, LabelID genişliğinden ziyade posta kutusu çapında kimliktir. Bu nedenle, etiket içeriğinden herhangi biri değişirse, HistoryID artırılır. Gönderme bildirimine yanıt olarak, uç noktanız historyList.list() öğesini çağırmalıdır. Bu, iletileri izlemek istediğiniz labelID ile filtreleyebileceğiniz yerdir. –

+1

Bu alan için Google ekibinden birinden şu güncellemeyi aldım: "İzlediğiniz gibi etiket kimlikleriyle watch() öğesini kısıtlayabilmeniz gerekir, ancak şu anda çalışmıyor" * kullanıcı * etiketleri için onaylayabilirim Mantık ve hata oldukça karmaşık, üzerinde çalışıyoruz ama ETA " – PNC