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.
- POST
/campaigns - GET
/campaigns/{id} - GET
/campaigns - GET
/campaigns/{id}/report - GET
/campaigns/{id}/report/summary - GET
/campaigns/{id}/report/funnel - GET
/campaigns/{id}/recipients - GET
/campaigns/{id}/recipients/export - POST
/campaigns/{id}/cancel - POST
/campaigns/{id}/pause - POST
/campaigns/{id}/resume - POST
/campaigns/{id}/resend-to-unopened
Kampanya oluştur
/public/v1/campaignsscopesendGövde
| Ad | Tip | Zorunlu | Açıklama |
|---|---|---|---|
from | string | hayır | Doğ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ı). |
subject | string | evet | Konu. |
html | string | evet | HTML gövde. |
recipients | string[] | evet | Ham (raw) hedef listesi. En az 1, en çok 10.000 adres. |
scheduledAt | string (ISO 8601) | hayır | Verilirse kampanya zamanlanır, boşsa hemen kuyruklanır. |
audience | string | hayır | members | non_members. Boşsa non_members. |
customerRef | string | hayı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
/public/v1/campaigns/{id}scopereadPath parametreleri
| Ad | Tip | Zorunlu | Açıklama |
|---|---|---|---|
id | string | evet | Kampanya id'si. |
status union'ı: draft | scheduled | queued | sending | completed | paused | cancelled | auto_stopped. (scheduledAt/completedAt boşsa yazılmaz.)
Tarih aralığı listesi
/public/v1/campaignsscopereadYanıt sayfalı zarftır; items satırları GET /campaigns/{id} şeklindedir (PublicCampaignDto).
Sorgu parametreleri
| Ad | Tip | Zorunlu | Açıklama |
|---|---|---|---|
from | string (ISO 8601) | hayır | CreatedAt aralığı başlangıcı. |
to | string (ISO 8601) | hayır | CreatedAt aralığı bitişi. |
page | integer | hayır | Sayfa numarası, ≥ 1. |
pageSize | integer | hayır | 1–100 (varsayılan 20). |
Alıcı bazlı rapor
/public/v1/campaigns/{id}/reportscopereadPath parametreleri
| Ad | Tip | Zorunlu | Açıklama |
|---|---|---|---|
id | string | evet | Kampanya id'si. |
Sorgu parametreleri
| Ad | Tip | Zorunlu | Açıklama |
|---|---|---|---|
page | integer | hayır | Sayfa numarası, ≥ 1. |
pageSize | integer | hayır | 1–500 (varsayılan 50). |
status union'ı: delivered | pending | bounced | complained | suppressed | failed.
| Alıcı iç durumu | Son olay | → Rapor durumu |
|---|---|---|
| failed | (her değer) | failed |
| suppressed | (her değer) | suppressed |
| pending / sending | (her değer) | pending |
| sent | bounce | bounced |
| sent | complaint | complained |
| sent | reject | failed |
| sent | delivery / open / click | delivered |
| sent | send / (yok) | pending (gönderildi, teslim olayı henüz yok) |
7'li özet rapor
/public/v1/campaigns/{id}/report/summaryscopereadPath parametreleri
| Ad | Tip | Zorunlu | Açıklama |
|---|---|---|---|
id | string | evet | Kampanya 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}/reportv1'in ilk gününden beri sayfalı alıcı listesi döner ve kırılamaz; özet rapor bu yüzden/report/summaryyolundadır.
Dönüşüm hunisi
/public/v1/campaigns/{id}/report/funnelscopereadOranlar 0–1 aralığında ondalıktır. bounced kalıcı/geçici kırılımıyla döner.
Path parametreleri
| Ad | Tip | Zorunlu | Açıklama |
|---|---|---|---|
id | string | evet | Kampanya id'si. |
Alıcı dökümü
/public/v1/campaigns/{id}/recipientsscopereadPath parametreleri
| Ad | Tip | Zorunlu | Açıklama |
|---|---|---|---|
id | string | evet | Kampanya id'si. |
Sorgu parametreleri
| Ad | Tip | Zorunlu | Açıklama |
|---|---|---|---|
page | integer | hayır | Sayfa numarası, ≥ 1. |
pageSize | integer | hayır | 1–500 (varsayılan 20). |
status | string | hayır | Ham alıcı durumu filtresi: pending | sending | sent | failed | suppressed. |
search | string | hayır | E-posta içinde arar. |
statusfiltresi 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.searche-posta içinde arar.
CSV dökümü
/public/v1/campaigns/{id}/recipients/exportscopereadPath parametreleri
| Ad | Tip | Zorunlu | Açıklama |
|---|---|---|---|
id | string | evet | Kampanya id'si. |
Sorgu parametreleri
| Ad | Tip | Zorunlu | Açıklama |
|---|---|---|---|
format | string | evet | Yalnı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
/public/v1/campaigns/{id}/cancelscopesendKampanyayı iptal eder; başarıda kampanyanın güncel public görünümünü döner.
Path parametreleri
| Ad | Tip | Zorunlu | Açıklama |
|---|---|---|---|
id | string | evet | Kampanya id'si. |
Duraklat
/public/v1/campaigns/{id}/pausescopesendGönderimi duraklatır; başarıda kampanyanın güncel public görünümünü döner.
Path parametreleri
| Ad | Tip | Zorunlu | Açıklama |
|---|---|---|---|
id | string | evet | Kampanya id'si. |
Devam ettir
/public/v1/campaigns/{id}/resumescopesendDuraklatılmış kampanyayı sürdürür; başarıda kampanyanın güncel public görünümünü döner.
Path parametreleri
| Ad | Tip | Zorunlu | Açıklama |
|---|---|---|---|
id | string | evet | Kampanya id'si. |
Açmayanlara yeniden gönder
/public/v1/campaigns/{id}/resend-to-unopenedscopesendAç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
| Ad | Tip | Zorunlu | Açıklama |
|---|---|---|---|
id | string | evet | Kampanya id'si. |
Gövde
| Ad | Tip | Zorunlu | Açıklama |
|---|---|---|---|
subject | string | hayır | Türev kampanyanın konusu (gövde opsiyonel). |