Push Bildirimleri

Genel Bakış

Gmail API, Gmail posta kutularındaki değişiklikleri izlemenize olanak tanıyan sunucu push bildirimleri sağlar. Bu özelliği, uygulamanızın performansını artırmak için kullanabilirsiniz. Kaynakların değişip değişmediğini belirlemek için kaynakları yoklamayla ilişkili ek ağ ve bilgi işlem maliyetlerini ortadan kaldırmanıza olanak tanır. Bir posta kutusu her değiştiğinde Gmail API, arka uç sunucu uygulamanıza bildirim gönderir.

İ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 yoklama 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 ayarlayın.

Konu oluşturma

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

Abonelik oluşturma

Oluşturduğunuz konuya abonelik ayarlamak için Cloud Pub/Sub Abone Kılavuzu'ndaki adımları uygulayın. Abonelik türünü webhook push (ör. HTTP POST geri araması) veya çekme (ör. uygulamanız tarafından başlatılır) olarak yapılandırın. Uygulamanız, güncellemelerle ilgili bildirimleri bu şekilde alır.

Konunuzda yayınlama hakları verme

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

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

Gmail posta kutusu güncellemelerini alma

İlk Cloud Pub/Sub kurulumu tamamlandıktan sonra Gmail hesaplarını, posta kutusu güncellemeleriyle ilgili 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 diğer Gmail API çağrılarına benzer şekilde çağırın. Bunu yapmak için yukarıda oluşturulan konu adını ve watch isteğinizdeki diğer seçenekleri (ör. labels) 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()

Saat yanıtı

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

{
  historyId: 1234567890
  expiration: 1431990098200
}

kullanıcının mevcut posta kutusu historyId ile. Bundan sonraki tüm değişiklikler historyId istemcinize bildirilir. Bu tarihten historyId önce değişiklikleri işlemeniz gerekiyorsa senkronizasyon kılavuzuna bakın.

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

watch çağrısından hata alırsanız ayrıntılar, sorunun kaynağını (genellikle Cloud Pub/Sub konusu ve aboneliğinin kurulumuyla ilgili) açıklar. Kurulumun doğru olduğundan emin olmak ve konu ile abonelik sorunlarını ayıklama konusunda yardım almak için Cloud Pub/Sub belgelerine bakın.

Posta kutusu izlemeyi yenileme

Kullanıcıyla ilgili güncellemeleri almaya devam etmek için watch işlevini en az 7 günde bir yeniden çağırmanız gerekir. watch işlevinin günde bir kez çağrılmasını öneririz. watch yanıtında, watch sona erme zaman damgasını içeren bir sona erme alanı da bulunur.

Bildirim alma

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

Push aboneliği yapılandırdıysanız sunucunuza gönderilen webhook bildirimi 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"
}

HTTP POST gövdesi JSON biçimindedir ve gerçek Gmail bildirimi 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 çözülen base64url kodlu bir dizedir:

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

Ardından, history.list kullanarak kullanıcının senkronizasyon kılavuzunda belirtildiği gibi bilinen son historyId'sinden bu yana yaptığı değişikliklerin ayrıntılarını alabilirsiniz.

Örneğin, ilk watch çağrınız ile önceki örnekte paylaşılan bildirim mesajının alınması arasında meydana gelen değişiklikleri belirlemek için history.list'ı kullanmak üzere 1234567890 değerini startHistoryId olarak history.list'a iletin. Daha sonra,9876543210 gelecekteki kullanım alanları için bilinen son historyId olarak kalıcı hale getirilebilir.

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

Bildirimlere yanıt verme

Tüm bildirimlerin onaylanması gerekir. Webhook push delivery kullanıyorsanız başarılı bir şekilde yanıt vermek (ör. HTTP 200) bildirimi onaylar.

Çekme iletimi (REST Çekme, RPC Çekme veya RPC Akış Çekme) kullanıyorsanız bir onaylama çağrısı (REST veya RPC) ile devam 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 aramanız 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üncellemeleri almayı durdurmak için stop numaralı telefonu arayın. Tüm yeni bildirimler birkaç dakika içinde durdurulur.

Sınırlamalar

Maksimum bildirim sıklığı

İzlenen her Gmail kullanıcısı için maksimum bildirim oranı 1 etkinlik/sn'dir. Bu oranın üzerindeki kullanıcı bildirimleri bırakılır. Başka bir bildirimi tetiklememek ve böylece bildirim döngüsü başlatmamak için bildirimleri işlerken dikkatli olun.

Güvenilirlik

Genellikle tüm bildirimler birkaç saniye içinde güvenilir bir şekilde teslim edilir. Ancak bazı durumlarda bildirimler gecikebilir veya bırakılabilir. Bu olasılığı düzgün bir şekilde ele aldığınızdan emin olun. Böylece, push mesajı alınmasa bile uygulama senkronize olmaya devam eder. Örneğin, bir kullanıcıya bildirim gönderilmeyen bir sürenin ardından history.list düzenli olarak çağrılabilir.

Cloud Pub/Sub Sınırlamaları

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