Kampanyalar (toplu gönderim)

Kampanya, en çok 10.000 alıcıya kuyruklanan veya zamanlanan toplu gönderimdir. Kredi dispatch anında alıcı başına düşer; bastırma listesi gönderim yolunda uygulanır.

Kampanya oluştur

POST/public/v1/campaignsscopesend

Gövde

AdTipZorunluAçıklama
fromstringhayırDoğrulanmış kimlik adresi; boşsa varsayılan kimlik. Not: kampanya motoru From'u kimlikten türetir — domain kimliğinde özel local-part (info@…) korunmaz (bilinen v1 sınırı).
subjectstringevetKonu.
htmlstringevetHTML gövde.
recipientsstring[]evetHam (raw) hedef listesi. En az 1, en çok 10.000 adres.
scheduledAtstring (ISO 8601)hayırVerilirse kampanya zamanlanır, boşsa hemen kuyruklanır.
audiencestringhayırmembers | non_members. Boşsa non_members.
customerRefstringhayırÖlçüm/ayıklama etiketi — bkz. customerRef. Max 64, [A-Za-z0-9_-].

Kredi notu

Kampanyada kredi gönderim (dispatch) anında düşer — yanıttaki creditsCharged o ana kadar düşülen değerdir ve anında kuyruklanan kampanyada 0 olabilir. Kesin değeri GET /campaigns/{id} ile izleyin.

Alıcılar normalize edilir, tekilleştirilir; bastırma listesi gönderim yolunda uygulanır ve raporda suppressed olarak görünür.

Durum + sayaçlar

GET/public/v1/campaigns/{id}scoperead

Path parametreleri

AdTipZorunluAçıklama
idstringevetKampanya id'si.

status union'ı: draft | scheduled | queued | sending | completed | paused | cancelled | auto_stopped. (scheduledAt/completedAt boşsa yazılmaz.)

Tarih aralığı listesi

GET/public/v1/campaignsscoperead

Yanıt sayfalı zarftır; items satırları GET /campaigns/{id} şeklindedir (PublicCampaignDto).

Sorgu parametreleri

AdTipZorunluAçıklama
fromstring (ISO 8601)hayırCreatedAt aralığı başlangıcı.
tostring (ISO 8601)hayırCreatedAt aralığı bitişi.
pageintegerhayırSayfa numarası, ≥ 1.
pageSizeintegerhayır1–100 (varsayılan 20).

Alıcı bazlı rapor

GET/public/v1/campaigns/{id}/reportscoperead

Path parametreleri

AdTipZorunluAçıklama
idstringevetKampanya id'si.

Sorgu parametreleri

AdTipZorunluAçıklama
pageintegerhayırSayfa numarası, ≥ 1.
pageSizeintegerhayır1–500 (varsayılan 50).

status union'ı: delivered | pending | bounced | complained | suppressed | failed.

Alıcı iç durumuSon olay→ Rapor durumu
failed(her değer)failed
suppressed(her değer)suppressed
pending / sending(her değer)pending
sentbouncebounced
sentcomplaintcomplained
sentrejectfailed
sentdelivery / open / clickdelivered
sentsend / (yok)pending (gönderildi, teslim olayı henüz yok)

7'li özet rapor

GET/public/v1/campaigns/{id}/report/summaryscoperead

Path parametreleri

AdTipZorunluAçıklama
idstringevetKampanya id'si.
  • opened/clicked: tekil alıcı sayıları. unsubscribed: bu kampanyadan kullanılan abonelikten-çıkma sayısı. replied: kampanyaya bağlı yanıt thread'i sayısı.
  • Yol notu: GET /campaigns/{id}/report v1'in ilk gününden beri sayfalı alıcı listesi döner ve kırılamaz; özet rapor bu yüzden /report/summary yolundadır.

Dönüşüm hunisi

GET/public/v1/campaigns/{id}/report/funnelscoperead

Oranlar 0–1 aralığında ondalıktır. bounced kalıcı/geçici kırılımıyla döner.

Path parametreleri

AdTipZorunluAçıklama
idstringevetKampanya id'si.

Alıcı dökümü

GET/public/v1/campaigns/{id}/recipientsscoperead

Path parametreleri

AdTipZorunluAçıklama
idstringevetKampanya id'si.

Sorgu parametreleri

AdTipZorunluAçıklama
pageintegerhayırSayfa numarası, ≥ 1.
pageSizeintegerhayır1–500 (varsayılan 20).
statusstringhayırHam alıcı durumu filtresi: pending | sending | sent | failed | suppressed.
searchstringhayırE-posta içinde arar.
  • status filtresi ve satır değeri ham alıcı durumudur: pending | sending | sent | failed | suppressed — /report'un türetilmiş union'ından bilinçli farklı (detay/tanı görünümü).
  • Boş alanlar (failReason, sesMessageId, olay zamanları…) yazılmaz. search e-posta içinde arar.

CSV dökümü

GET/public/v1/campaigns/{id}/recipients/exportscoperead

Path parametreleri

AdTipZorunluAçıklama
idstringevetKampanya id'si.

Sorgu parametreleri

AdTipZorunluAçıklama
formatstringevetYalnız csv; başka değer 422 validation_error.
  • Yanıt text/csv; charset=utf-8, UTF-8 BOM'lu (Excel Türkçe karakterleri doğru açar), streaming (boyut sınırı yok).
  • Başlık satırı: email,status,failReason,sesMessageId,lastEventType,lastEventAt,openedAt,clickedAt,bounceType. RFC 4180 kaçış + formül enjeksiyonu savunması uygulanır.
  • Kampanya yoksa 404 not_found.

İptal et

POST/public/v1/campaigns/{id}/cancelscopesend

Kampanyayı iptal eder; başarıda kampanyanın güncel public görünümünü döner.

Path parametreleri

AdTipZorunluAçıklama
idstringevetKampanya id'si.

Duraklat

POST/public/v1/campaigns/{id}/pausescopesend

Gönderimi duraklatır; başarıda kampanyanın güncel public görünümünü döner.

Path parametreleri

AdTipZorunluAçıklama
idstringevetKampanya id'si.

Devam ettir

POST/public/v1/campaigns/{id}/resumescopesend

Duraklatılmış kampanyayı sürdürür; başarıda kampanyanın güncel public görünümünü döner.

Path parametreleri

AdTipZorunluAçıklama
idstringevetKampanya id'si.

Açmayanlara yeniden gönder

POST/public/v1/campaigns/{id}/resend-to-unopenedscopesend

Açmayan alıcılara yeni (türev) bir kampanya oluşturur — yanıttaki campaignId türevin id'sidir. subject verilmezse "Re: <orijinal konu>" türetilir ("Re: Re:" birikmez). Açmayan alıcı yoksa 422 no_unopened_recipients.

Path parametreleri

AdTipZorunluAçıklama
idstringevetKampanya id'si.

Gövde

AdTipZorunluAçıklama
subjectstringhayırTürev kampanyanın konusu (gövde opsiyonel).