E-posta · SMS · Push bildirim altyapısı

Bildirim gider. Sağlayıcı düşse bile.

Notifike, ürünlerinin bütün bildirimlerini tek hattan geçirir. Her kanala bir master sağlayıcı ve arkasına yedekler koyarsın. Master hata verince sıradaki devralır, mesaj yoluna devam eder.

12 sağlayıcı 3 kanal HTTP veya RabbitMQ ile gönderim LDAP · OIDC SSO

Elindeki bütün ürünler e-postayı, SMS'i ve push'u aynı yerden gönderir. Sağlayıcılar panelden yönetilir. Her uygulamanın her kanalına bir rota çizilir: önce master, sonra yedekler. Gece yarısı bir sağlayıcı düşerse kimse kalkıp ayar değiştirmez.

notifike.sendX-Api-Keymaster → yedekimzalı webhooktr-TR · en-US

Gönderim hattı

Dört kapı,
tek hat.

İstek nereden gelirse gelsin aynı kabulden geçer. Doğrulanır, her alıcı için bir mesaj satırı yazılır ve kanalın kendi kuyruğuna 100'lük partiler halinde düşer.

Kapılar

HTTP APIPOST notifications/send · X-Api-Key
RabbitMQnotifike.send · AppCode
PanelYeni gönderim · JWT
Toplu gönderimKampanya · CSV alıcı listesi

Kabul

Kabul

Her kapı aynı servisi çağırır, kurallar her yerde aynıdır.

  1. Uygulama çözülürAPI anahtarının hash'i ya da uygulama kodu; kapalı uygulama 403
  2. Kanal açık mıDuraklatılmış kanal yine kabul eder, mesaj Queued bekler
  3. Alıcı normalize edilir0532 123 41 18 → +905321234118, e-posta küçük harfe
  4. Günlük limitRedis sayacı; aşılırsa 429 DailyLimitExceeded
  5. ExternalId tekilliğiAynı istek ikinci kez gelirse yeni satır açılmaz
  6. Alıcı başına bir mesajTek seferde toplu yazım, döngüde veritabanı yok
  7. Kuyruğa yayın100'lük partiler; kaybolan yayını süpürücü toplar

Dağıtım kuyrukları

E-postanotifike.dispatch.email
x-max-priority 10prefetch 16
SMSnotifike.dispatch.sms
OTP öne geçerprefetch 16
Pushnotifike.dispatch.push
FCM 500'lük multicastprefetch 16
Ayrı kuyruklar: bir kanalın yığılması diğerini bekletmez. Öncelik: Priority 9 olan OTP, bülten trafiğinin önüne geçer.

Failover, adım adım

Master düştü.
Mesaj yine gitti.

uygulama shop · kanal sms · öncelik 9
rota Netgsm → Verimor Yedek → Twilio

Mesaj0193a7c2…
SSHOP · +90 532 ••• 41 18
Doğrulama kodun:482 913
externalId otp-9921Teslim edildi
Queued
Processing
Sent
Delivered
RotaMaxAttempts 3
Order 0 · master Netgsm HTTP 503 sağlıklı devre açık · 60 sn
Order 1 · yedek Verimor Yedek 200 OK sağlıklı
Order 2 · yedek Twilio gerekmedi sağlıklı
DeliveryAttemptsdispatcher-2
11:30:04.112claimQueued → Processing · LockedUntil +5 dk
11:30:04.118routesms · shop · 3 adım
11:30:04.120try 1Netgsm · timeout 10 sn
11:30:05.141failHTTP 503 · 1021 ms · geçici hata
11:30:05.141cbNetgsm 5/5 hata → devre 60 sn açık
11:30:05.142try 2Verimor Yedek · failover
11:30:05.326ok200 OK · 184 ms · Sent
11:30:07.904dlrDelivered · operatör raporu
11:30:07.910hookmessage.delivered → shop · imzalı
1,214 snistekten Sent'e
1failover
0insan müdahalesi

Sağlayıcılar

On iki sağlayıcı.
Hangisi düşerse.

Hesapları panelden eklersin, bağlantıyı tek tıkla test edersin. Bir sağlayıcı arka arkaya hata verirse devre açılır ve rota onu atlar.

E-postaSMTPSendGridAWS SESInfobipSMTPSendGridAWS SES
NetgsmVerimorİleti MerkeziTwilioAWS SNSInfobipSMS
PushFCMAPNsOneSignalFCMAPNsOneSignalFCM
Devre kesici60 sn içinde art arda 5 geçici hata, devreyi 60 sn açar. Süre dolunca tek deneme yapılır, başarılıysa kapanır.
Hız sınırıHer hesabın saniye başına limiti var. Doluysa en çok 1 sn beklenir, sonra sıradaki sağlayıcıya geçilir.
Teslim raporlarıSendGrid, Twilio ve Infobip geri çağrıları mesajı Delivered yapar. Bounce olan adres engel listesine girer.

Ölçek

100.000 alıcı.
Tek komut.

Yazılan mesaj satırı100.000
Yayınlanan parti1.000
Gönderilen100.000
Durumsuz API ve dispatcher, replika ekleyerek büyür Lider seçimli süpürücü her 15 sn'de bir Set tabanlı sahiplenme, aynı mesaj iki kez gitmez Çöken replikanın kilidi 5 dk sonra çözülür
1 hücre = 100 mesajlık parti gönderildi yeniden denendi

Webhook

Durum sana kendisi gelir.

Mesaj gönderildiğinde, teslim edildiğinde ya da başarısız olduğunda Notifike uygulamanın adresine imzalı bir POST atar. 2xx dönmezse 1, 2, 4 dakika diye açılarak 8 kez dener.

message.sentmessage.deliveredmessage.failedpush.token_unregistered
deneme 1bekleme 2^n dkdeneme 8
POST https://shop.example.com/hooks/notifike
X-Notifike-Event: message.delivered
X-Notifike-Timestamp: 1792668607
X-Notifike-Signature: sha256=9f3c0be17d42…a47d

{
  "id": 81233,
  "event": "message.delivered",
  "occurredAt": "2026-10-22T11:30:07Z",
  "clientApp": "shop",
  "message": {
    "channel": "sms",
    "status": "delivered",
    "to": "+905321234118",
    "externalId": "otp-9921",
    "providerName": "Verimor Yedek",
    "usedFailover": true
  }
}
imza = HMAC-SHA256(secret, timestamp + "." + body) · secret 64 karakter hex, yalnız üretildiği an bir kez gösterilir

Entegrasyon

İki satırda bağlan.

.NET projeleri Notifike.Contracts paketini kullanır: HTTP istemcisi ya da kuyruk yayıncısı. Diğer her dil düz HTTP ile gönderir.

terminal
curl -X POST https://api.notifike.<tld>/api/v1.0/notifications/send \
  -H "X-Api-Key: $NOTIFIKE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": 2,
    "templateKey": "otp",
    "priority": 9,
    "recipients": [{
      "to": "0532 123 41 18",
      "externalId": "otp-9921",
      "variables": [{ "key": "code", "value": "482913" }]
    }]
  }'
Şablonlar

Her dil için ayrı çeviri, {{degisken}} alanları. E-postada HTML kaçışlı, {{{ham}}} kaçışsız.

Zamanlama

ScheduledAt verirsen mesaj o ana kadar bekler, süpürücü vakti gelince yayınlar.

E-posta ekleri

En çok 10 dosya, toplam 10 MB. Aynı dosya ikinci kez gelirse yeniden saklanmaz.

Engel listesi

Bounce ve şikâyet eden adresler otomatik engellenir, mesajları Suppressed olur.

Opsiyonel modüller

İstersen açık,
istersen kapalı.

Uygulama içi bildirim kutusu ve audit log gönderim hattından ayrı çalışır. API ayarından kapatılan modülün uçları 404 döner, panelde menüsü görünmez. Dene:

Uygulama içi bildirim

Notifike:Modules:InApp:Enabled
AY
Ayşe raporunu paylaştıEkim gider raporu · 2 dk önce
MK
Mert seni etiketlediSprint 42 · 14 dk önce
S
Bakım penceresi planlandıSistem · dün
404 ModuleDisableduçlar kapalı · notifike.inapp dinlenmiyor

Kullanıcıyı uygulama UserKey ile söyler. Aynı DedupeKey pencere içinde ikinci kez yazılmaz.

Audit log

Notifike:Modules:Audit:Enabled
11:42:09invoice.approved · Invoice #4471ayse.k
11:40:51user.role_changed · User 2210admin
11:38:17project.archived · Project 98mert.y
11:31:02login.succeeded · 85.105.x.xayse.k
404 ModuleDisableduçlar kapalı · notifike.audit dinlenmiyor

Değiştirilemez kayıtlar, aylık bölümler. Süresi dolan ay satır satır silinmez, bölüm olarak düşürülür.

Panel girişi

Kurumun hesabıyla gir.

Panel yalnız kurum içi kullanıcılar içindir. Yerel hesap, Active Directory ya da kurumun SSO'su ile girilir. Gruplar rollere eşlenir, rol her girişte senkronlanabilir.

Yerel kullanıcıŞifre ve kilit politikası panelde
local
LDAP / Active DirectoryGrup DN'i ya da CN ile rol eşleme
ldap
KeycloakOIDC SSO, realm rolleri
oidc
Microsoft Entra IDOIDC SSO, grup claim'i
oidc
Google WorkspaceOIDC SSO, alan adı kısıtı
oidc

Kurulum

Yığını
ayağa kaldır.

cp .env.example .env
docker compose up --build
Panellocalhost:3000
API · Scalarlocalhost:5000/api/documentation
Dispatcher sağlığılocalhost:5010/health/ready
RabbitMQlocalhost:15672
Seqlocalhost:5341