Яндекс.Метрика

RealTime в Asterisk: архитектура и конфигурация

RealTime в Asterisk: архитектура и конфигурация с 5 октября по 9 октября

Количество
свободных мест

8 Записаться

Курсы по Mikrotik MTCNA

Курсы по Mikrotik MTCNA с 6 апреля по 10 апреля

Количество
свободных мест

7 Записаться

Курс по Zabbix

Zabbix: мониторинг Asterisk и VoIP с 7 сентября по 11 сентября

Количество
свободных мест

8 Записаться
Как мы пришли к созданию сверхбыстрой и реактивной статистики: опыт проб и ошибок
12
Доклад
Егор Халимоненко
Как мы пришли к созданию сверхбыстрой и реактивной статистики: опыт проб и ошибок

Построение качественной системы статистики для современного контакт-центра — это не просто написание кода, а решение сложного пазла, состоящего из сотен бизнес-требований и технологических ограничений. За десять лет разработки платформы CallForce был пройден путь от поиска идеального стека до создания уникальной архитектуры, способной переваривать миллионы записей без потери производительности. Этот опыт показывает, что готовых решений «из коробки» для таких задач практически не существует, и каждый модуль приходится проектировать с учетом специфики реального трафика.

Система такого уровня — это настоящий технологический комбайн. Она включает в себя не только историческую статистику, но и онлайн-мониторинг, рабочие места операторов, модули управления и речевую аналитику. Когда проект разрастается до сотен тысяч строк кода, на первый план выходит не просто скорость работы, а архитектурная гибкость и чистота реализации. Чтобы избежать критических ошибок на старте таких масштабных внедрений, крайне важен профессиональный предпроектный аудит, который помогает выявить все «подводные камни» инфраструктуры и требований бизнеса.

Сложность бизнес-логики: почему нельзя просто считать звонки

В сфере телефонии статистика — это не арифметическая сумма входящих и исходящих. Это сложная иерархия событий, где один и тот же вызов может менять свой статус несколько раз. Например, звонок может прийти в одну очередь, не дождаться ответа, перевестись на другую, быть перехваченным или уйти на голосовую почту. Для базы данных это может быть одна запись, но для отчетов разных отделов — это разные сущности, которые должны отображаться корректно.

Количество метрик в профессиональном КЦ исчисляется сотнями, и каждая требует особого подхода:

  • Базовые показатели: общее количество вызовов, отвеченные, пропущенные, спасенные (те, что перезвонили сами или им перезвонили) и перехваченные.
  • Сервисные уровни (SL): процент звонков, на которые ответили в течение 15, 20 или 30 секунд. Здесь важно учитывать потери на IVR и в нерабочее время.
  • Статусы операторов: время в работе, на паузе, в режиме обучения или на перерыве. Причем паузы могут иметь десятки разных причин.
  • Технические этапы: время ожидания, время разговора, время пост-вызывной обработки (wrap-up).

Особую сложность представляет расчет агрегированных данных: минимумов, максимумов, средних и медианных значений. Система должна уметь отсекать аномалии, такие как сверхкороткие звонки или технические сбои, чтобы не искажать общую картину. Часто для корректной работы такой аналитики требуется грамотная установка Asterisk с глубокой кастомизацией планов набора, чтобы каждое событие фиксировалось в системе с точностью до миллисекунды.

Технологический тупик: опыт использования GoLang и SQL

На определенном этапе разработки возникла идея использовать GoLang как основной язык для построения отчетов. Казалось бы, Go — это скорость, отличная работа с многопоточностью и низкое потребление ресурсов. Однако на практике команда столкнулась с серьезными трудностями. Главная проблема заключалась в жесткости языка и сложностях взаимодействия с SQL при необходимости быстрой разработки прототипов.

Реляционные базы данных и тяжелые SQL-запросы с десятками JOIN-ов стали «бутылочным горлышком». Когда бизнес просит добавить в отчет новое поле, разработчик вынужден переписывать огромные запросы, следить за индексами и надеяться, что производительность не просядет в три раза. В условиях, когда требуется Ip-телефония для удаленных сотрудников с мгновенным доступом к данным из любой точки мира, такая неповоротливость системы была недопустима. Стало ясно, что классический подход «запросил данные — подождал ответа от БД — отобразил» для больших объемов не работает.

Гибкость NoSQL и «чистая архитектура» на JavaScript

Решением стал переход на стек JavaScript/TypeScript в связке с MongoDB. Это позволило хранить данные в виде «жирных» документов, где в одной записи о звонке содержится вся его история: от попадания в систему до завершения. Больше не нужно было собирать данные по кусочкам из десяти таблиц.

Основные преимущества такого перехода:

  • Версионность данных: если структура отчета меняется, старые данные остаются в прежнем формате, а новые пишутся по-новому. Система умеет работать с обеими версиями одновременно.
  • TypeScript и контракты: использование типизации позволило навести порядок в огромном массиве данных. Если в системе появляется новое событие, оно описывается интерфейсом, и компилятор просто не даст совершить ошибку в логике расчетов.
  • Единый код (DRY): алгоритмы расчета статистики на бэкэнде и логика отображения на фронтенде используют общую кодовую базу. Это гарантирует, что цифры в реальном времени и в историческом отчете всегда будут совпадать.

Однако работа в памяти процесса с большими массивами данных требует ювелирной точности. Чтобы система не «падала» при обработке миллионов звонков, пришлось внедрять строгие правила проектирования. В этом контексте проектирование и настройка сети предприятия также играют ключевую роль: данные должны передаваться между модулями без задержек и потерь, иначе никакая программная оптимизация не спасет от рассинхрона.

Атомарные метрики: как достичь мгновенной загрузки

Главный технологический прорыв CallForce — это отказ от расчетов «на лету» в пользу инкрементального накопления данных. Раньше, чтобы построить отчет за год, система должна была прочитать миллионы строк. Теперь всё работает иначе: как только происходит событие (например, завершился звонок), система «под капотом» мгновенно обновляет все связанные счетчики.

Как это устроено технически:

  • Каждая метрика (количество звонков, сумма секунд, количество потерь) является атомарной.
  • При совершении действия инкрементируется конкретное значение в агрегатах (за час, день, месяц).
  • Система хранит не только итоговую цифру, но и список ID звонков, которые в неё вошли. Это позволяет пользователю «провалиться» (drill-down) из общей цифры в детальный список вызовов.

Благодаря этому отчет за 10 лет строится так же быстро, как за один день. Система просто берет уже готовые, заранее посчитанные суммы. Это критически важно для крупных компаний, где любая задержка в получении данных стоит денег. Чтобы такие системы были защищены от внешних угроз и манипуляций, проводится регулярный аудит IP-ATC, подтверждающий целостность и достоверность собираемой статистики.

Обработка сложных событий: пример с удержанием (Hold)

Одной из самых трудоемких задач стала обработка состояний удержания. В процессе одного разговора оператор может ставить клиента на Hold несколько раз. В логах это выглядит как цепочка событий: HoldOn, HoldOff, снова HoldOn и так далее. Написать алгоритм, который корректно высчитает суммарное время удержания, не запутавшись в пересекающихся событиях, оказалось непросто.

Система должна четко понимать:

  • В какой момент началось удержание?
  • Было ли оно прервано переводом звонка?
  • Кто именно инициировал Hold — первый оператор или тот, на кого перевели вызов?

Подобные нюансы встречаются на каждом шагу. Именно поэтому разработка стабильной логики заняла годы тестов и правок. Для обеспечения надежности авторизации и правильной привязки этих событий к конкретным сотрудникам часто используетсяинтеграция Asterisk с Active Directory , что позволяет автоматически подтягивать данные об именах, должностях и отделах операторов из корпоративной сети.

Контроль качества через тотальное тестирование

Когда в системе сотни тысяч строк кода, любое мелкое изменение в логике расчета одного показателя может «сломать» десяток других отчетов. Чтобы этого не происходило, в CallForce выстроена мощная система автоматизированного тестирования.

Масштаб проверки поражает:

  1. Интеграционные тесты: более 180 000 строк кода, имитирующих реальное поведение пользователей и потоков данных.
  2. Эталонные данные: база из 2 миллионов строк JSON-объектов, которые подаются на вход алгоритмам для проверки точности вычислений.
  3. Регрессионное тестирование: при каждом обновлении система проверяет, не изменились ли итоговые цифры в старых отчетах.

Такой подход позволяет разработчикам не бояться рефакторинга. Если тест проходит — значит, математика сошлась, и клиент получит верные данные. Это создает фундамент доверия к системе, на котором строится вся аналитика эффективности бизнеса.

 

Заключение

Создание сверхбыстрой статистики — это бесконечный процесс оптимизации и борьбы за каждый миллисекунду. Опыт CallForce подтверждает: успех кроется в переходе от классических запросов к событийной модели и атомарным метрикам. Это позволяет превратить громоздкие массивы данных в легкий и отзывчивый инструмент управления.

Практическая польза такой архитектуры очевидна — это возможность видеть реальную картину работы контакт-центра здесь и сейчас, не дожидаясь окончания генерации тяжелых отчетов. В конечном итоге, именно скорость получения точной информации становится решающим фактором в конкурентной борьбе и качестве обслуживания клиентов.

Ежегодная конференция по Asterisk 2026!

Билеты уже в продаже!

Остались вопросы?

Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

Наши
клиенты

Посмотреть все