Asterisk. Запись информации о звонках в MySQL

Автор: GAMER вкл. .

Задача: записать историю о звонках в БД (MySQL). Пример будет на FreeBSD. Ветка Asterisk - 10.

Что должно быть:

1. Asterisk
2. MySQL (MariaDB )
3. unixodbc
4. databases/mysql-connector-odbc

Конфиги:

В файле /usr/local/etc/asterisk/res_odbc.conf  должны быть такие строки:

[asterisk]
enabled => yes
dsn => MySQL-asterisk
username => asterisk
password => ******

 /usr/local/etc/asterisk/cdr_adaptive_odbc.conf

[cdr_adaptive_connection]
connection=asterisk
table=cdr
alias start => calldate

Дальше, настройкка ODBC.

/usr/local/etc/odbc.ini

[MySQL-asterisk]
Description = MySQL Asterisk database
;Trace = Off
;TraceFile = stderr
Driver = MySQL
Server = localhost
User = asterisk
Password = ******
;Port = 3306
;Socket = /var/run/mysqld/mysqld.sock
Socket = /tmp/mysql.sock
Database = asterisk
OPTION=4194304

/usr/local/etc/odbcinst.ini

[MySQL]
Description=ODBC for MySQL
Driver=/usr/local/lib/libmyodbc5.so
UsageCount=20002
CPTimeout =
CPReuse =

Если odbc не заработал, то пользуемся инструментами (оригинал тут):

Use odbcinst to find where odbcinst.ini is located.

# odbcinst -j

unixODBC 2.3.0
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 4
SQLLEN Size........: 4
SQLSETPOSIROW Size.: 2

Install the driver.

# odbcinst -i -d -f /usr/local/etc/odbcinst.ini

List the available DSNs to check the config.

# odbcinst -s -q

[dsn_name]

Создаем БД asterisk и таблицу cdr.

mysql> create database asterisk;

mysql> CREATE TABLE `cdr` (
  `id` int(9) 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 '',
  `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=Aria AUTO_INCREMENT=61 DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1;

Проверяем подключение с Астериска:

*CLI> odbc show asterisk

ODBC DSN Settings
-----------------   Name:   asterisk
  DSN:    MySQL-asterisk
    Last connection attempt: 1970-01-01 03:00:00
  Pooled: No
  Connected: Yes

Читаем логи. Если что-то не работает, должно ругаться.