Asterisk: пишем CDR в базу данных MySQL

May 19, 2016 23:19 · 380 words · 2 minute read asterisk mysql

Детализированная информация о всех телефонных вызовах содержится в CDR (Call Detail Records). В Asterisk есть возможность сохранять CDR-записи в базе данных MySQL, вместо текстовых CSV файлов, использующихся по умолчанию. Давайте разберемся, как писать CDR в базу MySQL!

Действия производятся на:

lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 8.4 (jessie)
Release:	8.4
Codename:	jessie

Считаем, что MySQL-сервер у вас уже установлен и настроен. Если нет, то установить его можно командой:

apt-get install mysql-server mysql-client libmysqlclient-dev

Подключаемся к MySQL-серверу:

mysql -u root -p

Cоздаем базу данных:

CREATE DATABASE asterisk;

Выбираем только что созданную базу данных:

USE asterisk;

Создаем таблицу для хранения записей CDR:

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 '',
       userfield varchar(255) NOT NULL default '',
       uniqueid varchar(32) NOT NULL default ''
);
 
ALTER TABLE cdr ADD INDEX ( calldate );
ALTER TABLE cdr ADD INDEX ( dst );
ALTER TABLE cdr ADD INDEX ( uniqueid );

Создаем пользователя для работы с CDR:

CREATE USER asterisk@localhost IDENTIFIED BY < password >;

Выставляем созданному пользователю необходимые права:

GRANT ALL ON asterisk.* TO asterisk@localhost;

Asterisk должен быть собран с поддержкой mysql (модули cdr_mysql,res_config_mysql). Если нет, то в каталоге с исходным кодом выполняем:

make clean
./configure
make menuselect

…выбираем нужные модули…

make
make install

Открываем конфигурационный файл /etc/asterisk/cdr.conf, проверяем следующий параметр:

[global]
enable=yes

Открываем конфигурационный файл /etc/asterisk/cdr_mysql.conf, приводим к следующему виду:

[global]
hostname=localhost
dbname=asterisk
table=cdr
user=asterisk
password=<password>

Для применения изменений перезапускаем Asterisk командой:

/etc/init.d/asterisk restart

Проверить, что все было сделано правильно можно так:

asterisk -rx "cdr mysql status"
Connected to asterisk on socket file default using table cdr for 2 seconds.
  Wrote 0 records since last restart.
asterisk -rx "cdr show status"

Call Detail Record (CDR) settings
----------------------------------
  Logging:                    Enabled
  Mode:                       Simple
  Log unanswered calls:       No
  Log congestion:             No

* Registered Backends
  -------------------
    mysql
    csv
    cdr-custom
    cdr_manager
tweet Share