Сегодня мы будем записывать данные о звонках, прошедших через Asterisk, в базу MySQL. Это так называемый CDR — Call Detail Record — история звонков. Мы все сделаем без пересборки астериска.
Установка MySQL
Что такое MySQL? Эта такая программа, которая хранит в себе данные. Она бесплатная. Все данные там хранятся в таблицах, в каждой таблице есть строки и столбцы. Это наподобие структурированного текстового файла. Только MySQL работает намного быстрее и проще. Да да программно это проще чем сваливать данные в текстовый файл. Таблицы MySQL это типа файлы, а база данных – типа каталога где лежат эти файлы. Ну это очень упрощенно, но смысл такой. Для доступа к MySQL нужна специальная программа, просто зайти и через ls и cat посмотреть таблицы не получится. Зато она быстро работает и к ней возможен доступ по сети, и еще там есть пользователи и права. А еще она умеет считать, например суммарное время звонков на определенный номер или количество звонков и т.п.
Что делаем?
Ставим 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;
Затем создадим отдельного пользователя для работы с этой базой:
1 2 |
CREATE USER asterisk_user IDENTIFIED BY 'tut_parol'; GRANT ALL ON asteriskcdr.* TO asterisk_user@'%'; |
При этом в последней строчке можно написать localhost вместо % – тогда этому пользователю mysql не будет разрешены подключения через сеть, а можно будет только с локального компьютера. Вместо tut_parol надо придумать пароль.
Теперь создаем таблицу, куда будет писаться история звонков:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
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:
1 2 3 4 5 6 7 8 9 10 |
[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 |
Следующий этап:
1 2 |
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. Запускаем, настраиваем:
Тыкаем как на картинке и видим нашу запись в истории звонков.
Добавить комментарий