CDR (Call Data Record) содержит информацию о всех звонках, которые обрабатывала IPPBX(в нашем случае Asterisk) в том числе несостоявшихся. Многим администраторам, которые обслуживает телефонию CDR являются источником информации, с которого следует начинать диагностику проблемы.
В сегодняшней статье мы расскажем как записывать Asterisk CDR в базу данных MySQL и как просматривать эти самые записи с помощью Asterisk CDR Viewer.
Для настройке на сервере уже должны быть установлены MySQL,Asterisk, Apache, PHP. Мы будем производить настройки на сервере CentOS 6.6 с Asterisk 13.
Приступим
Первым делом нам нужно создать базу данных и пользователя этой базы данных где будут храниться наши CDR.
Подключаемся к MySQL:
#mysql –uroot –ppassword
Создаем базу данных:
mysql> CREATE DATABASE asteriskcdrdb;
Даем доступ для пользователя asteriskcdr с паролем 'ваш пароль' к базе asteriskcdrdb только с localhost :
mysql> GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskcdr@localhost IDENTIFIED BY 'ваш пароль'; mysql> flush privileges;
Подключаемся к созданной базе asteriskcdrdb:
mysql> use asteriskcdrdb;
Создаем таблицу:
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, чтобы он знал куда писать CDR. Переходим в файл /etc/asterisk/cdr_mysql.conf расскоментируем и вносим следующие изменения:
[global] hostname=localhost - ip адрес где располагается сервер MySQL dbname=asteriskcdrdb – название базы данных где будут храниться cdr table=cdr - название таблицы password= password -пароль для пользователя asteriskuser user= asteriskcdr - имя пользователя для базы данных ;port=3306 ;sock=/tmp/mysql.sock ;timezone=UTC ; Previously called usegmtime
Переходим в консоль Asterisk и выполняем команду :
module load cdr_mysql.so
Убедимся, что модуль загружен и работает:
module show like cdr_mysql.so
После этого перезагрузите Asterisk и убедимся, что вызовы записываются в базу: 1.Сделайте любой исходящий вызов, чтобы он прошел через ваш Asterisk. 2. Зайдите в MySQL. 3. Подключитесь к базе asteriskcdrdb :
use asteriskcdrdb;4. Сделайте общий Select:
select * from cdr;
Если в выводе вы увидите свой вызов, то значит CDR пишутся корректно и все работает.
Настройка Asterisk CDR Viewer
Если настройки записи CDR в базу данных были выполнены правильно, то можно приступить к настройке Asterisk CDR Viewer.
Скачиваем asterisk-cdr-viewer-1.0.2.tgz в папку /var/www и разархивируем
wget https://asterisk-cdr-viewer.googlecode.com/files/asterisk-cdr-viewer-1.0.2.tgz tar -xzvf asterisk-cdr-viewer-*.tgz
Переносим файл алиаса в папку с httpd
cp asterisk-cdr-viewer/contrib/httpd/asterisk-cdr-viewer.conf /etc/httpd/conf.d/
Изменяем настройки подключения к БД для Asterisk-CDR-viewer
nano /var/www/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/
Посмотрим результаты вывода:
По умолчанию доступ к просмотру статистики имеют все пользователи, исправим это сделав доступ через авторизацию.
В /etc/httpd/conf.d/asterisk-cdr-viewer.conf расскоментируем все строки:
Alias /acdr/ "/var/www/asterisk-cdr-viewer/"
AuthName "Asterisk-CDR-Stat"
AuthType Basic
AuthUserFile /var/www/asterisk-cdr-viewer/.htpasswd
AuthGroupFile /dev/null
require valid-user
Создаем пользователя и пароль для подключение к asterisk cdr viewer:
htpasswd -c /var/www/asterisk-cdr-viewer/.htpasswd voipnotes
Добавим созданного нами пользователя в /var/www/asterisk-cdr-viewer/include/config.inc.php
!!! $admin_user_names = '*' – все пользователи имеют доступ к статистике. !!! $admin_user_names = "voipnotes" - уберем * и добавим нашего пользователя
Рестартуем веб-сервер:
service httpd restart
Теперь при попытке зайти в viewer вы увидите приглашения для ввода логина и пароля:

Настроем возможность записи разговоров:
В файле /var/www/asterisk-cdr-viewer/include/config.inc.php указаны настройки по умолчанию:
$system_monitor_dir = '/var/spool/asterisk/monitor'; - директория в которой хранятся записанные вызовы $system_audio_format = 'wav'; - формат аудио файла
Если вы хотите можно поменять формат или директорию, если нет, то в ваш диалплан добавляем следующие строки и провряем:
exten => s,1,Set(MONITOR_FILE=/var/spool/asterisk/monitor/${UNIQUEID}) exten => s,n,MixMonitor(${MONITOR_FILE}.wav,b)На этом наша настройка закончена.
Если вы в статье нашли ошибки или несоответствия, мы будем благодарны, если вы напишите нам о них в комментариях.