Настройка подключения Asterisk 13 к MySQL через драйвер ODBC на Debian.
Рассмотрим как подключить 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
Устанавливаем необходимые зависимости:
apt-get install unixodbc unixodbc-dev libmyodbc libmysqlclient-dev -y
Настройка драйвера 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 из данной статьи.
Создадим базу данных и пользователя:
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, вызываем меню:
make menuselect
Отмечаем необходимый модуль и нажимаем Save & Exit:
Выполняем установку:
make install
Редактируем файл /etc/asterisk/res_odbc.conf
, вписываем в конец файла:
[asteriskcdrdb]
enabled=yes
dsn=MySQL-asteriskcdrdb
pre-connect=yes
username=asteriskuser
password=asterpass
/etc/odbc.ini
. Этот параметр говорит Asterisk, что необходимо открыть и поддерживать соединение с базой данных при загрузке модуля res_odbc.so
.Настройка сбора логов 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
cdr_adaptive_odbc.conf
, вместо cdr_odbc.conf
, обусловлено тем что мне необходимо использование custom полей
, для занесения каких то своих данных в таблицу CDR.Настройка сбора логов CEL
В файле конфигурации /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
Где:
cel
– название таблицы в MySQLasteriskcdrdb
– название соединения ODBC из файла/etc/asterisk/res_odbc.conf
Перезапускаем Asterisk:
systemctl restart asterisk
Проверка
Через cli проверим подключение к БД через драйвер 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.
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Обсуждение
Нет комментариев.