Webhook

Qo'ng'iroq hodisalarini real vaqtda o'z serveringizga HTTP orqali qabul qilish

Bu nima?

Webhook — tizimda qo'ng'iroq bilan bog'liq hodisa (event) yuz berganda, siz ko'rsatgan URL manzilga avtomatik ravishda HTTP POST so'rovi yuborilishi. Ya'ni tizimdan ma'lumot so'rab olish shart emas — hodisa yuz berishi bilanoq tizim o'zi sizga xabar yuboradi.

Bu bilan CRM, o'z ilovangiz yoki tashqi tizimni real vaqtda qo'ng'iroqlar bilan sinxronlash mumkin: masalan, qo'ng'iroq kelganda mijoz kartochkasini ochish, suhbat tugagach uni tarixga yozish va h.k.


Sozlash

URL kiritish

Panel → Integratsiya → Webhook bo'limida hodisalarni qabul qiladigan https:// manzilingizni kiriting.

Hodisalarni tanlash

Kerakli hodisalarni yoqing. Har bir hodisani alohida yoqib-o'chirish mumkin — faqat kerakli hodisalarni oling.

Qabul qilish

Serveringiz so'rovni qabul qilib, 2xx (masalan 200 OK) status qaytarishi kerak. Aks holda yetkazish muvaffaqiyatsiz deb belgilanadi.


So'rov formati

Har bir hodisa quyidagi ko'rinishda POST qilinadi:

XususiyatQiymat
MethodPOST
Content-Typeapplication/json
Acceptapplication/json
User-AgentUtelHttpAgent/1.0
Ulanish timeout3 soniya
Umumiy timeout10 soniya

So'rov tanasi (body) — tekis (flat) JSON obyekt. Yuqori darajada har doim quyidagi maydonlar bo'ladi:

{
  "name": "call_started",
  "domain": "https://company.utel.uz",
  "data": { },
  "time": "2026-07-28 18:20:05"
}
MaydonIzoh
nameHodisa turi: call_started, dial_answered, call_ended va h.k.
domainHodisa qaysi tizim (domen)dan kelganini bildiradi
dataHodisaga oid asosiy ma'lumot (call_saved da uning o'rniga call_history)
timeHodisa yuborilgan sana-vaqt (YIL-OY-KUN SOAT:DAQIQA:SONIYA)

Umumiy obyektlar

Ko'p hodisalar ichida bir xil call (qo'ng'iroq) va channel (kanal) obyektlari qaytadi. Ular bilan bir marta tanishib chiqamiz.

call — qo'ng'iroq obyekti

MaydonTurIzoh
idstring (uuid)Qo'ng'iroqning tizimdagi yagona identifikatori
sourceChannelIdstringJoriy aktiv manba kanal id
aLegChannelIdstring | nullA-leg (chaqiruvchi tomon) kanal id
bLegChannelIdstring | nullB-leg (chaqirilgan tomon) kanal id
bridgeIdstring | nullIkki kanalni bog'lagan bridge id
extenstring | nullTerilgan raqam (extension)
cdrobjectQo'ng'iroq tafsilotlari (quyida)
appobjectQo'ng'iroqni boshqargan modul: { "id": string | null }

cdr obyekti:

MaydonTurIzoh
type"incoming" | "internal" | "outgoing" | nullQo'ng'iroq turi
callerstring | nullChaqiruvchi raqami
srcstring | nullManba raqam
dststring | nullYo'nalish (terilgan raqam)
externalNumberstring | nullTashqi tomon raqami
startedAtnumberBoshlanish vaqti — Unix millisekund
endedAtnumber | nullTugash vaqti — Unix millisekund

channel — kanal obyekti

MaydonTurIzoh
idstringAsterisk kanal id (masalan 1753688405.101)
namestringAsterisk kanal nomi (masalan PJSIP/100-00000066)
statestringKanal holati: Down, Ring, Ringing, Up, Busy
caller.namestringKanaldagi caller nomi
caller.numberstringKanaldagi caller raqami

Hodisalar

Quyida har bir hodisaning vazifasi, qachon yuborilishi va namuna payloadi keltirilgan. Barcha namunalar bitta stsenariyga asoslangan: tashqi 998901234567 raqamidan kelgan qo'ng'iroq 100 operatorga yo'naltiriladi, operator javob beradi va suhbatdan so'ng qo'ng'iroq tugaydi.

call_started

Vazifasi: Yangi qo'ng'iroq tizimga kirganda — eng boshida — bir marta yuboriladi. Qo'ng'iroq boshini belgilashda ishlatiladi (masalan mijoz kartochkasini ochish).

Qachon: Qo'ng'iroq tizimga tushib, ishlov boshlangan zahoti.

{
  "name": "call_started",
  "domain": "https://company.utel.uz",
  "data": {
    "call": {
      "id": "9f8e7d6c-5b4a-3c2d-1e0f-a9b8c7d6e5f4",
      "sourceChannelId": "1753688405.101",
      "aLegChannelId": "1753688405.101",
      "bLegChannelId": null,
      "bridgeId": null,
      "exten": "100",
      "cdr": {
        "type": "incoming",
        "caller": "998901234567",
        "src": "998901234567",
        "dst": "100",
        "externalNumber": "998901234567",
        "startedAt": 1753688405000,
        "endedAt": null
      },
      "app": { "id": null }
    },
    "channel": {
      "id": "1753688405.101",
      "name": "PJSIP/from-trunk-00000065",
      "state": "Ring",
      "caller": { "name": "", "number": "998901234567" }
    }
  },
  "time": "2026-07-28 18:20:05"
}

dial_started

Vazifasi: Tizim biror yo'nalishga (operator, navbat a'zosi va h.k.) qo'ng'iroq tera boshlaganda yuboriladi. Bitta qo'ng'iroqda bir necha marta yuz berishi mumkin (masalan navbatda bir necha operatorga ketma-ket terilsa).

Qachon: Chaqirilgan tomonga terish boshlangan payt (hali javob berilmagan).

{
  "name": "dial_started",
  "domain": "https://company.utel.uz",
  "data": {
    "call": {
      "id": "9f8e7d6c-5b4a-3c2d-1e0f-a9b8c7d6e5f4",
      "sourceChannelId": "1753688405.101",
      "aLegChannelId": "1753688405.101",
      "bLegChannelId": "1753688407.102",
      "bridgeId": "d4c3b2a1-9f8e-7d6c-5b4a-3c2d1e0fa9b8",
      "exten": "100",
      "cdr": {
        "type": "incoming",
        "caller": "998901234567",
        "src": "998901234567",
        "dst": "100",
        "externalNumber": "998901234567",
        "startedAt": 1753688405000,
        "endedAt": null
      },
      "app": { "id": null }
    },
    "callerChannel": {
      "id": "1753688405.101",
      "name": "PJSIP/from-trunk-00000065",
      "state": "Up",
      "caller": { "name": "", "number": "998901234567" }
    },
    "destChannel": {
      "id": "1753688407.102",
      "name": "PJSIP/100-00000066",
      "state": "Ring",
      "caller": { "name": "Operator 100", "number": "100" }
    }
  },
  "time": "2026-07-28 18:20:07"
}

dial_answered

Vazifasi: Terilgan yo'nalish (operator) javob berganda yuboriladi. Suhbat boshlanganini belgilaydi.

Qachon: Chaqirilgan tomon go'shakni ko'targan payt.

{
  "name": "dial_answered",
  "domain": "https://company.utel.uz",
  "data": {
    "call": {
      "id": "9f8e7d6c-5b4a-3c2d-1e0f-a9b8c7d6e5f4",
      "sourceChannelId": "1753688405.101",
      "aLegChannelId": "1753688405.101",
      "bLegChannelId": "1753688407.102",
      "bridgeId": "d4c3b2a1-9f8e-7d6c-5b4a-3c2d1e0fa9b8",
      "exten": "100",
      "cdr": {
        "type": "incoming",
        "caller": "998901234567",
        "src": "998901234567",
        "dst": "100",
        "externalNumber": "998901234567",
        "startedAt": 1753688405000,
        "endedAt": null
      },
      "app": { "id": null }
    },
    "callerChannel": {
      "id": "1753688405.101",
      "name": "PJSIP/from-trunk-00000065",
      "state": "Up",
      "caller": { "name": "", "number": "998901234567" }
    },
    "destChannel": {
      "id": "1753688407.102",
      "name": "PJSIP/100-00000066",
      "state": "Up",
      "caller": { "name": "Operator 100", "number": "100" }
    }
  },
  "time": "2026-07-28 18:20:12"
}

dial_ended

Vazifasi: Terilgan yo'nalish yopilganda yuboriladi — javob berilmasa, band bo'lsa yoki suhbat tugab kanal uzilsa. Har bir terilgan yo'nalish uchun alohida yuborilishi mumkin.

Qachon: Chaqirilgan tomon kanali uzilgan payt.

{
  "name": "dial_ended",
  "domain": "https://company.utel.uz",
  "data": {
    "call": {
      "id": "9f8e7d6c-5b4a-3c2d-1e0f-a9b8c7d6e5f4",
      "sourceChannelId": "1753688405.101",
      "aLegChannelId": "1753688405.101",
      "bLegChannelId": "1753688407.102",
      "bridgeId": "d4c3b2a1-9f8e-7d6c-5b4a-3c2d1e0fa9b8",
      "exten": "100",
      "cdr": {
        "type": "incoming",
        "caller": "998901234567",
        "src": "998901234567",
        "dst": "100",
        "externalNumber": "998901234567",
        "startedAt": 1753688405000,
        "endedAt": null
      },
      "app": { "id": null }
    },
    "callerChannel": {
      "id": "1753688405.101",
      "name": "PJSIP/from-trunk-00000065",
      "state": "Up",
      "caller": { "name": "", "number": "998901234567" }
    },
    "destChannel": {
      "id": "1753688407.102",
      "name": "PJSIP/100-00000066",
      "state": "Up",
      "caller": { "name": "Operator 100", "number": "100" }
    }
  },
  "time": "2026-07-28 18:21:00"
}

call_transferred

Vazifasi: Qo'ng'iroq boshqa yo'nalishga uzatilganda (transfer) yuboriladi — blind (ko'r) yoki attended (kuzatuvli) transfer.

Qachon: Operator qo'ng'iroqni boshqa raqamga uzatgan payt.

data ichidagi maydonlar:

MaydonTurIzoh
type"call_transferred"Hodisa turi
transferrerchannelTransfer bosgan (keyin uziladigan) tomon
transfereechannelUzatilayotgan (omon qoladigan) tomon
targetchannel | nullAttended: javob bergan tomon; blind: null
destinationstring | nullBlind: uzatilgan raqam; attended: null
fromCallcall | nullAttended: birlashuvda yo'q bo'lgan eski qo'ng'iroq; blind: null
callcallTransferdan keyin omon qolgan qo'ng'iroq
{
  "name": "call_transferred",
  "domain": "https://company.utel.uz",
  "data": {
    "type": "call_transferred",
    "transferrer": {
      "id": "1753688407.102",
      "name": "PJSIP/100-00000066",
      "state": "Up",
      "caller": { "name": "Operator 100", "number": "100" }
    },
    "transferee": {
      "id": "1753688405.101",
      "name": "PJSIP/from-trunk-00000065",
      "state": "Up",
      "caller": { "name": "", "number": "998901234567" }
    },
    "target": null,
    "destination": "101",
    "fromCall": null,
    "call": {
      "id": "9f8e7d6c-5b4a-3c2d-1e0f-a9b8c7d6e5f4",
      "sourceChannelId": "1753688405.101",
      "aLegChannelId": "1753688405.101",
      "bLegChannelId": "1753688420.103",
      "bridgeId": "d4c3b2a1-9f8e-7d6c-5b4a-3c2d1e0fa9b8",
      "exten": "100",
      "cdr": {
        "type": "incoming",
        "caller": "998901234567",
        "src": "998901234567",
        "dst": "100",
        "externalNumber": "998901234567",
        "startedAt": 1753688405000,
        "endedAt": null
      },
      "app": { "id": null }
    }
  },
  "time": "2026-07-28 18:22:30"
}

call_ended

Vazifasi: Qo'ng'iroq to'liq tugaganda (barcha kanallar uzilganda) yuboriladi. Qo'ng'iroqni yakunlashda ishlatiladi.

Qachon: Qo'ng'iroqning asosiy kanali tizimdan chiqib ketgan payt.

{
  "name": "call_ended",
  "domain": "https://company.utel.uz",
  "data": {
    "call": {
      "id": "9f8e7d6c-5b4a-3c2d-1e0f-a9b8c7d6e5f4",
      "sourceChannelId": "1753688405.101",
      "aLegChannelId": "1753688405.101",
      "bLegChannelId": "1753688407.102",
      "bridgeId": "d4c3b2a1-9f8e-7d6c-5b4a-3c2d1e0fa9b8",
      "exten": "100",
      "cdr": {
        "type": "incoming",
        "caller": "998901234567",
        "src": "998901234567",
        "dst": "100",
        "externalNumber": "998901234567",
        "startedAt": 1753688405000,
        "endedAt": 1753688460000
      },
      "app": { "id": null }
    }
  },
  "time": "2026-07-28 18:21:00"
}

call_saved

Vazifasi: Qo'ng'iroq tarixga (bazaga) yozib bo'lingach yuboriladi. Bu hodisa tugagan qo'ng'iroqning to'liq yakuniy yozuvini beradi: davomiylik, suhbat vaqti, status, yozib olingan fayl havolasi va h.k.

Qachon: Qo'ng'iroq tugab, uning tarixi bazaga saqlangandan so'ng.

{
  "name": "call_saved",
  "domain": "https://company.utel.uz",
  "call_history": {
    "id": 1024,
    "call_id": "9f8e7d6c-5b4a-3c2d-1e0f-a9b8c7d6e5f4",
    "date_time": "2026-07-28 18:20:05",
    "src": "998901234567",
    "dst": "100",
    "external_number": "998901234567",
    "duration": 55,
    "conversation": 48,
    "type": { "number": 1, "name": "Incoming" },
    "status": { "number": 1, "name": "Answered" },
    "recorded_file_url": "https://company.utel.uz/recordings/1024.mp3",
    "integration": []
  },
  "time": "2026-07-28 18:21:00"
}

call_history maydonlari:

MaydonIzoh
idQo'ng'iroq tarixi yozuvining id raqami
call_idQo'ng'iroqning yagona identifikatori (call.id bilan bir xil)
date_timeQo'ng'iroq boshlangan sana-vaqt
src / dstManba / yo'nalish raqamlari
external_numberTashqi tomon raqami
durationUmumiy davomiylik (soniya)
conversationSof suhbat vaqti (soniya)
typeQo'ng'iroq turi: { number, name }
statusHolati: { number, name }Answered / Not answered
recorded_file_urlYozib olingan suhbat fayli havolasi (bo'lsa)
integrationIntegratsiya loglari (bo'lsa)

Yetkazish va tarix

  • Har bir yetkazish urinishi — muvaffaqiyatli yoki muvaffaqiyatsizWebhook tarixi bo'limida qayd etiladi: hodisa nomi, URL, status kodi, javob tanasi, davomiylik (ms) va navbatda kutish vaqti.
  • Serveringiz 10 soniya ichida javob berishi kerak; aks holda yetkazish uzilib, muvaffaqiyatsiz deb belgilanadi.
  • Serveringiz javob bermasa yoki xato qaytarsa — hodisa qayta yuborilmaydi. Shu sababli endpointingiz turg'un va tez bo'lishi muhim.
  • Payloadni o'qishda kalitlar (maydon nomlari) bo'yicha o'qing — yangi maydonlar kelajakda qo'shilishi mumkin, mavjudlari joyini o'zgartirmaydi.