·13 мин·1 просмотров

Отчётность колл-центра на FreePBX: что действительно работает (и что съедает ваше время)

Встроенная отчётность FreePBX закрывает 1 из 7 ключевых вопросов колл-центра. Разбираем, что настроить вместо неё — SQL-запросы, конфигурация AMI и честное сравнение инструментов.

A
Astervis
Команда инженеров и продактов

Я настраивал отчётность колл-центра на FreePBX столько раз, что уже сбился со счёта. Сценарий всегда один и тот же: человек ставит FreePBX, запускает очереди, а потом спрашивает: «а где мои отчёты?»

Ответ неприятный. Встроенная отчётность FreePBX не рассчитана на работу колл-центра. Она рассчитана на АТС, у которой просто есть очереди.

Эта разница значит больше, чем кажется большинству команд — ровно до того момента, когда через три месяца они не могут ответить на элементарный вопрос вроде «какое у нас среднее время ожидания по часам?»

Моё мнение: FreePBX — лучший из доступных open-source интерфейсов управления АТС. Но считать его модули отчётности аналитикой колл-центра — это как использовать таблицу вместо CRM: формально работает и так же формально тормозит вас.


Что FreePBX реально даёт (честная оценка)

Прежде чем тратить время на выбор внешних инструментов, разберитесь, что именно идёт в комплекте с FreePBX. Кое-что там лучше, чем принято думать. Большая часть — хуже.

Модуль CDR Reports (бесплатный, встроенный)

С него обычно и начинают. Модуль обращается к таблице cdr в Asterisk и показывает её содержимое через веб-интерфейс.

Что он делает хорошо:

  • Поиск истории звонков по диапазону дат, внутреннему номеру или DID
  • Экспорт в CSV для офлайн-анализа
  • Базовая статистика по длительности звонков

Что он не умеет:

  • Показывать метрики в разрезе очередей (звонки логируются по каналу, а не по контексту очереди)
  • Отслеживать переходы состояний оператора (вход, пауза, готов, постобработка)
  • Считать соблюдение SLA
  • Показывать хоть что-то в реальном времени

Вот SQL, который FreePBX CDR выполняет под капотом:

-- This is essentially what FreePBX CDR module queries SELECT calldate, src, dst, duration, billsec, disposition, channel, dstchannel FROM cdr WHERE calldate BETWEEN '2026-04-01' AND '2026-04-02' ORDER BY calldate DESC;

Обратите внимание, чего здесь нет: ни join с queue_log, ни идентификации оператора, ни расчёта времени ожидания. Модуль CDR работает с источником данных, полностью отдельным от ваших очередей.

Моё мнение: CDR-отчёты нормально подходят для сверки биллинга и базовых проверок «был ли такой звонок». Отчётностью колл-центра они не являются. Если кто-то говорит вам, что CDR-отчётов хватит для аналитики, — этот человек не работал в колл-центре.

Queue Reports (коммерческий модуль — $149)

Sangoma продаёт модуль Queue Reports, и многие команды покупают его в надежде закрыть вопрос с отчётностью.

Что он добавляет к CDR:

  • Счётчики звонков по очередям (отвеченные, потерянные, вышедшие по таймауту)
  • Учёт длительности сессий операторов
  • Базовые средние значения времени ожидания

Что по-прежнему не работает:

  • Нет дашборда в реальном времени (данные обновляются при перезагрузке страницы, а не вживую)
  • Средние значения ожидания скрывают распределение — вы не увидите, что 80% звонков ждут 10 секунд, а 20% — 4 минуты
  • Нет связи между работой оператора и результатами очереди
  • Нет тепловых карт и визуализации закономерностей
  • Нельзя сравнивать показатели за разные периоды

$149 — это разовый платёж, что вполне разумно. Но разрыв между тем, что даёт модуль, и тем, что реально нужно колл-центру на 20 операторов, огромен.

UCP (User Control Panel)

UCP сделан для операторов. Он показывает личную историю звонков, голосовую почту и статус присутствия. Это не инструмент отчётности, и я не буду делать вид, что это не так.


Разрыв в отчётности FreePBX (в цифрах)

Практический пример. Колл-центру на FreePBX с 15 операторами каждый день нужно отвечать на такие вопросы:

ВопросFreePBX CDRQueue Reports ($149)Внешняя аналитика
Сколько звонков мы обработали сегодня?Частично (нет фильтра по очереди)ДаДа
Какое у нас соблюдение SLA прямо сейчас?НетНет (нет реального времени)Да
У какого оператора самый высокий AHT?НетЧастично (только время в системе)Да
В какой час больше всего потерянных звонков?НетНет (нет разбивки по часам)Да
Хватит ли нам людей на завтра?НетНетДа
Какой транк работает на пределе?НетНетДа
Как эта неделя выглядит по сравнению с прошлой?Ручной экспорт CSVНетДа

6 из 7 вопросов требуют внешнего инструмента. А единственный вопрос, на который FreePBX частично отвечает (количество звонков), всё равно требует ручной фильтрации.


Как настроить нормальную отчётность на FreePBX

Шаг 1. Включите логирование очередей (критично — этот шаг чаще всего пропускают)

Логирование очередей в FreePBX по умолчанию включено не полностью. Без него вам не поможет ни один внешний инструмент.

В админке FreePBX откройте Applications > Queues и для каждой очереди задайте:

  1. На вкладке Advanced:

    • Event When Called: Yes
    • Event Membership: Yes
    • Queue Logging: Yes (именно этот параметр обычно упускают)
  2. В разделе Timing & Agent Options:

    • Wrap-Up Time: укажите ваше реальное целевое время постобработки (значение 0 по умолчанию означает, что учёта нет)
    • Member Delay: 0 (если вам не нужно объявление перед соединением)

Затем проверьте, что логирование работает:

# Check that queue_log is being written tail -20 /var/log/asterisk/queue_log # You should see entries like: # 1774000000|1774000001|support|CONNECT|15|SIP/200|12 # 1774000012|NONE|support|ADDMEMBER|SIP/201

Если queue_log пуст, проверьте конфигурацию Asterisk:

; /etc/asterisk/logger.conf ; Make sure queue_log is enabled [logfiles] queue_log => queue_log
# After changes: fwconsole restart # Or if you want to avoid dropping calls: asterisk -rx "logger reload"

Моё мнение: по моей оценке, у 40% колл-центров на FreePBX логирование очередей настроено не полностью. Они узнают об этом через 3 месяца, когда кто-то спрашивает: «почему данных нет?» Исправьте это сейчас.

Шаг 2. Настройте AMI для внешних инструментов

Любой внешний инструмент мониторинга подключается через Asterisk Manager Interface (AMI). FreePBX управляет этим сам, но вам нужно завести отдельного пользователя.

Откройте Settings > Asterisk Manager Users в FreePBX или отредактируйте конфиг напрямую:

; /etc/asterisk/manager.conf (managed by FreePBX - use GUI when possible) [monitoring] secret = generate_a_32_char_password_here deny = 0.0.0.0/0.0.0.0 permit = 10.0.0.0/255.255.255.0 ; Your monitoring server subnet read = system,call,log,agent,reporting write = system,call,agent,reporting writetimeout = 5000

Замечание по безопасности: никогда не используйте permit = 0.0.0.0/0.0.0.0 в продакшене. Ограничьте доступ IP-адресом или подсетью вашего сервера мониторинга. Именно через открытый AMI чаще всего и взламывают АТС.

# Test AMI connection from your monitoring server telnet freepbx-server 5038 # Then type: Action: Login Username: monitoring Secret: your_password # You should get: Response: Success # Then test queue data: Action: QueueStatus Queue: your_queue_name

Шаг 3. Настройте доступ к базе для исторических отчётов

Для исторической аналитики внешним инструментам нужен доступ к базам CDR и queue_log. FreePBX использует MySQL/MariaDB:

# Create a read-only database user for analytics mysql -u root -p CREATE USER 'analytics'@'monitoring-server-ip' IDENTIFIED BY 'secure_password'; GRANT SELECT ON asteriskcdrdb.cdr TO 'analytics'@'monitoring-server-ip'; GRANT SELECT ON asteriskcdrdb.cel TO 'analytics'@'monitoring-server-ip'; FLUSH PRIVILEGES;

Если ваш внешний инструмент читает файл queue_log напрямую (а некоторые так и делают), внимательно настройте ротацию логов:

# /etc/logrotate.d/asterisk-queue-log /var/log/asterisk/queue_log { monthly rotate 12 compress delaycompress missingok notifempty copytruncate # Important: don't move the file, copy and truncate }

Моё мнение: copytruncate здесь обязателен. Если logrotate переместит файл, Asterisk продолжит писать в старый файловый дескриптор до самого перезапуска — и вы потеряете данные. Я видел, как из-за этого возникали жалобы на «пропавшие данные», которые расследовали неделями.


Сравнение инструментов отчётности для FreePBX (честный рейтинг)

1. Astervis - лучший вариант для команд, которым нужен результат, а не проект

Astervis создан специально для АТС на базе Asterisk, включая FreePBX.

Установка на FreePBX:

# On your FreePBX server or a separate machine (recommended) curl -fsSL https://api.astervis.io/api/releases/install.sh | bash # Add your FreePBX server in the dashboard # Queues auto-discovered within 60 seconds

Чем он отличается именно для FreePBX:

  • Автоматически определяет конфигурацию очередей FreePBX (не нужно вручную сопоставлять очереди)
  • 30+ графиков, включая тепловые карты, динамику показателей операторов и аналитику по транкам
  • Дашборды в реальном времени с обновлением быстрее секунды через события AMI
  • Управление операторами с KPI, рейтингами и планированием смен
  • Интеграция с CRM (Bitrix24, AmoCRM)
  • Self-hosted — ваши данные остаются внутри вашей сети

Цена: от $119 в месяц при любом числе операторов. Бесплатный триал на 14 дней.

Кому подходит: командам, которые используют FreePBX как колл-центр (от 5 операторов) и хотят получить видимость сразу, без отдельного проекта по внедрению.

2. Grafana + собственный стек - лучший вариант для DevOps-команд

Если у вас есть DevOps-инженер и вы хотите полную кастомизацию:

  1. Установить Grafana + PostgreSQL/TimescaleDB
  2. Написать парсер для /var/log/asterisk/queue_log
  3. Сделать слушатель событий AMI для данных в реальном времени
  4. Собрать дашборды с нуля

Реалистичные сроки: 40–80 часов до продакшен-качества. И дальше — постоянная поддержка.

# Example: basic queue_log parser to PostgreSQL # This is the EASY part. The hard part is real-time AMI event processing. awk -F'|' '{print $1","$2","$3","$4","$5","$6}' /var/log/asterisk/queue_log \ | psql -c "COPY queue_events FROM STDIN WITH CSV"

Моё мнение: я уважаю команды, которые строят аналитику сами. Но я видел три проекта «Grafana поверх FreePBX», которые начинались с энтузиазмом и умирали в течение полугода, когда автор увольнялся или переключался на другие задачи. Первоначальная сборка — это 20% стоимости, поддержка — 80%.

Устали угадывать, что происходит в очередях?

Astervis даёт 30+ реалтайм-графиков, KPI операторов и CRM-интеграцию для вашего Asterisk PBX. On-premise. Установка за 5 минут. От $119/мес flat без ограничения на операторов.

Попробовать бесплатно

3. QueueMetrics - вариант из прошлого

QueueMetrics существует с 2004 года и глубоко интегрирован с Asterisk. Но ему нужны Java/Tomcat на вашем сервере FreePBX.

# QueueMetrics installation on FreePBX yum install java-11-openjdk tomcat # Java + Tomcat on your PBX server # Download and deploy WAR file # Configure database, AMI, queue_log path... # Total setup: 2-4 hours if everything goes right

Специфическая проблема с FreePBX: Tomcat, работающий рядом с FreePBX на одном сервере, конкурирует за ресурсы. Аппетит Java к памяти (обычно 512 МБ — 1 ГБ) на системе, которая одновременно обрабатывает голос в реальном времени, — не лучшая идея. Продакшен-серверы FreePBX должны отдавать ресурсы обработке звонков.

Смотрите наше подробное сравнение с QueueMetrics с разбором цен и миграции.

4. Asternic Stats - бюджетный вариант

Asternic проще, чем QueueMetrics, и работает на PHP вместо Java:

  • Читает queue_log напрямую
  • Простой веб-дашборд (интерфейс в эстетике до 2010 года)
  • Меньше потребление ресурсов, чем у QueueMetrics

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

Подробности — в нашем сравнении с Asternic.


SQL-запросы для отчётности на FreePBX

Если вы делаете собственные отчёты или хотите проверить, правильно ли считает ваш инструмент аналитики, — вот запросы, которые реально работают на базе FreePBX:

Показатели операторов из queue_log

-- Agent call counts and average handle time (FreePBX queue_log table) SELECT agent, COUNT(CASE WHEN event = 'CONNECT' THEN 1 END) AS calls_answered, COUNT(CASE WHEN event = 'RINGNOANSWER' THEN 1 END) AS calls_missed, ROUND(AVG(CASE WHEN event = 'COMPLETECALLER' OR event = 'COMPLETEAGENT' THEN CAST(data2 AS UNSIGNED) END)) AS avg_talk_seconds, ROUND(AVG(CASE WHEN event = 'COMPLETECALLER' OR event = 'COMPLETEAGENT' THEN CAST(data1 AS UNSIGNED) END)) AS avg_hold_seconds FROM queue_log WHERE time > UNIX_TIMESTAMP(CURDATE()) AND agent != 'NONE' GROUP BY agent ORDER BY calls_answered DESC;

Процент потерянных звонков по часам

-- Abandon rate by hour (identifies understaffing windows) SELECT HOUR(FROM_UNIXTIME(time)) AS hour, COUNT(CASE WHEN event = 'ABANDON' THEN 1 END) AS abandoned, COUNT(CASE WHEN event IN ('CONNECT','ABANDON') THEN 1 END) AS total, ROUND(100.0 * COUNT(CASE WHEN event = 'ABANDON' THEN 1 END) / NULLIF(COUNT(CASE WHEN event IN ('CONNECT','ABANDON') THEN 1 END), 0), 1) AS abandon_pct FROM queue_log WHERE time > UNIX_TIMESTAMP(CURDATE() - INTERVAL 7 DAY) AND queuename = 'your_queue' GROUP BY HOUR(FROM_UNIXTIME(time)) ORDER BY hour;

Соблюдение SLA (80/30)

-- SLA: percentage of calls answered within 30 seconds SELECT DATE(FROM_UNIXTIME(time)) AS day, COUNT(CASE WHEN event = 'CONNECT' AND CAST(data1 AS UNSIGNED) <= 30 THEN 1 END) AS within_sla, COUNT(CASE WHEN event = 'CONNECT' THEN 1 END) AS total_answered, ROUND(100.0 * COUNT(CASE WHEN event = 'CONNECT' AND CAST(data1 AS UNSIGNED) <= 30 THEN 1 END) / NULLIF(COUNT(CASE WHEN event = 'CONNECT' THEN 1 END), 0), 1) AS sla_pct FROM queue_log WHERE time > UNIX_TIMESTAMP(CURDATE() - INTERVAL 30 DAY) AND queuename = 'support' GROUP BY DATE(FROM_UNIXTIME(time)) ORDER BY day DESC;

Загрузка транков (FreePBX CDR)

-- Concurrent call peaks by trunk (capacity planning) SELECT DATE(calldate) AS day, HOUR(calldate) AS hour, channel, COUNT(*) AS calls, MAX(duration) AS max_duration FROM cdr WHERE calldate > DATE_SUB(NOW(), INTERVAL 7 DAY) AND channel LIKE 'PJSIP/trunk%' GROUP BY DATE(calldate), HOUR(calldate), channel ORDER BY calls DESC LIMIT 20;

Типичные ошибки в отчётности на FreePBX

1. Принимать duration из CDR за время разговора

Поле duration в CDR включает время дозвона. Поле billsec ближе к времени разговора, но всё ещё включает навигацию по IVR. Ни то, ни другое не отражает реальное время общения оператора с клиентом.

Для точного времени разговора используйте события CONNECT/COMPLETE из queue_log вместе с полями времени удержания (data1) и времени разговора (data2).

2. Не разделять типы очередей

Единая цель по SLA для продаж, поддержки и VIP-очереди не имеет смысла. Настройте отдельные очереди в FreePBX и следите за ними по отдельности:

; queues_additional.conf (FreePBX manages this, but understand the structure) [sales](!) servicelevel=20 ; 20-second SLA for sales strategy=rrmemory [support](!) servicelevel=30 ; 30-second SLA for support strategy=leastrecent [vip](!) servicelevel=15 ; 15-second SLA for VIP strategy=linear ; Always ring best agent first

3. Игнорировать постобработку звонка

Значение по умолчанию wrapuptime=0 в FreePBX означает, что оператор получает следующий звонок сразу после того, как положил трубку. Это приводит к:

  • Неточному AHT (постобработка выполняется уже во время следующего звонка)
  • Выгоранию операторов (нет времени на передышку между звонками)
  • Неверным расчётам пропускной способности

Задайте адекватное время постобработки:

; In FreePBX: Applications > Queues > Queue Settings wrapuptime=30 ; 30 seconds between calls

Подробнее о том, как предотвратить выгорание операторов за счёт грамотного распределения нагрузки.

4. Строить отчёты в часы пик

Аналитические запросы к базе CDR конкурируют с обработкой звонков. Планируйте тяжёлые отчёты на непиковое время или, что ещё лучше, реплицируйте данные в отдельную аналитическую базу.


Что настроить на этой неделе

Если у вас FreePBX с очередями и никакой аналитики, кроме CDR-отчётов, вот ваш план действий:

День 1: Включите логирование очередей на всех очередях (Шаг 1 выше). Убедитесь, что queue_log пишется.

День 2: Настройте доступ по AMI для внешнего мониторинга (Шаг 2). Проверьте подключение.

День 3: Установите инструмент аналитики. Попробуйте Astervis бесплатно 14 дней — установка на FreePBX занимает 10 минут.

Дни 4–5: Настройте пороги SLA для каждой очереди. Задайте wrapuptime. Посмотрите первые данные.

Разница между «нам кажется, наш колл-центр работает нормально» и «мы знаем, что в 14:00 у нас SLA 78% и 14% потерянных звонков» — это разница между надеждой и данными.

FreePBX обрабатывает звонки. Аналитика показывает, насколько хорошо он это делает.


Больше об оптимизации колл-центра на FreePBX — в нашем полном руководстве по мониторингу Asterisk, подробном разборе CDR-отчётности и настройке мониторинга очередей в реальном времени.

Хватит гадать. Начни видеть.

Реальная картина вашего Asterisk колл-центра: время ожидания, активность операторов, нагрузка на транки и 30+ графиков. On-premise на вашем сервере. Установка за 5 минут. Без карты.

От $119/мес flat. Без ограничения на операторов. Триал 14 дней.

Поделиться