·12 daq·3 ko'rish

Asterisk CDR hisobotlari: xom ma'lumotdan amaliy xulosalargacha

Asterisk CDR ma'lumotlaringizni mazmunli hisobotlarga aylantiring. SQL so'rovlar, vositalar taqqoslovi va qo'ng'iroq analitikasi bo'yicha eng yaxshi amaliyotlar.

A
Astervis
Muhandislar va product jamoasi

Asterisk PBX orqali o'tgan har bir qo'ng'iroq Call Detail Record (CDR) yozuvini hosil qiladi. Bu yozuvlarda juda ko'p ma'lumot bor: kim qo'ng'iroq qilgan, qachon, qancha gaplashgan, qo'ng'iroqqa javob berilganmi. Lekin ko'pchilik Asterisk administratorlarida CDR ma'lumotlari MySQL jadvalida yoki oddiy faylda ishlatilmay yotadi — ko'rinmas va foydasiz holda.

Bu qo'llanma sizning CDR ma'lumotlaringizni xom baza satrlaridan real biznes qarorlarga asos bo'ladigan mazmunli hisobotlarga aylantiradi. Siz CDR qanday ishlashini, undan qanday samarali so'rov olishni va call-markazni boshqarishda haqiqatan yordam beradigan hisobot tizimini qanday qurish (yoki tanlash) kerakligini o'rganasiz.

Asterisk CDR ichida nima bor?

CDR yozuvi Asterisk qayta ishlagan har bir qo'ng'iroq uchun yaratiladi. Har bir yozuv standart maydonlardan iborat:

MaydonTavsifMisol
accountcodeQo'ng'iroqqa biriktirilgan hisob kodisales-team
srcManba (qo'ng'iroq qiluvchi) raqami+15551234567
dstManzil (terilgan) raqam200
dcontextManzil kontekstifrom-internal
clidTo'liq Caller ID satri"John Smith" <+15551234567>
channelBoshlang'ich kanalPJSIP/trunk-0000001a
dstchannelManzil kanaliPJSIP/1001-0000001b
lastappOxirgi bajarilgan ilovaDial, Queue, Voicemail
lastdataOxirgi ilovaga uzatilgan ma'lumotPJSIP/1001,30
startQo'ng'iroq boshlanish vaqti2026-03-18 09:15:22
answerJavob berilgan vaqt2026-03-18 09:15:28
endQo'ng'iroq tugash vaqti2026-03-18 09:18:45
durationQo'ng'iroqning umumiy davomiyligi (soniya)203
billsecHisoblanadigan soniyalar (suhbat vaqti)197
dispositionQo'ng'iroq natijasiANSWERED, NO ANSWER, BUSY, FAILED
amaflagsAMA bayroqlariDOCUMENTATION
uniqueidQo'ng'iroqning unikal identifikatori1710752122.456
userfieldMaxsus foydalanuvchi maydoni(sozlamaga bog'liq)

CDR va CEL: farqni tushunish

CDR har bir qo'ng'iroq uchun bitta yozuv — ya'ni xulosa beradi. Buni chek deb tasavvur qiling.

CEL (Channel Event Logging) qo'ng'iroq davomidagi har bir hodisani yozadi: kanal yaratilishi, chaqiruv signali, javob, ulanish, uzatish, tugatish. Bu esa to'liq tranzaksiya jurnali.

Oddiy hisobot uchun (qo'ng'iroqlar hajmi, davomiyligi, natijasi) CDR yetarli. Murakkab analitika uchun (uzatish zanjirlari, konferensiya ishtirokchilari, navbat bilan o'zaro ishlash) CEL kerak bo'ladi.

EhtiyojCDR yetarliCEL kerak
Kunlik qo'ng'iroqlar soni
O'rtacha qo'ng'iroq davomiyligi
Qo'ng'iroq natijalari bo'yicha taqsimot
Uzatish yo'lini kuzatish
Har bir mijozning navbatdagi kutish vaqtiCheklangan
Konferensiya ishtirokchilarini hisobga olish
Operator javob berguncha ketgan chaqiruv vaqti
Aniq billing hisob-kitoblari

CDR saqlashni sozlash

1-variant: CSV (standart)

Standart holatda Asterisk CDR'ni /var/log/asterisk/cdr-csv/Master.csv fayliga yozadi. Kichik o'rnatmalar uchun bu yetarli, lekin tezda noqulay bo'lib qoladi.

# Check if CSV CDR is active asterisk -rx "cdr show status"

2-variant: MySQL/MariaDB

CDR hisobotlari uchun eng keng tarqalgan backend. /etc/asterisk/cdr_mysql.conf faylida sozlanadi:

[global] hostname = localhost dbname = asteriskcdrdb table = cdr password = your_db_password user = asterisk_cdr port = 3306

CDR jadvalini yarating:

CREATE TABLE cdr ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, calldate DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', clid VARCHAR(80) NOT NULL DEFAULT '', src VARCHAR(80) NOT NULL DEFAULT '', dst VARCHAR(80) NOT NULL DEFAULT '', dcontext VARCHAR(80) NOT NULL DEFAULT '', channel VARCHAR(80) NOT NULL DEFAULT '', dstchannel VARCHAR(80) NOT NULL DEFAULT '', lastapp VARCHAR(80) NOT NULL DEFAULT '', lastdata VARCHAR(80) NOT NULL DEFAULT '', duration INT(11) NOT NULL DEFAULT 0, billsec INT(11) NOT NULL DEFAULT 0, disposition VARCHAR(45) NOT NULL DEFAULT '', amaflags INT(11) NOT NULL DEFAULT 0, accountcode VARCHAR(20) NOT NULL DEFAULT '', uniqueid VARCHAR(150) NOT NULL DEFAULT '', userfield VARCHAR(255) NOT NULL DEFAULT '', INDEX idx_calldate (calldate), INDEX idx_src (src), INDEX idx_dst (dst), INDEX idx_disposition (disposition), INDEX idx_accountcode (accountcode) );

3-variant: PostgreSQL

Yirikroq o'rnatmalar uchun. /etc/asterisk/cdr_pgsql.conf faylida sozlanadi:

[global] hostname = localhost dbname = asteriskcdrdb table = cdr password = your_db_password user = asterisk_cdr port = 5432

4-variant: ODBC (universal)

ODBC qo'llab-quvvatlanadigan istalgan ma'lumotlar bazasi bilan ishlaydi. /etc/asterisk/cdr_adaptive_odbc.conf orqali sozlanadi:

[asterisk_cdr] connection = asterisk table = cdr alias start => calldate alias clid => src

Sozlagandan so'ng CDR'ni qayta yuklang:

asterisk -rx "module reload cdr" asterisk -rx "cdr show status"

Eng zarur CDR so'rovlari

CDR ma'lumotlar bazasiga tushgandan keyin, har bir administratorga kerak bo'ladigan so'rovlar quyidagilar:

Kunlik qo'ng'iroqlar hajmi

SELECT DATE(calldate) AS call_date, COUNT(*) AS total_calls, SUM(CASE WHEN disposition = 'ANSWERED' THEN 1 ELSE 0 END) AS answered, SUM(CASE WHEN disposition = 'NO ANSWER' THEN 1 ELSE 0 END) AS no_answer, SUM(CASE WHEN disposition = 'BUSY' THEN 1 ELSE 0 END) AS busy, SUM(CASE WHEN disposition = 'FAILED' THEN 1 ELSE 0 END) AS failed FROM cdr WHERE calldate >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) GROUP BY DATE(calldate) ORDER BY call_date DESC;

Soatlik qo'ng'iroq taqsimoti (heatmap uchun ma'lumot)

SELECT DAYOFWEEK(calldate) AS day_of_week, HOUR(calldate) AS hour_of_day, COUNT(*) AS call_count FROM cdr WHERE calldate >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DAYOFWEEK(calldate), HOUR(calldate) ORDER BY day_of_week, hour_of_day;

Bu so'rov heatmap uchun ma'lumot beradi — smenalarni rejalashtirishda eng foydali vizualizatsiyalardan biri.

Manzil bo'yicha o'rtacha qo'ng'iroq davomiyligi

SELECT dst AS extension, COUNT(*) AS total_calls, ROUND(AVG(billsec), 1) AS avg_talk_seconds, ROUND(AVG(duration), 1) AS avg_total_seconds, ROUND(AVG(duration - billsec), 1) AS avg_ring_seconds, SUM(CASE WHEN disposition = 'ANSWERED' THEN 1 ELSE 0 END) / COUNT(*) * 100 AS answer_rate_pct FROM cdr WHERE calldate >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND disposition IN ('ANSWERED', 'NO ANSWER') GROUP BY dst HAVING total_calls >= 5 ORDER BY total_calls DESC LIMIT 20;

Eng faol qo'ng'iroq qiluvchilar (kiruvchi)

SELECT src AS caller_number, COUNT(*) AS call_count, SUM(billsec) AS total_talk_seconds, ROUND(AVG(billsec), 1) AS avg_talk_seconds, MIN(calldate) AS first_call, MAX(calldate) AS last_call FROM cdr WHERE calldate >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND src != '' AND LENGTH(src) > 5 -- Filter internal extensions GROUP BY src ORDER BY call_count DESC LIMIT 25;

Javobsiz qo'ng'iroqlar tahlili

SELECT src AS caller_number, dst AS called_extension, calldate, duration AS ring_seconds, disposition FROM cdr WHERE calldate >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND disposition != 'ANSWERED' AND LENGTH(src) > 5 ORDER BY calldate DESC;

Trunklardan foydalanish

SELECT SUBSTRING_INDEX(channel, '-', 1) AS trunk, COUNT(*) AS total_calls, SUM(billsec) AS total_seconds, ROUND(AVG(billsec), 1) AS avg_seconds, SUM(CASE WHEN disposition = 'ANSWERED' THEN 1 ELSE 0 END) AS answered, SUM(CASE WHEN disposition = 'FAILED' THEN 1 ELSE 0 END) AS failed FROM cdr WHERE calldate >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY SUBSTRING_INDEX(channel, '-', 1) ORDER BY total_calls DESC;

Bir vaqtdagi qo'ng'iroqlar cho'qqisi (murakkab daraja)

SELECT DATE(calldate) AS call_date, HOUR(calldate) AS call_hour, MAX(concurrent) AS peak_concurrent FROM ( SELECT calldate, (SELECT COUNT(*) FROM cdr c2 WHERE c2.calldate <= c1.calldate AND ADDTIME(c2.calldate, SEC_TO_TIME(c2.duration)) >= c1.calldate) AS concurrent FROM cdr c1 WHERE calldate >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) ) AS concurrent_data GROUP BY DATE(calldate), HOUR(calldate) ORDER BY call_date DESC, call_hour;

CDR hisobot vositalarini taqqoslash

Qo'lda yozilgan SQL so'rovlar

Afzalliklari: to'liq nazorat, qo'shimcha dasturiy ta'minot kerak emas Kamchiliklari: SQL bilishni talab qiladi, vizualizatsiya yo'q, avtomatlashtirish yo'q, ko'p vaqt oladi

Asternic CDR Reports

Asterisk uchun PHP'da yozilgan CDR ko'ruvchi.

Afzalliklari: CDR jadvali bilan bevosita ishlaydi, oddiy grafiklar bor Kamchiliklari: eski PHP kodi, cheklangan sozlash imkoniyati, real vaqt rejimi yo'q, eskirgan interfeys

CDR-Stats (tashlab qo'yilgan)

Django asosidagi CDR analitika platformasi.

Afzalliklari: bir paytlar firibgarlikni aniqlash bilan birga ancha to'liq yechim edi Kamchiliklari: loyiha tashlab qo'yilgan. Oxirgi jiddiy yangilanishlar yillar oldin bo'lgan. Python 2 davri. Yangi o'rnatmani bundan boshlamang.

Navbatlarda nima sodir bo'layotganini taxmin qilishdan charchadingizmi?

Astervis sizning Asterisk PBX'ingiz uchun 30+ realtime grafik, operator KPI va CRM-integratsiya beradi. On-premise. 5 daqiqada o'rnatiladi. $119/oydan flat operatorlar soni cheklanmagan.

Bepul sinab ko'rish

Grafana + SQL Datasource

Grafana'ni to'g'ridan-to'g'ri CDR ma'lumotlar bazangizga ulang.

Afzalliklari: kuchli vizualizatsiya, bepul, juda moslashuvchan Kamchiliklari: har bir so'rovni o'zingiz yozasiz. Navbatlarga moslashtirilgan mantiq yo'q. Yaxshi dashboard to'plamini yig'ish uchun 20-40 soat kerak. Ustiga doimiy texnik xizmat.

Astervis

Xom CDR hisobotlaridan ancha ilgarilab ketgan, maxsus yaratilgan analitika platformasi.

Afzalliklari:

  • CDR'ni avtomatik yig'ish: ma'lumotlar bazasini qo'lda sozlash shart emas. Astervis CDR ma'lumotlarini AMI va o'zining yig'ish quvuri orqali o'qiydi.
  • 30+ tayyor grafik: heatmap'lar, trend chiziqlari, taqqoslash ko'rinishlari — hammasi qutidan chiqishi bilan ishlaydi
  • Navbat va CDR birgalikda: sof CDR vositalaridan farqli o'laroq, Astervis CDR ma'lumotlarini navbat hodisalari bilan bog'laydi va qo'ng'iroqning butun hayot siklini ko'rsatadi
  • Operatorlar samaradorligi: CDR va navbat ma'lumotlari asosida har bir operator uchun alohida KPI'lar
  • Bitta buyruq bilan o'rnatish: PHP ham, Java ham, o'zi yozgan SQL ham kerak emas

Kamchiliklari: 14 kunlik sinov muddatidan keyin pullik (oyiga $119 dan boshlab)

Oddiy CDR'dan nariga: ilg'or analitika

Xom CDR ma'lumotlari "nima bo'ldi" degan savolga javob beradi. Ilg'or analitika esa "nega bo'ldi" va "endi nima qilish kerak" degan savollarga javob beradi.

Qo'ng'iroq natijasini tasniflash

CDR'dagi disposition maydoni sizga ANSWERED yoki NO ANSWER deb aytadi, biznes natijasini emas. Javob berilgan qo'ng'iroq sotuvga olib keldimi? Muammo hal bo'ldimi? Qayta qo'ng'iroq so'roviga aylandimi?

Ilg'or platformalar CDR'ni quyidagilar bilan birlashtiradi:

  • Navbat ma'lumotlari: kutish vaqti, navbat nomi, qo'ng'iroqni qabul qilgan operator
  • CRM ma'lumotlari: mijoz kartochkasi, tiket holati, bitim bosqichi
  • Suhbat yozuvlari: aslida nima muhokama qilingani

Aynan shu bog'lanishda CDR jurnal bo'lishdan to'xtab, bilim manbaiga aylanadi.

Trendlarni aniqlash

Bir kunlik CDR hisobotlari — shovqin. Foydali xulosalar trendlardan chiqadi:

  • O'rtacha ishlov berish vaqti haftadan haftaga o'sib boryaptimi? (o'qitish muammosi)
  • Muvaffaqiyatsiz qo'ng'iroqlar aniq trunklarda to'planyaptimi? (provayder muammosi)
  • Qo'ng'iroqlar hajmi boshqa soatlarga siljiyaptimi? (bozordagi o'zgarish)
  • Ayrim ichki raqamlarda voz kechishlar keskin oshyaptimi? (xodimlar yetishmovchiligi)

Bashoratli smena rejalashtirish

Tarixiy CDR ma'lumotlari navbat analitikasi bilan birga bashoratli xodimlar rejalashtirish modellarini qurish imkonini beradi:

  1. Qo'ng'iroqlar hajmi qonuniyatlarini soat, kun, hafta va oy kesimida tahlil qiling
  2. Mavsumiylik va oldindan ma'lum tadbirlarni hisobga oling
  3. SLA maqsadlaridan kelib chiqib, har bir vaqt oralig'iga kerakli operatorlar sonini hisoblang
  4. Smena jadvallarini avtomatik shakllantiring

Bu CDR analitikasining eng oliy maqsadi — tarixiy ma'lumotni oldindan ishlaydigan operatsion qarorlarga aylantirish.

Astervis bilan CDR hisobotlarini sozlash

Agar o'zingiz SQL so'rov yozishni chetlab o'tib, bir necha daqiqada ishga tayyor CDR hisobotini olmoqchi bo'lsangiz:

1-qadam: Astervis'ni o'rnating

curl -fsSL https://api.astervis.io/api/releases/install.sh | bash

Astervis AMI orqali Asterisk serveringizga avtomatik ulanadi va qo'ng'iroq ma'lumotlarini — CDR, navbat hodisalari va kanal hodisalarini — o'zining TimescaleDB backendiga yig'a boshlaydi.

2-qadam: Tayyor hisobotlarni ko'rib chiqing

Dashboardni http://your-server:3000 manzilida oching. CDR asosidagi hisobotlar darhol mavjud:

  • Qo'ng'iroqlar hajmi trendlari: kunlik, haftalik, oylik — taqqoslash qatlamlari bilan
  • Heatmap: qo'ng'iroqlarning soat va hafta kuni bo'yicha taqsimoti
  • Natijalar bo'yicha taqsimot: javob berilgan, o'tkazib yuborilgan, band, muvaffaqiyatsiz — trendlar bilan
  • Operatorlar samaradorligi: qabul qilingan qo'ng'iroqlar, o'rtacha davomiylik, mavjudlik
  • Trunk analitikasi: har bir trunk yuklamasi, uzilishlar ulushi, bir vaqtdagi qo'ng'iroqlar
  • Eng faol raqamlar va yo'nalishlar: eng katta hajmli raqamlar va ular bo'yicha batafsil ko'rish

3-qadam: CRM bilan integratsiya qiling

Mijoz kontekstini CDR ma'lumotlari yonida ko'rish uchun Bitrix24 yoki AmoCRM'ni ulang. Qo'ng'iroq yozuvini ochganingizda mijoz tarixi, ochiq bitimlar va qo'llab-quvvatlash murojaatlari — hammasi bitta oynada ko'rinadi.

CDR ma'lumotlarini saqlashning eng yaxshi amaliyotlari

CDR ma'lumotlarini qancha saqlash kerak

Foydalanish holatiSaqlash muddatiSababi
Operatsion hisobot90 kunSmena rejalashtirish uchun yaqin davr qonuniyatlari
Talablarga muvofiqlik (GDPR)Talabga ko'raYurisdiksiyaga bog'liq
Billing bo'yicha nizolar12 oyStandart e'tiroz bildirish muddati
Trend tahlili24 oyMavsumiy qonuniyatlarni aniqlash
Tartibga solish talablari (telekom)1-7 yilYurisdiksiyaga bog'liq

Unumdorlikni optimallashtirish

MySQL/MariaDB'dagi CDR jadvallari uchun:

-- Partition by month for faster queries ALTER TABLE cdr PARTITION BY RANGE (TO_DAYS(calldate)) ( PARTITION p202601 VALUES LESS THAN (TO_DAYS('2026-02-01')), PARTITION p202602 VALUES LESS THAN (TO_DAYS('2026-03-01')), PARTITION p202603 VALUES LESS THAN (TO_DAYS('2026-04-01')), PARTITION p_future VALUES LESS THAN MAXVALUE ); -- Archive old data CREATE TABLE cdr_archive LIKE cdr; INSERT INTO cdr_archive SELECT * FROM cdr WHERE calldate < DATE_SUB(CURDATE(), INTERVAL 1 YEAR); DELETE FROM cdr WHERE calldate < DATE_SUB(CURDATE(), INTERVAL 1 YEAR);

Yuqori yuklamali o'rnatmalar uchun (kuniga 10 000 dan ortiq qo'ng'iroq) TimescaleDB'ni ko'rib chiqing — bu vaqt qatorlari uchun maxsus yaratilgan PostgreSQL kengaytmasi. Astervis ichida aynan shundan foydalanadi va katta hajmlarda u CDR so'rovlarini oddiy MySQL'dan bir necha barobar tezroq bajaradi.

CDR bilan ishlashdagi tipik xatolar

1. Yo'qolgan yozuvlar

CDR yozuvlarini tarmoq emas, Asterisk hosil qiladi. Agar Asterisk suhbat o'rtasida ishdan chiqsa, o'sha CDR to'liq bo'lmasligi yoki umuman bo'lmasligi mumkin. CDR yozuvlari sonini kutilayotgan qo'ng'iroqlar hajmi bilan doim solishtirib turing.

2. duration va billsec chalkashligi

  • duration = qo'ng'iroq boshlanishidan tugashigacha bo'lgan umumiy vaqt (chaqiruv signali ham kiradi)
  • billsec = javobdan tugatishgacha bo'lgan vaqt (faqat suhbat)

Operator samaradorligi metrikalari uchun duration ishlatilsa, raqamlar sun'iy ravishda oshib ketadi. Suhbat vaqtini hisoblashda doim billsec dan foydalaning.

3. Uzatilgan qo'ng'iroqlarning ikki marta hisoblanishi

Ko'r uzatishlar (blind transfer) bitta mijoz murojaati uchun bir nechta CDR yozuvi hosil qiladi. Ikki marta uzatilgan qo'ng'iroq 3 ta CDR yozuvini beradi. Hisobotingiz buni linkedid (Asterisk 12+) yoki dastlabki uniqueid bo'yicha guruhlash orqali hisobga olishi kerak.

4. Vaqt mintaqalari mos kelmasligi

Agar Asterisk serveringiz UTC'da ishlasa, jamoangiz esa EST'da ishlasa, CDR vaqt belgilari "ish vaqti"dan 5 soatga farq qiladi. Yoki Asterisk'da vaqt mintaqasini sozlang, yoki o'girishni hisobot qatlamida bajaring.

5. Navbatdan kelgan qo'ng'iroqlarda kontekst yo'q

Navbatdan kelgan qo'ng'iroq CDR'i uni oxirida qabul qilgan operatorni ko'rsatadi, lekin quyidagilarni ko'rsatmaydi:

  • mijoz navbatda qancha kutgani
  • undan oldin nechta operatorga taklif qilingani (RINGNOANSWER hodisalari)
  • mijoz kutishdan voz kechib, keyin qayta qo'ng'iroq qilganmi

Aynan shuning uchun call-markaz analitikasi uchun yolg'iz CDR yetarli emas. CDR bilan birga queue_log yoki AMI hodisalari ma'lumotlari kerak bo'ladi.

Xulosa

CDR ma'lumotlari Asterisk hisobotlarining poydevori, lekin xom CDR yozuvlari faqat boshlanish nuqtasi. "Bazadagi ma'lumot" bilan "amaliy xulosalar" o'rtasidagi tafovut — aynan shu joyda ko'pchilik jamoalar tiqilib qoladi: call-markaz ishini yaxshilash o'rniga haftalab SQL so'rov yozib, dashboard yig'ishadi.

Agar sizga oddiy qo'ng'iroq loglari kerak bo'lsa, qo'lda yozilgan SQL so'rovlar ish beradi. Agar heatmap'lar, operator KPI'lari, trunk monitoringi va CRM integratsiyasi bilan ishga tayyor analitika kerak bo'lsa — Astervis buning barchasini 5 daqiqalik o'rnatishda, birinchi kundanoq tayyor 30+ grafik bilan beradi.

Bepul 14 kunlik sinovni boshlang va CDR ma'lumotlaringiz shuncha vaqtdan beri sizga nima demoqchi bo'lganini ko'ring.


Real vaqt rejimidagi monitoring ham kerakmi? O'qing: Asterisk navbatlarini real vaqtda qanday kuzatish kerak

Yechimlarni taqqoslayapsizmi? Ko'ring: 2026-yilda eng yaxshi Asterisk monitoring vositalari

Taxmin qilishni bas qiling. Ko'rishni boshlang.

Asterisk call-markazingizning haqiqiy ko'rinishi: navbatlardagi kutish vaqti, operatorlar faolligi, trunk yuklamasi va 30+ grafik. Sizning serveringizda on-premise. 5 daqiqada o'rnatish. Kartasiz.

$119/oydan flat. Operatorlar soni cheklanmagan. 14 kunlik triаl.

Ulashish