Ana içeriğe geç

Bildirimler API

POST /v1/notifications

Sunucu anahtarı, kapsam notifications:send. Anahtar başına sınırlı. Idempotency-Key kabul eder.

{
"target": { "externalIds": ["user_123", "user_456"] },
"content": {
"tr": {
"title": "Siparişin yola çıktı",
"body": "#48213 bugün kargoda. Uygulamadan takip et.",
"url": "acme://orders/48213",
"image": "https://cdn.acme.example/orders/48213.jpg",
"actions": [{ "id": "track", "title": "Takip et" }, { "id": "help", "title": "Yardım", "url": "acme://support" }]
},
"en": { "title": "Your order is on its way", "body": "Order #48213 ships today." },
"_default": "tr"
},
"data": { "screen": "order", "id": "48213" },
"ttl": 86400,
"collapseId": "order-48213",
"priority": "high",
"presentation": { "sound": "default", "badge": 1, "threadId": "orders", "icon": "https://cdn.acme.example/icon.png" },
"bypass": { "quietHours": true }
}

target — tam olarak bir seçici

SeçiciTipSınır
externalIdsstring[]1–1000
userIdsObjectId[]1–1000
subscriptionIdsObjectId[]1–1000
segmentsegment düğümü
segmentIdbir kayıtlı segmentin ObjectId'si
alltrue

Kullanıcılar bildirime açık, geçersiz olmayan tüm cihazlarına çözülür.

Diğer alanlar

AlanTipVarsayılanNotlar
contentiçerik haritasıcontent / templateId / silent'ten biriİçerik. Yer tutucu serbest.
templateIdObjectIdMetin ve varsayılanlar bir şablondan; istekteki alanlar ezer
silentbooleanfalseArka plan push'u, alert yok; content isteğe bağlı; web atlanır. Sessiz push
dataRecord<string,string>anahtar ≤ 64, değer ≤ 1024 karakter
ttlint saniye2592000 – 2 419 200 (4 hafta)
collapseIdstring ≤ 64
priority"high" | "normal""high"teslimat aciliyeti (APNs 10/5, FCM high/normal)
presentationnesnesound, badge (0–99999), threadId, icon, interruptionLevel (passive|active|time-sensitive|critical), relevanceScore (0–1), channelId
bypass{ frequencyCap?, quietHours? }Teslimat kuralları

Yanıt 202 Accepted

{ "id": "66f3…", "status": "sending" }

id bir kampanya kimliğidir (transactional: true). Sonuç için GET /v1/campaigns/:id/stats'ı yoklayın ya da webhook'lara abone olun.

Hatalar

DurumKodNeden
401unauthorizedeksik/geçersiz anahtar
403forbiddenpublic anahtar ya da notifications:send eksik
422invalid_bodydetails[]'e bakın — en sık target (sıfır ya da iki seçici) ya da content._default
429rate_limitedanahtar başına sınır
409 / 422idempotency_in_progress / idempotency_key_reusedIdempotency
503database_unavailableMongo kapalı

Örnekler

Herkese, sessiz rozet yenileme (yalnızca rozet, ses yok):

{ "target": { "all": true }, "content": { "tr": { "title": "Senkron", "body": "Yenileniyor" }, "_default": "tr" },
"presentation": { "sound": "none", "badge": 0 }, "priority": "normal", "bypass": { "frequencyCap": true, "quietHours": true } }

Bir segment:

{ "target": { "segment": { "and": [ { "field": "tags.plan", "op": "eq", "value": "trial" }, { "field": "createdAt", "op": "lt", "value": "-13d" } ] } },
"content": { "tr": { "title": "Deneme süren yarın bitiyor", "body": "Serini koru — bugün yükselt.", "url": "acme://upgrade" }, "_default": "tr" } }