JetLogi
Santral API · Entegrasyon Rehberi IVR ve sesli asistan entegrasyonunu yapan santral ekibi için

Santral API Rehberi

JetLogi müşteri hattındaki IVR ve sesli asistanın gönderi bilgisini nasıl sorgulayacağını ve destek kaydını nasıl açacağını anlatır. Alanların ve şemaların tam listesi API Referansı'ndadır; bu sayfa kullanım sırasını, örnekleri ve kuralları anlatır.

1. Genel bakış

Santral, JetLogi sistemine yalnız bu API üzerinden erişir; veritabanı veya başka bir iç sisteme bağlantı yoktur. API, sesli asistanın ihtiyaç duyduğu alanları döner. Alıcının adı, açık adresi, teslim kanıtı ve kuryenin telefon numarası dönmez.

İhtiyaçUçIVR karşılığı
Arayan numaraya kayıtlı gönderilerGET /shipments?phone=Menü 3 · sesli asistanın ilk sorgusu
Tek gönderinin durumuGET /shipments/{reference}Menü 1 (gönderi no) · Menü 2 (barkod / referans)
Hızlandırma talebi veya destek kaydıPOST /shipments/{reference}/ticketsArayan talep bıraktığında

Açılan kayıtlar JetLogi destek ekranına düşer ve gönderiye bağlanır. Operasyon ekibi kaydı oradan takip eder.

2. Hızlı başlangıç

Örnekler test (preprod) ortamını kullanır. TOKEN yerine size iletilen token'ı yazın.

  1. Değişkenleri tanımlayın.
    BASE=https://api-ivr.preprod.jetdiji.com/api/ivr/v1
    TOKEN=<size iletilen token>
  2. Arayan numarayla gönderileri sorgulayın.
    curl -s "$BASE/shipments?phone=905321110026" \
      -H "Authorization: Bearer $TOKEN"
  3. Tek gönderiyi sorgulayın. Yanıttaki reference değerini kullanın.
    curl -s "$BASE/shipments/JL100245871" \
      -H "Authorization: Bearer $TOKEN"
  4. Hızlandırma talebi açın.
    curl -s -X POST "$BASE/shipments/JL100245871/tickets" \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"kind":"expedite","note":"Müşteri teslimatın hızlandırılmasını istedi.","callerPhone":"905321110026","callId":"111-55849811574444.1"}'

Test ortamında açılan kayıtlar gerçek destek ekranına düşer. Test kayıtlarının note alanına "TEST" yazın.

3. Ortamlar ve erişim

OrtamTaban adresDoküman
Test (preprod)https://api-ivr.preprod.jetdiji.com/api/ivr/v1https://api-ivr.preprod.jetdiji.com/swagger/
Canlıhttps://api-ivr.jetdiji.com/api/ivr/v1https://api-ivr.jetdiji.com/swagger/

Canlı ortam, testler tamamlandıktan sonra ayrı bir token ile açılır.

Kimlik doğrulama

  • Her istekte Authorization: Bearer <token> başlığı gönderilir. Token yoksa veya yanlışsa 401 UNAUTHORIZED döner.
  • Token süresizdir. Test ve canlı ortamın token'ları farklıdır.
  • Token JetLogi tarafından birebir ve güvenli bir kanaldan iletilir. Token'ı e-posta, grup yazışması, kod deposu veya log gibi yerlere yazmayın.
  • Token'ın sızdığından şüphelenirseniz JetLogi'ye bildirin. Yeni token üretilir, eskisi hemen geçersiz olur.

Bağlantı kuralları

  • Yalnız HTTPS kabul edilir. Bu host'ta bu rehberde anlatılan uçlar dışında bir yol açık değildir (404).
  • Hız sınırı: IP başına dakikada 60 istek. Aşılırsa 429 RATE_LIMITED döner.
  • IP izin listesi: Canlı ortamda yalnız santralin bildireceği çıkış IP'lerinden gelen istekler kabul edilecek. Ayrıntı için Netleştirilecek konular'a bakın.
  • Zaman aşımı: Yanıtlar genelde 1 saniyenin altındadır. İstemci tarafında 5 saniyelik bir zaman aşımı öneririz. Süre dolarsa arayan canlı temsilciye aktarılmalıdır.
  • Biçimler: Gövde JSON ve UTF-8'dir. Tarihler ISO 8601 biçimindedir ve Türkiye saatiyle (+03:00) döner, örneğin 2026-09-14T08:12:00+03:00.

4. Telefonla sorgulama

GET /shipments?phone={numara}

Numaraya alıcı olarak kayıtlı gönderileri döner. Sesli asistanın ilk sorgusu bu olmalıdır: çoğu arayanın gönderi numarasını sormaya gerek kalmaz.

ParametreZorunluAçıklama
phoneEvetArayan numara (ANI). 905321110026, 05321110026, 5321110026 ve +90 532 111 00 26 aynı numara sayılır. Yalnız Türkiye cep numaraları geçerlidir.

Davranış

  • Açık gönderiler önce gelir. Teslim, iade veya iptal ile kapanmamış gönderiler listenin başındadır; ardından son harekete göre yeniden eskiye sıralanır.
  • En fazla 10 gönderi döner.
  • Kayıt yoksa 200 ve boş liste döner. Bu bir hata değildir; asistan gönderi numarası veya barkod istemelidir.
  • Numara geçersizse 422 PHONE_INVALID döner (sabit hat, yabancı numara, eksik hane gibi).

Örnek yanıt

{
  "shipments": [
    {
      "reference": "JL100245871",
      "shipmentNumber": "SHP-260914-000123",
      "trackingNumber": "JL100245871",
      "company": "AlbarakaTürk",
      "product": "Kart Teslimatı",
      "status": "OUT_FOR_DELIVERY",
      "statusCode": "4020",
      "statusName": "Dağıtıma Çıktı",
      "isOpen": true,
      "custodyAt": "2026-09-14T08:12:00+03:00",
      "slotEndAt": "2026-09-14T18:00:00+03:00",
      "plannedDeliveryAt": "2026-09-14T00:00:00+03:00",
      "deliveredAt": null,
      "lastEventAt": "2026-09-14T08:12:00+03:00",
      "courierName": "Ruken T.",
      "agencyName": "Güney / Denizli"
    },
    {
      "reference": "JL100198342",
      "shipmentNumber": "SHP-260902-000088",
      "trackingNumber": "JL100198342",
      "company": "Vakıf Katılım",
      "product": "Kart Teslimatı",
      "status": "DELIVERED",
      "statusCode": "5010",
      "statusName": "Teslim Edildi",
      "isOpen": false,
      "custodyAt": null,
      "slotEndAt": "2026-09-05T18:00:00+03:00",
      "plannedDeliveryAt": null,
      "deliveredAt": "2026-09-04T14:37:00+03:00",
      "lastEventAt": "2026-09-04T14:37:00+03:00",
      "courierName": null,
      "agencyName": null
    }
  ]
}

Birden fazla açık gönderi varsa asistan firmayı ve ürünü söyleyerek hangisini sorduğunu teyit etmelidir, örneğin "AlbarakaTürk kartınız için mi arıyorsunuz?". Numara okunacaksa reference kullanılmalıdır.

5. Gönderi no / barkod ile sorgulama

GET /shipments/{reference}

reference aşağıdakilerden biri olabilir; hangisi olduğunu belirtmeniz gerekmez:

  • Gönderi numarası veya takip numarası (menü 1)
  • Etiketteki barkod (menü 2)
  • Gönderiyi veren firmanın (bankanın) referans numarası (menü 2)

Büyük/küçük harf fark etmez. Tuşlamayla girilen değerlerin başındaki ve sonundaki boşluklar yok sayılır.

Örnek yanıt

Telefonla sorgudaki alanlara ek olarak customerPhone döner.

{
  "reference": "JL100245871",
  "shipmentNumber": "SHP-260914-000123",
  "trackingNumber": "JL100245871",
  "company": "AlbarakaTürk",
  "product": "Kart Teslimatı",
  "status": "OUT_FOR_DELIVERY",
  "statusCode": "4020",
  "statusName": "Dağıtıma Çıktı",
  "isOpen": true,
  "custodyAt": "2026-09-14T08:12:00+03:00",
  "slotEndAt": "2026-09-14T18:00:00+03:00",
  "plannedDeliveryAt": "2026-09-14T00:00:00+03:00",
  "deliveredAt": null,
  "lastEventAt": "2026-09-14T08:12:00+03:00",
  "courierName": "Ruken T.",
  "agencyName": "Güney / Denizli",
  "customerPhone": "905321110026"
}

Olası sonuçlar

HTTPNe zamanAsistan ne yapmalı
200Tek gönderi bulunduDurumu kurallara göre söyler.
404 SHIPMENT_NOT_FOUNDEşleşen gönderi yokNumarayı bir kez daha ister. İkinci denemede de bulunamazsa canlı temsilciye aktarır.
409 REFERENCE_AMBIGUOUSDeğer birden fazla gönderiyle eşleşti (genelde kısa bir firma referansı)Etiketteki gönderi numarasını veya barkodu ister.

customerPhone yalnız arayan numarayla karşılaştırmak içindir; sesli okunmaz. Bu alanın biçimi henüz kesinleşmedi; bkz. Netleştirilecek konular.

6. Destek kaydı oluşturma

POST /shipments/{reference}/tickets

Arayanın talebini gönderiye bağlı bir destek kaydı olarak açar. reference sorgu uçlarındakiyle aynı değerleri kabul eder.

İstek gövdesi

AlanZorunluAçıklama
kindEvetTalep türü. Aşağıdaki tabloya bakın.
noteHayırGörüşmenin kısa ve olgusal özeti, en çok 2000 karakter. OTP, kart numarası, TCKN, şifre gibi hassas veri yazılmaz.
callerPhoneHayırArayan numara. Operasyon ekibinin geri dönüşü için kayda eklenir.
callIdHayırSantralin çağrı kimliği (uniqueid). Kaydı ses kaydıyla eşleştirmek için kullanılır.
kindNe zamanÖncelik
expediteArayan teslimatın hızlandırılmasını istiyorYüksek
supportGenel destek veya geri arama talebiNormal
complaintŞikâyetYüksek
delivery_issue"Teslim edildi görünüyor ama almadım", hasar, uzun süre hareketsizlikYüksek
addressAdres değişikliği talebi (talep alınır, değişiklik sözü verilmez)Normal

Yanıtlar

201: yeni kayıt açıldı

{ "ticketReference": "TKT-261006-3F9A1C2B", "status": "open", "duplicate": false }

200: aynı konuda açık kayıt zaten var

{ "ticketReference": "TKT-261006-3F9A1C2B", "status": "open", "duplicate": true }
  • Aynı gönderi ve aynı kind için son 24 saatte açık bir kayıt varsa yeni kayıt açılmaz, mevcut kayıt döner. Asistan "talebiniz zaten kayıtlı, ekibimiz ilgileniyor" diyebilir.
  • status değeri open, ya da kayıt ilerlediyse güncel durumudur (assigned, in_progress gibi).
  • ticketReference arayana okunabilir. Asistan dönüş süresi taahhüt etmemelidir.

7. Alan sözlüğü

AlanAnlamıSesli okunur mu?
referenceArayana okunacak numara: takip numarası, yoksa gönderi numarasıEvet
shipmentNumber / trackingNumberJetLogi gönderi ve takip numaralarıGerekirse
companyGönderiyi veren firma (ör. banka)Evet
productÜrün veya hizmet (ör. Kart Teslimatı, HGS)Evet
statusSade durum grubu, bölüm 8İfadeye çevrilerek
statusCodeJetLogi iç statü kodu (raporlama içindir)Hayır
statusNameStatünün Türkçe adıİsteğe bağlı
isOpenTeslim, iade veya iptal ile kapanmadıysa trueHayır
custodyAtZimmet tarihi: gönderinin şu an bulunduğu kuryeye geçtiği an. Kuryede değilse null.Evet
slotEndAtSon teslim tarihi. Kesin teslim saati değildir."En geç … tarihine kadar" biçiminde
plannedDeliveryAtPlanlanan veya randevulu teslim günüYalnız gün olarak
deliveredAtTeslim edildiyse teslim zamanıEvet
lastEventAtSon hareket zamanıEvet
courierNameKuryenin adı ve soyadının baş harfi (ör. "Ruken T.")Evet
agencyNameGönderinin bulunduğu acente veya dağıtım ortağıEvet
customerPhoneAlıcının cep telefonu (yalnız tek gönderi sorgusunda)Hayır

Değeri null olan bir alan "bilgi yok" demektir. Asistan bu bilgiyi tahmin etmez ve söylemez.

8. Durum grupları

JetLogi'de onlarca iç statü kodu var. Sesli asistanın bunları bilmesi gerekmez: status alanı, kodları aşağıdaki gruplardan birine indirger. Önerilen ifadeler örnektir; anlamı değiştirmeden uyarlanabilir.

statusAnlamıÖnerilen ifade
PREPARINGGönderi hazırlanıyor veya eşleniyor"Gönderiniz hazırlanıyor, dağıtıma çıktığında bilgilendirileceksiniz."
IN_TRANSITYolda veya şubeler arası transferde"Gönderiniz dağıtım bölgenize doğru yolda."
AT_BRANCHDağıtım şubesinde"Gönderiniz dağıtım şubesine ulaştı."
OUT_FOR_DELIVERYKuryede, dağıtımda"Gönderiniz {courierName} isimli kuryemizde, dağıtımda." Saat söylenmez.
DELIVEREDTeslim edildi"Gönderiniz {deliveredAt} tarihinde teslim edildi."
DELIVERY_FAILEDTeslim denemesi başarısız; tekrar denenecek veya işlemde"Teslimat denemesi tamamlanamadı, gönderiniz işlemde." Gerekirse kayıt açılır.
RETURNINGİade sürecinde"Gönderiniz iade sürecinde." Ayrıntı için canlı temsilciye aktarılır.
CANCELLEDGönderi iptal edildi"Bu gönderi için işlem sonlandırılmış görünüyor." Ayrıntı için canlı temsilciye aktarılır.
UNKNOWNSınıflanamadıDurum söylenmez; canlı temsilciye aktarılır.

9. Sesli asistan kuralları

Bu kurallar JetLogi'nin santral iş gereksinimleri dosyasındaki kesin kuralların API alanlarına karşılığıdır.

KuralAPI'deki karşılığı
Doğrulanmamış tarih veya saat söylenmez; "bugün kesin gelir" denmez.Yalnız dolu tarih alanları kullanılır. slotEndAt "en geç" sınırıdır.
Kurye kişisel numarası paylaşılmaz.API kurye telefonu dönmez. Kuryeye bağlantı JetLogi'nin maskeli arama akışıyla yapılır.
Yanlış kişiye gönderi detayı verilmez.Gönderi no ile yapılan sorguda arayan numara customerPhone ile eşleşmiyorsa durum dışında detay verilmez.
"Kayıp" ya da "iptal edildi" kesin hükmü verilmez.DELIVERY_FAILED ve RETURNING için yalnız "işlemde" veya "iade sürecinde" denir; inceleme gerekiyorsa delivery_issue kaydı açılır.
"Teslim edildi ama almadım" itirazı her zaman yetkiliye gider.delivery_issue kaydı açılır ve arayan canlı temsilciye aktarılır.
OTP, PIN, kart numarası, şifre istenmez ve tekrar edilmez.Bu bilgiler note alanına da yazılmaz.
Arayan yetkili isterse engellenmez.API çağrısı beklenmeden canlı temsilciye aktarılır.

10. Önerilen çağrı akışları

Sesli asistan (serbest konuşma)

  1. Arayan numarayla GET /shipments?phone= çağrılır.
  2. Tek açık gönderi varsa doğrudan onun için konuşulur. Birden fazla varsa firma ve ürün söylenerek teyit edilir. Hiç yoksa gönderi numarası veya barkod istenir ve GET /shipments/{reference} çağrılır.
  3. Durum, durum grubuna ve kurallara göre söylenir.
  4. Arayan hızlandırma veya destek isterse POST /tickets ile kayıt açılır ve ticketReference okunur.
  5. Canlı temsilciye aktarılırken reference ve verilen bilgi aktarım özetine eklenir; arayan baştan anlatmak zorunda kalmaz.

Tuşlamalı IVR

MenüÇağrı
1 · Gönderi numarasıGET /shipments/{tuşlanan değer}
2 · Barkod veya referansGET /shipments/{tuşlanan değer}
3 · Aradığınız numaraGET /shipments?phone={ANI}

11. Hatalar ve yedek davranış

Tüm hatalar aynı biçimde döner. Karar verirken yalnız error.code alanına bakın; message metni değişebilir.

{ "error": { "code": "SHIPMENT_NOT_FOUND", "message": "Shipment was not found." } }
HTTPcodeÖnerilen davranış
401UNAUTHORIZEDYapılandırma hatası. Arayan canlı temsilciye aktarılır, JetLogi'ye bildirilir.
403IP_NOT_ALLOWEDİstek izinli olmayan bir IP'den geldi. Yapılandırma hatası; yukarıdakiyle aynı.
404SHIPMENT_NOT_FOUNDNumara bir kez daha istenir, sonra canlı temsilciye aktarılır.
409REFERENCE_AMBIGUOUSEtiketteki gönderi numarası veya barkod istenir.
422PHONE_INVALID, REFERENCE_INVALID, VALIDATION_ERRORGirdi hatalı. Numara yeniden istenir; telefon geçersizse gönderi numarası sorulur.
429RATE_LIMITEDKısa bir süre sonra bir kez tekrar denenir, olmazsa canlı temsilciye aktarılır.
500INTERNAL_ERRORArayan canlı temsilciye aktarılır.

Sorgu uçları (GET) güvenle tekrar denenebilir. Kayıt ucu (POST /tickets) da 24 saatlik tekrar korumasıyla güvenlidir: aynı istek ikinci kez gönderilirse yeni kayıt açılmaz.

12. Netleştirilecek konular

Aşağıdaki iki konuda santral tarafının görüşünü bekliyoruz. Yanıtlara göre bu rehber ve API güncellenecek.

12.1 customerPhone alanı ne için kullanılacak?

Gönderi numarasıyla yapılan sorguda "müşteri iletişim numarası" istendi ve şu an alıcının cep telefonu açık olarak dönüyor.

Neden soruyoruz?

  • Toplu veri riski: Gönderi numaraları büyük ölçüde sıralıdır. Token bir şekilde ele geçirilirse numaralar sırayla denenerek alıcıların telefon numaraları toplanabilir.
  • KVKK veri minimizasyonu: Kişisel veri yalnız amacın gerektirdiği kadar paylaşılmalıdır. Amaç arayanın gönderi sahibi olup olmadığını anlamaksa, numaranın kendisini paylaşmak gerekmez.

Önerimiz: Amaç karşılaştırmaysa, arayan numarayı sorguyla birlikte gönderin; biz numarayı paylaşmadan eşleşip eşleşmediğini dönelim.

GET /shipments/JL100245871?callerPhone=905321110026

{ "reference": "JL100245871", ..., "callerMatches": true }

Numaraya başka bir amaçla ihtiyaç varsa (temsilci ekranında göstermek, geri arama yapmak gibi) amacı paylaşın. Buna göre numarayı maskeli (90532***0026) dönmek gibi bir çözümü birlikte değerlendirelim.

12.2 API'ye hangi çıkış IP'lerinden erişeceksiniz?

Santral sunucularının bu API'yi çağıracağı sabit çıkış IP adreslerinin listesini rica ediyoruz. Yedek ve felaket kurtarma sunucuları da listeye dahil olmalıdır.

Neden soruyoruz?

  • İkinci koruma katmanı: Şu an tek koruma token'dır. IP izin listesiyle token sızsa bile istek yalnız sizin sunucularınızdan kabul edilir.
  • Canlıya geçiş koşulu: Canlı ortam yalnız izin listesindeki IP'lere açılacak. Test ortamında bu kısıt şimdilik uygulanmıyor, testleri hemen başlatabilirsiniz.
  • Değişiklik bildirimi: IP adresleriniz değişecekse önceden haber vermenizi rica ederiz; aksi halde istekler 403 IP_NOT_ALLOWED alır.

13. Sürüm geçmişi

SürümTarihDeğişiklik
1.0.007.10.2026İlk sürüm: telefonla ve gönderi no / barkod ile sorgulama, destek kaydı. Test ortamı açıldı.