Skip to main content

Tercih merkezi: herkese açık opt-in/opt-out sayfası

İngilizce asıl: Preference center: the public opt-in/opt-out page (bu sayfanın İngilizce sürümü).
Tercih merkezi, bir kişinin kendi kanal opt-in’lerini, abonelik konularını, mesaj sıklığını ve (etkinleştirirseniz) veri silme talebini yönettiği herkese açık bir sayfadır — hesap yok, giriş yok. Her kişi sayfaya imzalı bir bağlantı üzerinden ulaşır: URL, 30 gün sonra süresi dolan bir HMAC-SHA256 jetonu (v1.<payload>.<signature>) taşır; böylece sayfa self-servis kalır ama yine de tam olarak bir organizasyonda tam olarak bir kişiyle sınırlıdır. Özetlenmiş uç nokta yüzeyi ayrıca Send Gates içinde de yer alır; bu kılavuz tam gezinmedir: her yapılandırma alanı, bağlantının nereye konacağı, herkese açık sayfa API’sinin ne döndürdüğü ve bir opt-out veya opt-in’in hangi uyumluluk yüzeylerine yazdığı. Aşağıdaki tüm uç noktaların kökü https://api.orbit.devotel.io/api/v1/compliance altındadır.
Tercih merkezi tenant’ın sahip olduğu bir kontroldür: kanalları, konuları ve markayı siz seçersiniz, onay kanıtlarını organizasyonunuz saklar. Orbit platformu işletir; onay kararı kişiye aittir. Bu kılavuz hukuki tavsiye değildir — yükümlülüklerinizi hukuk danışmanınızla doğrulayın.

1. Bir kez yapılandırın: POST/GET /preference-center

Yapılandırmayı POST /preference-center ile kurun (owner/admin API anahtarı). Uç nokta, yapılandırmayı organizasyonunuzun ayarlarına yazar (upsert) ve kaydedilen nesneyi döndürür — güncellemek için yeniden çalıştırın. GET /preference-center mevcut yapılandırmayı okur; yapılandırma öncesi enabled: false ile bir ipucu mesajı döndürür.

Yapılandırma alanları

Her alan sunucu tarafında doğrulanır — reddedilen bir POST, hangisinin başarısız olduğunu anlamanız için alan bazlı sorunlarla (field, message) birlikte 422 döndürür.

Abonelik konuları

Konu; bir kişinin, kanalın tamamına dokun madan katılabileceği veya çıkabileceği adlandırılmış bir gruptur — Bülten, Ürün Güncellemeleri, Fatura Uyarıları. Konu id’leri benzersiz olmalı ve slug desenine uymalıdır ([a-z0-9][a-z0-9_-]{0,63}); her girdide şunlar vardır:
  • name (1–120 karakter) — sayfadaki görünen ad.
  • description (isteğe bağlı, ≤500) — anahtarın yanında gösterilen bir satırlık bağlam.
  • defaultOptIn (varsayılan false) — kayıtlı tercihi olmayan bir kişinin nasıl ele alınacağı.
  • archived (isteğe bağlı) — arşivlenen konular denetim izinde kalır ama artık sayfada görünmez.
Lint düzeyinde tuzaklar: http(s) şema incelmesini geçemeyen URL’ler önden reddedilir ve yinelenen konu id’leri sessizce üzerine yazılmak yerine “Topic ids must be unique” ile başarısız olur.

2. Kişi başına bağlantı üretin

Yapılandırdıktan sonra, her seferinde bir kişi için POST /preference-center/link ile bağlantı üretin:
Yanıt link döndürür — ${DEVOTEL_WEB_URL}/preferences?token=v1… biçiminde bir URL. Dikkat edilecek noktalar:
  • Bağlantı JSON uç noktasını değil, barındırılan sayfayı hedefler. Altbilgi/gönderen şablonlarınıza olduğu gibi kopyalayın; sayfa, veri uç noktasını kaputun altında kendisi çeker.
  • 30 günlük TTL. Bundan sonra jeton süresi dolmuş olarak doğrulanır ve kişi yeni bir bağlantı istemelidir (yenisini üretmek tek API çağrısıdır).
  • Sayfa, üretim anında locale’den bağımsızdır. Web uygulaması, ?token= sorgusunu koruyarak bir yönlendirme çözer; böylece kişinin locale’ini tahmin etmeniz gerekmez.

Nereye konur

  • Serbest metin gövdeli pazarlama gönderileri: sizin için eklenir. Bağlantıyı yerleştirmeniz gerekmez. Tercih merkeziniz etkin olduğu sürece Orbit, serbest metin gövdeli her pazarlama gönderisine bir {optOutMessage}: {link} satırı ekler — sms ve whatsapp’ta markalı kısa alan adınız üzerinden, email ve diğer serbest metin kanallarında ham jetonlu bağlantı olarak — ve şablon gönderileri atlanır. Aynı sayfa altbilginin ne zaman göründüğünü, eklenen tıklamanın ne yazdığını ve operatörün “Reply STOP” ifadesiyle nasıl ilişkili olduğunu anlatır: bkz. Preference center: when Orbit appends the opt-out footer for you.
  • İşlemsel ve şablon gönderiler: kendiniz yerleştirin. Bu gönderiler eklenen altbilgiyi asla taşımaz; bu yüzden yukarıda üretilen bağlantı, onların tek dokunuşla abonelikten çıkma yoludur: e-posta şablonlarınızın abonelikten çıkma alanına olduğu gibi kopyalayın ve istediğiniz yerde şablon metinlerine veya işlemsel gövdelere yazın. Bir yerleşim için kısa izlenen bağlantı üretmek isteğe bağlıdır; kısa bağlantı üretimi başarısız olursa ham bağlantı yine çalışır — yedek, ek niteliktedir ve uyumluluk için asla yük taşıyıcı değildir.
  • Baskılama kaynaklı yeniden opt-in. Bir kişi başka bir akışla yeniden katıldığında, aynı self-servis sayfayı alması için ona yeni bir bağlantı verebilirsiniz.

3. Herkese açık jeton sayfası

Barındırılan sayfa, imzalı jetonla korunan iki kimliksiz uç nokta üzerinden okur ve yazar:
  • GET /preferences/:token — sayfa yükünü döndürür.
  • PUT /preferences/:token — güncellemeleri uygular.
Geçersiz jeton biçimleri 400 INVALID_TOKEN döndürür; süresi dolmuş veya kurcalanmış jetonlar “Please request a new link.” ile 401 TOKEN_EXPIRED döndürür.

GET yanıtı

Yük, kişinin mevcut durumunu ve organizasyonun yapılandırmasını bir araya getirir:
E-posta ve telefon herkese açık yanıtta maskelenir — sayfa, kendisiyle çağrılan ham tanımlayıcıyı asla göstermez. consentHistory, kişinin en yeniden en eskiye opt-in/opt-out denetim izidir, 20 satırla sınırlıdır ve operatörlerinizin panoda gördüğüyle aynı onay defterinden çizilir.

PUT istek gövdesi

  • channelPreferences — kısmi haritaya izin verilir (Zod partial-record); en az bir kanal zorunludur.
  • frequencyPreference — isteğe bağlı, all, important_only, weekly_digest, monthly_digest’ten biri.
  • topicPreferences — isteğe bağlı { topicId: opted_in | opted_out } haritası, yapılandırdığınız konulara karşı doğrulanır; bilinmeyen id’ler yok sayılır.
  • requestDataDeletion — opt-out ile birlikte bir GDPR silme talebi kurar (bkz. bölüm 6).
422 yanıtı, barındırılan formun geçersiz seçimi gösterebilmesi için alan bazlı sorunlar taşır.

4. Güncellemeler nasıl akar

Buraya yazılan bir opt-in/opt-out yalnızca bir arayüz bayrağı değildir — bir STOP anahtar sözcüğünün yazdığı dört uyumluluk yüzeyinin aynıları güncellenir:
  • Onay defteri. Kanal başına (veya konu başına) source: preference_center ile bir consent_records satırı eklenir — GDPR Art 7 ispat yükü denetim iziniz.
  • Baskılama listesi. Opt-out olunmuş her kanalda, kişinin normalize edilmiş telefonu/e-postası all kapsamıyla eklenir — her gönderi kapısının okuduğu kanallar arası bir blokaj.
  • STOP çiti. Opt-out’ta bir Redis hızlı yol çiti kurulur (ve tam yeniden opt-in’de temizlenir); böylece devam eden kampanya partileri, daha yavaş veritabanı baskılaması yayılmadan değişikliği görür.
  • Denetim kaydı. Yapılandırmayı değiştirdiğinizde compliance.preference_center_updated kaydedilir ve kişi düzeyindeki opt-in/out olayları onay defterinde yakalanır.
Yeniden opt-in simetriktir: tam bir opt-in (tüm kanallar opted_in), kişinin telefonu için etkin baskılama satırlarını yürürlükten kaldırır ve STOP çitini temizler; onay defteri ise tersine çevrilmiş girdiyi kazanır.
Konu ve kanal. Kanal düzeyinde bir opt-out her zaman kazanır — bir konu anahtarı, onayı kişinin hâlâ kabul ettiği kanallar içinde daraltır. PUT’taki bilinmeyen konu id’leri kalıcılaştırılmak yerine yok sayılır; böylece bayat bir form keyfi öznitelik anahtarları yazamaz.

5. GDPR silme anahtarının semantiği

showGdprDelete etkin olduğunda ve kişi PUT’ta requestDataDeletion: true işaretlediğinde, API, opt-out ile birlikte eski tarz bir GDPR silme talebi kaydeder — veri silme süreciniz için işaretlenmiş bir pending satırı. Bu işaretleme bilinçlidir: tercih merkezinin silme anahtarı kişiyi işaretler; izlenen DSAR hattını başlatmaz.
Tercih merkezinin silme anahtarında SLA saati, şifresi çözülmüş veri dışa aktarımı ve Madde 17 silme sertifikası yoktur. DPO’nuzun izleyebileceği bir silme hakkı talebi için DSAR uç noktası üzerinden başvurun (POST /compliance/dsar, owner/admin) — bkz. Data Subject Access Requests ve DSAR + ihlal sicili kılavuzu.

6. Test etme

Bir duman betiğine yapıştırabileceğiniz iki hazır curl örneği: Yapılandırmayı kaydedin:
Beklenen: kaydedilen yapılandırmanın yankısıyla 201. Bağlantı üretin ve herkese açık uç noktaları deneyin:
Beklenen: GET, kişinin mevcut tercihlerini döndürür; PUT, updated: true ile uygulanan tercihleri ve istendiğinde bir gdprRequest girdisini döndürür. Sık rastlanan hatalar: 400 INVALID_TOKEN (bozuk jeton), 401 TOKEN_EXPIRED (TTL aşıldı veya imza uyuşmazlığı — yeni bir bağlantı üretin), 422 VALIDATION_ERROR (yapılandırma veya güncelleme gövdesinde alan düzeyinde sorunlar) ve tercih merkezi devre dışıyken veya kişi id’si yokken 404 NOT_FOUND.