Yvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
0
12:42, 02 августа 2016

Установка веб интерфейсов Asternic Lite, FOP2, RTAG, Wallboard Admin, Asterisk CDR Viewer и MonAST

Записка про установку разных веб интерфейсов для IP АТС Asterisk. С помощью веб интерфейсов легко мониторить активных абонентов, собирать статистику, смотреть разные графики загруженности и журнал звонков, прослушивать записи разговоров и т.д. Если у вас центр обслуживания звонков (колл центр) или простой офис, то Вам обязательно понадобятся эти веб интерфейсы. Большое количество веб интерфейсов для Asterisk - это одно из больших преимуществ этой программной станции над традиционными железными цифро-аналоговыми АТС. Аппаратные (железные) станции ограничены в функционале, закрыты в плане доработки, имеют строго определенные возможности. С приходом Asterisk в мир телефонии, стало возможно делать любые прихоти пользователей в плане телефонии. Один из примеров, доработка веб интерфейса, с учетом новых требований. А также сделать что-то очень интересное, в Интернете можно найти много примеров настройки Asterisk для улучшения функционала.

Что нужно для работы веб интерфейсов

Почти все веб интерфейсы используют PHP (ПоХаПэ) и MySQL, поэтому обязательно надо ставить как основу Apache, PHP и зависимости для MySQL (php-mysql). Чтобы поставит пакеты, понадобиться репозиторий Epel. А вот и примерные зависимости:

# yum install mariadb-devel mariadb-server mariadb php php-mysql php-pear php-mbstring php-gd gd httpd -y

Некоторым сайтам необходимо чтобы был залогинин хотя бы один абонент, в противном случае они ничего не показывают, например сайт "Admin Wallboard" страдает такой вот болезнью. Поэтому не пугайтесь, если все идет не так как хотелось.

На что ставилось - ОС CentOS 7 x64, Asterisk 13.

Какие веб морды ставились

В записке ставились следующие веб интерфейсы:

  • Asterisk CDR Viewer
  • Asternic Lite
  • FOP2
  • RTAG
  • Wallboard Admin
  • MonAST

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

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

Включение хранения CDR (данных о звонках) в базе данных MySQL и удобный просмотр этой информации через веб сайт.

Создаем базу "asteriskcdrdb":

# mysql -uroot -ppassword

mysql> CREATE DATABASE asteriskcdrdb;

Теперь дадим доступ к базе пользователю "asteriskcdr"

mysql> GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskcdr@localhost IDENTIFIED BY 'password';
mysql> flush privileges;

Далее создадим таблицу "cdr" в базе "asteriskcdrdb":

mysql> use asteriskcdrdb;

Создаем таблицу "cdr":

CREATE TABLE cdr (
calldate datetime NOT NULL default '0000-00-00 00:00:00',
clid varchar(80) NOT NULL default '',
src varchar(80) NOT NULL default '',
dst varchar(80) NOT NULL default '',
dcontext varchar(80) NOT NULL default '',
channel varchar(80) NOT NULL default '',
dstchannel varchar(80) NOT NULL default '',
lastapp varchar(80) NOT NULL default '',
lastdata varchar(80) NOT NULL default '',
duration int(11) NOT NULL default '0',
billsec int(11) NOT NULL default '0',
disposition varchar(45) NOT NULL default '',
amaflags int(11) NOT NULL default '0',
accountcode varchar(20) NOT NULL default '',
uniqueid varchar(32) NOT NULL default '',
userfield varchar(255) NOT NULL default '',
did varchar(50) NOT NULL default '',
recordingfile varchar(255) NOT NULL default '',
KEY `calldate` (`calldate`),
KEY `dst` (`dst`),
KEY `accountcode` (`accountcode`),
KEY `uniqueid` (`uniqueid`)
);

После, чтобы Asterisk знал куда писать данные о звонках отредактируем файл /etc/asterisk/cdr_mysql.conf

# vim /etc/asterisk/cdr_mysql.conf

В этом файле есть блок в комментариях, снимите комментарии:

[global]
hostname=localhost - ip адрес где располагается сервер MySQL
dbname=asteriskcdrdb – название базы данных где будут храниться cdr
table=cdr - название таблицы
password= password -пароль для пользователя asteriskcdr
user= asteriskcdr - имя пользователя для базы данных
;port=3306
;sock=/tmp/mysql.sock
;timezone=UTC ; Previously called usegmtime

Запускаем консоль asterisk:

# asterisk -r

*CLI> module load cdr_mysql.so

Мы указали Asterisk'у писать данные о звонках в таблицу "cdr" базы "asteriskcdrdb". Можно проверить, поступают ли данные в таблицу "cdr" базы "asteriskcdrdb":

# mysql -p

mysql> use asteriskcdrdb;
mysql> SELECT * FROM cdr;
mysql> SELECT * FROM cdr ORDER BY id DESC LIMIT 10;
mysql> exit

Включение хранение CDR в MySQL это хорошо, но чтобы наглядно и удобно работать с такими данными нужен веб интерфейс. Установим веб интерфейс "Asterisk CDR Viewer" который будет работать с базой CDR.

Asterisk CDR Viewer

Этот веб интерфейс может понадобится вам для поиска информации о входящем или исходящем звонке. Здесь вы можете узнать номер клиента который позвонил на ваш городской телефон или просмотреть запись о исходящем звонке ваших операторов или любых других коллег. Можно искать по разным критериям, например дата и время звонка, длительность разговора, количество звонков по заданному номеру и т.д. Если включена функция записи аудио вызова, имеется возможность сразу же послушать разговор. Удобная штука поиска информации, грех не пользоваться этой веб мордой.

Примечание: Разработчики переехали на новый хостинг, и каким-то образом у них поломался веб интерфейс. Можете пропустить установку CDR Viewer, вместо него поставив его модифицированную версию Asterisk CDR Mod.

Зайдем в каталог /var/www

# cd /var/www/html/

Cкачаем "Asterisk CDR Viewer":

# wget https://github.com/g613/asterisk-cdr-viewer/raw/master/asterisk-cdr-viewer-latest.tgz

# tar -xzvf asterisk-cdr-viewer-latest.tgz

Далее перенесем файл алиаса "Asterisk CDR Viewer" в каталог веб сервера Apache /etc/httpd/conf.d/:

# cp asterisk-cdr-viewer/contrib/httpd/asterisk-cdr-viewer.conf /etc/httpd/conf.d/

Осталось поменять настройки доступа к базе данных CDR в файле "/var/www/asterisk-cdr-viewer/include/config.inc.php" веб интерфейса:

# vim /var/www/html/asterisk-cdr-viewer/include/config.inc.php

Меняем реквизиты доступа:

$db_type = 'mysql';
$db_host = 'localhost';
$db_port = '3306';
$db_user = ' asteriskcdr '; - название базы где хранятся наши CDR
$db_pass = 'password'; -пароль для пользователя asteriskuser
$db_name = ' asteriskcdrdb '; - имя пользователя для базы данных
$db_table_name = 'cdr'; - название таблицы
$db_options = array();

# service httpd restart

Заходим на веб страницу через бразуер - http://your_ip/acdr/ или "http://you_ip/asterisk-cdr-viewer/"

Blog post image

Большая картинка

В этом веб интерфейсе можно выводить статистику по звонкам, сортировать ее. Удобная штука. В интернете кстати имеются доработанные версии (ACDRV), которые превосходят по функционалу своего родителя, например в них есть полезная возможность по воспроизведению разговора, хотя вру, в нем тоже есть возможность воспроизведения аудио разговоров.

Asterisk CDR Viewer MOD

Установим доработанную версию ACDRV:

# cd /var/www/html/

# wget https://codeload.github.com/prog-it/Asterisk-CDR-Viewer-Mod/legacy.tar.gz/master -O asterisk-cdr.tar.gz

# tar -xzvf asterisk-cdr.tar.gz

# mv prog-it-Asterisk-CDR-Viewer-Mod-e386be4 asterisk-cdr

Для того чтобы новый интерфейс мог воспроизводить записанные разговоры, ему необходимо знать где лежать файлы с записями. Эти данные он должен брать с столбца "filename" таблицы CDR базы asteriskcdrdb. Давайте создадим эту колонку:

# mysql -p

mysql> use asteriskcdrdb;
mysql> ALTER TABLE cdr ADD COLUMN filename VARCHAR(255);
mysql> alter table cdr alter filename set default 'none';
mysql>
mysql> exit

Также необходимо подпправить файл /etc/asterisk/cdr_mysql.conf, добавив туда алиасы:

# vim /etc/asterisk/cdr_mysql.conf

[columns]
alias realdst => realdst
alias filename => filename

Далее настраиваем сам веб интерфейс:

# cd /var/www/html/asterisk-cdr/inc/

# vim config.inc.php

### Mysql
$db_type = 'mysql';
$db_host = 'localhost';
$db_port = '3306';
$db_user = 'asteriskcdr';
$db_pass = 'password';
$db_name = 'asteriskcdrdb';
$db_table_name = 'cdr';
$db_options = array();
// $db_options = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8");
## Если др. значение, то все записи хранятся в одной папке (/var/calls)
$system_storage_format = '1';
## Папка, где находятся записи Asterisk
$system_monitor_dir = '/var/spool/asterisk/monitor'; // без слеша на конце
### Формат аудио, в котором записываются записи звонков
# Плеер не воспроизводит WAV формат!
$system_audio_format = 'mp3';

Здесь вносим данные для доступа к БД со звонками, далее указываем что файлы у нас хранятся в каталоге /var/spool/asterisk/monitor с расширением mp3.

Теперь необходимо добавить макрос для записи звонков.

[macro-app-mp3]
exten => s,1,Set(monopt=nice -n 19 /usr/bin/lame -b 32 "${ARG1}${ARG2}.wav" "${ARG1}${ARG2}.mp3" && rm -f "${ARG1}${ARG2}.wav" && chmod 777 "${ARG1}${ARG2}.mp3" && rm -f "${ARG1}${UNIQUEID}.wav")
exten => s,n,NoOp(Call Unique ID is - ${UNIQUEID})
exten => s,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
exten => s,n,Set(CDR(filename)=${STRFTIME(${EPOCH},,%Y%m%d)}/${UNIQUEID}.mp3)
exten => s,n,Set(CDR(realdst)=${CALLERID(num)})
exten => s,n,MixMonitor(${ARG1}${ARG2}.wav,i(MIXMONITORID),${monopt})
;--== end of [app-mp3] ==--;

В макросе срабатывают три основных команды, первая инициирует запись разговора в файл wav, вторая конвертирует wav файл в mp3, и третья записывает в поле "filename" таблицы "cdr" полный путь к файлу разговора, например "/var/spool/asterisk/monitor/тек. дата/уникальный номер записи.mp3".

Чтобы макрос срабатывал, его необходимо прописать в контексте в котором происходит исходящий и входящий вызов, например так (хотя для вызова создают тоже макрос):

[internal]
exten => _X.,1,Macro(app-mp3,/var/spool/asterisk/monitor/,${STRFTIME(${EPOCH},,%Y%m%d)}/${UNIQUEID})
exten => _X.,n,Dial(SIP/${EXTEN},60)
exten => _X.,n,Hangup()

И скрин "asterisk cdr mod":

Blog post image

Большая картинка.

Бывает колонка "Файл" пуста и соответственно аудио записи не проигрываются. Поэтому необходимо проверить правильность записи путей в базе данных MySQL. Записи должны отображать корректный путь к звуковому файлу. Проверить пути можно следующим образом используя нехитрый запрос:

# mysql -p

mysql> use asteriskcdrdb
mysql> select filename from cdr ORDER BY ID DESC LIMIT 10;
+----------------------------------------+
| filename |
+----------------------------------------+
| "20161121/1479707105.86845.mp3" |
| 20161121/1479707372.86954.mp3 |
| "20161121/1479707191.86904.mp3" |
| |
| "20161121/1479707062.86822.mp3" |
| 20161121/1479707262.86925.mp3 |
| |
| 20161121/1479707329.86939.mp3 |
| 20161121/1479707327.86937.mp3 |
| "20161121/1479707163.86892.mp3" |
+----------------------------------------+
10 rows in set (0.00 sec)
mysql> exit

Видим файлы, проверьте есть ли файлы в указанной директории.

Установка Asternic Lite

Веб интерфейс Asternic Lite очень хорошо помогает собирать статистику по звонкам которые попадают в очередь - отвеченные, не отвеченные, потерянные, среднее время разговора, среднее время ожидания и т.д. А также строить наглядные графики которые так нравятся руководству. Обычно количество отвеченных звонков оператором подсчитывается на Asternic и далее считается KPI, по итогу которого выплачиваются бонусы в виде прибавки к зарплате. Это основной инструмент для подсчета звонков и другой статистики.

Есть конечно некоторые нюансы при подсчете звонков:

1. У операторов в подписи письма есть внутренний номер который видят клиенты, и получается клиент дозвонившись в кол центр во время ожидания в очереди, может набрать внутренний номер оператора, тем самым сделав звонок в обход статистики которую выдает Asternic.

2. Иногда клиенту нужен определенный оператор, так как до этого работа производилась с ним. И оба знают тему разговора. Итого клиент дозванивается на общий номер кол центра и попадает к случайному оператору, который не в теме. Чтобы не объяснять всю суть прошлого звонка, он требует соединить его с оператором который обрабатывал его первый звонок. И тут случайный оператор начинает переводить звонок на требуемого оператора. Делая перевод на другого оператора, статистика в Asternic может не учитываться.

3. Каждый оператор может в ручную подсчитывать свои звонки за день и проверять их созвучность в веб интерфейсе CDR Viewer. Здесь всего скорей будет все один в один. Но в один прекрасный момент статистика между Asternic и CDR Viewer из за двух пунктов выше, может не совпадать. Тем самым создав разногласия между супервайзером и оператором.

Примечание: Для правильной статистики необходимо каждую ночь обнулять внутренний счетчик по очередям в Asterisk командой asterisk -rx "queue reload all" или asterisk -rx "queue reset stats". Запись должна быть в кроне на 23:59

Включаем AMI

Почти все веб интерфейсы используют специальный интерфейс управления Asterisk по имени AMI. То есть AMI позволяет клиентским программам (веб интерфейсам) соединяться с серверным Asterisk, отправлять ему команды и/или считывать события, происходящие в АТС, используя TCP/IP протокол.

Открываем файл /etc/asterisk/manager.conf

# vi /etc/asterisk/manager.conf

[general]
enabled = yes
webenabled = yes
port = 5038
bindaddr = 0.0.0.0
;Добавляем юзера
[admin]
secret = amp111
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.0
read = system,call,command,agent,user,originate
write = system,call,command,agent,user,originate
writetimeout = 500

Не забывайте после редактирования файла manager.conf делать команду:

# asterisk -rx "manager reload"

Здесь включен интерфейс AMI и добавлен пользователь admin с паролем adm111. Используя этого юзера Asternic будет взаимодействовать с Asterisk.

Установка Asternic Lite

# cd /usr/src

# wget http://download.asternic.net/asternic-stats-1.5.tgz

# tar zvxf asternic-stats-1.5.tgz

# cd asternic-stats

# mysqladmin -u root -p create qstatslite

# mysql -u root -p qstatslite < sql/qstats.sql

Примечание: По сути можно даже не создавать заранее базу, если базы нет, она автоматически будет создана, это прописано в файле "qstats.sql".

Теперь проверяем имя базы и другие параметры соединения с базой в файлах веб интерфейса:

# vi /usr/src/asternic-stats/html/config.php

$dbhost = 'localhost';
$dbname = 'qstatslite';
$dbuser = 'root'; // пользователь "qstatsuser"
$dbpass = ''; // пароль "qstatsPass"

$manager_host = “127.0.0.1″;
$manager_user = “admin”;
$manager_secret = “amp111”;
$language = “ru”;

Здесь главное изменить имя базы, пароль и поставить русский язык интерфейса.

# vi /usr/src/asternic-stats/parselog/config.php

$queue_log_dir = '/var/log/asterisk/';
$queue_log_file = 'queue_log';
$dbhost = 'localhost';
$dbname = 'qstatslite'; // пароль "qstatsPass"
$dbuser = 'root';
$dbpass = '';

Здесь главное изменить имя базы.

Теперь осталось настроить планировщик, чтобы данные из лог файлов поступали в базу MySQL:

# mv /usr/src/asternic-stats/html /var/www/html/queue-stats

# mv /usr/src/asternic-stats/parselog /usr/local

Каждый час будем забирать данные логов:

# cd /etc/cron.hourly

# vim queuestats

#!/bin/bash
cd /usr/local/parselog
./parselog.php convertlocal

# chmod a+x queuestats

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

Открываем планировщик:

# crontab -e

И добавляем туда строчку:


* * * * * /etc/cron.hourly/queuestats

Запускаем для теста скрипт:

# ./queuestats

Если ничего не выводится то норма, если ошибка:

Error en la Base de Datos
Error en la Base de Datos

Значить проблема - неправильно указана база данных, веден неверный пользователь или пароль к БД в файлах:

/var/www/html/queue-stats/config.php
/usr/local/parselog/config.php

Такую ошибку также можно получит если установить свежею версию PHP или не до установить зависимости.

Заходим через браузер на : http://ip address asterisk/queue-stats

Blog post image

Большая картинка

Здесь мы можем выбрать очередь или очереди, а также учетные записи с номерами. Стоить отметить, что статистика собирается путем чтения лог файла очередей (queues_log). Данные с базы CDR DB туда не попадают!

Чтобы отчет от Asternic не показывал старые не актуальные данные по агенту (номеру), удалите этого агента из его базы.

#> mysql -u root -p qstats -e "DELETE FROM qagent WHERE agent='John Doe'"

Здесь в примере удален агент John Doe

Также вы можете удалить не нужные очереди.

#> mysql -u root -p qstats -e "DELETE FROM qname WHERE queue='Default'"

В примере удалена очередь Default

Установка панели FOP2

А этот веб интерфейс помогает мониторить активных и не активных внутренних абонентов. В общем эта панель управления операторами для супервайзера (начальник отдела кол центра). Полезный инструмент при работе кол центра с ограничением мониторинга только до 15 пользователей. То есть есть "насяльника" кол центра, которому необходимо видеть какое количество операторов на данный момент работает - сидит на телефоне и отвечает клиентам. Когда какой нибудь оператор уходить на обед ставя режим "Не беспокоить" он же DND на своем телефоне, супервайзер видит это мониторя панель FOP2. Обычно операторы и супервайзер сидят в одном кабинете типа "Open Space", когда видно всех операторов с одной места кабинета. И вот супервайзер видит самих операторов в живую и смотрит панель FOP2 где видно активные телефоны. Таким способом достигается контроль над операторами. У FOP2 также есть плагин для популярных браузеров таких как Chrome и Firefox.

Генератор лицензий: http://www.ansealk.ru/wiki/doku.php?id=fop2_s_licenziej

Качаем FOP2 панель:

# cd /usr/src

# wget http://download2.fop2.com/fop2-2.30.06-centos-x86_64.tgz

# tar -xf fop2-2.30.06-centos-x86_64.tgz

# cd fop2 && make install

Добавляем нового пользователя fop2 с паролем fop222:

# vim /etc/asterisk/manager.conf

[fop2]
secret = fop222
deny = 0.0.0.0/0.0.0.0
permit = 127.0.0.1/255.255.255.0
read = all
write = all
writetimeout = 1000
eventfilter=!Event: RTCP*
eventfilter=!Event: VarSet
eventfilter=!Event: Cdr
eventfilter=!Event: DTMF
eventfilter=!Event: AGIExec
eventfilter=!Event: ExtensionStatus
eventfilter=!Event: ChannelUpdate
eventfilter=!Event: ChallengeSent
eventfilter=!Event: SuccessfulAuth

# asterisk -rx "manager reload"

Добавляем только что созданного пользователя AMI в настройки fop2 панели:

# vim /usr/local/fop2/fop2.cfg

[general]
; AMI definitions
manager_host=localhost
manager_port=5038
manager_user=fop2
manager_secret=fop222

Проверяем что все нормально:

# /usr/local/fop2/fop2_server --test

Flash Operator Panel 2 - License file fop2.lic not found.
Running in Demo Mode
Connection to manager OK!

И запускаем fop2 панель:

# service fop2 start

Чтобы зайти в нее, пройдите по ссылке http://ваш_ип/fop2

Но прежде, требуется создать юзера под которым можно заходить, для этого нужен fop2 manager, установка которого описана чуть ниже.

Blog post image

Большая картинка

Установка FOP2 менеджера

Качаем менеджер FOP2:

# wget http://download2.fop2.com/plugins/fop2manager-1.1.5.tgz

Распаковываем его в каталог веб сервера Apache:

# tar -xf fop2manager-1.1.5.tgz -C /var/www/html/fop2/

Создаем базу для fop2 manager:

# mysqladmin -u root -p create fop2

# cd /var/www/html/fop2/admin

# mysql -u root -p fop2 < install.sql

# mysql -p

> GRANT ALL PRIVILEGES ON fop2.* TO fop2@localhost IDENTIFIED BY '';
> exit

Заходим на адрес: http://ваш_IP/fop2/admin/

Blog post image

Вводим логин и пароль "fop2admin"

Blog post image

Большая картинка

Добавляем номер 800:

Blog post image

Большая картинка

Разрешаем номеру 800 (он должен существовать в sip.conf) все и нажимаем кнопку "Submit Changes", после 10 секунд можно залогинится в панели по адресу http://ваш_ип/fop2

Теперь идем в FOP2 Панель по адресу http://ваш_IP/fop2/ и вводим номер 800 с паролем 1234 и видим зелень:

Blog post image

Большая картинка

Так как панель с ограничениями на 15 номеров, то из за этого, нам необходимо выборочно контролировать какие номера больше всего нужно мониторить, в меню Buttons это можно провернуть, на картинке я убрал номер 850 из панели:

Blog post image

Большая картинка

Также вы можете убрать не нужные очереди, отключив их.

Если FOP2 некоректно отображает статусы, включите отладочный режим:

# /usr/local/fop2/fop2_server -X 511 -l /var/log

# tail -f fop2_debug.log |xargs -IX printf "$(date -u)\t%s\n" X > /var/log/fop2_debug_timestamps.log &

Примечание: FOP2 менеджер работает плохо, рекомендуется не устанавливать его. При этом добавить пользователей можно через правку двух файлов /usr/local/fop2/fop2.cfg и /usr/local/fop2/buttons.cfg, смотрит пример внизу. Если надо поменять отображение, отредактируйте файл /var/www/html/fop2/css/operator.css

Примерно это выглядит так:

fop2.cfg - разрешаем админский номер:

user=800:1234:all:queues:all
; user=621:1234:dial,transfer,pickup:deptA
; user=622:1234:all
; user=623:1234:meetme,pickup
buttonfile=buttons.cfg

buttons.cfg - настраиваем окошки:

[SIP/800]
type=extension
extension=800
context=outcoming-sip
label=800 Felicia
[SIP/801]
type=extension
extension=801
context=outcoming-sip
label=801 Nutra
[SIP/802]
type=extension
extension=802
context=outcoming-sip
label=802 PIpec

Проблема с веб интерфейсами

Иногда если поднять из бекапа веб интерфейс или обновить некоторые PHP пакеты, сайт перестает нормально функционировать, например не открывается страница или ваш введенный логин не воспринимается. Чтобы решить такой глюк, попробуйте поиграться с правами и каталогом который хранит сессии PHP:

# сhown asterisk:asterisk /var/lib/php/sessions

или

# vim /etc/php.ini

;session.save_path = "/var/lib/php/session"
session.save_path = "/tmp"

Установка Real Time Asterisk GUI (RTAG) менеджера

Этот интерфейс помогает удобно прослушивать аудио записи звонков, когда проблемный клиент орет, можно доказать что он был не прав. К сожалению все ссылки на файл rtag.zip сдохли. Поэтому пришлось искать альтернативный источник. Кстати о минусе, этот веб интерфейс не ищет номер в базе по шаблону, то есть если ввести номер 2755343, он не найдет номера с дополнительной цифрой впереди или в конце, например 82755343 или 27553438. Поэтому на роль работы с базой звонков, подходит лучше CDR Viewer и его клоны. Можно конечно доработать этот момент в самом коде RTAG, но зачем оно нужно, когда есть альтернативы. Также через RTAG можно управлять станицей через AGI, этот момент я не тестировал, так как нет надобности.

Качаем файл rtag.tgz http://ifolder.su/45199538 в каталог /usr/src/

# tar zvxf rtag.tgz

# mv rtag /var/www/html

# cd /var/www/html/rtag

Меняем настройки доступа к БД CDR Asterisk:

# vim conf.php

$dcdr = 'asteriskcdrdb.cdr'; //База.таблица
//Соединение с базой RTAG
function mysql_link(){
$rtag['host']='localhost'; //Сервер
$rtag['user']='asteriskcdr'; //Пользователь
$rtag['passwd']='password'; //Пароль
$rtag['name']='asteriskcdrdb'; //База данных
$rtag_connect=mysql_connect($rtag['host'],$rtag['user'],$rtag['passwd']) or die('Could not connect to database RTAG!');
mysql_select_db($rtag['name'],$rtag_connect);
mysql_query("SET NAMES utf8");
}

//Соединение с базой Asterisk CDR
function mysql_link_cdr(){
global $billing_cdr;
$cdr['host']='localhost'; //Сервер
$cdr['user']='asteriskcdr'; //Пользователь
$cdr['passwd']='password'; //Пароль
$cdr['name']='asteriskcdrdb'; //База данных
$cdr['table']='cdr'; //Таблица
$cdr_connect=mysql_connect($cdr['host'],$cdr['user'],$cdr['passwd']) or die('Could not connect to database CDR!');
mysql_select_db($rtag['name'],$cdr_connect);

Заходим по адресу http://ip_адрес/rtag/

Blog post image

Большая картинка

Здесь видно кто кому звонил. Если вы настроили запись звонков через команду MixMonitor, и хотите чтобы воспроизведения записей было через RTAG, сделайте следующее - создайте символьную ссылку в каталоге RTAG на папку с записями, например:

# cd /var/www/html/rtag/
# ln -s /var/spool/asterisk/monitor/ monitor

Wallboard Admin

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

Чтобы интерфейс показал статистику, необходимо:

  • Иметь в очереди принимающих звонки абонентов, узнать можно по команде: asterisk -rx "queue show <queue name>" со статусом "Not in use"
  • В браузерах разрешить выполнение JavaScript и т.д., в противном случае можно увидеть пустой экран

Качаем PHPAGI:

# cd /usr/src

# wget https://sourceforge.net/projects/phpagi/files/phpagi/2.20/phpagi-2.20.tgz/download -O phpagi-2.20.tgz

# tar zvxf phpagi-2.20.tgz

# cd phpagi-2.20

# cp php*.php /etc/asterisk

Отредактируем файл AMI и добавляем туда нового пользователя asmanager с паролем password:

# vim /etc/asterisk/manager.conf

Добавим пользователя phpagi:

[asmanager]
secret = password ; пароль для доступа
deny=0.0.0.0/0.0.0.0 ; запрет для ip или подсети
permit=127.0.0.1/255.255.255.0 ; разрешение для ip или подсети
read = system,call,log,verbose,command,agent,user,originate ; какие команды имеем право выполнять
write = system,call,log,verbose,command,agent,user,originate
"/etc/asterisk/manager.conf" 184L, 7605C

Редактируем файл phpagi и проверяем чтобы был наш созданный пользователь asmanager

# vim /etc/asterisk/phpagi.conf

[phpagi]
tempdir=/tmp
[asmanager]
server=localhost
port=5038
username=asmanager
secret=password

# mkdir -p /var/www/html/admin/wallboard

# cd /var/www/html/admin/wallboard

# wget http://getbootstrap.com/2.3.2/assets/bootstrap.zip

# yum install unzip -y

# unzip bootstrap.zip

# wget -O phpagi-2.20.tgz https://sourceforge.net/projects/phpagi/files/phpagi/2.20/phpagi-2.20.tgz/download

# tar xvfz phpagi-2.20.tgz

# ln -s phpagi-2.20 phpagi

# wget http://tokopsa.com:100/astwb-1.0.tar.gz

# tar xvfz astwb-1.0.tar.gz

Теперь требуется поменять настройки соединения с базой данных:

# vi cdr.php

$db = 'asteriskcdrdb';
$db_admin = 'asteriskcdrdb';
$db_password = 'password';
$tablename = 'cdr';

Если зайти по ссылке http://ip/admin/wallboard, должна выйти панель:

Blog post image

Большая картинка

MonAST

Данная панель похожа на Fop2, только она Open Source, и поэтому в нем нет пресловутых ограничений в 15 юзеров как в FOP2!

Устанавливаем зависимости:

# yum install python-devel python-crypto pyOpenSSL python-zope-interface python-twisted* -y

Устанавливаем starpy:

# cd /usr/src

# wget http://downloads.sourceforge.net/project/starpy/starpy/1.0.0a13/starpy-1.0.0a13.tar.gz

# tar zvxf starpy-1.0.0a13.tar.gz

# cd starpy-1.0.0a13

# python setup.py install

Устанавливаем Pear модули:

# pear install DB HTTP_Request2 HTTP_Client

Установим MonAst:

# cd /usr/src

# wget https://sourceforge.net/projects/monast/files/Monast%20for%20Asterisk%201.4%2C%201.6%20and%201.8/3.0b4/monast-3.0b4.tar.gz/download -O monast-3.0b4.tar.gz

# tar zvxf monast-3.0b4.tar.gz

# cd monast-3.0b4

# ./install.sh

Открываем manager.conf и добавляем туда пользователя MonAst:

# vi /etc/asterisk/manager.conf

[monast]
secret=monast
writetimeout=100
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.0
read=system,call,log,verbose,command,agent,user,config,originate,reporting
write=system,call,log,verbose,command,agent,user,config,originate,reporting

Не забывайте после редактирования файла manager.conf делать команду:

# asterisk -rx "manager reload"

Настраиваем MonAST:

# vim /etc/monast.conf

[global]
# Bind client connetions on host:port
bind_host = 127.0.0.1
bind_port = 5039

# Use client autentication on browser
auth_required = false

##
## Servers Definitions
##
[server: Server_1] # Server name can not contains space
hostname = 127.0.0.1
hostport = 5038
username = monast
password = monast

# Default user context
default_context = default

# Context to use in transfer calls
transfer_context = default

# Context and prefix for meetme
meetme_context = default
meetme_prefix =
***************** *************** *************** *************

Запускаем MonAST:

# /etc/init.d/monast start

И ставим его в автозагрузку:

# systemctl enable monast

И заходим в веб интерфейс по адресу http://your_ip/monast/index.php

Blog post image

Большая картинка

На экране криво отображаются Caller ID информация двух внутренних телефонов менеджеров, поэтому лучше не используйте русский CallerID.

Если у вас много номеров и вам надо мониторить только выборочно, в таком случае можно исключить номера и очереди через файл /etc/monast.conf, например:

[peers]
# hide peer when default = show
;<Server Name>/SIP/user-1 = hide
Server_1/SIP/209 = hide
Server_1/SIP/201 = hide
Server_1/SIP/207 = hide
Server_1/SIP/228 = hide

Здесь в примере я убрал номера 209, 201, 207 и 228 из вида в панели.

Аналогичным образом снимаются с мониторинга очереди, надо зайти в секцию [queues]:

[queues]
# defualt show/hide
# hide queue queue03
;<Server Name>/queue03 = hide
hide queue managers;

В примере скрыт показ мониторинга очереди "managers".

Обязательно после изменений файлов перезагружайте демон Monast:

# service monast restart

Ручные запросы к базе

Искать информацию с помощью веб интерфейсов временами бывает проблематично, поэтому проще напрямую брать данные с БД со звонками. В этом разделе показаны примеры некоторых простых запросов.

Например давайте найдем все входящие звонки по городскому номеру 2755222, в разрезе очереди "company-railways" по период с 2016-11-14 от 2016-11-25, и поместим полученные данные в файл /tmp/order_city.csv:

SELECT 'id','calldate','clid','src','dst','direction','dcontext','channel','dstchannel','lastapp','lastdata','duration','billsec','disposition','amaflags','accountcode','uniqueid','userfield','linkedid','sequence'
UNION ALL SELECT id,calldate,clid,src,dst,direction,dcontext,channel,dstchannel,lastapp,lastdata,duration,billsec,disposition,amaflags,accountcode,uniqueid,userfield,linkedid,sequence FROM cdr WHERE channel LIKE "%2755222%" and lastdata like "%company-railways%" and DATE(calldate) between '2016-11-14' and '2016-11-25' INTO OUTFILE '/tmp/orders_city.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

Это уже другой запрос, который просто выводит из таблицы "cdr" поля "calldate,src,clid,dst,filename" с ограничением в 100 строк:

select calldate,src,clid,dst,filename from cdr ORDER BY ID DESC LIMIT 100;

Редактирование веб интерфейсов

Используемые веб интерфейсы кроме FOP2 поставляются по лицензии GPL, а это значить, что исходный код открыт и мы можем редактировать его, дополняя своими новыми возможностями. Разумеется понадобятся знания в PHP, возможно MySQL, CSS и HTML. В интернете много обучающих материалов, изучив которые, вы сможете вносить свои изменения в популярные веб морды для Asterisk.

Ссылки:

1. Links - замена fop2

2. http://videooko.net/asterisk-%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B9-%D0%BC%D0%BE%D0%BD%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%BD%D0%B3-sip-%D0%BE%D0%BF/

0
11687
0