Belgelere geç
SDK

Açılma ve tıklama izleme

`emails.getTracking` ve `tracking` kaynağının tamamı.

Tek mesaj

tracking.ts
const report = await openemail.emails.getTracking('msg_…') console.log(report.openCount, 'opens from', report.recipients.length, 'recipients')for (const link of report.links) console.log(link.url, link.clickCount)

Hiç izlenmemiş bir mesaj, boş bir rapor değil, isNotFound değeri true olan bir OpenEmailApiError fırlatır. “Hiçbir şey kaydetmedik” ile “kimse açmadı” farklı yanıtlardır ve aynı yanıtı paylaşmamalıdır.

Posta kutusu genelinde

tracking-report.ts
await openemail.tracking.list({ opened: false, days: 7, limit: 100 })await openemail.tracking.getStats({ days: 30, offsetMinutes: -new Date().getTimezoneOffset() })await openemail.tracking.get('msg_…')await openemail.tracking.listOpens('msg_…', { includeMachine: true })await openemail.tracking.listClicks('msg_…')

list, listOpens ve listClicks düz dizi döndürür. get, listOpens ve listClicks ya msg_… gönderim id'sini ya da izleme kaydının kendi tmsg_… id'sini alır.

emails üzerindeki alanlar yerine kendi başına bir kaynak olmasının nedeni kapsamdır: emails, yalnızca bu API'nin işlediği postalar için var olan gönderim kayıtlarını listeler. Yazma ekranı, MCP araçları ve asistan bu kayıt olmadan gönderim yapar; dolayısıyla emails üzerine kurulmuş bir rapor, posta kutusunun değil API trafiğinizin raporu olurdu.

Sayıları dürüstçe okumak

ÇiftNe anlama gelir
`opens` / `clicks`UYGULANAN şey: mesajın bir pikselle veya yeniden yazılmış bağlantılarla gidip gitmediği.
`opened` / `clicked`Ne olduğu.
`openCount`Sayılan istekler. Tarayıcı botları ve gizlilik vekilleri hariç.
`openCountRaw`Her istek. Bunu etkileşim diye sunmak, açılma oranının %100'ü aşmasına yol açar.
`attributable`Bir okumanın adı belli bir alıcıya bağlanıp bağlanamayacağı.

tracking.getStats oranları, gönderilen her şeye göre değil İZLENEN mesajlara göredir. Aksi hâlde on mesajdan birini izleyen bir posta kutusu çökmüş gibi görünürdü.

Parametreler: tracking.list

openedboolean
`true`, en az bir sayılan açılması olan mesajları seçer; `false` ise hiç açılması olmayan izlenmiş mesajları seçer. Hiçbiri varsayılan değildir ve `false` asla izlenmemiş posta anlamına gelmez; o postalar bu listede hiç yer almaz.
clickedboolean
Sayılan tıklamalar için aynı filtre; `opened` filtresinden bağımsız uygulanır. İkisi birden verilebilir ve mesajların ikisini de sağlaması gerekir.
daysnumber
Şimdiden geriye kaç gün bakılacağı, 1 ila 365, varsayılan 30; bu aralığın dışında 422 verir. Pencere, izleme kaydının oluşturulma zamanına göre ölçülür ve yalnızca gönderimi gerçekten gitmiş kayıtlar listelenir.
limitnumber
En fazla bu kadar mesaj, 1 ila 200, varsayılan 50, en yeniden eskiye. Cursor yoktur: bu bir akış değil, bir pencere üzerindeki rapordur; `days` ve `limit` ile sınırlanır ve bütün olarak okunur.

Yanıt: TrackingResource

object'tracking'
`tracking.get`, `tracking.list` veya `emails.getTracking` üzerinden kendi başına getirilen bir raporda her zaman `'tracking'`. Getirilen bir mesajın içinde `email.tracking` olarak yer alan aynı rapor bu anahtar olmadan gelir, çünkü orada ayrıca getirilen bir şey değil o nesnenin parçasıdır.
idstring
İzleme kaydının kendi id'si, `tmsg_…`. İstek başına çağrılar olan `listOpens` ve `listClicks` bu değere göre anahtarlanır; onlara verilen bir `msg_…` önce buna çözümlenir.
sendIdstring | null
Bunun karşılık geldiği `msg_…` gönderimi; hiç gönderim kaydı yazılmamışsa null. Yazma ekranı, MCP'nin `sendEmail` aracı ve asistan, kayıt yazmadan gönderim yapar. İzleme yalnızca API trafiğini değil posta kutusunu kapsar.
threadIdstring | null
Okuma arayüzünün mesajı yeniden bulabilmesi için iletimden sonra doldurulur; sürücü hiçbir şey bildirmediyse null olur. Kritik değildir: bu alanı null olan bir kayıt yine de sayılır.
messageIdstring | null
RFC 5322 Message-ID; bizim id'miz değil. O da iletimden sonra doldurulur ve taşıma katmanı dolduracak bir şey döndürmediyse null olur.
subjectstring | null
Gönderim anındaki hâliyle konu. Konusuz kaydedilmiş bir mesajda null.
fromstring
Gönderen adres; gönderimden birleştirilmek yerine kaydın üzerine kopyalanır. Raporlar olaydan çok sonra okunur ve o zamandan beri düzeltilmiş veya kaldırılmış bir adres, aksi hâlde geçmişi yeniden yazardı.
sourceEmailSource | (string & {})
Hangi yüzeyin gönderdiği: `composer`, `api`, `mcp`, `ai` veya `queue`. Tipi açık bırakılmıştır; böylece bu SDK'nın henüz adlandırmadığı bir yüzey kırıcı bir değişiklik olmaz.
sentAtstring | null
Mesajın ne zaman gittiği, bir ISO-8601 anı olarak. Gönderimi hiç tamamlanmamış bir kayıtta null. `tracking.list` bunları hariç tutar, `get` tutmaz.
opensboolean
Bu mesaja bir pikselin UYGULANIP uygulanmadığı. Bu, hesap ayarının şu anda ne dediği değil, ne yapıldığıdır.
clicksboolean
Bu mesajın bağlantılarının yeniden yazılıp yazılmadığı. Gövde hiç bağlantı taşımıyorsa false olur, çünkü o zaman hiçbir şey değiştirilmemiştir ve aksini iddia eden bir kayıt baytlarla bağdaştırılamazdı.
openedboolean
Kopyalar genelinde sayılan herhangi bir açılma kaydedilip kaydedilmediği. Bunu `opens` ile birlikte okuyun: veri toplanmadığı için verinin olmaması ile kimsenin mesajı okumamış olması farklı olgulardır.
clickedboolean
Sayılan herhangi bir tıklama kaydedilip kaydedilmediği. Bir açılmadan daha güçlü bir kanıttır, çünkü görseller, bağlantıların takip edilmemesinden çok daha sık engellenir.
attributableboolean
Buradaki her okumanın adı belli bir alıcıya bağlanıp bağlanamadığı. Atfedilmemiş bir kopyada sayılan bir etkinlik göründüğü anda false olur; bu, tek bir gövdenin tek bir belirteç altında tüm listeye gittiği çok alıcılı durumdur. Bu yüzden “Bob bunu açmadı” yazmadan önce bunu denetleyin.
openCountnumber
Bir insanın yol açtığına inanılan açılmalar, kopyalar üzerinden toplanır. Makine istekleri hariç tutulur ve otuz saniye içindeki tekrarlar tek bir açılmaya indirgenir; dolayısıyla okuyucunun önüne konacak rakam budur.
clickCountnumber
Sayılan tıklamalar, kopyalar üzerinden toplanır. Mesaj başına değil bağlantı başına tekilleştirilir; dolayısıyla saniyeler arayla takip edilen iki farklı bağlantı iki tıklamadır.
openCountRawnumber
Her piksel isteği; tarayıcı botları ve gizlilik vekilleri dahil. `openCountRaw - openCount`, sınıflandırıcının kaç tanesini ayırdığını gösterir ve filtrelemenin yapıldığına dair elinizdeki tek kanıttır.
clickCountRawnumber
Yeniden yazılmış bir bağlantıya yapılan her ziyaret; makine istekleri ve tekrarlar dahil.
firstOpenAtstring | null
Kopyalar arasındaki en erken sayılan açılma; hiç yoksa null. Makine istekleri bunu asla değiştirmez.
lastOpenAtstring | null
Kopyalar arasındaki en son sayılan açılma; hiç yoksa null.
firstClickAtstring | null
Kopyalar arasındaki en erken sayılan tıklama; hiç yoksa null.
lastClickAtstring | null
Kopyalar arasındaki en son sayılan tıklama; hiç yoksa null.
recipientsTrackingRecipientResource[]
İzlenen her kopya için bir kayıt: taşıma katmanı baytların kişi başına farklılaşmasına izin verdiğinde alıcı başına, izin vermediğinde ise tek bir paylaşılan kayıt. Paylaşılan kayıt, üzerine gerçekten bir şey düşmedikçe atılır; böylece dokunulmamış bir “birisi” satırı asla gerçek adların yanında durmaz.
recipients[].emailstring | null
Bu kopyanın kime gittiği; gönderim anındaki hâliyle ve küçük harfli. Tam olarak `attributed` false olduğunda null'dır.
recipients[].kind'to' | 'cc' | 'bcc' | null
Adresin hangi başlıkta göründüğü; böylece rapor, mesajın okunduğu gibi okunur. Hiçbir adrese ait olmayan paylaşılan kopyada null.
recipients[].attributedboolean
Bu satırın bir kişiyi adlandırıp adlandırmadığı. `email` alanından önce bunu okuyun: false, üzerine herhangi bir istek düştüğü anda listelenen paylaşılan kopyadır ve tek alıcılı bir mesajda bile o isteğe bir ad koymak, mekanizmanın sağlayamayacağı tek olguyu uydurmak olurdu.
recipients[].openCountnumber
Yalnızca bu kopyadaki sayılan açılmalar; mesaj toplamıyla aynı elemelere tabidir: makine istekleri düşürülür ve otuz saniye içindeki tekrarlar tek bir açılmaya indirgenir.
recipients[].clickCountnumber
Yalnızca bu kopyadaki sayılan tıklamalar; kopya başına değil bağlantı başına tekilleştirilir.
recipients[].firstOpenAtstring | null
Bu kopyadaki en erken sayılan açılma; hiç yoksa null.
recipients[].lastOpenAtstring | null
Bu kopyadaki en son sayılan açılma; hiç yoksa null.
recipients[].firstClickAtstring | null
Bu kopyadaki en erken sayılan tıklama; hiç yoksa null.
recipients[].lastClickAtstring | null
Bu kopyadaki en son sayılan tıklama; hiç yoksa null.
linksTrackingLinkResource[]
Bu mesajda yeniden yazılan her bağlantı, gövdedeki konumuna göre sıralı. Hiç yoksa boştur: `clicks` kapalı gönderilmiş bir mesaj ya da gövdesinde hiç bağlantı olmayan bir mesaj.
links[].idstring
Bağlantının kendi id'si, `lnk_…`. Bir tıklama satırındaki `linkId` alanının gösterdiği değer budur; böylece `listClicks` çağrısından gelen bir istek buradaki kayıtla eşleştirilebilir.
links[].urlstring
Bağlantının gerçekte nereye gittiği; mesajda yeniden yazılmadan önceki hâliyle. Yönlendirici bir id'yi buna geri çözümler ve ziyaretçiyi yoluna gönderir.
links[].labelstring | null
Bağlantı metninin mesajda göründüğü hâli ya da bağlantının metni yoksa (bir görsel veya çıplak bir URL gibi) null. Bir raporun üç izleme parametresi taşıyan bir URL'yi alıntılamak yerine “fiyatlandırma bağlantısı” diyebilmesi için vardır ve asla `url` alanının yerini tutmaz.
links[].clickCountnumber
Bu bağlantıya yapılan sayılan ziyaretler, kopyalar üzerinden toplanır. Mesajdaki `clickCount` ile aynı, bağlantı başına otuz saniyelik pencere geçerlidir.
links[].clickCountRawnumber
Bu bağlantıya yapılan her ziyaret; makine istekleri ve tekrarlar dahil.