Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.iletiniz.com/llms.txt

Use this file to discover all available pages before exploring further.

İletiniz aşağıdaki event tiplerini destekler:
EventTetikleyici
message.sentMesaj sağlayıcıya başarıyla iletildi.
message.deliveredDLR ile teslim onaylandı.
message.failedSağlayıcı/operatör reddetti, TTL doldu, kara liste veya unknown sonucu (kalıcı).
contact.opt_outAlıcı opt-out talebi gönderdi. (yol haritasında; şu an üretilmiyor)
Endpoint kayıt ederken hangilerine abone olacağınızı seçebilirsiniz. Liste boş bırakılırsa tüm event’ler gönderilir.

Ortak Zarf

Tüm event’ler aynı dış zarf ile gelir:
{
  "id": "f9c8e7d6a5b4c3d2e1f0a9b8c7d6e5f4",
  "event": "message.delivered",
  "workspace_id": 42,
  "occurred_at": "2026-05-13T20:14:04.512Z",
  "data": { /* event'e özgü, aşağıda */ }
}
AlanAçıklama
id32-karakter hex. Aynı (event, mesaj) çifti her zaman aynı id’yi taşır — idempotent tüketim için bu alanı kullanın.
eventYukarıdaki event tiplerinden biri.
workspace_idWorkspace numeric ID’si.
occurred_atEvent üretildiği an, ISO 8601 UTC.
dataEvent’e özgü payload (aşağıda her event için tam yapı).

message.sent

Mesaj sağlayıcıya teslim edildiğinde fırlatılır. Bu, alıcının cihazına teslim olduğu anlamına gelmez — yalnızca aggregator/Bot API kabul etti.

Düz metin gönderim sonrası

{
  "id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6",
  "event": "message.sent",
  "workspace_id": 42,
  "occurred_at": "2026-05-13T20:14:01.230Z",
  "data": {
    "message_id": 894521,
    "job_id": "k7m4n2p9q8r5s1t6",
    "to": "+905551234567",
    "provider": "netgsm",
    "segments": 1,
    "sent_at": "2026-05-13T20:14:01.230Z"
  }
}

Şablon ile gönderim sonrası

Şablonla gönderildiyse data içinde ek olarak template alanı bulunur:
{
  "id": "b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7",
  "event": "message.sent",
  "workspace_id": 42,
  "occurred_at": "2026-05-13T20:14:01.230Z",
  "data": {
    "message_id": 894522,
    "job_id": "a3b6c9d2e5f8g1h4",
    "to": "+905551112233",
    "provider": "netgsm",
    "segments": 1,
    "sent_at": "2026-05-13T20:14:01.230Z",
    "template": "siparis_kargoda"
  }
}

data Alanları

AlanTipAçıklama
message_idnumberMesajın iletiniz tarafındaki sayısal kimliği. job_id ile birlikte audit/log eşleştirme için tutulabilir.
job_idstringPOST /v1/messages yanıtındaki job_id.
tostringNormalize edilmiş alıcı.
providerstringKullanılan sağlayıcı kodu.
segmentsnumberSMS segment sayısı (Telegram/WhatsApp için 1).
sent_atstringSağlayıcıya teslim edildiği an, ISO 8601 UTC.
templatestring?Yalnızca şablonla gönderildiyse; şablonun key değeri.

message.delivered

Sağlayıcıdan DLR ile teslim raporu alındığında fırlatılır. Yalnızca SMS ve WhatsApp kanallarında anlamlıdır; Telegram’da message.sent zaten teslim demektir, ayrıca delivered event’i üretilmez.
{
  "id": "f9c8e7d6a5b4c3d2e1f0a9b8c7d6e5f4",
  "event": "message.delivered",
  "workspace_id": 42,
  "occurred_at": "2026-05-13T20:14:04.512Z",
  "data": {
    "message_id": 894521,
    "status": "delivered",
    "error_code": null,
    "error_message": null,
    "finalized_at": "2026-05-13T20:14:04.512Z"
  }
}

data Alanları

AlanTipAçıklama
message_idnumberİlgili mesajın sayısal kimliği. message.sent event’inde gelen değerle eşleşir.
statusenumHer zaman delivered.
error_codestring | nullBu event’te daima null.
error_messagestring | nullBu event’te daima null.
finalized_atstringStatus’un finalize edildiği an, ISO 8601 UTC.
job_id, to, provider gibi alanların bu event’in data payload’unda olmadığına dikkat edin. Bunlara ihtiyacınız varsa message_id üzerinden message.sent payload’unu kendi tarafınızda eşleştirin (önerilen) veya GET /v1/messages/{job_id} ile detayları çekin.

message.failed

Sağlayıcı/operatör reddetti, TTL doldu, alıcı kara liste, içerik filtresi, veya DLR sorgusu unknown ile finalize oldu. Bu event’in data.status alanı tam final durumu söyler.
{
  "id": "0e1d2c3b4a596877665544332211ffee",
  "event": "message.failed",
  "workspace_id": 42,
  "occurred_at": "2026-05-13T20:18:12.000Z",
  "data": {
    "message_id": 894699,
    "status": "expired",
    "error_code": "DELIVERY_TIMEOUT",
    "error_message": "Sağlayıcı TTL içinde teslim raporu alamadı.",
    "finalized_at": "2026-05-13T20:18:12.000Z"
  }
}

data Alanları

AlanTipAçıklama
message_idnumberİlgili mesajın sayısal kimliği.
statusenumFinal durum: failed, expired, rejected veya unknown.
error_codestring | nullSağlayıcının dönen kodu veya iletiniz’in normalize ettiği sabit slug (örn. netgsm_40, verimor_INVALID_SOURCE_ADDRESS, DELIVERY_TIMEOUT).
error_messagestring | nullİnsan tarafından okunabilir hata mesajı.
finalized_atstringFinal duruma geçildiği an, ISO 8601 UTC.

Status Değerleri

data.statusAnlamı
failedSağlayıcı/operatör gönderimi reddetti veya kalıcı hata aldı.
expiredSağlayıcı TTL içinde teslim edemedi (alıcı kapalı, sinyal yok).
rejectedAlıcı kara liste, opt-out, içerik filtresi.
unknownDLR sorgusu sınırlı denemeden sonra kesin sonuç alamadı.

contact.opt_out (yol haritasında)

Alıcı SMS yoluyla vazgeçme talebi iletti (STOP, IPTAL keyword’leri veya operatör 0850 hattı üzerinden). Bu event şu an üretilmemekte, opt-out yönetimi yol haritasındadır. Belge eklendiğinde Opt-out sayfası tam akışı açıklayacaktır.

Idempotency

Aynı id değerini ikinci kez gördüğünüzde işlemi tekrarlamayın. Sebepleri:
  • Endpoint’iniz 5xx döndü → yeniden denemede aynı id geliyor.
  • Network bölünmesinde 2xx yanıtınız bize ulaşmadı → yeniden denenir.
Doğru pratik: id’yi tekil bir indekste tutun (örn. Redis SET-NX, veya kendi veritabanınızda unique constraint). Var ise no-op dönün, 200 ile bitirin.

Mesaj Sayısal Kimliği

Her event payload’unda görünen message_id alanı iletiniz tarafındaki sayısal kimliktir ve job_id ile bire-bir eşlenir. message.sent event’ini aldığınızda hem job_id’yi hem de message_id’yi kendi tarafınızda eşleştirip saklarsanız, sonraki message.delivered/message.failed event’lerinde (yalnızca message_id taşıyan) doğru mesajı bulabilirsiniz.