В Asterisk 1.8 и выше рекомендуют в качестве бэкенда для CDR, использовать драйвер ODBC. Этот драйвер является прослойкой между Asterisk и базой данных. Это позволяет унифицировать подключения между Asterisk и различными базами данных, легко меня их. Рассмотрим запись CDR логов используя ODBC.
Установим необходимые пакеты
yum install mysql-server mysql mysql-devel mysql-connector-odbc unixODBC unixODBC-devel -y
Добавляем в файл “/etc/odbc.ini”, следующие строчки
; ; DSN definitions ; [asterisk-cdr] Description = Asterisk CDR Backend ODBC Driver = MySQL Socket = /var/lib/mysql/mysql.sock Server = localhost User = asterisk Pass = Your-Password Database = asterisk Option = 3
В конец файла “/etc/asterisk/res_odbc.conf” добавляем строчки
; ; CDR ODBC Backend ; Environment variables [ENV] ; Connections [asterisk-cdr] enabled => yes dsn => asterisk-cdr username => asterisk password => Your-Password pre-connect => yes idlecheck => 600
Проверяем файл “/etc/asterisk/cdr_odbc.conf”, что он такого вида. Меняется только DSN.
[global] dsn=asterisk-cdr loguniqueid=yes dispositionstring=yes table=cdr ;"cdr" is default table name usegmtime=no ; set to "yes" to log in GMT hrtime=yes ;Enables microsecond accuracy with the billsec and duration fields
Создаем базу под CDR.
create database asterisk default charset utf8; use asterisk; CREATE TABLE `cdr` ( `id` int(11) unsigned 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 '', `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 '', `peeraccount` varchar(20) NOT NULL DEFAULT '', `linkedid` varchar(32) NOT NULL DEFAULT '', `sequence` int(11) NOT NULL DEFAULT '0', `userfield` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `calldate` (`calldate`), KEY `accountcode` (`accountcode`), KEY `uniqueid` (`uniqueid`), KEY `dst` (`dst`), KEY `src` (`src`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; grant all on asterisk.cdr to asterisk@'localhost' identified by 'Your-Password'; flsuh priveleges;
Перегружаем Astersik
service asterisk restart
Делаем звонок и смотрим как ложатся в базу CDR записи.