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önderiler | GET /shipments?phone= | Menü 3 · sesli asistanın ilk sorgusu |
| Tek gönderinin durumu | GET /shipments/{reference} | Menü 1 (gönderi no) · Menü 2 (barkod / referans) |
| Hızlandırma talebi veya destek kaydı | POST /shipments/{reference}/tickets | Arayan 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.
-
Değişkenleri tanımlayın.
BASE=https://api-ivr.preprod.jetdiji.com/api/ivr/v1 TOKEN=<size iletilen token> -
Arayan numarayla gönderileri sorgulayın.
curl -s "$BASE/shipments?phone=905321110026" \ -H "Authorization: Bearer $TOKEN" -
Tek gönderiyi sorgulayın. Yanıttaki
referencedeğerini kullanın.curl -s "$BASE/shipments/JL100245871" \ -H "Authorization: Bearer $TOKEN" -
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
| Ortam | Taban adres | Doküman |
|---|---|---|
| Test (preprod) | https://api-ivr.preprod.jetdiji.com/api/ivr/v1 | https://api-ivr.preprod.jetdiji.com/swagger/ |
| Canlı | https://api-ivr.jetdiji.com/api/ivr/v1 | https://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ışsa401 UNAUTHORIZEDdö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_LIMITEDdö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ğin2026-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.
| Parametre | Zorunlu | Açıklama |
|---|---|---|
phone | Evet | Arayan 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
200ve boş liste döner. Bu bir hata değildir; asistan gönderi numarası veya barkod istemelidir. - Numara geçersizse
422 PHONE_INVALIDdö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
| HTTP | Ne zaman | Asistan ne yapmalı |
|---|---|---|
200 | Tek gönderi bulundu | Durumu kurallara göre söyler. |
404 SHIPMENT_NOT_FOUND | Eşleşen gönderi yok | Numarayı bir kez daha ister. İkinci denemede de bulunamazsa canlı temsilciye aktarır. |
409 REFERENCE_AMBIGUOUS | Değ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
| Alan | Zorunlu | Açıklama |
|---|---|---|
kind | Evet | Talep türü. Aşağıdaki tabloya bakın. |
note | Hayır | Görüşmenin kısa ve olgusal özeti, en çok 2000 karakter. OTP, kart numarası, TCKN, şifre gibi hassas veri yazılmaz. |
callerPhone | Hayır | Arayan numara. Operasyon ekibinin geri dönüşü için kayda eklenir. |
callId | Hayır | Santralin çağrı kimliği (uniqueid). Kaydı ses kaydıyla eşleştirmek için kullanılır. |
| kind | Ne zaman | Öncelik |
|---|---|---|
expedite | Arayan teslimatın hızlandırılmasını istiyor | Yüksek |
support | Genel destek veya geri arama talebi | Normal |
complaint | Şikâyet | Yüksek |
delivery_issue | "Teslim edildi görünüyor ama almadım", hasar, uzun süre hareketsizlik | Yüksek |
address | Adres 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ı
kindiç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. statusdeğeriopen, ya da kayıt ilerlediyse güncel durumudur (assigned,in_progressgibi).ticketReferencearayana okunabilir. Asistan dönüş süresi taahhüt etmemelidir.
7. Alan sözlüğü
| Alan | Anlamı | Sesli okunur mu? |
|---|---|---|
reference | Arayana okunacak numara: takip numarası, yoksa gönderi numarası | Evet |
shipmentNumber / trackingNumber | JetLogi gönderi ve takip numaraları | Gerekirse |
company | Gönderiyi veren firma (ör. banka) | Evet |
product | Ürün veya hizmet (ör. Kart Teslimatı, HGS) | Evet |
status | Sade durum grubu, bölüm 8 | İfadeye çevrilerek |
statusCode | JetLogi iç statü kodu (raporlama içindir) | Hayır |
statusName | Statünün Türkçe adı | İsteğe bağlı |
isOpen | Teslim, iade veya iptal ile kapanmadıysa true | Hayır |
custodyAt | Zimmet tarihi: gönderinin şu an bulunduğu kuryeye geçtiği an. Kuryede değilse null. | Evet |
slotEndAt | Son teslim tarihi. Kesin teslim saati değildir. | "En geç … tarihine kadar" biçiminde |
plannedDeliveryAt | Planlanan veya randevulu teslim günü | Yalnız gün olarak |
deliveredAt | Teslim edildiyse teslim zamanı | Evet |
lastEventAt | Son hareket zamanı | Evet |
courierName | Kuryenin adı ve soyadının baş harfi (ör. "Ruken T.") | Evet |
agencyName | Gönderinin bulunduğu acente veya dağıtım ortağı | Evet |
customerPhone | Alı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.
| status | Anlamı | Önerilen ifade |
|---|---|---|
PREPARING | Gönderi hazırlanıyor veya eşleniyor | "Gönderiniz hazırlanıyor, dağıtıma çıktığında bilgilendirileceksiniz." |
IN_TRANSIT | Yolda veya şubeler arası transferde | "Gönderiniz dağıtım bölgenize doğru yolda." |
AT_BRANCH | Dağıtım şubesinde | "Gönderiniz dağıtım şubesine ulaştı." |
OUT_FOR_DELIVERY | Kuryede, dağıtımda | "Gönderiniz {courierName} isimli kuryemizde, dağıtımda." Saat söylenmez. |
DELIVERED | Teslim edildi | "Gönderiniz {deliveredAt} tarihinde teslim edildi." |
DELIVERY_FAILED | Teslim 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. |
CANCELLED | Gö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. |
UNKNOWN | Sı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.
| Kural | API'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)
- Arayan numarayla
GET /shipments?phone=çağrılır. - 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. - Durum, durum grubuna ve kurallara göre söylenir.
- Arayan hızlandırma veya destek isterse
POST /ticketsile kayıt açılır veticketReferenceokunur. - Canlı temsilciye aktarılırken
referenceve 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 referans | GET /shipments/{tuşlanan değer} |
| 3 · Aradığınız numara | GET /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." } }
| HTTP | code | Önerilen davranış |
|---|---|---|
| 401 | UNAUTHORIZED | Yapılandırma hatası. Arayan canlı temsilciye aktarılır, JetLogi'ye bildirilir. |
| 403 | IP_NOT_ALLOWED | İstek izinli olmayan bir IP'den geldi. Yapılandırma hatası; yukarıdakiyle aynı. |
| 404 | SHIPMENT_NOT_FOUND | Numara bir kez daha istenir, sonra canlı temsilciye aktarılır. |
| 409 | REFERENCE_AMBIGUOUS | Etiketteki gönderi numarası veya barkod istenir. |
| 422 | PHONE_INVALID, REFERENCE_INVALID, VALIDATION_ERROR | Girdi hatalı. Numara yeniden istenir; telefon geçersizse gönderi numarası sorulur. |
| 429 | RATE_LIMITED | Kısa bir süre sonra bir kez tekrar denenir, olmazsa canlı temsilciye aktarılır. |
| 500 | INTERNAL_ERROR | Arayan 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_ALLOWEDalır.
13. Sürüm geçmişi
| Sürüm | Tarih | Değişiklik |
|---|---|---|
| 1.0.0 | 07.10.2026 | İlk sürüm: telefonla ve gönderi no / barkod ile sorgulama, destek kaydı. Test ortamı açıldı. |