Asterisk 1.8 пишем CDR в MySQL базу

On 28/04/2012, in Asterisk, by Алексей Волобуев

Всем здравствуйте!!!

Решил вести записи звонков в базе MySQL. Как всегда помог google (читать маны неохота 🙂 )

Оригинал статьи здесь

В этой статье небольшие исправления, которые использовались у меня

Для того чтобы Asterisk мог записывать данные о звонках в базу, должен быть установлен пакет «Asterisk-addons». Для Asterisk версии ниже 1.8, нужна скачать этот самый пакет с сайта. Для 1.8 все проще, он идет в комплекте с ядром, нужно не забыть его включить.
Итак подключаемся к MySQL
# mysql -uroot -p
mysql>

Создаем базу
mysql> create database asterisk;
Создаем в базе «asterisk» таблицу «cdr», вот с такой структурой
mysql> use 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=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

Теперь даем доступ для пользователя «asterisk_user» с паролем «Some_Pass_Aster01″ к базе «asterisk» только с локалхоста.
mysql> grant all on asterisk.* to 'asterisk_user'@'localhost' identified by 'Some_Pass_Aster01';
mysql> flush privileges;

Теперь укажем нашему Астериску писать CDR базу, для этого в файле «/usr/local/etc/asterisk/cdr_mysql.conf» меняем строчки:
[global]
hostname=localhost
dbname=asterisk
table=cdr
password=Some_Pass_Aster01
user=asterisk_user
sock=/var/lib/mysql/mysql.sock

Для применения изменений перезапускаем «Asterisk». Чтобы убедиться что мы все сделали правильно в консоле Астериска вводим

test*CLI> cdr mysql status
Connected to asterisk on socket file /var/lib/mysql/mysql.sock using table cdr for 5 hours, 22 minutes, 7 seconds.
Wrote 5 records since last restart.

Если у вас примерно такое же сообщение то все настроено верно.
Если видим следующее:

gw*CLI> cdr mysql status
Not currently connected to a MySQL server.

То проверяем, запущен ли сервер MySQL и рестартуем Asterisk.
Такое еще бывает если при старте сервера Астериск успел стартовать раньше MySQL. Для этого надо поправить очередность загрузки (Для справки man rcorder)

2 столбца, значения которых я выяснял
duration — Длительность звонка начинается от набора номера
billsec — Длительность звонка при ответе с той стороны. Именно эти секунды надо сравнивать с билингом оператора.

Самые часто используемые мной выборки:
Просмотреть звонки между 10 апреля 2012 и 29 апреля 2012 года через оператора sipnet
SELECT id,calldate,clid,src,dst,lastdata,duration,billsec,disposition FROM asterisk.cdr WHERE calldate >"2012-04-10 00-00-00" AND calldate 0 and lastdata LIKE '%pctel%' ORDER BY `calldate`;

Tagged with:  

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *