Asterisk Call Center Stats - статистика колл-центра
Прямой лог в нативную базу данных Asterisk.
Описание, скачать, установка и настройка.
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.
Установка Asterisk Call Center Stats
- Включить запись лога очередей в БД MySQL через ODBC.
- Задать имя пользователя и пароль базы данных
в конфиге Asterisk Call Center Stats.
Включим лог очереди Asterisk в БД MySQL
По умолчанию данные статистики очереди сохраняются в текстовый лог var/log/asterisk/queue_log. Назначим для хранения данных таблицу БД MySQL - asteriskcdrdb.queuelog
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
touch /etc/asterisk/extconfig.conf
и задайте права:
chown asterisk. /etc/asterisk/extconfig.conf
/etc/asterisk/res_odbc_custom.conf
Под катом подробнее.
Проверьте соединение 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 - Имя таблицы БД.
$DBServer = 'localhost'; $DBUser = 'freepbxuser'; $DBPass = ''; $DBName = 'asteriskcdrdb'; $DBAstName = 'asterisk'; $DBTable = 'queuelog';
Откройте статистику в вашем любимом веб браузере:
http://ip.address/queue-stats
Синхронизировать:
Запрос сделает выборку уникальных имен agents и queues и поместит их в таблицы agents_new и queues_new.
Для того чтобы сущности проявились,
в таблице queuelog должна существовать хотя бы одна запись о вызове поступившем в очередь.
Записи разговоров FreePBX в интерфейсе статистики
Под катом описан альтернативный способ.
Авторизация через аккаунты 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;
[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';";
В таком случае будут отображаться все исходящие звонки с внутренних (в данном случае трехзначных) номеров.
Другие страницы с тегом 'queue':
Asterisk настройка очереди - queues.conf
Функция диалплана Asterisk: QUEUE_VARIABLES
function 'QUEUE_WAITING_COUNT'
Asterisk: queue_log в MySQL через unixODBC
Обсуждение
Добрый день. Подскажите, есть такая проблема. Диск забился на 100% и падал сервис mariadb. Сервис упал 04.08, но данные частично не отображаются с 02-04.08 Какие можно действия предпринять для восстановления этой статистики? Хотя бы за 02, 03 числа. Благодарю и извиняюсь, если не понятно изложил свой вопрос.
Не получается завести 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:
Подскажите куда копать пожалуйста
День добрый. подскажите плиз. Установлена PHP 5.6.40. asterisk 15.7.3 FreePBX 14.0.13.23 Все сделал по инструкции. Агенты и очередь пустые. В чем может быть проблема? И еще вопросик. Я правильно понял, что эту строчку [settings] queue_log ⇒ odbc,asteriskcdrdb,queuelog менять не нужно просто вставить в созданный файл /etc/asterisk/extconfig.conf?
Поставил эксперимент. Установил freepbx 15 distro с астериск 16. Во внутренние номера накидал пару, тройку внутренних телефонов. Создал через графический ы меню пользователей ami пользователя user350. Пользователь создаётся в файле manager_custom.conf. при этом файл manager.conf остался целым, в нем идёт ссылка на manager_custom.conf. далее перешёл во freepbx в меню дополнительно - расширенные настройки и включил mini http server. Применил настройки и перезагрузил сервак freepbx. После запуска в оболочке freepbx красуется красная надпись о не возможности запустить астер. Иду через ssh и смотрю а файл manager.conf имеет размер 0 байт.
Так и не понял почему.
Поставил эксперимент. Установил freepbx 15 distro с астериск 16. Во внутренние номера накидал пару, тройку внутренних телефонов. Создал через графический ы меню пользователей ami пользователя user350. Пользователь создаётся в файле manager_custom.conf. при этом файл manager.conf остался целым, в нем идёт ссылка на manager_custom.conf. далее перешёл во freepbx в меню дополнительно - расширенные настройки и включил mini http server. Применил настройки и перезагрузил сервак freepbx. После запуска в оболочке freepbx красуется красная надпись о не возможности запустить астер. Иду через ssh и смотрю а файл manager.conf имеет размер 0 байт.
Так и не понял почему.
Всем добрый день. Подскажите пож-та, почему не отображаются агенты и очереди? и нет настроек по статистике? Только пустое первое окно
https://skr.sh/s5T1gCp7C9X
config.php https://skr.sh/s5ThsAu2OiL
По некоторым агентам при добавлении в отчёт (если отчёт по одному такому агенту или по хотя бы по одному (или больше) такому агенту и ещё нескольким рабочим агентам) на странице «Принятые» получаю по «Время разговора» и «Время ожидания» (остальные столбцы пустые) column(s) for axis #0 cannot be of type string
Подскажите, пожалуйста, в чём проблема с такими агентами (таких агентов несколько)???
Доброго времени суток. Я столкнулся с аналогичной проблемой, по части агентов на странице «Принятые» получаю по «Время разговора» и «Время ожидания» (остальные столбцы пустые) column(s) for axis #0 cannot be of type string, подскажите получилось выяснит что вызывает такое поведение отчета и как лечится?
Добрый день! Спасибо за отличное приложение! Работает без нареканий, но не могу разобраться с записью разговоров. http://192.168.1.118/queue-stats/dl.php?f=null Хотя записи в таблице есть!
Заранее благодарю!
«В дальнейшем, если у вас появились новые агенты или очереди, просто синхронизируйте данные для отображения статистики по ним.»
При синхронизации появляются новые агенты, но не удаляются старые (переименованные\удалённые в Астериске). Как их удалить? Добавьте, пожалуйста, сортировку агентов хоть по имени!
У кого вылетает ошибка 500, нужно изменить collation на utf8_unicode_ci в таблицах queuelog, queues_new, agents_new
Детализация по агентам у кого-то рабочая получилась? Php 7.1.
Не пойму, как организовать Авторизацию через аккаунты FreePBX. После расскоментирования строк сайт не открывается.
Там пароль нужно в двух местах внести в файле config.php.
У меня была 500 ошибка.
Строка № 19, проверьте.
$confpbx = new mysqli('localhost', 'freepbxuser', 'здесь внес пароль $DBpass', 'asterisk');
при открытии страницы dids, очень долго идет запрос. Около 10 мин. На других все ок! как оптимизировать базу или запрос?
PHP 7.1.33 (cli) (built: Feb 18 2020 07:15:58) ( NTS )
при открытии страницы получаю HTTP ERROR 500
добрый вечер! скачал, установил, все нравится, классная программа, однако у меня почему-то не работают табы 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 не подскажете в какую сторону копать?
Отличная система. Очень помогает в работе. В процессе использования появился вопрос: При записи событий очереди в БД есть существенная проблема с ростом размера ibdata1 в MariaDB, особенно при использовании asterisk в виртуальной среде, где размер диска ограничен. У меня размер файла увеличивается примерно на 1,5-2Гб в месяц. Как вы решаете эту проблему? Можно ли очистить статистику за определенный период перед шринком, чтоб не копить эти сведения?
Добрый день! В версии 0.9.8 на старницах answered_cdr.php areport.php qreport.php dids.php
Имя таблицы queuelog «жестко» указано в SQL запросе. На остальных страницах используется переменная $DBTable…