Asterisk Call Center Stats - статистика колл-центра

Интерфейс статистики очереди - Queue Stats.
Прямой лог в нативную базу данных Asterisk.
Описание, скачать, установка и настройка.

Call Center Stats Demo login: admin pass: queue_stats


Требования

PHP >= 5.4


Описание Asterisk Call Center Stats

  • Хранилище - нативная БД логгера Asterisk.
  • Mysqli, оптимизированые запросы к БД.
  • Отдельные таблицы агентов и очередей с синхронизацией по требованию.
  • Визуализация - Google Charts.
  • Почасовая выборка.
  • Детализация принятых,пропущенных и исходящих вызовов.
  • Поиск по Uniqueid, CallerID и агентам в принятых, пропущенных вызовах.
  • Отображение записей разговоров, custom или FreePBX совместимые.
  • Экспорт в csv и pdf.
  • Авторизация через FreePBX.
  • Русский и английский интерфейсы.
  • Реалтайм панель очередей.
  • Приложение адаптировано для работы с FreePBX установкой.

Отчеты Asterisk Call Center Stats

Realtime

Статистика очередей, статус агентов и вызовов в режиме реального времени.

Сортировка

  • Выборка данных по: очередям, агентам, дате и времени.

Отвеченные вызовы

  • Отвеченные вызовы по очередям и агентам.
  • Среднее время ожидания для очередей и агентов.
  • Среднее время разговора для очередей и агентов.
  • Количество отвеченных вызовов по агентам.
  • Процент отвеченных вызовов для очередей и агентов.
  • Распределение вызовов по периодам ожидания перед ответом оператора.
  • Распределение по продолжительности разговора.
  • Детализация с возможностью прослушать и скачать запись разговора. Поиск и сортировка по агентам и callerid.
  • Сравнение кол-ва принятых/пропущенных вызовов по очередям.

Неотвеченные вызовы. Распределение по периодам. Поиск.

  • Количество неотвеченных вызовов по очередям.
  • Средняя позиция в очереди при выходе.
  • Причина разъединения: повесили трубку или отключены по таймауту.
  • Распределение неотвеченных вызовов по очередям и периодам ожидания перед выходом из очереди.
  • Детализация пропущенных вызовов. Поиск по callerid.
  • Распределение отвеченных/пропущенных вызовов по часам, дням недели и месяцам.
  • Поиск по 'сырой' базе данных.

Исходящие вызовы выбранных агентов

Отчет комбинирует данные из cdr и queue_log и требует чтобы CallerIdName и имена агентов совпадали.
А также чтобы таблица лога очереди находилась в той же БД, что и таблица cdr.

Установка Asterisk Call Center Stats

Для установки Asterisk Call Center Stats вам потребуется:
  1. Включить запись лога очередей в БД MySQL через ODBC.
  2. Задать имя пользователя и пароль базы данных
    в конфиге Asterisk Call Center Stats.

Включим лог очереди Asterisk в БД MySQL

По умолчанию данные статистики очереди сохраняются в текстовый лог var/log/asterisk/queue_log. Назначим для хранения данных таблицу БД MySQL - asteriskcdrdb.queuelog

Если вы используете FreePBX, то база данных asteriskcdrdb уже существует. Просто создайте в ней требуемые таблицы и используйте для подключения odbc family созданный FreePBX для cdr.
mysql -u root -p
MariaDB >use asteriskcdrdb;
CREATE TABLE IF NOT EXISTS `queuelog` (
`id` INT NOT NULL AUTO_INCREMENT,
`time` char(32) DEFAULT NULL,
`callid` char(64) DEFAULT NULL,
`queuename` char(64) DEFAULT NULL,
`agent` char(64) DEFAULT NULL,
`event` char(32) DEFAULT NULL,
`data` char(64) DEFAULT NULL,
`data1` char(64) DEFAULT NULL,
`data2` char(64) DEFAULT NULL,
`data3` char(64) DEFAULT NULL,
`data4` char(64) DEFAULT NULL,
`data5` char(64) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


CREATE TABLE IF NOT EXISTS `agents_new` (
`id` MEDIUMINT NOT NULL AUTO_INCREMENT,
`agent` char(64) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `queues_new` (
`id` MEDIUMINT NOT NULL AUTO_INCREMENT,
`queuename` char(64) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

В файле /etc/asterisk/logger.conf (logger_general_custom.conf для FreePBX) выключим лог в файл, если он больше не нужен, но можно вести оба лога одновременно:

 queue_log_to_file = no

В файле /etc/asterisk/asterisk.conf добавьте в раздел options:

 [options]
 queue_adaptive_realtime = no

В файле настроек реалтайм /etc/asterisk/extconfig.conf определим драйвер, family и таблицу назначения:

 [settings]
 queue_log => odbc,asteriskcdrdb,queuelog

где asterisk - db конфиг, например в /etc/asterisk/res_odbc_custom.conf

Если файл extconfig.conf не существует, создайте его командой:
 touch /etc/asterisk/extconfig.conf

и задайте права:

 chown asterisk. /etc/asterisk/extconfig.conf

/etc/asterisk/res_odbc_custom.conf

Как уже отмечалось выше, asteriskcdrdb создается FreePBX при установке и тогда настройки в /etc/asterisk/res_odbc_custom.conf и /etc/odbc.ini не требуются.
Под катом подробнее.

Нажмите, чтобы отобразить

Нажмите, чтобы скрыть

[asteriskcdrdb]
enabled => yes
dsn => asteriskcdrdb
username => dbuser
password => dbpass
pre-connect => yes

где DSN, настройки из файла

/etc/odbc.ini

[asteriskcdrdb]
Description=MySQL connection to 'asteriskcdrdb' database
driver=MySQL
server=localhost
database=asteriskcdrdb
Port=3306
Socket=/var/lib/mysql/mysql.sock

Примените конфигурацию

 asterisk -rx 'core restart now'
'core restart now' - разорвет все текущие вызовы

Проверьте соединение Asterisk c базой данных через odbc:

# asterisk -rx 'odbc show'

ODBC DSN Settings
-----------------

  Name:   asteriskcdrdb
  DSN:    asteriskcdrdb
    Last connection attempt: 1970-01-01 06:00:00
    Number of active connections: 1 (out of 1)

Скачать Asterisk Call Center Stats

Скачайте, распакуйте и задайте права:

   cd /var/www/html
 
   wget https://asterisk-pbx.ru/wiki/_media/soft/call_center/queue-stats_v_9_8.tar.gz
 
   tar zvxf queue-stats_v_9_8.tar.gz
 
   chown -R asterisk. queue-stats/
 
   cd queue-stats

Конфиг Asterisk Call Cetnter Stats

Отредактируйте файл config.php в соответствии в вашими данными, где

  • $DBServer - хост (localhost)
  • $DBUser - Пользователь БД.
  • $DBPass - Пароль БД.
  • $DBName - Имя БД для queuelog.
  • $DBAstName - Имя БД FreePBX.
  • $DBTable - Имя таблицы БД.
Измените пароль на пароль вашей установки. Пароль можно посмотреть в файле /etc/asterisk/res_odbc_additional.conf (для последних версий freepbx).
$DBServer = 'localhost';
$DBUser   = 'freepbxuser';
$DBPass   = '';
$DBName   = 'asteriskcdrdb';
$DBAstName   = 'asterisk';
$DBTable   = 'queuelog';

Откройте статистику в вашем любимом веб браузере:

http://ip.address/queue-stats

Для добавления агентов и очередей, нажмите соответствующие кнопки:
Синхронизировать:
Очереди Агентов

Запрос сделает выборку уникальных имен agents и queues и поместит их в таблицы agents_new и queues_new.
Для того чтобы сущности проявились, в таблице queuelog должна существовать хотя бы одна запись о вызове поступившем в очередь.

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

Записи разговоров FreePBX в интерфейсе статистики

В версии 0.9.8 отображение записей работает «из коробки». Путь к файлу берется из значения поля recordingfile asteriskcdrdb.cdr. Чтобы это работало, таблица лога очереди должна находиться в бд asteriskcdrdb.
Под катом описан альтернативный способ.

Нажмите, чтобы отобразить

Нажмите, чтобы скрыть

Для отображения записей разговоров в статистике, скопируйте приведенный ниже контекст в файл /etc/asterisk/extensions_override_freepbx.conf.
В примере приведен контекст [sub-record-check] из FreePBX Distro 14.


extensions_override_freepbx.conf


Или модифицируйте по такой же схеме контекст из вашей системы, добавив туда кастомное событие очереди - REC.

exten => recordcheck,n,Queuelog(recordcheck,${UNIQUEID},NONE,REC,${CALLFILENAME})
Нельзя отредактировать контекст FreePBX прямо в файле extensions_additional.conf , но можно поместить модифицированную версию в extensions_override_freepbx.conf

Если вы используете 'чистый' Asterisk, вы может поступить таким же образом в контексте вызова очереди, добавив вместо переменной ${CALLFILENAME}, имя файла записи разговора в соответствии с используемой вами схемой.
Дополнительная информация о логе очереди и команде QueueLog().

Авторизация через аккаунты FreePBX

Для включения авторизации с паролем FreePBX, расскоментируйте следующий код в файле config.php.

Таким образом, вы сможете авторизоваться при помощи любого аккаунта созданного в FreePBX > Admin > Administrators, например с ограниченными правами доступа к модулям самой FreePBX.

$confpbx = new mysqli($DBServer, $DBUser, $DBPass, $DBAstName);
$confpbx->set_charset('utf8');
 
$user = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
 
$valid_passwords2 = $confpbx->query("SELECT password_sha1 FROM ampusers WHERE username = '$user'");
$valid_passwords = $valid_passwords2->fetch_row();
 
$validated = (sha1($pass) == $valid_passwords[0]);
 
if (!$validated) {
	header('WWW-Authenticate: Basic realm="fs-tst"');
	header('HTTP/1.0 401 Unauthorized');
	die("Not authorized");
}
 
$valid_passwords2->free();

Настройка AMI и AJAM для модуля Realtime

Пакет php-curl должен быть установлен.
В корневой директории приложения должен быть создан файл ajam_cookie:

touch ajam_cookie &&
chmod 777 ajam_cookie

Со стороны Asterisk требуется только включить AJAM: /etc/asterisk/manager.conf

[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0
webenabled = yes
httptimeout = 60

создать пользователя AMI

[ajamuser]
secret = PASSWORD
deny = 0.0.0.0/0.0.0.0
permit = 127.0.0.1/255.255.255.0
read = system,agent,reporting
write = system,agent,reporting

и включить встроенный http сервер в

/etc/asterisk/http.conf

[general]
enabled=yes
enablestatic=yes
bindaddr=0.0.0.0
bindport=8088
prefix=asterisk

или для FreePBX:
Settings > Advanced Settings


Тест AJAM интерфейса

freepbx*CLI> http  show status 
HTTP Server Status:
Prefix: /asterisk
Server: Asterisk/15.5.0
Server Enabled and Bound to 0.0.0.0:8088

HTTPS Server Enabled and Bound to [::]:8089

Enabled URI's:
/asterisk/httpstatus => Asterisk HTTP General Status
/asterisk/amanager => HTML Manager Event Interface w/Digest authentication
/asterisk/arawman => Raw HTTP Manager Event Interface w/Digest authentication
/asterisk/manager => HTML Manager Event Interface
/asterisk/rawman => Raw HTTP Manager Event Interface
/asterisk/static/... => Asterisk HTTP Static Delivery
/asterisk/amxml => XML Manager Event Interface w/Digest authentication
/asterisk/mxml => XML Manager Event Interface
/asterisk/ws => Asterisk HTTP WebSocket

Enabled Redirects:
  None.

И наконец задайте данные для подключения к AMI/AJAM в файле config.php приложения:

$config['urlraw'] = 'http://127.0.0.1:8088/asterisk/rawman';
$config['admin'] = 'ajamuser';
$config['secret'] = 'PASSWORD';
$config['authtype'] = 'plaintext';
$config['cookiefile'] = null;
$config['debug'] = false;
sip.conf
[general]
callcounter => yes

В случае использования чистого asterisk, без установленного FreePBX может возникнуть проблема с отчетом «Исходящие», связанная с тем что он использует таблицу CDR в том виде, в каком ее создает FreePBX

Для исправления нужно заменить следующую строку в файле outbound.php

$sql = "select calldate, uniqueid, billsec, disposition, src, dst, cnum, cnam, recordingfile from cdr where calldate >= '$start' AND calldate <= '$end' AND `cnam` in ($agent);";

на

$sql = "select calldate, uniqueid, billsec, disposition, src, linkedid as recordingfile, dst, src as cnum, clid as cnam from cdr where calldate >= '$start' AND calldate <= '$end' AND LENGTH(src) < 4 AND lastapp != 'Hangup';";

В таком случае будут отображаться все исходящие звонки с внутренних (в данном случае трехзначных) номеров.



Пример визуализации данных лога очереди Asterisk при помощи Google Charts (добавлено в текущую версию)


Другие страницы с тегом 'queue':

Asterisk app AddQueueMember

Asterisk: PauseQueueMember

Команда Asterisk: Queue

Asterisk app: QueueLog

Asterisk: RemoveQueueMember

Asterisk: UnpauseQueueMember

Asterisk: agents.conf

Asterisk queuerules.conf

Asterisk настройка очереди - queues.conf

Asterisk function 'CURL'

function 'QUEUE_EXISTS'

function 'QUEUE_MEMBER'

function 'QUEUE_MEMBER_LIST'

Функция диалплана Asterisk: QUEUE_VARIABLES

function 'QUEUE_WAITING_COUNT'

Asterisk: queue_log в MySQL через unixODBC

Handlebars Helper LastCall Queue Agent

FreePBX Очереди - Queue

Freeswitch: mod_callcenter

Asterisk Колл Центр

Oleg, 2021/08/05

Добрый день. Подскажите, есть такая проблема. Диск забился на 100% и падал сервис mariadb. Сервис упал 04.08, но данные частично не отображаются с 02-04.08 Какие можно действия предпринять для восстановления этой статистики? Хотя бы за 02, 03 числа. Благодарю и извиняюсь, если не понятно изложил свой вопрос.

Maksim Emelyanov, 2021/07/28

Не получается завести realtime Всё работает, но эта вкладка всегда выдаёт null. Сделал всё по инструкции, но http show status выдает такой ответ: HTTP Server Status: Prefix: /asterisk Server: Asterisk/13.22.0 Server Enabled and Bound to [::]:8088

Enabled URI's: /asterisk/httpstatus ⇒ Asterisk HTTP General Status /asterisk/static/… ⇒ Asterisk HTTP Static Delivery /asterisk/ari/… ⇒ Asterisk RESTful API /asterisk/ws ⇒ Asterisk HTTP WebSocket

Enabled Redirects:

None.

Подскажите куда копать пожалуйста

slav9n, 2021/04/08

День добрый. подскажите плиз. Установлена PHP 5.6.40. asterisk 15.7.3 FreePBX 14.0.13.23 Все сделал по инструкции. Агенты и очередь пустые. В чем может быть проблема? И еще вопросик. Я правильно понял, что эту строчку [settings] queue_log ⇒ odbc,asteriskcdrdb,queuelog менять не нужно просто вставить в созданный файл /etc/asterisk/extconfig.conf?

Sergey, 2021/03/23

Поставил эксперимент. Установил freepbx 15 distro с астериск 16. Во внутренние номера накидал пару, тройку внутренних телефонов. Создал через графический ы меню пользователей ami пользователя user350. Пользователь создаётся в файле manager_custom.conf. при этом файл manager.conf остался целым, в нем идёт ссылка на manager_custom.conf. далее перешёл во freepbx в меню дополнительно - расширенные настройки и включил mini http server. Применил настройки и перезагрузил сервак freepbx. После запуска в оболочке freepbx красуется красная надпись о не возможности запустить астер. Иду через ssh и смотрю а файл manager.conf имеет размер 0 байт.

Так и не понял почему.

Sergey, 2021/03/23

Поставил эксперимент. Установил freepbx 15 distro с астериск 16. Во внутренние номера накидал пару, тройку внутренних телефонов. Создал через графический ы меню пользователей ami пользователя user350. Пользователь создаётся в файле manager_custom.conf. при этом файл manager.conf остался целым, в нем идёт ссылка на manager_custom.conf. далее перешёл во freepbx в меню дополнительно - расширенные настройки и включил mini http server. Применил настройки и перезагрузил сервак freepbx. После запуска в оболочке freepbx красуется красная надпись о не возможности запустить астер. Иду через ssh и смотрю а файл manager.conf имеет размер 0 байт.

Так и не понял почему.

Алексей Александрович Чернов, 2020/12/05, 2020/12/05

Всем добрый день. Подскажите пож-та, почему не отображаются агенты и очереди? и нет настроек по статистике? Только пустое первое окно

https://skr.sh/s5T1gCp7C9X

config.php https://skr.sh/s5ThsAu2OiL

Miromax, 2020/11/20, 2020/11/20

По некоторым агентам при добавлении в отчёт (если отчёт по одному такому агенту или по хотя бы по одному (или больше) такому агенту и ещё нескольким рабочим агентам) на странице «Принятые» получаю по «Время разговора» и «Время ожидания» (остальные столбцы пустые) column(s) for axis #0 cannot be of type string :!:

Подскажите, пожалуйста, в чём проблема с такими агентами (таких агентов несколько)??? :?:

Alexandr, 2022/01/26

Доброго времени суток. Я столкнулся с аналогичной проблемой, по части агентов на странице «Принятые» получаю по «Время разговора» и «Время ожидания» (остальные столбцы пустые) column(s) for axis #0 cannot be of type string, подскажите получилось выяснит что вызывает такое поведение отчета и как лечится?

Иконников Максим, 2020/11/19

Добрый день! Спасибо за отличное приложение! Работает без нареканий, но не могу разобраться с записью разговоров. http://192.168.1.118/queue-stats/dl.php?f=null Хотя записи в таблице есть!

Заранее благодарю!

Miromax, 2020/11/19

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

При синхронизации появляются новые агенты, но не удаляются старые (переименованные\удалённые в Астериске). Как их удалить? Добавьте, пожалуйста, сортировку агентов хоть по имени!

Dot Mythics, 2020/10/04

У кого вылетает ошибка 500, нужно изменить collation на utf8_unicode_ci в таблицах queuelog, queues_new, agents_new

Semen Svyrydov, 2020/08/22

Детализация по агентам у кого-то рабочая получилась? Php 7.1.

Дмитрий, 2020/04/13

Не пойму, как организовать Авторизацию через аккаунты FreePBX. После расскоментирования строк сайт не открывается.

Semen Svyrydov, 2020/08/22

Там пароль нужно в двух местах внести в файле config.php.

У меня была 500 ошибка.

Строка № 19, проверьте.

$confpbx = new mysqli('localhost', 'freepbxuser', 'здесь внес пароль $DBpass', 'asterisk');

Timur, 2020/04/02, 2020/04/02

при открытии страницы dids, очень долго идет запрос. Около 10 мин. На других все ок! как оптимизировать базу или запрос?

Aliaksandr, 2020/03/25

PHP 7.1.33 (cli) (built: Feb 18 2020 07:15:58) ( NTS )

при открытии страницы получаю HTTP ERROR 500

bofh, 2020/03/05

добрый вечер! скачал, установил, все нравится, классная программа, однако у меня почему-то не работают табы outbound.php и answered_cdr.php, веб-сервер возвращает ошибку типа PHP message: PHP Notice: Undefined variable: abandon50 in /var/www/html/queue-stats/unanswered.php on line 337« while reading upstream, client: 92.253.250.93, server: asterisk, request: «GET /unanswered.php HTTP/1.1», upstream: «fastcgi:unix:/run/php/php5.6-fpm.sock:», host: «asterisk», referrer: «https://asterisk/answered.php» 2020/03/05 22:41:13 [error] 13002#13002: *1193 FastCGI sent in stderr: «PHP message: PHP Fatal error: Call to a member function fetch_assoc() on boolean in /var/www/html/queue-stats/outbound.php on line 33» while reading response header from upstream, client: 92.253.250.93, server: asterisk, request: «GET /outbound.php HTTP/1.1», upstream: «fastcgi:unix:/run/php/php5.6-fpm.sock:», host: «asterisk», referrer: «https://asterisk/unanswered.php»

на php7.2 кстати не завелся вообще, поставил php5.6 не подскажете в какую сторону копать?

Ivan Maxin, 2020/01/04

Отличная система. Очень помогает в работе. В процессе использования появился вопрос: При записи событий очереди в БД есть существенная проблема с ростом размера ibdata1 в MariaDB, особенно при использовании asterisk в виртуальной среде, где размер диска ограничен. У меня размер файла увеличивается примерно на 1,5-2Гб в месяц. Как вы решаете эту проблему? Можно ли очистить статистику за определенный период перед шринком, чтоб не копить эти сведения?

Андрей, 2019/10/02

Добрый день! В версии 0.9.8 на старницах answered_cdr.php areport.php qreport.php dids.php

Имя таблицы queuelog «жестко» указано в SQL запросе. На остальных страницах используется переменная $DBTable…

Только авторизованные участники могут оставлять комментарии.
  • soft/call_center/asternic-call-center-stats.txt
  • Последние изменения: 2020/07/28