Toplu gönderimler
`broadcasts.preview`, `send`, `list`, `listAll`, `iterate`, `get` ve `cancel`.
Her yöntem
const draft = { audienceIds: ['aud_4c1b8e2a7d9f05c36b4e8a71'], from: 'Acme <[email protected]>', subject: '{{firstName|Hello}}, the September release is out', html: '<p>Hi {{firstName|there}},</p><p>Here is what changed this month.</p>', text: 'Hi {{firstName|there}}, here is what changed this month. Unsubscribe: {{unsubscribeUrl}}', tags: { campaign: 'release-2026-09' },} const reach = await openemail.broadcasts.preview(draft)console.log(reach.recipients, reach.unsubscribed, reach.suppressed) const broadcast = await openemail.broadcasts.send(draft) let latest = await openemail.broadcasts.get(broadcast.id)while (['scheduled', 'queued', 'sending'].includes(latest.status)) { await new Promise((resolve) => setTimeout(resolve, 5_000)) latest = await openemail.broadcasts.get(broadcast.id)} for await (const copy of openemail.emails.iterate({ broadcastId: broadcast.id })) { console.log(copy.id, copy.status)} const later = await openemail.broadcasts.send({ ...draft, scheduledAt: 'P1D' })await openemail.broadcasts.cancel(later.id) const history = await openemail.broadcasts.list({ audienceId: draft.audienceIds[0] })console.log(latest.status, latest.counts.sent, history.items.length)Toplu gönderim, bir ya da daha fazla kitledeki herkese her kişi için ayrı bir kopya olarak tek bir ileti gönderir. Her kopyanın tam olarak bir alıcısı vardır, cc ya da bcc yoktur; bu yüzden kimse başka kime gittiğini görmez ve her kopya kendi msg_ kimliği, olayları, izlemesi ve webhook'ları olan sıradan bir e-postadır. emails.list({ broadcastId }) onları listeler. Kopyalar Gönderilenler klasörüne kaydedilmez, çünkü toplu gönderim kayıttır.
send hemen queued durumundaki toplu gönderimle ya da scheduledAt verirseniz scheduled ile çözümlenir ve gönderim arka planda sürer. send için emails:send ve audiences:read, preview için audiences:read, list, listAll, iterate ve get için emails:read, cancel için emails:send gerekir.
Her send bir Idempotency-Key taşır; options.idempotencyKey ile verdiğiniz ya da SDK'nın oluşturduğu. Bu yüzden bir ağ hatasından sonra yeniden deneme, iki kez göndermek yerine ilk denemenin oluşturduğu toplu gönderimle yanıt verir. preview, get ve cancel güvenle tekrarlanabilir ve yeniden denenir.
Birleştirme alanları
subject, html ve text her kişi için kendi kişi kaydından doldurulur. {{firstName}} kişi adının ilk sözcüğü, {{lastName}} geri kalanı, {{name}} tam ad, {{email}} kopyanın gittiği adres ve {{unsubscribeUrl}} onun aboneliğini sonlandıran bağlantıdır.
Her alan çizgiden sonra bir yedek değer alır; kişinin o alan için değeri yoksa kullanılır, bu yüzden {{firstName|there}} adsız kaydedilmiş bir kişi için "there" olur. Değerler html içinde kaçırılır ve diğer her {{…}} tam yazıldığı gibi bırakılır.
Kaydedilmiş bir şablonu göndermek için html ve text yerine template geçirin. Aynı beş değer ona özellik olarak ulaşır, ama yalnızca şablonun tanımladığı özellikler; bu yüzden firstName'i tanımlayan bir şablon onu alır, tanımlamayan ise bu yüzden hiçbir zaman reddedilmez. template.props içindeki her şey her kopyaya aynı biçimde gider.
Abonelikten çıkma
Her kopya, bir posta istemcisinin kendi abonelikten çıkma düğmesini göstermesini sağlayan tek tık abonelikten çıkma başlıklarını taşır; büyük posta kutusu sağlayıcılarının toplu postadan istediği de budur. {{unsubscribeUrl}}'i kendisi yerleştirmeyen bir html ya da text gövdesine bağlantıyı içeren tek satırlık bir alt bilgi eklenir. Şablon tam olduğu gibi gönderilir, bu yüzden {{unsubscribeUrl}}'i şablona koyun.
Abonelikten çıkmak, kişiyi o toplu gönderimin gittiği her kitlede abonelikten çıkmış olarak işaretler ve AudienceContactResource.unsubscribedAt bunu audiences.listContacts üzerinde gösterir. Kişi kitlede ve adres defterinde kalır, diğer kitlelerine dokunulmaz ve ona tek tek gönderilen postalar gitmeye devam eder. Onu kitleden çıkarıp yeniden eklemek yeniden abone yapar.
Kimler atlanır
Toplu gönderim, audienceIds içindekilerden en az birinde bulunan her kişiye, kaçında bulunursa bulunsun bir kez ulaşır. İçinde bulunduğu bu kitlelerin her birinden abonelikten çıkmış kişiyi ve bir geri dönme ya da şikâyet sonrasında veya biri eklediği için engelleme listesinde olan adresi atlar. send'den sonra ama gönderim ona ulaşmadan önce kitlelerden birine eklenen kişi dahil edilir.
preview hiçbir şey göndermeden aynı sayıları döndürür: recipients, unsubscribed ve suppressed. Kimseye ulaşmayacak bir send 422 no_recipients fırlatır.
Herhangi bir şey yazılmadan önce gönderimin tamamı planın aylık gönderim sayısıyla karşılaştırılır; bu yüzden kotanın karşılayamadığı bir toplu gönderim 429 send_quota_exceeded fırlatır ve geride hiçbir şey bırakmaz. Her kopya bir gönderim sayılır.
Durum ve ilerleme
get, counts'u kopyalardan canlı okur, bu yüzden bir toplu gönderim sürerken onu yoklayın. status, scheduled ya da queued'dan sending'e geçer ve teslim edilen her kopya gittiğinde ya da başarısız olduğunda sent üzerinde kalır. Kopyalar hâlâ beklerken, completedAt son kişiye ulaşıldığını söyledikten sonra bile sending kalır. failed, toplu gönderimin tamamının durduğu anlamına gelir ve lastError nedenini söyler: from adresinden artık gönderilemiyor, şablon çözümlenmeyi bıraktı, plan yarı yolda bitti, gönderimin kendisi sürekli başarısız oldu ya da tek bir kopya bile yazılamadı.
cancel, scheduled, queued ya da sending olan bir toplu gönderimi durdurur. Kimse eklenmez ve hâlâ bekleyen her kopya iptal edilir, gitmiş kopyalar ise geri alınamaz. Her kopya gittikten sonra cancel 409 broadcast_not_cancellable fırlatır ve iptal edilmiş bir toplu gönderimi iptal etmek onunla olduğu gibi çözümlenir.
Yanıt: BroadcastResource
send, get ve cancel her biri bunlardan biriyle çözümlenir. list bunların bir sayfasıyla, { items, hasMore, nextCursor }, en yenisi önce olmak üzere çözümlenir; listAll ve iterate her sayfayı dolaşır. preview, audienceIds, recipients, unsubscribed ve suppressed içeren bir BroadcastPreviewResource ile çözümlenir.
idstring- Kalıcı tanıtıcı, `brd_` ardından 24 onaltılık karakter.
statusBroadcastStatus- `scheduled`, `queued`, `sending`, `sent`, `cancelled` ya da `failed`. Her birini `BROADCAST_STATUSES` adlandırır.
modeApiKeyMode- Onu oluşturan anahtara göre `live` ya da `test`. Bir test toplu gönderiminin kopyaları gönderildi olarak işaretlenir ve kimseye teslim edilmez.
sourceEmailSource- Nereden başlatıldığı: anahtar için `api`, bağlı bir uygulama için `oauth`, uygulama için `composer`, bir asistan için `mcp`.
audienceIdsstring[]- Gönderildiği kitleler, her biri bir kez.
fromstring- Her kopyanın gönderildiği adres.
subjectstring- Yazıldığı gibi konu, birleştirme alanlarıyla birlikte. Konuyu bir şablon sağladığında boştur.
countsBroadcastCounts- `recipients`, `send` sırasında alınan tahmindir. `created` yazılan kopyaları, `skipped` o zamana kadar adresleri engellendiği için atlanan kişileri, `failedToQueue` ise kopyası yazılamayan kişileri sayar. `queued`, `sending`, `sent`, `failed` ve `cancelled` kopyaları her birinin şu anki durumuna göre sayar.
lastErrorstring | null- Toplu gönderimin neden başarısız olduğu ya da yazılamayan en son kopya ve nedeni. Hiçbir şey ters gitmediği sürece null.
scheduledAtstring | null- ISO-8601 UTC, gönderimin başlaması gereken zaman. Hemen gönderilen bir toplu gönderim için null.
startedAtstring | null- ISO-8601 UTC, gönderimin ilk kişilere ulaştığı zaman.
completedAtstring | null- ISO-8601 UTC, son kişiye ulaşıldığı zaman. Bundan sonra da kopyalar gitmeyi bekliyor olabilir.
cancelledAtstring | null- ISO-8601 UTC, `cancel`'ın onu durdurduğu zaman.
createdAtstring- ISO-8601 UTC, `send`'in çağrıldığı zaman. Liste sırasını belirler.
updatedAtstring- ISO-8601 UTC, gönderim ilerledikçe güncellenir.