Содержание статьи:
Рассмотрим как подключить Asterisk 13 к MySQL посредством ODBC (Open Database Connectivity) для ведения записей CDR (Call Detail Records) и CEL (Channel Event Logging).
До версии Asterisk 13, для хранения CDR и CEL в MySQL использовал драйвер cdr_mysql.so и cel_mysql.so. Начиная с Asterisk 13 эти модули Deprecated (Устарели) и не рекомендованы к использованию. Разработчики рекомендуют использовать технологию ODBC.
Исходные данные:
- Debian 8 Jessie
- Asterisk 13 (13.22.0) — развернутый по данной статье
- MySQL (5.5.60)
Подготовка системы
Перед началом установки обновляем систему до актуального состояния:
apt-get update && sudo apt-get upgrade -y
Устанавливаем необходимые зависимости:
sudo apt-get install unixodbc unixodbc-dev libmyodbc libmysqlclient-dev
Настройка драйвера ODBC
Приводим файл конфигурации (/etc/odbcinst.ini) к виду:
# Driver from the mysql-connector-odbc package # Setup from the unixODBC package [MySQL] Description = ODBC for MySQL Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so FileUsage = 1
Проверим связность ODBC и MySQL:
odbcinst -q -d
Результат должен быть следующим:
[MySQL]
Редактируем файл(/etc/odbc.ini), приводим в соответствие:
[MySQL-asteriskcdrdb] Description=MySQL connection to 'asterisk' database Driver=MySQL Server=localhost User=asteriskuser Password=asterpass Database=asteriskcdrdb Port=3306 Charset=utf8 Socket=/var/run/mysqld/mysqld.sock Option=3
Проверим использование утилиты ISQL
echo "select 1" | isql -v MySQL-asteriskcdrdb
Вывод:
+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select 1 +---------------------+ | 1 | +---------------------+ | 1 | +---------------------+ SQLRowCount returns 1 1 rows fetched
Настройка MySQL
Для корректного отображения «Кириллицы» в таблицах, необходимо выполнить настройку MySQL на использование кодировки UTF-8 из данной статьи.
Создадим базу данных и пользователя:
mysql -urootuser -p CREATE DATABASE asteriskcdrdb default charset utf8; GRANT ALL PRIVILEGES ON asteriskcdrdb.* to asteriskuser@localhost IDENTIFIED BY 'asterpass'; FLUSH PRIVILEGES;
Подключаемся к созданной базе данных и создаем необходимые таблицы (CDR и CEL):
use asteriskcdrdb; CREATE TABLE IF NOT EXISTS `cdr` ( `id` int(10) NOT NULL AUTO_INCREMENT, `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 '', `start` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `answer` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `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 '', `userfield` varchar(255) NOT NULL DEFAULT '', `uniqueid` varchar(32) NOT NULL DEFAULT '', `linkedid` varchar(32) NOT NULL DEFAULT '', `sequence` int(11) NOT NULL DEFAULT '0', `truedst` varchar(80) NOT NULL DEFAULT '', `did` varchar(50) NOT NULL DEFAULT '', `didanswer` varchar(60) NOT NULL DEFAULT '', `recordingfile` varchar(255) DEFAULT 'none', PRIMARY KEY (`id`), KEY `calldate` (`calldate`), KEY `clid` (`clid`), KEY `src` (`src`), KEY `dst` (`dst`), KEY `disposition` (`disposition`), KEY `uniqueid` (`uniqueid`), KEY `dcontext` (`dcontext`), KEY `didanswer` (`didanswer`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE `cel` ( `id` int(11) NOT NULL AUTO_INCREMENT, `eventtype` varchar(30) NOT NULL, `eventtime` datetime NOT NULL, `cid_name` varchar(80) NOT NULL, `cid_num` varchar(80) NOT NULL, `cid_ani` varchar(80) NOT NULL, `cid_rdnis` varchar(80) NOT NULL, `cid_dnid` varchar(80) NOT NULL, `exten` varchar(80) NOT NULL, `context` varchar(80) NOT NULL, `channame` varchar(80) NOT NULL, `src` varchar(80) NOT NULL, `dst` varchar(80) NOT NULL, `channel` varchar(80) NOT NULL, `dstchannel` varchar(80) NOT NULL, `appname` varchar(80) NOT NULL, `appdata` varchar(80) NOT NULL, `amaflags` int(11) NOT NULL, `accountcode` varchar(20) NOT NULL, `uniqueid` varchar(32) NOT NULL, `linkedid` varchar(32) NOT NULL, `peer` varchar(80) NOT NULL, `userdeftype` varchar(255) NOT NULL, `eventextra` varchar(255) NOT NULL, `userfield` varchar(255) NOT NULL, PRIMARY KEY (`id`), KEY `uniqueid_index` (`uniqueid`), KEY `linkedid_index` (`linkedid`) );
Если планируется использовать доработанный (Asterisk CDR Viewer Mod), то необходимо так же добавить триггер, для корректного отображения вызываемого номера (вводить последовательно):
DROP TRIGGER IF EXISTS `t_cdr`; DELIMITER // CREATE TRIGGER `t_cdr` BEFORE INSERT ON `cdr` FOR EACH ROW BEGIN IF ((NEW.dst = 's' OR NEW.dst = '~~s~~') AND NEW.truedst != '') THEN SET NEW.dst = NEW.truedst; END IF; END // DELIMITER ; exit;
Настройка Asterisk 13
Для работы связки с ODBC драйвером, необходимо наличие установленного в Asterisk модуля res_config_mysql.so. Если Asterisk был собран без данного модуля, то необходимо его пересобрать с модулем и выполнить установку.
Переходим в каталог с дистрибутивом Asterisk, вызываем меню, отмечаем необходимый модуль и нажимаем Save & Exit:
make menuselect
Выполняем установку:
make install
Редактируем файл (/etc/asterisk/res_odbc.conf), вписываем в конец файла:
[asteriskcdrdb] enabled=yes dsn=MySQL-asteriskcdrdb pre-connect=yes username=asteriskuser password=asterpass
Настройка сбора логов CDR
Редактируем файл (/etc/asterisk/cdr_adaptive_odbc.conf), вписываем в конец файла:
[first] connection=asteriskcdrdb table=cdr loguniqueid=yes usegmtime = no alias start => calldate alias truedst => truedst alias didanswer => didanswer
Настройка сбора логов CEL
Включаем генерацию CEL данных в Asterisk.
В файле конфигурации (/etc/asterisk/cel.conf), в секции [general] приписываем:
[general] enable=yes apps=all events=ALL dateformat = %F %T
Редактируем файл (/etc/asterisk/cel_odbc.conf), вписываем в конец файла:
[cel] connection=asteriskcdrdb loguniqueid=yes table=cel
Перезапускаем Asterisk:
service asterisk restart
Через CLI Asterisk проверим подключение к БД через драйвер ODBC:
*CLI> odbc show ODBC DSN Settings ----------------- Name: asteriskcdrdb DSN: MySQL-asteriskcdrdb Last connection attempt: 1970-01-01 03:00:00 Number of active connections: 1 (out of 1)
Связь с базой данных MySQL настроена. Теперь данные CDR и CEL будут записываться в соответствующие таблицы. Для удобного просмотра информации из базы данных, рекомендую использовать Asterisk CDR Viewer Mod. На данный момент как мне кажется это лучший просмотрщик CDR из бесплатных. Установка его очень очень подробно изложена в README файле, находящегося в дистрибутиве.
Понравилась или оказалась полезной статья, поблагодари автора
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Оставить ответ