суббота, 6 апреля 2013 г.



Настройка записи CDR Asterisk в базу MYSQL 

1. Ставим mysql-server, apache, php, если эти пакеты еще не были установлены ранее

2. Коннектимся к MySQL 

mysql -uroot -p
и вводим пароль 

3. Вводим команды в консоли MySQL:

3.1 Создаем базу данных 

CREATE DATABASE asterisk;

3.2 Подключаемся к базе данных 

USE asterisk;

3.3 Создаем таблицу
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 '',
`peeraccount` varchar(20) NOT NULL DEFAULT '',
`linkedid` varchar(32) NOT NULL DEFAULT '',
`sequence` int(11) NOT NULL DEFAULT '0',
`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=utf8; 

3.4 Создаем пользователя с паролем 
grant all on asterisk.cdr to asterisk@'localhost' identified by 'passwd123'; 

4. Выходим из MySQL

5. Редактируем файл /etc/asterisk/cdr.conf
nano /etc/asterisk/cdr.conf 
[general]
enable=yes 

По умолчанию сбор CDR уже включен! 

6. Редактируем файл /etc/asterisk/cdr_mysql.conf
nano /etc/asterisk/cdr_mysql.conf 
[global] 
hostname=localhost 
dbname=asterisk 
table=cdr 
password=passwd123 
user=asterisk 

7. Рестартуемся: 

service asterisk restart

8. Проверяем и смотрим, что вызовы собираются в базу данных

9. Теперь настраиваем, что бы Asterisk в CDR логи клал еще и IP адрес абонента.

9.1 В базу MySQL asterisk в таблицу cdr добавляем колонку remote_signal_ip
ALTER TABLE `cdr` ADD `remote_signal_ip` VARCHAR( 16 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ; 

9.2 В диал-план в план набора надо написать вот эту строчку в тот контекст, при совершении вызова через который котором нужно сохранять IP адрес:
Set(CDR(remote_signal_ip)=${SIPCHANINFO(recvip)}); 
Я добавил строчку только на вызовы исходящие с Asterisk во внешний мир. 
Пример рабочего макроса: 
[macro-outtrunksi] 
exten => s,1,Set(CDR(remote_signal_ip)=${SIPCHANINFO(recvip)}) 
exten => s,n,Dial(${OUTTRUNKSI}/${ARG1},120,rt) 
exten => s,n,Busy() 
exten => s,n,Congestion() 
exten => s,n,Hangup() 

9.3 Рестартуем Asterisk
service asterisk restart 

Комментариев нет:

Отправить комментарий