Kavramlar
Open Notification'da her şey şu altı şeyden biridir. Bunlar netleşince panel, SDK'lar ve REST API aynı dili konuşur.
Uygulama (App)
Uygulama bir kiracıdır. Adı, slug'ı, platform başına en fazla bir kimlik bilgisi (APNs, FCM, Web Push), kendi API anahtarları, teslimat kuralları ve webhook'ları vardır. Her kullanıcı, abonelik, kampanya ve olay tam olarak bir uygulamaya aittir; sistemin çalıştırdığı her sorgu bir uygulamayla kapsanır — bir uygulamanın anahtarıyla başkasının satırlarını okumanın yolu yoktur.
Tipik kurulumlar:
- ürün başına bir uygulama (iOS + Android + web'i olan ürün tek uygulamadır, üç kimlik bilgisiyle),
- staging için ikinci bir uygulama; test cihazları üretim kampanyası almasın.
Kullanıcı (User)
Kullanıcı bir kişidir — kimliğin ve hedefleme özelliklerinin sahibi:
| Özellik | Anlamı |
|---|---|
externalId | Sizin kullanıcı kimliğiniz ("user_123"). Anonimken null. |
tags | Serbest anahtar → string/sayı/boolean haritası. Segmentlerin filtrelediği, yer tutucuların okuduğu yer. |
language | Kampanya içeriğinin hangi dil sürümünün gideceğini seçer. |
timezone | IANA saat dilimi. Sessiz saatleri ve "kullanıcının 19:30'unda gönder"i sürer. |
country | ISO 3166-1 alpha-2. |
Her cihazın, login'den önce bile bir kullanıcısı vardır. externalId vermeden abone olan cihaz anonim bir kullanıcı satırı alır. Uygulamanız sonra login("user_123") çağırdığında bu anonim kullanıcı yeniden adlandırılır — ya da user_123 zaten varsa cihaz onun altına taşınır. Kurallar Kimlik sayfasında.
Abonelik (Subscription)
Abonelik bir cihazdır (ya da bir tarayıcı profili): APNs token'ını, FCM registration token'ını ya da web push endpoint'i ve şifreleme anahtarlarını tutan satır. Cihaz bilgilerini (platform, appVersion, osVersion, deviceModel, browser, standalone) ve iki anahtarı da taşır:
optedIn— kullanıcı abonelikten çıkınca ya da 90 gün etkinlik olmayıncafalse. Hedeflenmez.invalidatedAt— Apple/Google/push servisi token'ın öldüğünü söylediğinde (410,Unregistered,UNREGISTERED) damgalanır. Hedeflenmez.
Telefonu ve dizüstü bilgisayarı olan kullanıcının iki aboneliği vardır. Kullanıcıya yazılan tag'ler ikisine de ulaşır — kullanıcı özellikleri her abonelik satırına kopyalanır ki segmentler, fan-out ve kişiselleştirme tek koleksiyonda kalsın.
Kampanya (Campaign)
Kampanya bir gönderimdir: içerik (dil başına), hedef, zamanlama, teslimat seçenekleri ve çalışan sayaçlar.
| Tür | Nasıl başlar | Nasıl görünür |
|---|---|---|
| Kampanya | Panel sihirbazı ya da POST /v1/campaigns + /send | Adlı, segment hedefli, zamanlanmış, raporlanan. |
| Transactional | Backend'inizden POST /v1/notifications | Belirli kullanıcılara/cihazlara, hemen. Yine bir kampanya satırı alır (transactional: true), dolayısıyla yine raporu vardır. |
Durumlar: draft → scheduled → sending → sent; yanda cancelled (fan-out öncesi) ve failed.
Olay (Event)
Olay bir push'un başına gelen tek bir şeydir:
| Tür | Yazan | Anlamı |
|---|---|---|
sent | worker | Transport kabul etti. |
failed | worker | Transport reddetti; meta.code nedenini söyler. |
skipped | worker | Bir teslimat kuralı tuttu; meta.reason quiet_hours ya da frequency_cap. |
delivered | SDK | Cihaz bildirimi çizdi. |
opened | SDK | Kullanıcı dokundu. |
clicked | SDK | Kullanıcı bir aksiyon butonuna dokundu. |
dismissed | SDK | Kullanıcı kaydırıp kapattı (yalnızca Android ve web). |
Olaylar 180 gün TTL'li time-series bir koleksiyonda yaşar ve kampanya sayaçlarına toplanır. Oranlar payda olarak delivered ile hesaplanır — bkz. Analitik.
API anahtarları
| Önek | Ad | Nerede yaşar | Yapabildikleri |
|---|---|---|---|
| sk_live_… | sunucu anahtarı | backend, CI | kapsamlarının izin verdiği her şey: gönderim, kullanıcı yönetimi, rapor okuma |
| pk_live_… | public anahtar | uygulama paketi, web sayfası | cihaz kaydetme; o cihazın kullanıcısını güncelleme |
Uygulama kimliği anahtara gömülüdür; doğrulama tek indexli sorgu + bcrypt karşılaştırmadır. Anahtarların kapsamları vardır (notifications:send, campaigns:write, …) ve Ayarlar'dan tek tek iptal edilir. Başlıklar ve hatalar için API genel bakış.
Panelin kendi girişi
Panel üyeleri (owner/admin/editor/viewer) API anahtarlarından ayrıdır. E-posta + parolayla girerler; panel API'ye sunucuyu hiç terk etmeyen paylaşılan bir ADMIN_API_TOKEN ile dahili /v1/admin yüzeyinden ulaşır. Bkz. Üyeler.