CallionHujjatlar

Callion — Integratsiya API (chiquvchi webhook)

Hujjat versiyasi: 2026-07-21. O'zgarishlar 9-bo'lim (Versiyalash) qoidalariga muvofiq e'lon qilinadi.

Ushbu hujjat Callion qo'ng'iroq tugagach sizning endpointingizga yuboradigan hodisani tavsiflaydi. U Callion qo'ng'iroq ma'lumotlarini olishni istagan har qanday tashqi tizim uchun — CRM, BI, analitika platformasi yoki hamkor xizmati uchun — mo'ljallangan. Model universal: siz chiquvchi webhook URL manzilini sozlaysiz (va ixtiyoriy ravishda o'zingiz tanlagan avtorizatsiya sarlavhasi yoki parametrini), Callion har bir qo'ng'iroq tugagach unga JSON bilan POST so'rov yuboradi, siz esa 2xx kodi bilan javob berasiz.


1. Maqsad

Callion sizning endpointingizga qo'ng'iroq tugagan payt bitta hodisa — call_end — yuboradi. U suhbatning yakuniy ma'lumotlarini o'z ichiga oladi: yo'nalish, raqamlar, operator, davomiylik, natija, operator tegi, boshlanish vaqti va yozuv havolasi.

  • Yetkazish asinxron bo'lib, qo'ng'iroq trakti tashqarisida amalga oshiriladi. Sizning endpointingizning javobi (yoki uning yo'qligi) qo'ng'iroq ishlashiga hech qanday ta'sir qilmaydi — hodisa yuborilgan paytda qo'ng'iroq allaqachon tugagan bo'ladi.
  • Hodisa qo'ng'iroq tugagach yuboriladi, suhbat davomida real vaqtda emas.
  • Sizning vazifangiz — POST so'rovni qabul qilish, uni tez 2xx kodi bilan tasdiqlash va ma'lumotlarni o'z fon jarayoningizda qayta ishlash.

Qamrov — qaysi qo'ng'iroqlar yuborilmaydi. Har bir tashqi qo'ng'iroq (kiruvchi va chiquvchi) tugagach bitta hodisa yuboriladi, quyidagilar bundan mustasno:

  • ichki (ichki raqamdan ichki raqamga) qo'ng'iroqlar;
  • backend qayta ishga tushishi tufayli o'rtada uzilib qolgan qo'ng'iroqlar;
  • tashqi abonent raqami 6 ta raqamdan kam bo'lgan qo'ng'iroqlar — bunga yashirilgan/anonim raqamlar va operator qisqa kodlari kiradi.

Shu sababli hodisalar soningiz CDR eksporti bilan aynan mos kelmasligi mumkin; agar to'liq moslik kerak bo'lsa, bu istisnolarni hisobga oling.

Bu integratsiya turi. Ushbu hujjat qo'ng'iroq-hodisalari webhook integratsiyasi uchun. Admin panelida "+" tugmasi orqali Webhook turini qo'shsangiz (URL va ixtiyoriy maxfiy kalit), aynan shu hujjatdagi call_end kontrakti yetkaziladi. amoCRM/Bitrix24 kabi nomli integratsiyalar shu hodisalar ustidagi presetlardir.


2. Transport va autentifikatsiya

ParametrQiymat
MetodPOST
Content-Typeapplication/json
ProtokolHTTPS (majburiy)
TanaHodisaning JSON obyekti (3-bo'limga qarang)
KodlashUTF-8

Autentifikatsiya. Maxfiy qiymatni webhookni sozlashda o'zingiz belgilaysiz va Callion uni har bir so'rov bilan o'zgarishsiz uzatadi. Ikki usul mavjud:

  • Sarlavha orqali (sukut bo'yicha). Qo'shimcha sarlavha sozlamasangiz, Callion maxfiy qiymatni x-api-key sarlavhasida yuboradi. Xohlasangiz, o'zingiz tanlagan sarlavha(lar)ni sozlashingiz mumkin — masalan Authorization: Bearer <qiymat> — u holda Callion aynan siz belgilagan sarlavhalarni yuboradi (bu holda x-api-key qo'shilmaydi).
  • URL parametri orqali. Maxfiy qiymatni webhook URL manzilingizdagi so'rov qatori parametriga joylashtiring; URL o'zgarishsiz uzatiladi.

Bu maxfiy qiymatni o'z tomoningizda tekshiring va usiz kelgan so'rovlarni rad eting.

Manba IP. So'rovlar Callion infratuzilmasidan keladi. Agar kiruvchi trafikni IP bo'yicha cheklasangiz, Callion'dan chiquvchi manzillarning joriy ro'yxatini so'rang va uni ruxsat ro'yxatiga kiriting. IP'ga yagona autentifikatsiya mexanizmi sifatida tayanmang — webhook sozlamasidagi maxfiy qiymatdan foydalaning.


3. Hodisa konverti

Haqiqiy hodisa namunasi (kiruvchi, javobsiz):

JSON
{
  "event": "call_end",
  "event_id": "1700000000.123",
  "call_id": "1700000000.123",
  "version": 1,
  "direction": "incoming",
  "client_number": "998901234567",
  "operator_number": null,
  "operator_name": null,
  "duration": 0,
  "status": "CANCEL",
  "disposition": null,
  "started_at": 1700000000,
  "recording_url": null
}

Tana — yassi JSON obyekti. Versiya 1 maydonlari 4-bo'limda keltirilgan.


4. Maydonlar jadvali

Versiya 1 hozirda quyidagi 13 ta maydonni o'z ichiga oladi. 9-bo'limga muvofiq, kelajakda versiyani o'zgartirmasdan yangi maydonlar qo'shilishi mumkin, shuning uchun parseringiz noma'lum maydonlarni e'tiborsiz qoldirsin va JSON kalitlar tartibiga tayanmasin.

MaydonTuriNull bo'la olishiNamunaQachon yo'q / null
eventstringnull emas"call_end"Doim mavjud; doim "call_end".
event_idstringnull emas"1700000000.123"Doim mavjud. Hodisaning noyob identifikatori, qayta yetkazishlarda barqaror; dedublikatsiya kaliti sifatida ishlating.
call_idstringnull emas"1700000000.123"Doim mavjud. Qo'ng'iroqning noyob identifikatori; event_id ga teng.
versionintegernull emas1Doim mavjud. Tana tuzilmasi versiyasi (hozir 1).
directionstringnull emas"incoming"Doim mavjud. "incoming" / "outgoing" dan biri.
client_numberstring | nullnull bo'la oladi"998901234567"Mijoz raqami mavjud bo'lmasa null.
operator_numberstring | nullnull bo'la oladi"1001"Qatnashgan operatorning ichki raqami. Kiruvchida — javob bergan operator (javob berilmagan bo'lsa null). Chiquvchida — qo'ng'iroq qilgan operator (javob berilmagan bo'lsa ham mavjud).
operator_namestring | nullnull bo'la oladi"Aliyeva N."operator_number bilan bir xil shart bo'yicha; operatorning ko'rinadigan ismi bo'lmasa null.
durationintegernull emas205Suhbat soniyalari (billsec). Javob berilmagan bo'lsa 0.
statusstring | nullnull bo'la oladi"ANSWERED"Qo'ng'iroq natijasi. Noshaffof satr — enum bo'yicha tekshirmang.
dispositionstring | nullnull bo'la oladi"sale"Operatorning qo'ng'iroqdan keyingi tegi; teg qo'yilmagan bo'lsa null.
started_atinteger | nullnull bo'la oladi1700000000Qo'ng'iroq boshlanish vaqti, UNIX vaqti soniyalarda; mavjud bo'lmasa null.
recording_urlstring | nullnull bo'la oladi"https://<callion-host>/rec/<token>"Yozuvga to'g'ridan-to'g'ri havola; yozuv bo'lmasa null.

Semantik izohlar

  • Raqamlar yo'nalishga bog'liq. client_number — bu mijozning (tashqi abonent) raqami, yo'nalishdan qat'i nazar. operator_number — bu operatorning ichki ichki raqami (extension). "Kim kimga qo'ng'iroq qildi" ma'nosi direction maydoni bilan aniqlanadi: "incoming" da mijoz kompaniyaga qo'ng'iroq qiladi, "outgoing" da operator mijozga qo'ng'iroq qiladi.
  • Raqam formati aralash. Raqamlar qanday olingan bo'lsa, shundayligicha uzatiladi va E.164 ga normallashtirilmaydi. Bu davlat kodli raqam, mahalliy ichki raqam va hokazo bo'lishi mumkin. Raqam doim xalqaro formatda deb hisoblamang — kerak bo'lsa, o'z tomoningizda normallashtiring.
  • Operator maydonlari yo'nalishga bog'liq — "javob berilgan" degani emas. Kiruvchi qo'ng'iroqda operator maydonlari javob bergan operatorni ko'rsatadi va javob berilmagan bo'lsa null bo'ladi. Chiquvchi qo'ng'iroqda esa ular qo'ng'iroq qilgan operatorni ko'rsatadi va qo'ng'iroqqa javob berilmagan taqdirda ham mavjud bo'ladi. Shu sababli operator maydonining bo'sh emasligiga qarab "javob berilgan" degan xulosa chiqarmang — javob berilganini status (ANSWERED) va duration (> 0) orqali aniqlang.
  • status — noshaffof satr. Uni noshaffof qiymat sifatida qayta ishlang va notanish qiymat tufayli hodisani rad etmang. Ma'lumot uchun quyidagi 12 ta qiymat bo'lishi mumkin: ANSWERED, NO ANSWER, BUSY, CANCEL, CONGESTION, CHANUNAVAIL, FAILED, VOICEMAIL, MISSED, REJECTED, TRANSFERRED, UNKNOWN. Ro'yxat ma'lumot sifatida keltirilgan — qiymatlar to'plami kengayishi mumkin; validatsiyani unga bog'lamang.
  • disposition — operator tegi. 6 ta qiymatdan biri: sale, callback, no_answer, wrong_number, not_interested, info_given — yoki operator teg qo'ymagan bo'lsa null.
  • started_at — UNIX vaqti soniyalarda (millisekundlarda emas).
  • call_id event_id ga teng. Ikkalasi ham bitta qo'ng'iroqni identifikatsiya qiladi; istalganini kalit sifatida ishlatishingiz mumkin.

5. Hodisalar

Faqat call_end hodisasi yetkaziladi. Ushbu kanal orqali boshqa hodisa turlari yo'q. Shunga qaramay, event maydonini tekshiring — bu kelajakda yangi turlar qo'shilishi ehtimoliga qarshi obro'yingizni mos saqlaydi.


6. Yozuv havolasi

recording_url maydoni — suhbat yozuvi fayliga to'g'ridan-to'g'ri HTTPS havola.

  • Format: WAV, 8 kGts, mono.
  • Hajm: odatda taxminan 1 MB; hech qachon 50 MB dan oshmaydi.
  • Range so'rovlari qo'llab-quvvatlanadi — faylni qismlarga bo'lib yuklab olish mumkin.
  • Kechikish. Havola qo'ng'iroq tugaganidan keyin biroz vaqt o'tib mavjud bo'ladi — hodisa kelishi va yozuv tayyor bo'lishi orasidagi qisqa kechikishni hisobga oling. Agar recording_url null bo'lmasa, lekin fayl hali tayyor bo'lmasa, qisqa interval orqali yuklashni takrorlang.
  • Havola taxmin qilib bo'lmaydigan va muddati o'tadigan. URL'ni oldindan bilib bo'lmaydi va u cheklangan muddat amal qiladi (sukut bo'yicha 7 kun, muddat sozlanadi).
  • Yozuvni sinash. Ulanishni tekshirish uchun yuborilgan sinov hodisasining recording_url maydoni ishlaydigan namuna yozuvga (qisqa sukut fayli) ishora qiladi — uni yuklab, o'z yozuv-yuklash oqimingizni tasdiqlashingiz mumkin.

Havola bilan ishlash bo'yicha tavsiyalar:

  1. Yozuvni havola amal qilish muddati ichida o'z tomoningizga yuklab oling va saqlang. Muddat tugagach havola ishlamay qoladi.
  2. Yozuv URL'ini loglamang, uzatmang va e'lon qilmang. Uni maxfiy deb hisoblang: havolaga ega har kim u amal qilar ekan, yozuvni yuklab olishi mumkin.
  3. Agar yozuv bo'lmasa (masalan, qo'ng'iroqqa javob berilmagan), recording_url null bo'ladi.

7. Yetkazish semantikasi

  • Kamida bir marta (at-least-once). Bitta hodisa qayta kelishi mumkin (masalan, sizning endpointingiz yetkazishni o'z vaqtida tasdiqlamasa). Dedublikatsiya uchun event_id dan foydalaning — qayta yetkazishda u barqaror.
  • Qayta urinishlar jadvali. Vaqtinchalik xato bo'lsa, Callion yuborishni 6 martagacha takrorlaydi. Urinishlar orasidagi kechikish o'sib boradi: 1s, 5s, 30s, 5 daqiqa, 30 daqiqa, 2 soat. Shundan so'ng hodisa tashlanadi.
  • Taymout. Har bir urinishda 10 soniyalik umumiy vaqt budjeti (DNS + ulanish + TLS + so'rov + javob) va 5 soniyalik soket-faoliyatsizlik chegarasi amal qiladi; qaysi biri birinchi ishga tushsa, urinish tugaydi. Taymout vaqtinchalik xato hisoblanadi va qayta uriniladi.
  • Tartib kafolatlanmaydi. Hodisalar qo'ng'iroqlar tugagan tartibda kelmasligi mumkin. Yetkazish tartibiga tayanmang — started_at bo'yicha saralang.
  • Yozuvli qo'ng'iroqlar. Javob berilgan qo'ng'iroqda birinchi urinish yozuv havolasi tayyorlanguncha taxminan 90 soniyaga kechiktirilishi mumkin; bu 6 urinishdan bittasini sarflashi mumkin.
  • Tez javob bering. Qabulni 2xx kodi bilan imkon qadar tez tasdiqlang va qayta ishlashni fonda asinxron bajaring. Uzoq javob taymout va qayta yetkazish xavfini oshiradi.

8. Javob va xatolar

Sizning endpointingiz qabulni 2xx kodi bilan tasdiqlashi kerak. Callion'ning javobingizga qarab xatti-harakati:

Endpointingiz javobiTalqinCallion harakati
2xxYetkazildiHodisa qabul qilingan hisoblanadi; takror bo'lmaydi.
3xxQayta yo'naltirishQayta yo'naltirishlar kuzatilmaydi. Endpoint URL bevosita 2xx bilan javob berishi kerak. 3xx doimiy xato hisoblanadi va takrorlanmaydi.
4xxEndpoint rad etdiDoimiy xato (noto'g'ri avtorizatsiya, yo'l yoki validatsiya); takrorlanmaydi. URL va maxfiy qiymat sozlamasini tekshiring.
5xxVaqtinchalik server xatosiVaqtinchalik xato; javob tanasi bor-yo'qligidan qat'i nazar qayta uriniladi (yuqoridagi jadval bo'yicha).
Taymout / javob yo'q / ulanish xatosiYetkazish tasdiqlanmadiVaqtinchalik xato; qayta uriniladi.

Callion sizning javob tanangizdan foydalanmaydi — faqat HTTP kodi muhim. Barcha urinishlar tugagach yoki doimiy xato (4xx/3xx) bo'lgach, hodisa tashlanadi — qayta so'rash uchun alohida API yo'q, shuning uchun yetkazishga ishonchli tayanish uchun event_id bilan dedublikatsiya qiling va yozuvni muddat ichida yuklab oling.


9. Versiyalash

  • version maydoni hodisa tuzilmasi versiyasini ko'rsatadi (hozir 1).
  • O'zgarishlar faqat qo'shimcha (additive): yangi maydonlar versiyani o'zgartirmasdan qo'shilishi mumkin.
  • Noma'lum maydonlarni e'tiborsiz qoldiring, rad etmang. Sizning parseringiz ushbu hujjatda yo'q maydonlarni xato deb hisoblamasdan o'tkazib yuborishi kerak. Bu kelajakda maydonlar qo'shilganda moslikni kafolatlaydi.
  • version qiymatining o'zgarishi tuzilmadagi mos kelmaydigan o'zgarishni bildiradi va oldindan e'lon qilinadi.

10. Ilova — namunalar

10.1. Javob berilgan qo'ng'iroq, yozuv bilan

Kiruvchi qo'ng'iroq, operator javob berdi, suhbat 205 soniya, operator sale tegini qo'ydi, yozuv mavjud.

JSON
{
  "event": "call_end",
  "event_id": "1700000500.42",
  "call_id": "1700000500.42",
  "version": 1,
  "direction": "incoming",
  "client_number": "998901234567",
  "operator_number": "1001",
  "operator_name": "Aliyeva N.",
  "duration": 205,
  "status": "ANSWERED",
  "disposition": "sale",
  "started_at": 1700000500,
  "recording_url": "https://<callion-host>/rec/<token>"
}

Maydonma-maydon:

  • event"call_end", hodisa turi.
  • event_id"1700000500.42", dedublikatsiya kaliti.
  • call_id"1700000500.42", event_id ga teng.
  • version1.
  • direction"incoming", qo'ng'iroq kiruvchi.
  • client_number"998901234567", mijoz raqami.
  • operator_number"1001", javob bergan operatorning ichki raqami.
  • operator_name"Aliyeva N.", operator ismi (qo'ng'iroqqa javob berilgani uchun mavjud).
  • duration205, suhbat soniyalari.
  • status"ANSWERED", qo'ng'iroqqa javob berilgan.
  • disposition"sale", operator tegi.
  • started_at1700000500, boshlanish vaqti (UNIX vaqti soniyalarda).
  • recording_url — WAV ga to'g'ridan-to'g'ri HTTPS havola; muddat ichida yuklab oling.

10.2. Javob berilmagan qo'ng'iroq, yozuvsiz

Kiruvchi qo'ng'iroq, javobdan oldin bekor qilingan: operator tayinlanmagan, davomiylik 0, teg yo'q, yozuv yo'q.

JSON
{
  "event": "call_end",
  "event_id": "1700000000.123",
  "call_id": "1700000000.123",
  "version": 1,
  "direction": "incoming",
  "client_number": "998901234567",
  "operator_number": null,
  "operator_name": null,
  "duration": 0,
  "status": "CANCEL",
  "disposition": null,
  "started_at": 1700000000,
  "recording_url": null
}

Maydonma-maydon:

  • event"call_end", hodisa turi.
  • event_id"1700000000.123", dedublikatsiya kaliti.
  • call_id"1700000000.123", event_id ga teng.
  • version1.
  • direction"incoming", qo'ng'iroq kiruvchi.
  • client_number"998901234567", mijoz raqami.
  • operator_numbernull, qo'ng'iroqqa javob berilmagan, operator tayinlanmagan.
  • operator_namenull, xuddi shu sababga ko'ra.
  • duration0, suhbat bo'lmagan.
  • status"CANCEL", qo'ng'iroq javobdan oldin bekor qilingan.
  • dispositionnull, teg qo'yilmagan.
  • started_at1700000000, boshlanish vaqti (UNIX vaqti soniyalarda).
  • recording_urlnull, yozuv yo'q.

11. Operatsiyalar

  • Maxfiy qiymatni yangilash. Yangi qiymatni integratsiya sozlamasida belgilaysiz. Avtomatik ustma-ust (overlap) oyna yo'q, shuning uchun yangilashni past yuklama davrida bajaring va endpointingiz eski va yangi qiymatning ikkalasini qisqa muddat qabul qilishiga tayyor bo'ling.
  • Manba IP. So'rovlar Callion infratuzilmasidan keladi. IP bo'yicha cheklasangiz, chiquvchi manzillarning joriy ro'yxatini Callion aloqa nuqtangizdan so'rang (ro'yxat vaqti-vaqti bilan o'zgarishi mumkin). IP'ga yagona mexanizm sifatida tayanmang.
  • Xatolarning ko'rinishi. Barcha urinishlardan so'ng yetkazilmagan hodisa Callion operatori uchun integratsiya loglarida saqlanish muddati davomida ko'rinadi. Hamkorga qaratilgan alohida xato-lentasi hozircha yo'q — yetkazishga ishonchli tayanish uchun event_id bilan dedublikatsiya qiling.
  • Versiyalar va o'zgarishlar. Mos kelmaydigan o'zgarish version qiymatini oshiradi va oldindan e'lon qilinadi (9-bo'lim). Ushbu hujjat yuqorida sana bilan belgilangan.
  • Aloqa. Integratsiya bo'yicha savollar uchun Callion aloqa nuqtangizga murojaat qiling.