Suppression list
E-posta ve SMS gönderim engeli listesi — nedenler (bounce, şikâyet, STOP, elle, tek tık), maskeli saklama, API ve dashboard yönetimi, include_unsubscribed istisnası.
Suppression list, e-posta ve SMS için gönderilmeyecek adreslerin app bazlı listesidir. Ham değer saklanmaz: adres normalize edilir, SHA-256 özeti tutulur ve maskeli gösterilir (a***e@example.com). Kitle (audience) aşamasında ve gönderim anında kontrol edilir; bastırılan teslimat suppressed durumunda suppression_reason: suppression_list ile kaydedilir.
Nedenler
reason | Kaynak | Kaldırma |
|---|---|---|
bounce | Kalıcı bounce (SES/Resend/SMTP 550), Netgsm geçersiz numara | Elle silme (adres düzeltildiyse) |
complaint | Spam şikâyeti (feedback loop) | Elle; şikâyet eden adrese yeniden gönderim önerilmez |
unsubscribe_link | Tek tık List-Unsubscribe ya da onay sayfası | Kullanıcı yeniden abone olunca ya da elle |
stop | SMS STOP anahtar sözcüğü | SMS START ile otomatik |
manual | Dashboard/API ile eklenen; expires_at ile süreli olabilir | Elle ya da süre dolunca |
include_unsubscribed: true (yalnızca işlemsel e-posta: parola sıfırlama, makbuz) unsubscribe_link kaydını yok sayar; bounce, complaint, stop ve manual kayıtları her durumda uygulanır.
API
GET /v1/apps/{app_id}/suppressions?channel=&reason=&value=&cursor=(users:read) —valueile tam adres sorgulanır, yanıt maskelidir.POST /v1/apps/{app_id}/suppressions{ "channel": "email" | "sms", "value": "ayse@example.com", "reason"?: "manual", "expires_at"?: "2026-12-31T00:00:00Z", "note"?: "…" }(users:write).DELETE /v1/apps/{app_id}/suppressions/{id}(users:write).
Örnekler: API → Suppression list. Sunucu SDK'larında hs.suppressions.list / create / remove.
Dashboard ve davranış
- Kitle → Suppression list: filtre, ekleme, silme; sayaç
suppression_entries_total{channel,reason}metriğiyle izlenir. - "Verileri temizle" (app) suppression list'i korur; kullanıcı silme (KVKK) adresin özetini listede bırakmaz, ancak bounce/şikâyet kaynaklı kayıt sağlayıcı kurallarına göre yeniden oluşabilir.
- Abonelik durumu ile ilişki: bounce → abonelik
invalid; şikâyet/tek tık/STOP → abonelikunsubscribedve ilgilisubscription.*webhook'u.
Kategoriler, kullanıcı tercihleri ve tercih merkezi (Faz 12)
Kullanıcıların hangi mesaj kategorilerini hangi kanaldan almak istediğini yönetir; kategoriye kapalı kullanıcıya o kategorideki kampanya/mesaj gönderilmez. Tasarım kararları: ADR-0019 §4, §13. Ortak kod:…
JWT ile kimlik doğrulama (SDK identity verification)
Kullanıcı kimliğinizi (external_id) SDK'ya verirken başkasının kimliğine bürünülmesini önlemek için kanıt istenir. İki yöntem vardır ve app ayarında seçilir (ADR-0023 §9):