Gmail API Anlık Bildirimleri: Pub/Sub, Watch ve Geçmiş (2026) İçin Kapsamlı Kılavuz

Gmail API Kılavuzu

Gmail API Anlık BildirimlerPub/Sub, Watch ve History (2026) için Tam Rehber

Gmail API anlık bildirimlerini uçtan uca ayarlayın: bir Pub/Sub konusu oluşturun, bir izleme uç noktası kaydedin, webhook yüklerini kodlayın, değişiklikleri şunlarla uyumlu hale getirin kullanıcıların.geçmişi.listesi, izleme yenilemesini otomatikleştirin ve birleşik bir webhook alternatifi ile tüm GCP kurulumunu atlayın.

gmail-izle.js
// 1. Unipile aracılığıyla Gmail'i izlemeyi kaydet const Res = bekliyor fetch('https://api8.unipile.com:13815/api/v1' + '/hesaplar/{id}/izle', { method: 'POST', headers: { 'X-API-ANAHTARI': 'SENİN_API_ANAHTARIN', 'Content-Type': 'application/json' }, body: JSON.stringify({ webhook_url: 'https://app.you.com/webhooks/gmail' }) }); // 2. Birleşik webhook yükünü al uygulama.POST('/webhooks/gmail', (istek, yanıt) => { const { olay, hesap_id, eposta } = req.body; // olay: "yeni_e-posta" | geçmişId soyutlandı yeniEpostaUygula(e-posta); });
Gerçek zamanlı Gmail olayları - GCP kurulumu gerekmez
Temel Kavram

Gmail API anlık bildirimleri nedir?

Gmail API'nin anlık bildirimlerini üretime almadan önce, tam olarak ne olduklarını, basit yoklamadan nasıl farklılaştıklarını ve ne tür altyapı gerektirdiklerini anlamak faydalıdır.

Tanım

Gmail API anlık bildirimleri, Google Cloud Pub/Sub kullanarak geliştirici tarafından kontrol edilen bir HTTPS uç noktasına posta kutusu değişiklik olaylarını gönderen gerçek zamanlı bir teslimat mekanizmasıdır. Yeni bir ileti geldiğinde veya mevcut bir ileti değiştirildiğinde, Gmail kodlanmış bir içerik içeren bir bildirim yayınlar. tarihKimliği kendi sahip olduğunuz bir Pub/Sub konusuna, bu da olayı webhook'unuza iletir. Sunucunuz çağırır kullanıcıların.geçmişi.listesi gerçek değişiklikleri almak için.

Olay odaklı, yoklama değil

Gmail API anlık bildirimleri, tekrarlı sorgu ihtiyacını ortadan kaldırır mesajlar.liste zamanlanmış bir şekilde. E-posta kutusu değişikliğinden saniyeler içinde olaylar teslim edilir, bu da gecikme süresini ve API kota kullanımını azaltır.

Google Pub/Sub ile desteklenmektedir

Teslimat kanalı, Gmail'den doğrudan bir HTTP geri çağrısı yerine Google Cloud Pub/Sub'dur. Bu, dayanıklılık katar: uç noktanız geçici olarak kullanılamıyorsa, Pub/Sub abonelik onay son teslim süresine göre teslimatı yeniden deneyebilir.

7 günlük saat geçerliliği

Bir Gmail API izleme uç noktası 7 gün sonra sona erer. Uygulamanız bunu günlük bir cron işiyle proaktif olarak yenilemeli, aksi takdirde olayları sessizce kaçırma riskiyle karşı karşıya kalırsınız. Bu, Yenileme bölümünde ele alınan kritik bir operasyonel ayrıntıdır.

İt (Yayınla/Abone Ol)

Gmail API anlık bildirimleri, değişiklikler gerçekleştikten sonraki 1-10 saniye içinde olayları iletir. Sürekli sorgulama olmaması, Gmail API'si kotası kullanımını düşürür ve uygulamanızın tepki süresini hızlandırır. Herhangi bir gelen kutusu seviyesinde gerçek zamanlı kullanım senaryosu için idealdir: CRM senkronizasyonu, biletleme sistemleri, iş akışı otomasyonu.

Yoklama

Oylama mesajlar.liste Her 60 saniyede bir kurmak daha basit olsa da, yapay gecikme yaratır, boş yanıtlar için kota israf eder ve çok sayıda kimliği doğrulanmış kullanıcı hesabı arasında kötü ölçeklenir. Sadece düşük hacimli prototipler için kabul edilebilirdir.

Mimarlık

Mimari: izleme + Pub/Sub + historyId tek bir akışta

Gmail API anlık bildirimleri, sıralı olarak çalışan dört farklı katmandan oluşur. Her katmanı kod yazmadan önce anlamak, en yaygın uygulama hatalarını önler.

Uçtan uca akış
1
Uygulamanız çağırırkullanıcılar.izle

POST yaparsınız https://gmail.googleapis.com/gmail/v1/users/me/watch Pub/Sub konu adınız ve isteğe bağlı bir etiket filtresiyle. Gmail bir şey döndürür tarihKimliği ve bir son kullanma tarihi Unix zaman damgası. İkisini de saklayın. Bu saat 7 gün içinde sona erecek.

2
Gmail yayınlarPub/Sub konusu

İzlenen posta kutusunda herhangi bir değişiklik olduğunda (yeni mesaj, etiket değişikliği, okunmuş/okunmamış geçişi), Gmail Cloud Pub/Sub konunuza bir JSON bildirimi yayınlar. Yük, kullanıcının e-posta adresini ve yeni bir bilgiyi içeren base64 ile kodlanmış bir nesnedir. tarihKimliği.

3
Pub/Sub sana iletiyorwebhook

Pub/Sub aboneliğiniz mesajı kayıtlı bir HTTPS anlık iletme uç noktasına iletir. Bu, webhook URL'nizdir ve kabul süresi sonu (varsayılan 10-600 saniye) içinde HTTP 200-299 ile yanıt vermesi gerekir. 2xx dışı bir yanıt otomatik yeniden denemeleri tetikler.

4
Webhook'unuz alıyortarihKimliği

Base64 Pub/Sub mesaj verilerini çözerek yeni

tarihKimliği. Buna karşılaştırı sonGeçmişKimliği bu kullanıcı için veritabanınızda saklanır.

5
Arakullanıcıların.geçmişi.listesisulh etmek

Ara kullanıcıların.geçmişi.listesi ile başlangıçTarihId saklanan değere ayarla. Gmail, iki kimlik arasındaki tüm değişiklikleri (yeni mesajlar, etiket eklemeler, silmeler) döndürür. Saklanan değeri güncelle sonGeçmişKimliği yeni değere. Pub/Sub bildirimindeki historyId'yi asla kullanmayın başlangıçTarihId doğrudan.

6
Süresi dolmadan saati yenileyin

Her gün bir cron işi zamanla kullanıcılar.izle yeniden her kimlik doğrulanmış kullanıcı hesabı için. İzleme yenileme değişmezdir: yeni bir çağrı önceki süreyi geçersiz kılar. Döndürülen tarihKimliği yeni temeliniz olur.

tarihKimliği

Her posta kutusu değişikliği için Gmail tarafından atanan, monoton artan bir tam sayı. Artımlı senkronizasyon için imlecinizdir. Her zaman kullanıcının en son historyId'sini veritabanınızda saklayın.

kullanıcılar.izle

Bir posta kutusu için bir anlık bildirim aboneliği kaydeden Gmail API uç noktası. Bir historyId temel çizgisi ve bir Unix milisaniye cinsinden sona erme zaman damgası döndürür. 7 gün içinde yenilenmelidir.

kullanıcıların.geçmişi.listesi

Uzlaştırma uç noktası. Belirtilen başlangıç geçmiş kimliğinden sonra meydana gelen tüm mesaj eklemelerini, silmelerini ve etiket değişikliklerini döndürür. Gerçek mesaj verilerini buradan alırsınız.

Kurulum

Gereksinimler: GCP projesi, Pub/Sub konusu, IAM yetkisi

Gmail API anlık bildirimleri, ilk bildiriminizden önce GCP tarafında üç kaynağa ihtiyaç duyar kullanıcılar.izle Çağrı. Çoğu uygulama hatası, geliştiricilerin en sık atladığı adım olan Pub/Sub konusundaki eksik bir IAM izninden kaynaklanmaktadır.

1
Gmail API etkinleştirilmiş GCP projesi

Google Cloud Console'da bir proje oluşturun veya mevcut bir projeyi seçin. Aşağıdaki konuma gidin API'ler ve Hizmetler > Kitaplık ve etkinleştir Gmail API. Ayrıca şuna da ihtiyacın var Cloud Pub/Sub API aynı projede etkinleştirildi. OAuth 2.0 istemci kimlik bilgilerinizin şunları içerdiğinden emin olun https://www.googleapis.com/auth/gmail.readonly kapsam (veya yazma erişimine ihtiyacınız varsa daha geniş bir kapsam). Çok kullanıcılı uygulamalar için kılavuzumuza bakın Gmail OAuth 2.0 entegrasyonu ve Google OAuth uygulama doğrulaması gereksinimler.

2
Bir Bulut Pub/Sub konusu oluşturun

GCP Konsolu'nda altında Pub/Sub > Konular, tıklayın Konu Oluştur. Adını şöyle verin gmail bildirimleri. Tam konu adı projects/YOUR_PROJECT_ID/topics/gmail-bildirimleri. Bu tam dizeyi şuna ileteceksiniz kullanıcılar.izle içinde konuAdı alan.

3
gmail-api-push@system.gserviceaccount.com hesabına Yayıncı rolü verin

Bu, çoğu geliştiricinin gözden kaçırdığı adımdır. Gmail, Google tarafından yönetilen bir hizmet hesabı kullanır (gmail-api-push@system.gserviceaccount.com) bildirimleri Pub/Sub konunuza yayınlamak için. Bu hesaba ... vermeden (yetki vermeden) Pub/Sub Yayıncı konunuzdaki rolünüz, kullanıcılar.izle başarılı olacak ancak hiçbir bildirim gönderilmeyecek. Konsol'da: Konular > konunuzu seçin > İzinler > Ana;'> Kullanıcı ekle > girin gmail-api-push@system.gserviceaccount.com rol ata Pub/Sub Yayıncı.

4
Webhook'unuza işaret eden bir Push aboneliği oluşturun

Pub/Sub konusunun altında, bir tane oluştur Bildirim aboneliği. Yayın uç noktasını HTTPS webhook URL'nize ayarlayın (geçerli bir TLS sertifikası kullanmalı, kendi kendine imzalanan sertifikalar reddedilir). Uç noktanızın isteklerin Google'dan geldiğini doğrulayabilmesi için isteğe bağlı olarak bir jeton doğrulama başlığı yapılandırın. Abonelik adını not edin, bu adı Tespit İzleme'de teslimat metriklerini izlemeniz gerekebilir.

Doğrulanmamış uygulamalar için 100 kullanıcı sınırı: OAuth onay ekranınız "Test" durumundaysa, yalnızca 100 Gmail hesabı uygulamanıza yetki verebilir. Bu sınır şunlar için geçerlidir tüm OAuth kapsamları, izleme uç noktası dahil. 100'den fazla kullanıcısı olan üretim dağıtımları için Google'ın doğrulama sürecini tamamlamanız gerekir. Tam kılavuzumuz için bkz. 100 kullanıcı sınırı ve doğrulama yolu.

GCP kurulumunu tamamen atla

Pub/Sub konusu yok. IAM izni yok. 7 günlük izleme yenileme cron'u yok. Tek bir webhook URL'si ile Gmail anlık bildirimleri oluşturun.

Başla
Adım Adım

Adım adım: konu oluştur, abonelik oluştur ve kullanıcılar.izle

GCP ön koşulları yerine getirildikten sonra, Node.js ve Python'da Google API istemci kütüphanesini kullanarak bir Gmail API izleme uç noktası kaydetmek için eksiksiz kod aşağıdadır.

Node.js
Python
watch.js
const { google } require('googleapis'); // OAuth2 istemcisinin geçerli bir erişim belirteciyle zaten yetkilendirildiği varsayılır // Bakınız: https://www.unipile.com/gmail-oauth-20-integration-complete-guide/ async function Gmail'e kaydol(yetkilendirme, userId = 'ben') { const gmail = google.gmail({ sürüm: 'v1', auth }); const response = bekliyor gmail.kullanıcıları.saat({ kullanıcıId, requestBody: { // Tam Yayınlama/Abonelik konu adınız konuAdı: 'projects/YOUR_PROJECT_ID/topics/gmail-bildirimleri', // İsteğe bağlı: yalnızca belirli etiketlere göre filtrele labelIds: ['GELEN KUTUSU'], etiketFiltreDavranışı: 'İÇER' } }); const { historyId, expiration } = response.data; // Kullanıcı başına veritabanınızda saklayın bekliyor Veritabanı.ekleme/güncelleme({ kullanıcıId, sonGeçmişId: geçmişId, // son kullanma tarihi Unix ms zaman damgasıdır saatBitiş yeni Tarih(parseInt(son kullanma tarihi)) }); konsol.log(`İzleme kaydı oluşturuldu. historyId: ${historyId}, geçerlilik süresi: ${expiration}`); return yanıt.veri; }
izle.py
itibaren googleapiclient.discovery İthalat inşa etmek itibaren google.oauth2.kimlik bilgileri İthalat Kimlik Bilgileri fonksiyon gmail_izleme_kaydıkimlik bilgileri: Kimlik Bilgileri, kullanıcı_id: dizi = 'ben') -> dict: "Kimliği doğrulanmış bir kullanıcı için Gmail API anlık bildirim izlemesini kaydedin." hizmet = inşa etmek('gmail', 'v1', kimlik bilgileri=kimlik_bilgileri) gövde = { 'KonuAdı': 'projects/YOUR_PROJECT_ID/topics/gmail-bildirimleri', 'etiketKimlikleri': ['GELEN KUTUSU'], 'etiketFiltreDavranışı': 'İÇER' } sonuç = servis.kullanıcılar().saat(kullanıcıId=user_id, gövde=body).yürüt() # Veritabanınızda kullanıcı başına depolayın db_ekle_veya_güncelle(user_id=user_id, son_geçmiş_kimliği=sonuç['tarihKimliği'], izlenme_süresi_doldu=int(sonuç['son kullanma tarihi']) // 1000) return sonuç
Uygulama

Gmail API anlık bildirim webhook yükünü işleme

Gmail bir anlık bildirim gönderdiğinde, HTTPS uç noktanız bir Pub/Sub anlık iletisi alır. Gerçek Gmail değişiklik verileri çift kodlanmıştır: Pub/Sub zarfı, kendi içinde kullanıcı e-postasını ve historyId'yi içeren base64 ile kodlanmış bir JSON dizesi içerir.

webhook.js (Express)
Node.js - Express işleyicisi
uygulama.POST('/webhooks/gmail', async (req, res) => { // Publication/Subscribe, 2xx olmayan yanıtlarda yeniden dener: Hemen onayla res.durum(200).son(); denemek { const mesaj = req.body.mesaj; eğer (!message?.data) döndür; // Base64 ile kodlanmış Pub/Sub veri alanını kod çöz const çözüldü = Tampon.itibaren(mesaj.veri, 'base64').toString('utf-8'); const yük JSON.ayrıştırmak(çözülmüş); // yük = { epostaAdresi: "user@gmail.com", geçmişKimliği: "12345" } const { emailAdresi, geçmişId } = yük; // Kuyruk uzlaştırması (onayı engellemeyin) bekliyor kuyruk.sıraya ekle({ emailAdresi, geçmişId }); } catch (hata) { // Kaydettik ama yeniden fırlatmıyoruz: ack zaten gönderildi konsol.hata('Webhook ayrıştırma hatası', hata); } });
webhook.py (Flask)
Python - Flask işleyicisi
İthalat base64, json itibaren şişe İthalat Flask, request, jsonify uygulama = Flask(__adı__) @uygulama.rota('/webhooks/gmail', yöntemler=['POST']) fonksiyon gmail_cobook(): # Hemen onaylayın veri = istek.get_json(sessiz=True) veya {} mesaj = veri.olsun('mesaj', {}) eğer 'veri' içinde Mesaj: #: Base64 kodunu çöz ve JSON'u ayrıştır ham = taban64.b64decode(mesaj['veri'] + '==') yük json.yükler(ham) # { "emailAddress": "user@gmail.com", "historyId": "12345" } email = yük.olsun('e-posta adresi') history_id = payload.olsun('tarihKimliği') # Asenkron mutabakatı kuyruğa ekle uzlaşmayı sıraya koy(e-posta, geçmiş_kimliği) return json'a dönüştür({}), 200
Mutabakat

Kullanıcıların geçmişiyle değişiklikleri uzlaştırma.liste

Pub/Sub bildirimi size yalnızca şunu söyler bir şey değişti. Ne olduğunu söylemiyor. Aramalısın kullanıcıların.geçmişi.listesi kaydedilmiş seninle sonGeçmişKimliği gerçek farkı almak için imleç olarak.

reconcile.js
async function Geçmişi Uzlaştır(yetki, epostaAdresi, yeniGeçmişId) { const gmail = google.gmail({ sürüm: 'v1', auth }); // Bu kullanıcı için saklanan sonHistoryId'mizi al const Kullanıcı = bekliyor Veritabanı.E-postaylaBul(e-postaAdresi); const baslangicGecmisId = kullanici.sonGecmisId; denemek { const response = bekliyor gmail.users.history.list({ userId: 'ben', // İmleci depolanan kimlik olarak kullanın: yeni bildirim geçmiş kimliği değil başlangıçTarihId, // Sadece mesaj eklemelerini filtrele (isteğe bağlı) geçmişTipleri: ['mesajEklendi'] }); const geçmişler = response.data.history || []; için (const (tarih kayıtları) { için (const added of (record.messagesAdded || [])) { // eklenen.mesaj = { id, threadId, labelIds } bekliyor YeniMesajıİşle(auth, eklenen.mesaj.id); } } // Güncellemeyi bildirimdeki yeni historyId'ye taşıma bekliyor Veritabanı.SonGeçmişKimliğiniGüncelle(emailAdresi, yeniGeçmişId); } catch (hata) { eğer (err.code === 404) { // historyId çok eski (> 7 gün). messages.list'ten yeniden başlat bekliyor mesajlardan yeniden başlat(yetki, epostaAdresi); } başka { at hata; } } }
Her zaman bildirilen geçmiş yerine saklanan imleci kullanın

Pub/Sub bildirimindeki historyId şudur şimdiki devlet. Senin başlangıçTarihId olmalı önceki kaydettiğiniz değer. notification historyId'sini doğrudan startHistoryId olarak kullanmak, daha önce işlediğiniz nokta ile şimdi arasındaki tüm değişiklikleri kaçırmanıza neden olacaktır.

Yinelenen bildirimleri değişmez bir şekilde işle

Pub/Sub aynı bildirimi birden fazla kez gönderebilir. Uzlaştırma mantığınızın tekrarlanamaz olmaması gerekir: aynı mesaj kimliğini iki kez işlemek hiçbir şey yapmamak anlamına gelmelidir. Veritabanınızda mesaj kimlikleri üzerinde benzersiz bir kısıtlama kullanın veya eklemeden önce varlığını kontrol edin.

404 tarihId cok eski

7 günden eski bir başlangıç geçmişi kimliği geçirirseniz API 404 hatası döndürür. Bu durumda şuna geri dön: mesajlar.liste sıfırdan yeniden senkronize etmek için, ardından şunu çağırın kullanıcılar.izle yeni bir historyId tabanı elde etmek için tekrar.

Tarih.liste sonuçlarını sayfalara ayır

Son historyId'niz ile şu an arasında çok sayıda değişiklik olduysa, history.list yanıtı sayfalara ayrılmış olabilir. Her zaman şu şekilde devam edin sonrakiSayfaBelirteci depolanan imlecinizi güncellemeden önce tükenene kadar.

Operasyonlar

İzleme yenileme stratejisi: 7 günlük geçerlilik sorunu

Gmail API'sinin izlemesi 7 gün sonra sessizce sona erer. Otomatik yenileme veya uyarı bildirimi yoktur. Cron işiniz başarısız olursa, yeni e-postalar gelir ancak uygulamanız hiçbir şey alamaz - her iki tarafta da hata olmaz. Bu, yenilemeyi Gmail anlık bildirimleri uygulamasının operasyonel olarak en kritik parçası haline getirir.

Her 7 günde bir değil, her gün yenileyin. Yenileme cron'unuzu her 24 saatte bir çalıştırın (her 6 veya 7 günde bir değil). İzleme yenilemesi idempotenttir - çağrılması kullanıcılar.izle Tekrar etmek, 7 günlük zamanlayıcıyı sıfırlar. Günlük bir düzen, geçici hatalara karşı size 6 günlük bir güvenlik payı sağlar.

yenile-saatler.js
// Daily cron: 0 3 * * * (runs at 3am daily) async function renewAllWatches() { // Get all authenticated users from your database const users = await db.getAllActiveUsers(); for (const user of users) { try { // Refresh the access token if needed const auth = await getAuthClient(user.id); const gmail = google.gmail({ version: 'v1', auth }); const res = await gmail.users.watch({ userId: 'me', requestBody: { topicName: 'projects/YOUR_PROJECT_ID/topics/gmail-notifications', labelIds: ['INBOX'] } }); // Update historyId baseline : new watch returns a fresh historyId await db.update(user.id, { lastHistoryId: res.data.historyId, watchExpiry: new Date(parseInt(res.data.expiration)) }); } catch (err) { if (err.code === 401) { // Refresh token revoked : user needs to re-authorize await db.markUserDisconnected(user.id); } else if (err.code === 404) { // Watch expired : call watch again (already doing this, so 404 = retry next run) console.warn(`Watch already expired for ${user.email}, will retry`); } else { // Log and continue : don't abort the entire cron for one user console.error(`Watch renewal failed for ${user.email}`, err); } } } }
Tek bir webhook ile gerçek zamanlı Gmail senkronizasyonu oluşturun

Unipile, kimliği doğrulanmış her kullanıcı adına saat yenilemeyi otomatik olarak halleder. Cron işine gerek yok.

Unipile ile oluşturun
Sorun giderme

Gmail API anlık bildirimlerinde sorun giderme

Bunlar, Gmail anlık bildirim hatalarının neredeyse tamamına yol açan dört hata sınıfıdır. Aradığınızı bildiğinizde çoğunun tek bir temel nedeni vardır.

Hata / Belirti Temel Neden Düzelt Şiddet
403 kullanıcıların izlemesinde Gmail hizmet hesabı gmail-api-push@system.gserviceaccount.com Konu üzerinde Pub/Sub Yayıncı rolü verilmedi. GCP Console'da: Pub/Sub > Konular > konuşmanız > İzinler. Pub/Sub Yayıncısı rolüyle hizmet hesabını ekleyin. Engelleyici
Saat başarılı ama bildirim alınmıyor Pub/Sub aboneliği gönderme uç noktası URL'si kayıtlı değil, Google tarafından reddedildi (geçersiz TLS) veya gönderme aboneliği türü "Çek" yerine "Gönder" olarak ayarlanmış. Aboneliğinizin "Push" türünde olduğunu ve webhook URL'nizin uç nokta olarak ayarlandığını doğrulayın. TLS sertifikasının geçerli olduğundan (kendinden imzalı olmadığından) emin olun. Test uç noktasının 200 döndürdüğünü kontrol edin. Engelleyici
404 tarih.listede - historyId çok eski Kaydedildi sonGeçmişKimliği 7 günden eski. Gmail sadece 7 günlük geçmişi saklar. Geri çekil mesajlar.liste yeniden senkronize etmek için. Ardından çağırın kullanıcılar.izle yeni bir historyId temel çizgisi için. Geri yüklenebilir
Push uç noktası doğrulama belirteci reddedildi Google bir X-Goog-Channel-Token üst bilgisi gönderir. Uç noktanız bunu doğrularsa ve belirteç eşleşmezse, 2xx olmayan bir yanıt döndürür ve Pub/Sub süresiz olarak yeniden dener. İlk kurulum sırasında jeton doğrulamasını devre dışı bırakın ya da hem GCP abonelik ayarlarında hem de uygulama yapılandırmanızda aynı jeton değerini ayarlayın. Geri yüklenebilir
403 kullanıcıların izlemesinde
Eksik IAM: gmail-api-push@system.gserviceaccount.com Yayıncı Pub/Sub verilmedi.
Hizmet hesabını GCP Konsolu > Pub/Sub > Konular > İzinler bölümüne Yayıncı olarak ekleyin.
Saat başarılı oldu ancak bildirim yok
Abonelik Çekme türünde, veya push uç nokta URL'si geçersiz/TLS reddedildi.
Aboneliği Push türüne ayarlayın. Geçerli TLS ile HTTPS uç noktasını sağlayın. 200 yanıtını doğrulayın.
404 historyId çok eski
Saklanan imleç 7 günden eskidir.
messages.list üzerinden yeniden senkronize edin, ardından yeni historyId için izlemeyi yeniden kaydedin.
Doğrulama belirteci reddedildi
Pub/Sub abonelik yapılandırması ile uygulama yapılandırması arasında belirteç uyuşmazlığı.
GCP abonelik ayarlarında ve uygulama kodundaki jeton değerlerini eşleştirin.
Limitler

Gmail API anlık bildirimleri için kotalar ve hız sınırları

Gmail API anlık bildirimlerinin, standart Gmail API kota gruplarından farklı olarak özel kota kısıtlamaları vardır. Ana kısıtlama, kullanıcı başına olay işlem hızıdır.

1 olay/sn

Kimliği doğrulanmış kullanıcı başına maksimum Pub/Sub bildirim oranı. Ani yükselmeler geçici olarak bunu aşabilir ancak zamanla dengelenir. Bir posta kutusu sürekli olarak saniyede 1'den fazla değişiklik alırsa, bildirimler atlanmaz, gruplandırılır veya ertelenir.

7 gün

Maksimum izleme süresi dolumu. Tüm izlemeler bu son tarihten önce yenilenmelidir. Gmail şunları saklar tarih.liste 7 günlük pencere için aynı verilere - 7 günden eski bir historyId 404 döndürür.

1 Milyon birim/gün

Proje başına varsayılan Gmail API günlük kota. Her kullanıcıların.geçmişi.listesi aramalar 5 birim tutar. kullanıcılar.izle her çağrı için 100 birimdir. Mutabakat hacminizi buna göre planlayın.

Yöntem başına kota, kullanıcı başına sınır ve kota artış talebi prosedürlerinin daha ayrıntılı bir dökümü için, özel bölümümüzü inceleyin. Gmail API hız sınırlamaları ve kotalar kılavuzu.

Karşılaştırma

Takaslar: Pub/Sub, IMAP IDLE, yoklama ve birleşik webhook karşılaştırması

Doğru Gmail anında bildirim stratejisini seçmek, altyapı kısıtlamalarınıza, sağlayıcı kapsamı ihtiyaçlarınıza ve operasyonel toleransınıza bağlıdır. İşte dört yaklaşımın doğrudan bir karşılaştırması.

Yaklaşım Gecikme Kurulum karmaşıklığı Çoklu sağlayıcı Ops yükü
Gmail Pub/Sub izleme 1-10s Yüksek - GCP, IAM, cron Yalnız Gmail 7 günlük yenileme cron
IMAP BOŞTA 1-30s Orta - kalıcı TCP Gmail + IMAP sunucuları Bağlantı tutma yönetimi
Oylama 30-300 s gecikme Düşük Herhangi bir sağlayıcı Yüksek kota yakımı
Birleşik webhook (Unipile) 1-10s Düşük - 1 webhook URL'si Gmail + Outlook + IMAP Yok - yönetildi
Gmail Pub/Sub izleme
Gecikme1-10s
KurulumYüksek (GCP + IAM + cron)
SağlayıcılarYalnız Gmail
IMAP BOŞTA
Gecikme1-30s
KurulumOrtam (kalıcı TCP)
SağlayıcılarGmail + IMAP
Oylama
Gecikme30-300 s gecikme
KurulumDüşük
SağlayıcılarHerhangi bir
Birleşik webhook (Unipile)
Gecikme1-10s
KurulumDüşük (1 webhook)
SağlayıcılarGmail + Outlook + IMAP
Birleşik Alternatif

Tek Bir Uç Noktada Gmail + Outlook + IMAP ile Birleşik Webhook Alternatifi

Gmail API anlık bildirimleri ve Outlook ile IMAP posta kutularından gelen gerçek zamanlı olaylar için, birleşik bir yük biçimiyle ve GCP altyapısı olmadan ihtiyacınız varsa, Unipile'ın sunduğu çözümler... Gmail API Tüm Pub/Sub katmanını özetler. Bağımsız bir teknik aracı olarak Unipile, kimliği doğrulanmış her kullanıcı adına, uygulamanızın zaten kontrol ettiği tek bir webhook URL'si aracılığıyla e-posta olaylarını iletmek üzere hareket eder.

Hiçbir GCP kurulumu yok

Hiçbir Pub/Sub konusu oluşturulmayacak, IAM rolü yapılandırılmayacak, GCP projesi bakımı yapılmayacak. İzleme kaydı ve yenileme sizin değil, Unipile'ın altyapısı içinde gerçekleşir.

İzleme yenilemesi yönetilir

7 günlük izleme süresi, her bir bağlı hesap adına halledilir. Asla bir yenileme cron işine ihtiyacınız olmaz. Bir yenileme belirteci iptal edilirse, Unipile olayları sessizce düşürmek yerine bir hesap durumu webhook'u sunar.

gecmişId uzlaşması soyutlanmış

Ayrıştırılmış, normalleştirilmiş bir e-posta nesnesi alırsınız - raw historyId değil. Çağırmaya gerek yok kullanıcıların.geçmişi.listesi veya kullanıcı başına imleçleri yönetmek. Unipile, farkı çözer ve yapılandırılmış mesaj verileri sunar.

Tek bir veri aktarımında Gmail + Outlook + IMAP

Aynı webhook uç noktası ve aynı olay şeması Gmail, Outlook (Microsoft 365 / Exchange Online dahil) ve IMAP'ı kapsar. Sağlayıcı başına entegrasyon mantığı yok, Microsoft Graph abonelikleri ile Gmail yayınla-abone ol bildirimleri için ayrı webhook'lar yok.

birleşik-webhook.js
// 1. Kullanıcının Gmail hesabını bağla (Kimliği doğrulanmış kullanıcı adına OAuth) // Bkz: https://developer.unipile.com/docs/getting-started 2. Webhook'unuzu bir kez yapılandırın const ayarlar = bekliyor fetch('https://api8.unipile.com:13815/api/v1/webhooks', { method: 'POST', headers: { 'X-API-ANAHTARI': 'SENİN_API_ANAHTARIN', 'Content-Type': 'application/json' }, body: JSON.stringify({ url 'https://app.you.com/webhooks/email', etkinlikler: ['e-posta.yeni'] }) }); // 3. Birleşik ana yükü işleme: Gmail, Outlook, IMAP için aynı şekil uygulama.POST('/webhooks/email', (req, res) => { const { olay, hesap_kimliği, e_posta } = req.body; // olay: "email.new" // email.provider: "gmail" | "outlook" | "imap" // e-posta.konu, .kimden, .kime, .govde_html... // historyId yok. base64 yok. yönetilecek imleç yok. GelenE-postaİşle(e-posta); res.durum(200).son(); });
Gmail, Outlook ve IMAP bağlantılı hesaplar için çalışır
Veri İşleme Notu

Unipile paralel bir e-posta arşivi oluşturmaz veya mesaj içeriğini bağımsız olarak saklamaz. Erişimi, her kimliği doğrulanmış kullanıcının oturumuna göre kısıtlanmıştır. Unipile, her bağlı hesap adına e-posta verilerini alır ve bunları gerçek zamanlı olarak webhook uç noktanıza iletir. Webhook yükünü iletmek için gerekenden başka veri saklanmaz.

Unipile Nasıl Çalışır

Unipile bağımsız bir teknik aracıdır. OAuth aracılığıyla uygulamanızın yetkilendirdiği her doğrulanmış kullanıcı adına hareket eder. Unipile, Google ile bağlantılı değildir, tarafından onaylanmamıştır veya sponsor edilmemiştir. Her kullanıcının kendi OAuth yetkilendirmesi altında, bu kılavuzda açıklanan aynı Gmail API uç noktalarını kullanır. Kimlik bilgileri hesaplar arasında asla paylaşılmaz. Tüm işlemler, Unipile'ın altyapısına devredilen müşteri tarafı bir karardır.

Platform Sınırları ve Sorumlu Kullanım

Unipile, Gmail API hız sınırlarını ve kota kısıtlamalarını kendi kota yönetim katmanı aracılığıyla uygulamanıza aktarır. Etkinlik hacmi, yoklama sıklığı ve mesaj işleme ile ilgili kararlar müşteri tarafında alınan kararlar olarak kalır. Unipile, Gmail API kota hatalarını yapılandırılmış webhook etkinlikleri olarak yüzeye çıkarır, böylece uygulamanız uygun şekilde yanıt verebilir.

Birleşik webhook'larla oluşturmaya başlayın

Dakikalar içinde ilk Gmail hesabınızı bağlayın. GCP projesi gerekmez. Pub/Sub faturalandırması gerekmez. Yenileme süresini takip eden cron gerekmez. Bizimkini görün Gmail API entegrasyon kılavuzu ve E-posta API Sağlayıcısı Genel Bakış desteklenen tüm sağlayıcıları keşfetmek için.

Unipile ile oluşturun

Gmail API Anlık Bildirimleri - SSS

Gmail API anlık bildirimleri, Pub/Sub kurulumu, historyId, izleme yenileme ve gerçek zamanlı e-posta senkronizasyon alternatifleri hakkında en sık sorulan soruların yanıtları.

Gmail API anlık bildirimleri kullanır Google Cloud Pub/Sub Gerçek zamanlı posta kutusu değişikliği olaylarını HTTPS webhook'unuza iletmek için, bir izleme uç noktası kaydedersiniz kullanıcılar.izle, Sahip olduğunuz bir Pub/Sub konusuna bir Gmail posta kutusu bağlayan yeni bir mesaj, etiket değişikliği gibi bir değişiklik meydana geldiğinde Gmail o konuya bir bildirim yayınlar, bu da onu push webhook'unuza iletir. Ardından webhook'unuz şu şekilde çağrılır kullanıcıların.geçmişi.listesi depolanmış bir şekilde tarihKimliği gerçek mesaj farkını almak için imleç. Pub/Sub bildirimi yalnızca kullanıcı e-postasını ve yeni bir historyId'yi içerir; ileti içeriğini içermez.

kullanıcılar.izle Gmail kutusu için bir anlık bildirim aboneliği kaydeder ve bir historyId temel çizgisi döndürür. Gmail'i Pub/Sub konunuza bağlayan giriş noktasıdır. kullanıcıların.geçmişi.listesi historyId imlecinizden bu yana oluşan değişiklikleri (mesaj ekleme, silme, etiket değişiklikleri) almak için Gmail anlık bildirimini aldıktan sonra çağırdığınız uzlaştırma uç noktasıdır. Watch, Gmail'e uyarıları nereye göndereceğini bildirir. History ise neyin gerçekten değiştiğini size anlatır.

Gmail API izleme uç noktaları süresi dolar 7 gün. en iyi uygulama çalıştırmaktır. günlük cron işi her 6 veya 7 günde bir yerine, geçici arızalara karşı çok günlük bir tamponunuz olur. İzleme yenileme idempotenttir: yeni bir kullanıcılar.izle çağrısı zamanlayıcıyı sıfırlar ve yeni bir historyId tabanı döndürür. Süresi dolma sessizce gerçekleşir - uyarı bildirimi yoktur, bu nedenle başarısız bir cron, her iki tarafta da hata olmadan olayların kaçırılması anlamına gelir.

En yaygın nedeni bir eksik IAM izni. Gmail hizmet hesabını kullanır gmail-api-push@system.gserviceaccount.com yayınlamak için. Olmadan Pub/Sub Yayıncı Bu hesap için konunuzdaki rolünüz, kullanıcılar.izle başarılı oluyor ancak bildirimler hiçbir zaman teslim edilmiyor. Diğer nedenler: abonelik türü "Push" yerine "Pull", webhook uç noktanızda geçersiz TLS sertifikası veya uç noktanız 2xx olmayan yanıtlar döndürdüğü için Pub/Sub'ın teslimatı durdurması.

Bu tarihKimliği monotonically artan bir tamsayıdır ve Gmail her posta kutusu değişikliği olayı için bunu atar. Artımlı bir senkronizasyon imleci görevi görür. Kayıt olduğunuzda kullanıcılar.izle, Gmail mevcut durumu temsil eden bir historyId temelini döndürür. Sonraki Gmail anlık bildirimleri yeni bir historyId içerir. Sakladığınız (önceki) historyId'yi şuna geçirirsiniz: başlangıçTarihId için kullanıcıların.geçmişi.listesi iki nokta arasındaki tüm değişiklikleri almak için. Veritabanınızda kimliği doğrulanmış her kullanıcı için en son historyId'yi saklamalısınız. 7 günden eski historyId'ler 404 hatası döndürür.

Doğrudan Gmail API aracılığıyla değil - Gmail anlık bildirimleri için Pub/Sub gerekli teslimat kanalıdır. Ancak, bunun yerine birleşik bir e-posta API'si kullanarak GCP altyapısını tamamen atlayabilirsiniz Unipile, kimliği doğrulanmış her kullanıcı adına bağımsız bir teknik aracı görevi görerek Pub/Sub katmanını soyutlar ve Gmail anlık bildirimlerini normalleştirilmiş bir yük ile webhook'unuza teslim eder. GCP projesi, IAM izni veya izleme yenileme cron'u gerektirmez.

Koş günlük cron işi buna çağırır kullanıcılar.izle tüm aktif kimliği doğrulanmış kullanıcılar için. Döndürülen historyId'yi yeni temel çizgi olarak saklayın ve saklanan son kullanma zaman damgasını güncelleyin. Kullanıcı başına hataları toplu işlemi durdurmadan işleyin: 401, OAuth yenileme jetonunun iptal edildiği anlamına gelir (kullanıcının yeniden yetkilendirmesi gerekir), 404, izlemenin zaten süresinin dolmuş olduğu anlamına gelir. Yenilemek için asla 7 günlük sona erme tarihine kadar beklemeyin - günlük çalıştırmayı reaktif bir düzeltme olarak değil, bir bakım olarak ele alın.

Gmail API anlık bildirimleri yaklaşık olarak sınırlandırılmıştır Kimliği doğrulanmış kullanıcı başına saniyede 1 olay. Bunun üzerindeki ani yükselişler gruplandırılmış veya geciktirilmiş olup, düşürülmemiştir. kullanıcıların.geçmişi.listesi çağrı 5 kota birimi tutar ve kullanıcılar.izle çağrı başına 100 birimdir. Varsayılan Gmail API günlük kota proje başına 1 milyon birimdir. Yöntem başına limitler ve kota artırma prosedürlerinin tam bir dökümü için lütfen Gmail API hız sınırları kılavuzu.

Uygulamanız için Gmail API anlık bildirimlerini ayarlama konusunda yardıma mı ihtiyacınız var? Ekibimiz size bu konuda yardımcı olabilir.

Bir uzmanla konuşun
tr_TRTR