Експертиза · Телефонія та контакт-центр
Шар телефонії між вашим оператором і тим, хто відповідає — людиною чи агентом.
Ми будуємо центральний вузол: SIP-транки, правила маршрутизації за графіком, IVR-меню, зчитувані з бази, черги очікування, переадресацію на людину, запис і аналіз дзвінків. Дзвінок стає записом із транскриптом і резюме, а не спогадом.
Вже збудованоTrei implementări proprii, citate mai jos. (1) Stratul Asterisk din platforma Kallina: 5.522 de linii de configurație de dialplan, scripturi AGI și punți audio în `asterisk/`, plus șabloane de trunk generate automat per număr. (2) `asterisk-manager` — un serviciu separat care administrează cozile, trunkurile și fluxul RTP prin interfața de management a centralei. (3) Middleware-ul pentru centrala virtuală a unui operator, care a rulat în producție: commitul de reconciliere din 14 iulie 2026 aduce în depozit cod care rulase pe server și era cu circa 40 de zile înaintea git-ului. Rezerva, spusă înainte să întrebi: gazda SIP prin care trec liniile noastre de test nu răspunde — verificat azi, 06.09.2026, fără răspuns la ping și fără răspuns pe HTTP. Nu prezentăm un număr de demonstrație pe care să suni acum, pentru că nu l-am putea ridica în fața ta.
Між вашим телефонним оператором і тим, хто фактично відповідає — людиною чи голосовим агентом — має існувати шар, який ухвалює рішення. Хто приймає дзвінок о 23:40. Що відбувається, якщо ніхто не відповідає. Куди йде дзвінок, коли клієнт просить «людину». Що лишається від розмови після її завершення. Цей шар — це АТС, і ми будуємо його так, щоб він був власністю бізнесу, а не голосового постачальника: якщо завтра ви зміните движок агента, правила маршрутизації, черги й історія залишаться у вас.
Конкретно, що ми побудували: дванадцять файлів dialplan — продакшен, IVR, черга, переадресація, voicemail, перенаправлення, вихідні дзвінки з агентом — чотири скрипти AGI в Python і два аудіомости, разом 5.522 рядки. Двигун IVR не має меню, записаних у файлі: він читає їх із бази через скрипт AGI і повертає одне з шести рішень — до агента, до іншого меню, до черги, переадресацію на зовнішній номер, фінальне повідомлення або завершення. Черги називаються за своїм ідентифікатором і не мають членів, записаних у конфігурації: їх додають і вилучають ззовні, через інтерфейс керування, що означає, що оператор може увійти або вийти з черги без перезапуску АТС.
Маршрутизація має справжні правила, а не одне «дзвонити сюди»: години роботи й часовий пояс, нічний графік на кшталт 22:00 → 06:00, і зіставлення за пріоритетом — SIP-заголовок `Diversion`, який містить оригінальний номер, з якого переадресовано дзвінок, потім власний номер, потім резервне правило. Trunk-и генеруються для кожного номера, з назвою, побудованою з постачальника й номера, функцією конфігурації — не записуються вручну для кожного нового рядка.
Те, що виходить з дзвінка, так само важливе, як і сам дзвінок. Для лінії, пов’язаної з віртуальною АТС оператора, ми побудували middleware на Python, який опитує список записів щохвилини, з широкою звіркою кожні шість годин, щоб мережевий збій нічого не втратив, і перевіркою кожні три хвилини пропущених дзвінків — у них немає запису, інакше вони були б повністю невидимі. Кожен запис завантажується, транскрибується, аналізується і віддзеркалюється в аналітиці дзвінків, а пропущений дзвінок стає сповіщенням. Ідемпотентність тримається в наборі Redis, щоб один і той самий запис не оброблявся двічі.