Push Bildirimleri

Genel Bakış

Gmail API, Gmail posta kutularında yapılan değişiklikleri izlemenize olanak tanıyan sunucu push bildirimleri sağlar. Bu özelliği kullanarak uygulamanızın performansını artırabilirsiniz. Değişip değişmediklerini belirlemek için kaynakları yoklamakla ilgili ek ağ ve bilgi işlem maliyetlerini ortadan kaldırmanıza olanak tanır. Bir posta kutusu değiştiğinde Gmail API, arka uç sunucu uygulamanızı bilgilendirir.

İlk Cloud Pub/Sub Kurulumu

Gmail API, push bildirimleri göndermek için Cloud Pub/Sub API'yi kullanır. Bu sayede tek bir abonelik uç noktasında webhook'lar ve anketler dahil olmak üzere çeşitli yöntemlerle bildirim gönderilebilir.

Ön koşullar

Bu kurulumun geri kalanını tamamlamak için Cloud Pub/Sub ön koşullarını karşıladığınızdan emin olun ve ardından bir Cloud Pub/Sub istemcisi oluşturun.

Konu oluşturma

Cloud Pub/Sub istemcinizi kullanarak Gmail API'nin bildirim göndermesi gereken konuyu oluşturun. Konu adı, projeniz kapsamında seçtiğiniz herhangi bir ad olabilir (ör. myproject, Google Developers Console'da projeniz için listelenen proje kimliği olan projects/myproject/topics/* ile eşleşen bir ad).

Konu sayısıyla ilgili Cloud Pub/Sub sınırlamaları nedeniyle, uygulamanız için tüm Gmail API push bildirimleri için tek bir konu kullanmanızı öneririz.

Abonelik oluşturma

Oluşturduğunuz konuya abonelik oluşturmak için Cloud Pub/Sub Abone Kılavuzu'nu inceleyin. Abonelik türünü webhook push (ör. HTTP POST geri çağırma) veya pull (ör. uygulamanız tarafından başlatılan) olarak yapılandırın. Uygulamanız, güncellemelerle ilgili bildirimleri bu şekilde alır.

Konunuzla ilgili yayın hakları verme

Cloud Pub/Sub, Gmail'e konunuzda bildirim yayınlama ayrıcalıkları vermenizi gerektirir.

Bunun için gmail-api-push@system.gserviceaccount.com'a publish ayrıcalıkları vermeniz gerekir. Bunu, kaynak düzeyinde erişim denetimi talimatlarını uygulayarak Cloud Pub/Sub Developer Console izin arayüzünü kullanarak yapabilirsiniz.

Gmail posta kutusu güncellemeleri alma

İlk Cloud Pub/Sub kurulumu tamamlandıktan sonra Gmail hesaplarını, posta kutusu güncellemeleri için bildirim gönderecek şekilde yapılandırın.

İzleme isteği

Gmail hesaplarını Cloud Pub/Sub konunuza bildirim gönderecek şekilde yapılandırmak için Gmail API istemcinizi kullanarak Gmail kullanıcı posta kutusunda watch işlevini çağırmanız yeterlidir. Bu işlem, diğer Gmail API çağrılarına benzer. Bunu yapmak için yukarıda oluşturulan konu adını ve watch isteğinizde filtrelemek için labels gibi diğer seçenekleri sağlayın. Örneğin, gelen kutusunda her değişiklik yapıldığında bildirim almak için:

Protokol

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

Yanıtı izleme

watch isteği başarılı olursa şuna benzer bir yanıt alırsınız:

{
  historyId: 1234567890
  expiration: 1431990098200
}

kullanıcının mevcut posta kutusu historyId ile. Bu tarihten sonraki tüm değişikliklerhistoryId müşterinize bildirilir. Bu historyId tarihinden önce yapılan değişiklikleri işlemeniz gerekiyorsa senkronizasyon kılavuzunu inceleyin.

Ayrıca, başarılı bir watch çağrısı, Cloud Pub/Sub konunuza hemen bir bildirim gönderilmesine neden olur.

watch çağrısından hata alırsanız ayrıntılarda sorunun kaynağı açıklanır. Bu kaynak genellikle Cloud Pub/Sub konusunun ve aboneliğinin kurulumuyla ilgilidir. Kurulumun doğru olduğunu onaylamak ve konu ile abonelik sorunlarında hata ayıklama konusunda yardım almak için Cloud Pub/Sub dokümanlarına bakın.

Posta kutusu izlemeyi yenileme

watch işlevini en az 7 günde bir yeniden çağırmanız gerekir. Aksi takdirde kullanıcıyla ilgili güncelleme almazsınız. watch numaralı telefonu günde bir kez aramanızı öneririz. watch yanıtında, watch geçerlilik süresinin zaman damgasını içeren bir geçerlilik süresi alanı da bulunur.

Bildirim alma

watch ile eşleşen bir posta kutusu güncellemesi olduğunda, uygulamanıza değişikliği açıklayan bir bildirim mesajı gönderilir.

Push aboneliği yapılandırdıysanız sunucunuza gönderilen webhook bildirimi PubsubMessage biçiminde olur:

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"
}

HTTP POST mesajı JSON biçimindedir ve gerçek Gmail bildirim yükü message.data alanındadır. Bu message.data alanı, kullanıcının e-posta adresini ve yeni posta kutusu geçmişi kimliğini içeren bir JSON nesnesine kod çözme işlemi uygulanan base64url kodlu bir dizedir:

{"emailAddress": "user@example.com", "historyId": "9876543210"}

Ardından, senkronizasyon kılavuzuna göre bilinen son historyId değerinden itibaren kullanıcının değişiklik ayrıntılarını almak için history.list değerini kullanabilirsiniz.

Bunun yerine bir alma aboneliği yapılandırdıysanız mesaj alma hakkında daha fazla bilgi için Cloud Pub/Sub Abone Alma Kılavuzu'ndaki kod örneklerine bakın.

Bildirimleri yanıtlama

Tüm bildirimlerin onaylanması gerekir. Push yöntemiyle webhook kullanıyorsanız başarılı bir yanıt (ör. HTTP 200) vererek bildirimi onaylayabilirsiniz.

Çekme yayını (REST çekme, RPC çekme veya RPC StreamingPull) kullanıyorsanız bunu bir onay aramasıyla (REST veya RPC) takip etmeniz gerekir. Resmi RPC tabanlı istemci kitaplıklarını kullanarak mesajları eşzamansız veya eşzamanlı olarak onaylama hakkında daha fazla bilgi için Cloud Pub/Sub Abone Çekme Kılavuzu'ndaki kod örneklerine bakın.

Bildirimler onaylanmazsa (ör. webhook geri çağırma işleviniz hata döndürür veya zaman aşımına uğrarsa) Cloud Pub/Sub bildirimi daha sonra tekrar dener.

Posta kutusu güncellemelerini durdurma

Bir posta kutusuyla ilgili güncelleme almayı durdurmak için stop numaralı telefonu arayın. Tüm yeni bildirimler birkaç dakika içinde durdurulur.

Sınırlamalar

Maksimum bildirim hızı

İzlenen her Gmail kullanıcısı için maksimum bildirim hızı saniyede 1 etkinliktir. Bu hızın üzerindeki kullanıcı bildirimleri atlanır. Bildirimleri işleme alırken başka bir bildirimi tetiklememeye ve böylece bildirim döngüsü başlatmamaya dikkat edin.

Güvenilirlik

Genellikle tüm bildirimler birkaç saniye içinde güvenilir bir şekilde gönderilir. Ancak bazı aşırı durumlarda bildirimler gecikebilir veya gönderilmeyebilir. Push mesajı alınmasa bile uygulamanın senkronize olmaya devam etmesi için bu olasılığı düzgün bir şekilde ele almanız gerekir. Örneğin, bir kullanıcıya bildirim gelmeyen bir sürenin ardından history.list çağrısını düzenli olarak tekrarlayın.

Cloud Pub/Sub Sınırlamaları

Cloud Pub/Sub API'nin de kendi sınırlamaları vardır. Bu sınırlamalar özellikle fiyatlandırma ve kotalar belgelerinde ayrıntılı olarak açıklanmıştır.