Sizning Asterisk PBX'ingiz har soatda minglab ma'lumot nuqtasini hosil qiladi — qo'ng'iroqlar yozuvlari, navbat hodisalari, operator holatining o'zgarishlari, SIP-kanal metrikalari va trunk bandligi statistikasi. Shunga qaramay, Asterisk'da ishlaydigan aksariyat call-markazlar bu ma'lumotni real vaqtda ko'ra olmaydi. Rahbarlar kun oxiridagi eksportlarga yoki, bundan ham yomoni, o'z sezgisiga tayanadi.
Bu qo'llanmada Asterisk asosidagi call-markaz uchun to'liq KPI dashboard'ni qanday qurishni ko'rib chiqamiz: qaysi ko'rsatkichlarni kuzatish kerak, ma'lumot qayerda saqlanadi, uni qanday so'rov bilan olish mumkin va noldan to'liq operatsion ko'rinishga o'tishning eng tez yo'llari qanday.
Asterisk call-markazingizga KPI dashboard nega kerak
Amaliyotga o'tishdan oldin, normal ko'rinish bo'lmaganda nima bo'lishini ochiq aytaylik:
Dashboard bo'lmasa:
- —Supervayzerlar navbat toshib ketganini bir necha soatdan keyin biladi
- —Rahbar CDR eksportini olmasdan "bugun ishlarimiz qanday?" degan savolga javob bera olmaydi
- —Operator ishini baholash ma'lumotga emas, subyektiv taassurotga asoslanadi
- —SLA buzilishi mijoz shikoyat qilgunga qadar sezilmaydi
- —Smena tarkibi bo'yicha qarorlar pik soatlarga emas, o'rtacha qiymatlarga qarab qabul qilinadi
Yaxshi qurilgan dashboard bilan:
- —Navbatlarning real vaqtli wallboard'i supervayzerga soatlab emas, soniyalarda javob berish imkonini beradi
- —Kun natijalari barcha manfaatdorlarga bir qarashda ko'rinadi
- —Operatorlar bilan ishlash ma'lumotga asoslangan va adolatli bo'ladi
- —SLA bajarilishi avtomatik ogohlantirishlar bilan real vaqtda kuzatiladi
- —Heatmap'lar qachon operator yetishmasligini (va qachon ortiqcha ekanini) aniq ko'rsatadi
Soha benchmark'lariga ko'ra, real vaqtli analitika dashboard'lariga ega call-markazlar joriy etilgandan keyingi birinchi chorakda o'rtacha kutish vaqtini 15-25% ga qisqartiradi va birinchi murojaatda hal qilishni 10-15% ga oshiradi.
Har bir Asterisk call-markazi kuzatishi kerak bo'lgan 20 ta KPI
Hamma metrika ham bir xil foydali emas. Quyida — kimga kerakligi va qanchalik tez-tez kuzatilishi bo'yicha guruhlangan to'liq KPI tizimi.
1-daraja: real vaqt (wallboard) — har 5-10 soniyada yangilanadi
Bular supervayzer ekranida kun bo'yi turishi kerak bo'lgan metrikalar:
| KPI | Formula | Maqsad | Ma'lumot manbai |
|---|---|---|---|
| Navbatdagi qo'ng'iroqlar | Kutayotgan abonentlar soni | < 5 | AMI QueueStatus |
| Eng uzun kutish vaqti | Joriy abonentlar orasidagi maksimal kutish | < 60s | AMI QueueStatus |
| Bo'sh operatorlar | "Not In Use" holatidagi operatorlar | > umumiy sonning 20% | AMI QueueMember |
| Xizmat darajasi (siljuvchi) | (Chegara ichida javob berilgan / Jami kelgan) × 100 | ≥ 80/20 | queue_log |
| Faol suhbatlar | Ulangan kanallar soni | — | AMI CoreShowChannels |
| Yo'qotilgan (bugun) | Abonent navbatda go'shakni qo'ygan qo'ng'iroqlar | < 5% | queue_log'dagi ABANDON hodisalari |
2-daraja: operatorlar samaradorligi — har 30-60 soniyada yangilanadi
Alohida operator va jamoa mahsuldorligini deyarli real vaqtda kuzatish:
| KPI | Formula | Maqsad | Ma'lumot manbai |
|---|---|---|---|
| O'rtacha ishlov berish vaqti (AHT) | (Suhbat vaqti + Hold vaqti + ACW) / Ishlov berilgan qo'ng'iroqlar | Soha bo'yicha: 4-6 daqiqa | CDR + queue_log |
| Operator bandligi | (Umumiy ishlov berish vaqti / Tizimdagi vaqt) × 100 | 75-85% | queue_log PAUSE/UNPAUSE |
| Birinchi qo'ng'iroqda hal qilish (FCR) | (Qayta murojaatsiz hal qilingan qo'ng'iroqlar / Jami qo'ng'iroqlar) × 100 | > 70% | CDR + CRM ma'lumotlari |
| Soatiga qo'ng'iroqlar | Jami ishlov berilgan qo'ng'iroqlar / Ishlangan soatlar | 8-15 (vazifaga qarab) | queue_log'dagi CONNECT hodisalari |
| Hold ulushi | Umumiy hold vaqti / Umumiy suhbat vaqti | < 10% | CDR'dagi holdtime maydoni |
| Perevod ulushi | Perevodlar / Jami qo'ng'iroqlar × 100 | < 15% | queue_log'dagi TRANSFER hodisalari |
| Qo'ng'iroqdan keyingi ish (ACW) | Qo'ng'iroq tugagach rasmiylashtirishga ketgan vaqt | < 60s | queue_log PAUSE(ACW) |
3-daraja: operatsion — har 5-15 daqiqada yangilanadi
Bu metrikalar kun davomidagi taktik qarorlarni belgilaydi:
| KPI | Formula | Maqsad | Ma'lumot manbai |
|---|---|---|---|
| O'rtacha javob tezligi (ASA) | Umumiy kutish vaqti / Javob berilgan qo'ng'iroqlar | < 30s | queue_log CONNECT |
| Yo'qotilgan qo'ng'iroqlar ulushi | Yo'qotilgan / (Javob berilgan + Yo'qotilgan) × 100 | < 5% | queue_log |
| Kutish vaqti taqsimoti | Kutish vaqtlari gistogrammasi (0-15s, 15-30s va h.k.) | 80% 30s gacha | queue_log |
| Trunk bandligi | Faol trunk kanallari / Umumiy sig'im × 100 | < 70% (zaxira uchun) | AMI |
| Qayta qo'ng'iroq muvaffaqiyati | Muvaffaqiyatli qayta qo'ng'iroqlar / Qayta qo'ng'iroq so'rovlari × 100 | > 85% | CDR + callback loglari |
4-daraja: strategik — kunlik va haftalik hisobotlar
Bular xodimlar, o'qitish va biznes bo'yicha qarorlarni belgilaydi:
| KPI | Formula | Maqsad | Ma'lumot manbai |
|---|---|---|---|
| Bir qo'ng'iroq tannarxi | Umumiy operatsion xarajat / Jami ishlov berilgan qo'ng'iroqlar | Sohaga qarab farq qiladi | CDR + moliyaviy ma'lumotlar |
| Mijozlar mamnunligi (CSAT) | So'rovnoma javoblarining o'rtachasi | > 4.2/5 | qo'ng'iroqdan keyingi so'rovnoma |
| Operatorlar oqimi | Ishdan ketgan operatorlar / O'rtacha xodimlar soni × 100 | < 3%/oy | HR ma'lumotlari |
Asterisk'dagi ma'lumot manbalarini tushunish
Nimadir qurishdan oldin ma'lumot qayerda yotganini bilish kerak. Asterisk call-markaz ma'lumotlarini bir nechta quyi tizimda saqlaydi:
1. CDR (Call Detail Records)
CDR jadvali — tarixiy ma'lumotning asosiy manbai. Har bir tugagan qo'ng'iroq yozuv qoldiradi:
asterisk*CLI> cdr show status
Dashboard uchun muhim CDR maydonlari:
-- PostgreSQL CDR table structure (typical)
CREATE TABLE cdr (
calldate TIMESTAMPTZ NOT NULL,
clid VARCHAR(80),
src VARCHAR(80), -- Caller number
dst VARCHAR(80), -- Dialed number/queue
dcontext VARCHAR(80), -- Dial context
channel VARCHAR(80), -- Originating channel
dstchannel VARCHAR(80), -- Destination channel
lastapp VARCHAR(80), -- Last application (Queue, Dial, etc.)
lastdata VARCHAR(80), -- App arguments
duration INTEGER, -- Total duration (ring + talk)
billsec INTEGER, -- Billable seconds (talk only)
disposition VARCHAR(45), -- ANSWERED, NO ANSWER, BUSY, FAILED
uniqueid VARCHAR(150), -- Unique call ID
linkedid VARCHAR(150) -- Linked ID (bridges related legs)
);
CREATE INDEX idx_cdr_calldate ON cdr (calldate);
CREATE INDEX idx_cdr_dst ON cdr (dst);
CREATE INDEX idx_cdr_disposition ON cdr (disposition);2. queue_log
Bu — navbatlar bo'yicha real vaqtli ma'lumotning eng boy manbai. Har bir navbat hodisasi logga yoziladi:
-- queue_log format: time|callid|queuename|agent|event|data1|data2|data3|data4|data5
1711000000|1711000000.42|support|SIP/agent101|CONNECT|12|1711000000.42|5
1711000000|1711000000.43|sales|NONE|ABANDON|1|1|45
Kuzatish kerak bo'lgan asosiy hodisalar:
| Hodisa | Ma'nosi | Dashboard'da qo'llanishi |
|---|---|---|
| ENTERQUEUE | Abonent navbatga kirdi | Navbat chuqurligi, kelish jadalligi |
| CONNECT | Operator javob berdi | Kutish vaqti, ASA, xizmat darajasi |
| ABANDON | Abonent kutayotib go'shakni qo'ydi | Yo'qotilgan qo'ng'iroqlar ulushi |
| COMPLETECALLER | Suhbatni abonent yakunladi | AHT, qo'ng'iroq davomiyligi |
| COMPLETEAGENT | Suhbatni operator yakunladi | AHT, qo'ng'iroq davomiyligi |
| RINGNOANSWER | Operator go'shakni ko'tarmadi | Operator bo'yicha o'tkazib yuborilgan qo'ng'iroqlar |
| TRANSFER | Qo'ng'iroq perevod qilindi | Perevod ulushi |
| PAUSE | Operator pauzada (tanaffus, ACW) | Bandlik, mavjudlik |
| UNPAUSE | Operator pauzadan chiqdi | Bandlik, mavjudlik |
| REMOVEMEMBER | Operator navbatdan chiqdi | Liniyadagi xodimlar soni |
| ADDMEMBER | Operator navbatga kirdi | Liniyadagi xodimlar soni |
So'rovlar tez ishlashi uchun queue_log'ni ma'lumotlar bazasida saqlang:
CREATE TABLE queue_log (
id BIGSERIAL PRIMARY KEY,
time TIMESTAMPTZ NOT NULL,
callid VARCHAR(80),
queuename VARCHAR(80),
agent VARCHAR(80),
event VARCHAR(32) NOT NULL,
data1 VARCHAR(100),
data2 VARCHAR(100),
data3 VARCHAR(100),
data4 VARCHAR(100),
data5 VARCHAR(100)
);
CREATE INDEX idx_qlog_time ON queue_log (time);
CREATE INDEX idx_qlog_queue_event ON queue_log (queuename, event);
CREATE INDEX idx_qlog_agent ON queue_log (agent);3. AMI (Asterisk Manager Interface)
AMI tizimning joriy holatini TCP-soket orqali uzatadi:
Action: QueueStatus
Queue: support
Response: Success
...
Event: QueueParams
Queue: support
Calls: 3
Holdtime: 15
TalkTime: 245
Completed: 87
Abandoned: 4
ServiceLevel: 80.2
ServicelevelPerf: 85.1
...
Event: QueueMember
Queue: support
Name: Agent 101
StateInterface: SIP/agent101
Status: 1 -- 1=Not In Use, 2=In Use, 6=Ringing
Paused: 0
CallsTaken: 12
LastCall: 1711000000
4. CEL (Channel Event Logging)
Qo'ng'iroq yo'lini batafsil kuzatish uchun (hold hodisalari, perevodlar, konferensiyalar):
CREATE TABLE cel (
id BIGSERIAL PRIMARY KEY,
eventtype VARCHAR(30), -- CHAN_START, ANSWER, HOLD, UNHOLD, BRIDGE_ENTER, etc.
eventtime TIMESTAMPTZ,
cid_name VARCHAR(80),
cid_num VARCHAR(80),
exten VARCHAR(80),
context VARCHAR(80),
channame VARCHAR(80),
linkedid VARCHAR(80),
uniqueid VARCHAR(80),
extra TEXT -- JSON with additional data
);Dashboard qurish: uchta yondashuv taqqoslanadi
1-yondashuv: Grafana + PostgreSQL bilan o'zingiz qurish
Qurish vaqti: 60-120 soat | Narxi: bepul (OSS) | Xizmat ko'rsatish: oyiga 5-10 soat
Eng keng tarqalgan variant. Asterisk'ni CDR va queue_log'ni PostgreSQL'ga yozishga sozlaysiz, so'ng SQL so'rovlar asosida Grafana dashboard'larini yig'asiz.
1-qadam: CDR'ni PostgreSQL'ga yozishni sozlash
/etc/asterisk/cdr_pgsql.conf faylini tahrirlaymiz:
[global]
hostname=localhost
port=5432
dbname=asterisk
user=asterisk
password=your_secure_password
table=cdr2-qadam: queue_log'ni bazaga yozishni sozlash
/etc/asterisk/extconfig.conf faylida:
[settings]
queue_log => pgsql,asterisk,queue_log3-qadam: Har bir KPI uchun SQL so'rov yozish
Grafana uchun real vaqtli xizmat darajasi so'rovi:
-- Service Level (80/20) for the last hour, by queue
WITH events AS (
SELECT
queuename,
event,
CAST(data1 AS INTEGER) AS wait_time
FROM queue_log
WHERE time >= NOW() - INTERVAL '1 hour'
AND event IN ('CONNECT', 'ABANDON')
)
SELECT
queuename AS "Queue",
COUNT(*) FILTER (WHERE event = 'CONNECT') AS answered,
COUNT(*) FILTER (WHERE event = 'ABANDON') AS abandoned,
ROUND(
100.0 * COUNT(*) FILTER (WHERE event = 'CONNECT' AND wait_time <= 20)
/ NULLIF(COUNT(*), 0), 1
) AS "Service Level %"
FROM events
GROUP BY queuename
ORDER BY queuename;Soatlar kesimidagi yuklama heatmap'i:
-- Heatmap: calls by hour and day of week (last 4 weeks)
SELECT
EXTRACT(DOW FROM calldate) AS day_of_week,
EXTRACT(HOUR FROM calldate) AS hour,
COUNT(*) AS call_count
FROM cdr
WHERE calldate >= NOW() - INTERVAL '28 days'
AND dst IN ('support', 'sales', 'billing')
GROUP BY 1, 2
ORDER BY 1, 2;Operator samaradorligi kartochkasi:
-- Agent performance: today
WITH agent_calls AS (
SELECT
agent,
COUNT(*) FILTER (WHERE event = 'CONNECT') AS calls_taken,
AVG(CAST(data2 AS INTEGER)) FILTER (WHERE event IN ('COMPLETECALLER','COMPLETEAGENT')) AS avg_talk_time,
AVG(CAST(data1 AS INTEGER)) FILTER (WHERE event = 'CONNECT') AS avg_wait_given,
COUNT(*) FILTER (WHERE event = 'RINGNOANSWER') AS missed_rings,
COUNT(*) FILTER (WHERE event = 'TRANSFER') AS transfers
FROM queue_log
WHERE time >= CURRENT_DATE
AND agent != 'NONE'
GROUP BY agent
),
agent_pauses AS (
SELECT
agent,
SUM(
EXTRACT(EPOCH FROM
LEAD(time) OVER (PARTITION BY agent ORDER BY time) - time
)
) FILTER (WHERE event = 'PAUSE') AS total_pause_seconds
FROM queue_log
WHERE time >= CURRENT_DATE
AND event IN ('PAUSE', 'UNPAUSE')
GROUP BY agent
)
SELECT
ac.agent AS "Agent",
ac.calls_taken AS "Calls",
ROUND(ac.avg_talk_time) || 's' AS "Avg Talk",
ROUND(ac.avg_wait_given) || 's' AS "Avg Wait Given",
ac.missed_rings AS "Missed",
ac.transfers AS "Transfers",
COALESCE(ROUND(ap.total_pause_seconds / 60), 0) || ' min' AS "Break Time"
FROM agent_calls ac
LEFT JOIN agent_pauses ap ON ac.agent = ap.agent
ORDER BY ac.calls_taken DESC;Afzalliklari: bepul, juda moslashuvchan, hamma narsa sizning nazoratingizda Kamchiliklari: qurishga 60-120 soat ketadi, SQL bo'yicha chuqur bilim talab qiladi, Grafana'da real vaqtli AMI ma'lumoti yo'q (o'z middleware'ingiz kerak), Asterisk versiyasi o'zgarganda dashboard'lar buziladi, doimiy xizmat ko'rsatish yuki
2-yondashuv: QueueMetrics
Joriy etish vaqti: 2-4 soat | Narxi: oyiga har bir operator uchun CHF 8 | Xizmat ko'rsatish: oyiga 2-3 soat
QueueMetrics — Asterisk navbatlari bo'yicha hisobotning klassik yechimi. queue_log'ni o'qiydi va tayyor hisobotlarni beradi.
Nima olasiz:
- —Tayyor tarixiy hisobotlar (30 dan ortiq)
- —Oddiy real vaqtli wallboard
- —Ish ko'rsatkichlari bilan operator sahifasi
- —SLA nazorati
Cheklovlari:
- —Java'da yozilgan (JVM kerak, resurs sarfi katta)
- —Interfeys eskirgan (zamonaviy vizualizatsiya yo'q)
- —Kanal holatini ko'rish uchun real vaqtli AMI integratsiyasi yo'q
- —Heatmap va murakkab vizualizatsiyalar yo'q
- —Trunk monitoringi yo'q
- —CRM integratsiyasi yo'q
- —Narx operator soniga qarab o'sadi (ko'lam kattalashganda qimmat: 50 operator = oyiga $400)
- —Faqat self-hosted, yangilanishlar qo'lda
3-yondashuv: Astervis (vazifaga moslangan zamonaviy yechim)
Joriy etish vaqti: 15 daqiqa | Narxi: oyiga $119 dan | Xizmat ko'rsatish: yo'q (avtomatik yangilanadi)
Astervis sizning Asterisk PBX'ingizga AMI va CDR orqali to'g'ridan-to'g'ri ulanadi va real vaqtli ma'lumotli 30 dan ortiq tayyor dashboard beradi:
Nima olasiz:
- —30 dan ortiq grafik, jumladan heatmap'lar, trend chiziqlari va taqsimot diagrammalari
- —Real vaqtli wallboard (AMI orqali har 5 soniyada yangilanadi)
- —KPI ballari bilan operator dashboard'lari
- —SLA nazorati bilan navbat analitikasi
- —Trunk bandligi monitoringi
- —Qo'ng'iroq yozuvlarini tinglash integratsiyasi
- —CRM integratsiyasi (Bitrix24, AmoCRM)
- —Operator smenalari va jadvallarini rejalashtirish
- —Bitta buyruq bilan o'rnatish:
curl -fsSL https://api.astervis.io/api/releases/install.sh | bash - —Self-hosted: ma'lumotlaringiz o'z serveringizda qoladi
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.
Imkoniyatlar taqqoslovi: uchala yondashuv
| Imkoniyat | O'zingiz qurgan Grafana | QueueMetrics | Astervis |
|---|---|---|---|
| Joriy etish vaqti | 60-120 soat | 2-4 soat | 15 daqiqa |
| Real vaqtli ma'lumot | Cheklangan (AMI yo'q) | Oddiy | To'liq AMI + CDR |
| Yangilanish chastotasi | Qo'lda yangilash | 30-60 soniya | 5 soniya |
| Tayyor dashboard'lar | Yo'q (hammasini o'zingiz) | ~30 hisobot | 30+ grafik |
| Heatmap'lar | O'z SQL'ingiz kerak | ❌ | ✅ Ichida bor |
| Operator kartochkalari | O'z SQL'ingiz kerak | Oddiy | ✅ Kengaytirilgan |
| Trunk monitoringi | O'zingiz yozasiz | ❌ | ✅ |
| CRM integratsiyasi | O'zingiz yozasiz | ❌ | ✅ Bitrix24, AmoCRM |
| Qo'ng'iroq yozuvlari | Alohida vosita | Oddiy | ✅ Ichki pleyer |
| Telefonda ishlash | Sozlashga bog'liq | ❌ | ✅ Moslashuvchan interfeys |
| Ogohlantirishlar | Grafana alertlari | Faqat e-mail | ✅ Bir nechta kanal |
| Xizmat ko'rsatish | Oyiga 5-10 soat | Oyiga 2-3 soat | Yo'q |
| Narxi (50 operator) | Bepul (+ sizning vaqtingiz) | ~$400/oy | $119/oy |
| Zamonaviy interfeys | Malakaga bog'liq | ❌ | ✅ |
Ishlaydigan dashboard tuzilishini loyihalash
Qaysi yondashuvni tanlashingizdan qat'i nazar, bu tamoyillar dashboard'ni haqiqatan foydali qiladi:
"Uch ekran" modeli
Eng samarali call-markazlar uchta dashboard ko'rinishidan foydalanadi, har biri o'z auditoriyasi uchun:
1-ekran: operatsion wallboard (supervayzerlar va operatorlar uchun)
Butun zalga ko'rinadigan katta televizorga chiqariladi:
┌─────────────────────────────────────────────────────┐
│ SERVICE LEVEL: 87% │ CALLS IN QUEUE: 2 │
│ ████████████░░ 80/20 │ LONGEST WAIT: 0:23 │
├─────────────────────────────────────────────────────┤
│ AVAILABLE AGENTS │ TODAY'S STATS │
│ ● Agent 101 (idle) │ Answered: 234 │
│ ● Agent 102 (talking) │ Abandoned: 8 (3.3%) │
│ ● Agent 103 (ringing) │ Avg Wait: 18s │
│ ○ Agent 104 (break) │ Avg Talk: 4:22 │
│ ● Agent 105 (talking) │ ASA: 14s │
├─────────────────────────────────────────────────────┤
│ HOURLY VOLUME call volume by hour graph │
│ 8am ████████████ 45 │
│ 9am ██████████████████ 67 │
│ 10am ████████████████████████ 89 ← peak │
│ 11am ██████████████████ 65 │
└─────────────────────────────────────────────────────┘
Wallboard uchun loyihalash qoidalari:
- —Ko'pi bilan 6-8 ta metrika (ma'lumot ortiqchaligi foydani yo'qqa chiqaradi)
- —Rang kodlash: yashil (me'yorda), sariq (ogohlantirish), qizil (buzilish)
- —Shrift o'lchami 5 metrdan o'qiladigan bo'lsin
- —Har 5-10 soniyada avtomatik yangilanish
- —Hech qanday skroll kerak emas — hammasi bir vaqtda ko'rinadi
2-ekran: rahbar dashboard'i (jamoa liderlari va menejerlar uchun)
Taktik qarorlar shu yerda qabul qilinadi:
┌────────────────────────────────────────────────────────────┐
│ QUEUE PERFORMANCE (Today) │
│ ┌──────────┬─────────┬──────────┬──────┬──────┬─────────┐ │
│ │ Queue │ Offered │ Answered │ Abn% │ SL% │ ASA │ │
│ ├──────────┼─────────┼──────────┼──────┼──────┼─────────┤ │
│ │ Support │ 156 │ 148 │ 5.1% │ 82% │ 22s │ │
│ │ Sales │ 89 │ 87 │ 2.2% │ 91% │ 12s │ │
│ │ Billing │ 67 │ 61 │ 9.0% │ 71% │ 38s ⚠ │ │
│ └──────────┴─────────┴──────────┴──────┴──────┴─────────┘ │
├────────────────────────────────────────────────────────────┤
│ AGENT LEADERBOARD │ WAIT TIME DISTRIBUTION │
│ 1. Agent 103 — 34 calls, 92% │ 0-15s: ████████████ 45% │
│ 2. Agent 101 — 31 calls, 88% │ 15-30s: ████████ 28% │
│ 3. Agent 105 — 28 calls, 85% │ 30-60s: ████ 15% │
│ 4. Agent 102 — 26 calls, 79% │ 60-90s: ██ 8% │
│ 5. Agent 104 — 22 calls, 75% │ 90s+: █ 4% │
├────────────────────────────────────────────────────────────┤
│ HOURLY HEATMAP (Mon-Fri) │
│ 8am 9am 10am 11am 12pm 1pm 2pm 3pm 4pm 5pm │
│ Mon ░░ ██ ████ ████ ██ ░░ ██ ████ ████ ██ │
│ Tue ░░ ██ ████ ██ ██ ██ ██ ████ ██ ░░ │
│ Wed ██ ████ ████ ████ ██ ██ ████ ████ ████ ██ │
│ Thu ░░ ██ ████ ██ ██ ░░ ██ ██ ████ ██ │
│ Fri ░░ ██ ██ ██ ░░ ░░ ██ ██ ██ ░░ │
└────────────────────────────────────────────────────────────┘
Nimalarni kiritish kerak:
- —Navbatlar kesimidagi taqqoslash jadvali
- —Asosiy ko'rsatkichlar bilan operatorlar reytingi
- —Kutish vaqti taqsimoti gistogrammasi
- —Smenalarni rejalashtirish uchun soatlik heatmap
- —SLA trend chizig'i (7 kunlik va 30 kunlik)
3-ekran: rahbariyat uchun hisobot (direktorlar va top-menejment uchun)
Trendlar va biznesga ta'sirga qaratilgan haftalik yoki oylik kesim:
- —Prognoz bilan oydan oyga qo'ng'iroqlar hajmi dinamikasi
- —Bir qo'ng'iroq tannarxi dinamikasi
- —Vaqt bo'yicha mijozlar mamnunligi ballari
- —SLA bajarilishi trendi (yaxshilanib borishi kerak)
- —Xodimlardan foydalanish samaradorligi ko'rsatkichlari
- —Murojaatlarning asosiy sabablari (IVR ma'lumotlari yoki yakunlash kodlaridan)
Dashboard loyihalashning eng yaxshi amaliyotlari
- —
Metrikadan emas, savoldan boshlang. Har bir foydalanuvchi qanday qaror qabul qilishi kerak? Faqat shu qarorlarga yordam beradigan ma'lumotni ko'rsating.
- —
Tafsilotlarni bosqichma-bosqich oching. Asosiy ko'rinishda umumiy raqamlar, tafsilotlar — bosish orqali. Hammasini bitta ekranga tiqishtirmang.
- —
Rang ma'no anglatsin. Yashil/sariq/qizil izchil ravishda me'yor/ogohlantirish/buzilishni bildirishi kerak. Rangni bezak sifatida ishlatmang.
- —
Real vaqt ≠ tarix. Ularni ajrating. Real vaqtli dashboard'lar "hozir nima bo'lyapti?" degan savolga, tarixiylari esa "nima bo'ldi va nega?" degan savolga javob beradi.
- —
Hamma narsaga mo'ljal qo'ying. Maqsadsiz raqamlar ma'nosiz. "ASA 34 soniya" hech nima demaydi. "ASA 34 soniya (maqsad: 20s) — ⚠ maqsaddan 70% yuqori" harakatga undaydi.
- —
Faqat suratni emas, dinamikani ko'rsating. Xizmat darajasi 75% — bu yomon. Ammo o'tgan hafta 60% bo'lgan bo'lsa, siz o'sayapsiz. Kontekst muhim.
- —
O'qilishini tekshiring. Agar supervayzer o'z ish joyidan wallboard'ni o'qiy olmasa, undan foyda yo'q.
Asterisk dashboard'ingiz uchun kerakli SQL so'rovlar
Quyida istalgan vizualizatsiya vositasiga to'g'ri keladigan, ishlab chiqarishga tayyor so'rovlar:
Navbatlar bo'yicha real vaqtli xizmat darajasi
WITH hourly_events AS (
SELECT
queuename,
event,
CAST(NULLIF(data1, '') AS INTEGER) AS wait_seconds
FROM queue_log
WHERE time >= NOW() - INTERVAL '1 hour'
AND event IN ('CONNECT', 'ABANDON')
)
SELECT
queuename,
COUNT(*) AS total_offered,
COUNT(*) FILTER (WHERE event = 'CONNECT') AS answered,
COUNT(*) FILTER (WHERE event = 'ABANDON') AS abandoned,
ROUND(
100.0 * COUNT(*) FILTER (
WHERE event = 'CONNECT' AND wait_seconds <= 20
) / NULLIF(COUNT(*), 0), 1
) AS service_level_pct,
ROUND(AVG(wait_seconds) FILTER (WHERE event = 'CONNECT'), 0) AS avg_speed_answer
FROM hourly_events
GROUP BY queuename;Operatorlar bandligi (bugun)
WITH agent_sessions AS (
SELECT
agent,
event,
time,
LEAD(time) OVER (PARTITION BY agent ORDER BY time) AS next_time,
LEAD(event) OVER (PARTITION BY agent ORDER BY time) AS next_event
FROM queue_log
WHERE time >= CURRENT_DATE
AND agent != 'NONE'
AND event IN ('ADDMEMBER', 'REMOVEMEMBER', 'CONNECT',
'COMPLETECALLER', 'COMPLETEAGENT', 'PAUSE', 'UNPAUSE')
),
talk_time AS (
SELECT
agent,
SUM(EXTRACT(EPOCH FROM next_time - time)) AS total_talk_seconds
FROM agent_sessions
WHERE event = 'CONNECT'
GROUP BY agent
),
login_time AS (
SELECT
agent,
SUM(EXTRACT(EPOCH FROM
COALESCE(next_time, NOW()) - time
)) AS total_login_seconds
FROM agent_sessions
WHERE event = 'ADDMEMBER'
GROUP BY agent
)
SELECT
t.agent,
ROUND(t.total_talk_seconds / 3600, 1) AS talk_hours,
ROUND(l.total_login_seconds / 3600, 1) AS login_hours,
ROUND(100.0 * t.total_talk_seconds /
NULLIF(l.total_login_seconds, 0), 1) AS utilization_pct
FROM talk_time t
JOIN login_time l ON t.agent = l.agent
ORDER BY utilization_pct DESC;Yo'qotilgan qo'ng'iroqlar tahlili (muammoli soatlarni aniqlash)
SELECT
DATE_TRUNC('hour', time) AS hour,
COUNT(*) FILTER (WHERE event IN ('CONNECT', 'ABANDON')) AS total_offered,
COUNT(*) FILTER (WHERE event = 'ABANDON') AS abandoned,
ROUND(
100.0 * COUNT(*) FILTER (WHERE event = 'ABANDON')
/ NULLIF(COUNT(*) FILTER (WHERE event IN ('CONNECT', 'ABANDON')), 0), 1
) AS abandon_rate_pct,
ROUND(AVG(CAST(NULLIF(data1, '') AS INTEGER))
FILTER (WHERE event = 'ABANDON'), 0) AS avg_wait_before_abandon
FROM queue_log
WHERE time >= CURRENT_DATE
AND event IN ('CONNECT', 'ABANDON')
GROUP BY DATE_TRUNC('hour', time)
HAVING COUNT(*) FILTER (WHERE event = 'ABANDON') > 0
ORDER BY hour;Haftalik ko'rsatkichlar trendi
SELECT
DATE_TRUNC('week', time) AS week,
COUNT(*) FILTER (WHERE event = 'CONNECT') AS answered,
COUNT(*) FILTER (WHERE event = 'ABANDON') AS abandoned,
ROUND(
100.0 * COUNT(*) FILTER (WHERE event = 'CONNECT' AND CAST(NULLIF(data1,'') AS INTEGER) <= 20)
/ NULLIF(COUNT(*) FILTER (WHERE event IN ('CONNECT','ABANDON')), 0), 1
) AS service_level_pct,
ROUND(AVG(CAST(NULLIF(data1,'') AS INTEGER))
FILTER (WHERE event = 'CONNECT'), 0) AS avg_wait_seconds,
ROUND(AVG(CAST(NULLIF(data2,'') AS INTEGER))
FILTER (WHERE event IN ('COMPLETECALLER','COMPLETEAGENT')), 0) AS avg_talk_seconds
FROM queue_log
WHERE time >= NOW() - INTERVAL '12 weeks'
AND event IN ('CONNECT', 'ABANDON', 'COMPLETECALLER', 'COMPLETEAGENT')
GROUP BY DATE_TRUNC('week', time)
ORDER BY week;Haqiqatan ishlaydigan ogohlantirishlarni sozlash
Ogohlantirishsiz dashboard — shunchaki chiroyli rasm. Mazmunli bildirishnomalarni qanday sozlashni ko'rib chiqamiz:
Ogohlantirishlar ierarxiyasi
| Ogohlantirish darajasi | Trigger | Javob choralari | Kanal |
|---|---|---|---|
| Ma'lumot | Navbat chuqurligi 2+ daqiqa davomida > 3 | Supervayzer e'tiborga oladi | Wallboard'da rang o'zgaradi |
| Ogohlantirish | Xizmat darajasi < 80% (siljuvchi 30 daqiqa) | Zaxira operatorlarni ulash | Slack/Teams'ga bildirishnoma |
| Kritik | Yo'qotilganlar ulushi > 10% (siljuvchi 15 daqiqa) | Smenani shoshilinch kuchaytirish | SMS + Slack + e-mail |
| Avariya | Bironta ham operator bo'sh emas | Rahbariyatga eskalatsiya | Navbatchi rahbarga qo'ng'iroq |
Misol: PostgreSQL'dagi ogohlantirish so'rovi
Uni cron orqali har 60 soniyada ishga tushiring:
-- Check for SLA breach in the last 15 minutes
WITH recent AS (
SELECT
queuename,
COUNT(*) AS total,
COUNT(*) FILTER (
WHERE event = 'CONNECT' AND CAST(data1 AS INTEGER) <= 20
) AS within_sla
FROM queue_log
WHERE time >= NOW() - INTERVAL '15 minutes'
AND event IN ('CONNECT', 'ABANDON')
GROUP BY queuename
)
SELECT
queuename,
total,
ROUND(100.0 * within_sla / NULLIF(total, 0), 1) AS sla_pct,
CASE
WHEN 100.0 * within_sla / NULLIF(total, 0) < 60 THEN 'CRITICAL'
WHEN 100.0 * within_sla / NULLIF(total, 0) < 80 THEN 'WARNING'
ELSE 'OK'
END AS status
FROM recent
WHERE 100.0 * within_sla / NULLIF(total, 0) < 80;Dashboard qurishda uchraydigan tipik xatolar
1. Metrikalar ortiqchaligi Bitta ekranda 50 ta ko'rsatkich hech kimga yordam bermaydi. Har bir dashboard ko'rinishi uchun 6-8 ta kritik KPI'dan boshlang. Tafsilotni har doim bosib ochish mumkin.
2. Mo'ljal yo'qligi Maqsadli qiymatsiz metrika — shunchaki raqam. Dashboard'ni yig'ishdan oldin har bir KPI uchun "yaxshi" nima ekanini aniqlab oling. Bu qo'llanmadagi soha benchmark'larini boshlang'ich nuqta sifatida oling, so'ng o'z ishingizga moslab kalibrlang.
3. "Xo'sh, nima bo'libdi?" sinovini e'tiborsiz qoldirish Dashboard'dagi har bir metrika bo'yicha o'zingizdan so'rang: "Bu raqam o'zgarsa, men nimani boshqacha qilaman?" Javob "hech nima" bo'lsa — metrikani olib tashlang.
4. Faqat tarixga qaraydigan dashboard'lar Kun oxiridagi hisobotlar trendlar uchun foydali, lekin bugungi muammolarning oldini ololmaydi. Avval real vaqtli ko'rinishga sarmoya kiriting, tarixiy tahlilni keyin qo'shing.
5. Navbatlar kesimida ajratmaslik Barcha navbatlar bo'yicha aralashtirilgan metrikalar muammolarni yashiradi. SLA'si 95% bo'lgan savdo navbati 60% da cho'kayotgan qo'llab-quvvatlashni bemalol niqoblaydi. Har doim navbatlar kesimidagi ko'rsatkichlarni ko'rsating.
6. Operator maxfiyligini unutish Samaradorlik dashboard'lari kuzatuv emas, rivojlantirish vositasi bo'lishi kerak. Shaxsiy ko'rsatkichlarni operator bilan yakkama-yakka muhokama qiling, wallboard'da esa jamoa o'rtachasini chiqaring. Qo'rquv emas, o'sish madaniyatini quring.
7. Sozlab qo'yib unutish Dashboard'larni takomillashtirib borish kerak. Haftada bir marta ko'rib chiqing: metrikalar hali ham dolzarbmi? Chegaraviy qiymatlar to'g'rimi? Ishda nimadir o'zgardimi? Olti oy davomida tegilmagan dashboard, ehtimol, sizni chalg'itayotgandir.
Nimadan boshlash kerak: noldan dashboard'gacha 15 daqiqada
Agar haftalab davom etadigan mustaqil sozlashni chetlab o'tib, to'liq KPI dashboard'ni bugunoq olmoqchi bo'lsangiz:
1. Astervis'ni PBX serveringizga o'rnating:
curl -fsSL https://api.astervis.io/api/releases/install.sh | bash2. Asterisk nusxangizga ulaning:
O'rnatuvchi Asterisk konfiguratsiyasini o'zi aniqlaydi va AMI hamda CDR orqali ulanadi.
3. Brauzerni oching:
Server IP manziliga 3000-port orqali o'ting. 30 dan ortiq dashboard darhol tayyor — real vaqtli wallboard, operator kartochkalari, navbat analitikasi, trunk monitoringi, heatmap'lar va boshqalar.
4. Jamoa uchun kirishni sozlang:
Operator hisoblarini yarating va navbatlarni taqsimlang. Operator o'z ko'rsatkichlarini ko'radi. Supervayzer — o'z jamoasini. Rahbar — hammasini.
Hech qanday SQL so'rov yozish shart emas. Grafana panellarini sozlash kerak emas. Middleware'ni qo'llab-quvvatlash kerak emas. 14 kunlik bepul sinov muddatini boshlang — bank kartasi talab qilinmaydi — va call-markazingizni 15 daqiqadan kamroq vaqtda to'liq ko'rib turing.
Asosiy xulosalar
- —
Kerakli 20 ta KPI'ni kuzating, ularni darajalarga ajrating: real vaqtli wallboard metrikalari, operatorlar samaradorligi, operatsion samaradorlik va strategik biznes ko'rsatkichlari.
- —
Ma'lumot qayerda yotishini biling: Asterisk'da CDR — tarixiy yozuvlar, queue_log — navbat hodisalari, AMI — real vaqtli holat, CEL — qo'ng'iroq yo'lini batafsil kuzatish.
- —
Dashboard'larni aniq auditoriyaga moslab loyihalang: zal uchun wallboard, rahbarlar uchun taktik dashboard'lar, rahbariyat uchun hisobotlar. Har birining o'z vazifasi bor.
- —
Uchta yondashuv mavjud: o'zingiz qurgan Grafana (bepul, ammo qurishga 60-120 soat), QueueMetrics (eskirgan, har bir operator uchun to'lov) yoki Astervis (zamonaviy, 15 daqiqada joriy etiladi, oyiga $119 dan).
- —
Faqat dashboard emas, ogohlantirishlarni ham sozlang. Buzilganini hech kim ko'rmagan metrika foydasiz. Avtomatik eskalatsiyali ko'p bosqichli ogohlantirish tizimini joriy eting.
- —
Tipik xatolardan qoching: metrikalar ortiqchaligi, mo'ljal yo'qligi, navbatlar bo'yicha aralashtirilgan metrikalar va "sozlab qo'yib unutish" — bularning hammasi sarmoyangiz qiymatini kamaytiradi.
- —
Oddiy boshlang, tez takomillashtiring. Asosiy ko'rinishni bugun ishga tushiring, keyin haftalar davomida sayqallang. Siz haqiqatan foydalanadigan oddiy dashboard, abadiy "ishlanmoqda" holatidagi murakkabidan yaxshiroq.
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.
