Сегодня мы будем записывать данные о звонках, прошедших через Asterisk, в базу MySQL. Это так называемый CDR — Call Detail Record  — история звонков. Мы все сделаем без пересборки астериска.

Установка MySQL

Что такое MySQL? Эта такая программа, которая хранит в себе данные. Она бесплатная. Все данные там хранятся в таблицах, в каждой таблице есть строки и столбцы. Это наподобие структурированного текстового файла. Только MySQL работает намного быстрее и проще. Да да программно это проще чем сваливать данные в текстовый файл. Таблицы MySQL это типа файлы, а база данных – типа каталога где лежат эти файлы. Ну это очень упрощенно, но смысл такой. Для доступа к MySQL нужна специальная программа, просто зайти и через ls и cat посмотреть таблицы не получится. Зато она быстро работает Smile и к ней возможен доступ по сети, и еще там есть пользователи и права. А еще она умеет считать, например суммарное время звонков на определенный номер или количество звонков и т.п.

Что делаем?

Ставим mysql. В консоли сервера пишем apt-get install mysql-server

Да, у mysql есть свои пользователи, не связанные с пользователями операционной системы. Например свой root. При установке надо придумать пароль пользователя root для mysql.

Если нужно, чтобы сервер был виден из сети, то в /etc/mysql/my.cnf надо закоментить или удалить строку bind-address        = 127.0.0.1, а потом выполнить service mysql restart.

Создаем пользователя и таблицу, куда будут записывать данные. Для этого в терминале надо ввести такое mysql -u root -p:

Ввели пароль от пользователя root, который мы придумали на предыдущем этапе при установке mysql. Вид приглашения в консоли изменился и теперь мы рулим mysql. Создаем базу командой CREATE DATABASE asteriskcdr;

Затем создадим отдельного пользователя для работы с этой базой:

CREATE USER asterisk_user IDENTIFIED BY 'tut_parol';
GRANT ALL ON asteriskcdr.* TO asterisk_user@'%';

При этом в последней строчке можно написать localhost вместо % – тогда этому пользователю mysql не будет разрешены подключения через сеть, а можно будет только с локального компьютера. Вместо tut_parol надо придумать пароль.

 

Теперь создаем таблицу, куда будет писаться история звонков:

USE asteriskcdr;

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',
  `start` DATETIME NULL DEFAULT NULL,
  `answer` DATETIME NULL DEFAULT NULL,
  `end` DATETIME NULL DEFAULT NULL,
  `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 '',
  `linkedid` VARCHAR(32) NOT NULL default '',
  `sequence` VARCHAR(32) NOT NULL default '',
  `peeraccount` VARCHAR(32) 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;
ALTER TABLE `cdr` ADD INDEX ( `calldate` );
ALTER TABLE `cdr` ADD INDEX ( `dst` );
ALTER TABLE `cdr` ADD INDEX ( `accountcode` );

Выходим из командной строки mysql командой exit.

Настройка Asterisk для записи CDR в MySQL

Устанавливаем пакет для подключения к mysql: apt-get install mysql-client

Теперь в файле /etc/asterisk/cdr_mysql.conf надо настроить соединение asterisk с mysql:

[global]
hostname=localhost               ; если localhost или не указано, то соединение будет через файл сокета, надо обязательно указать параметр sock
dbname=asteriskcdr               ; имя бд
table=cdr                        ; имя таблицы
password=tut_parol               ; пароль пользователя myqsl
user=asterisk_user	            ; имя пользователя myqsl
port=3306
sock=/var/run/mysqld/mysqld.sock ; это посмотреть в файле /etc/mysql/my.conf в секции [client] в параметре socket. Применяется только если Mysql стоит на том же компе, что и asterisk
charset=UTF-8
userfield=1

Следующий этап:

apt-get install asterisk-mysql
service asterisk restart

Потом в консоли выполняем rasterisk -vvvvvvv и потом cdr mysql status. Ответ должен быть примерно таким Connected to asteriskcdr@localhost, port 3306 using table cdr for 4 minutes, 34 seconds.:

Звоним куда-нибудь, а потом снова выполняем cdr mysql status:

Видим что 1 запись CDR записана в mysql: Wrote 1 records since last restart.

Чтобы нормально посмотреть, что записалось, нам понадобиться программа наподобие HeidiSQL. Запускаем, настраиваем:

Тыкаем как на картинке и видим нашу запись в истории звонков.