Предварительная настройка ASTERISK 13, которая пригодиться всегда.
1 Делаем резервные копии базовых конфигурационных файлов
# cp /etc/asterisk/sip.conf /etc/asterisk/sip.conf.sample
# cp /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.sample
2 Настройки RTP в Asterisk:
В файле /etc/asterisk/rtp.conf в секции [general]
разрешаем хождение RTP по портам от 8000 до 20000
# nano /etc/asterisk/rtp.conf
[general]
rtpstart=8000
rtpend=20000
Рестартуем asterisk
# systemctl restart asterisk.service
3 Отключение сбора CDR в CSV файл.
CSV файл обычно располагается здесь: /var/log/asterisk/cdr-csv/Master.csv
Что бы посмотреть, что данный CDR файл используется для записи информации о вызове, выполняем команду:
# tail -f /var/log/asterisk/cdr-csv/Master.csv
и совершаем вызов через asterisk. В консоли мы должны увидеть новую CDR запись.
Для отключения записи логов CDR в файл Master.csv
- закомментировать секцию [csv] в файле /etc/asterisk/cdr.conf
# nano /etc/asterisk/cdr.conf
Должно получиться:
;[csv]
;usegmtime=yes ; log date/time in GMT. Default is "no"
;loguniqueid=yes ; log uniqueid. Default is "no"
;loguserfield=yes ; log user field. Default is "no"
;accountlogs=yes ; create separate log file for each account code. Default is "yes"
- Убрать из загрузки модуль модуль cdr_csv.so в /etc/asterisk/modules.conf:
# nano /etc/asterisk/modules.conf
Добавляем к конец строчку:
noload =>cdr_csv.so
- Рестартуем сервис Asterisk
# systemctl restart asterisk.service
4 Настаиваем сбор CDR файлов сервера asterisk в базу данных MySQL
Коннектимся к MySQL
# mysql -uroot -p
Создаем базу данных
> CREATE DATABASE asterisk;
Подключаемся к базе данных
> USE asterisk;
Создаем таблицу
> CREATE TABLE IF NOT EXISTS `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 '',
`uniqueid` varchar(32) NOT NULL DEFAULT '',
`remote_signal_ip` varchar(17) CHARACTER SET utf8 NOT NULL,
`userfield` varchar(255) NOT NULL DEFAULT '',
`did` varchar(50) NOT NULL DEFAULT '',
`recordingfile` varchar(255) NOT NULL DEFAULT '',
`cnum` varchar(40) NOT NULL DEFAULT '',
`cnam` varchar(40) NOT NULL DEFAULT '',
`outbound_cnum` varchar(40) NOT NULL DEFAULT '',
`outbound_cnam` varchar(40) NOT NULL DEFAULT '',
`dst_cnam` varchar(40) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Создаем индексы для этой таблицы:
> ALTER TABLE `cdr`
ADD KEY `calldate` (`calldate`),
ADD KEY `dst` (`dst`),
ADD KEY `accountcode` (`accountcode`),
ADD KEY `uniqueid` (`uniqueid`),
ADD KEY `did` (`did`);
Создаем пользователя asterisk с паролем passwd123
> grant all on asterisk.cdr to asterisk@'localhost' identified by 'passwd123';
Выходим из MySQL.
Сбор CDR в базу MySQL нужно выполнять через сервис ODBC.
Выполняем установку сервиса ODBC, если того еще не произошло раньше:
# yum install unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel mysql-connector-odbc
Редактируем файл драйверов сервиса ODBC /etc/odbcinst.ini
# nano /etc/odbcinst.ini
В файле не закомментированным должна быть только секция [MySQL]
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib64/libmyodbc5.so
Setup = /usr/lib64/libodbcmyS.so
FileUsage = 1
Проверим видит ли ODBC MySQL драйвер
# odbcinst -q -d
[MySQL]
Создаем файл учетных данных ODBC /etc/odbc.ini
# nano /etc/odbc.ini
Выписываем туда следующее содержимое:
[MySQL-asteriskcdrdb]
Description=MySQL connection to 'asterisk' database
Driver=MySQL
Server=localhost
Database=asterisk
Port=3306
Socket=/var/lib/mysql/mysql.sock
UserName=asterisk
Password=passwd123
Здесь:
MySQL-asteriskcdrdb – наименование соединения с сервером MySQL
UserName – имя пользователя asterisk
Password – пароль пользователя asterisk
Правим конфигурационные файлы Asdterisk
Проверяем файл /etc/asterisk/cdr.conf
# nano /etc/asterisk/cdr.conf
В файле должен быть раскомментирован в секции [general] главный параметр enable
[general]
enable=yes
Вносим изменения в файл настройки сервиса ODBC
# nano /etc/asterisk/res_odbc.conf
Вписываем в конец файла:
[asteriskcdrdb]
enabled=>yes
dsn=>MySQL-asteriskcdrdb
pooling=>no
limit=>5
pre-connect=>yes
username=>asterisk
password=>passwd123
Связываем настройку ODBC Asterisk с задачей сбора CDR.
Редактируем файл /etc/asterisk/cdr_odbc.conf
# nano /etc/asterisk/cdr_odbc.conf
Вписываем в конец файла:
[asteriskcdrdb]
connection=asteriskcdrdb
loguniqueid=yes
table=cdr
alias start => calldate
Для того, что бы в базу данных MySQL в поле remote_signal_ip складывались ip адреса вызывающих абонентов, в диал-план в файле /etc/asterisk/extensions.conf в план набора надо написать вот эту строчку в тот контекст, при совершении вызова через который котором нужно сохранять IP адрес:
Set(CDR(remote_signal_ip)=${CHANNEL(recvip)});
Рестартуем Asterisk:
# systemctl restart asterisk.service
Теперь база данных должна пополняться вызовами, проходящими через asterisk.
Проверка работы ODBC:
asterisk2*CLI> odbc show
ODBC DSN Settings
-----------------
Name: asteriskcdrdb
DSN: MySQL-asteriskcdrdb
Last connection attempt: 1970-01-01 03:00:00
Pooled: No
Connected: Yes
5. Настройка сбора логов CEL(Channel Event Logging) в базу данных MySQL
Коннектимся к MySQL
# mysql -uroot -p
Подключаемся к базе данных asterisk
> USE asterisk;
Создаем таблицу cel
> CREATE TABLE IF NOT EXISTS `cel` (
`id` int(11) NOT NULL auto_increment,
`eventtype` varchar(30) NOT NULL,
`eventtime` datetime NOT NULL,
`cid_name` varchar(80) NOT NULL,
`cid_num` varchar(80) NOT NULL,
`cid_ani` varchar(80) NOT NULL,
`cid_rdnis` varchar(80) NOT NULL,
`cid_dnid` varchar(80) NOT NULL,
`exten` varchar(80) NOT NULL,
`context` varchar(80) NOT NULL,
`channame` varchar(80) NOT NULL,
`src` varchar(80) NOT NULL,
`dst` varchar(80) NOT NULL,
`channel` varchar(80) NOT NULL,
`dstchannel` varchar(80) NOT NULL,
`appname` varchar(80) NOT NULL,
`appdata` varchar(80) NOT NULL,
`amaflags` int(11) NOT NULL,
`accountcode` varchar(20) NOT NULL,
`uniqueid` varchar(32) NOT NULL,
`linkedid` varchar(32) NOT NULL,
`peer` varchar(80) NOT NULL,
`userdeftype` varchar(255) NOT NULL,
`eventextra` varchar(255) NOT NULL,
`userfield` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `uniqueid_index` (`uniqueid`),
KEY `eventtime_index` (`eventtime`),
KEY `linkedid_index` (`linkedid`)
);
Даем пользователю asterisk возможность работы с таблицей cel
> grant all on asterisk.cel to asterisk@'localhost' identified by 'passwd123';
Выходим из MySQL.
Включаем генерацию CEL в asterisk:
# nano /etc/asterisk/cel.conf
В разделе [general] должно быть прописано
[general]
enable=yes
apps=all
events=ALL
dateformat = %F %T
Затем указываем asterisk, куда заносить сгенерированные события CEL
# nano /etc/asterisk/cel_odbc.conf
В конец файла дописываем:
[cel]
connection=asteriskcdrdb
loguniqueid=yes
table=cel
Здесь cel – название таблицы в MySQL, asteriskcdrdb – название соединения ODBC из файла /etc/asterisk/res_odbc.conf
Перезагружаем сервис asterisk:
# systemctl restart asterisk.service
Проверка включения CEL в asterisk
# asterisk -rx "cel show status"
CEL Logging: Enabled
CEL Tracking Event: ALL
CEL Tracking Event: CHAN_START
CEL Tracking Event: CHAN_END
CEL Tracking Event: HANGUP
CEL Tracking Event: ANSWER
CEL Tracking Event: APP_START
CEL Tracking Event: APP_END
CEL Tracking Event: BRIDGE_ENTER
CEL Tracking Event: BRIDGE_EXIT
CEL Tracking Event: PARK_START
CEL Tracking Event: PARK_END
CEL Tracking Event: BLINDTRANSFER
CEL Tracking Event: ATTENDEDTRANSFER
CEL Tracking Event: USER_DEFINED
CEL Tracking Event: LINKEDID_END
CEL Tracking Event: PICKUP
CEL Tracking Event: FORWARD
CEL Tracking Event: LOCAL_OPTIMIZE
CEL Tracking Application: all
CEL Event Subscriber: ODBC CEL backend
CEL Event Subscriber: CEL Custom CSV Logging
6 Настройка обработчика джиттера в Asterisk.
Для того что бы включить компенсацию джиттера на сервере Asterisk в файл sip.conf в секцию [general] вписываем строки:
jbenable = yes
jbforce = yes
jbmaxsize = 400
jbresyncthreshold = 1000
jbimpl = fixed
Затем из консоли Asterisk выполняем
> sip reload
[MySQL-asteriskcdrdb]
ОтветитьУдалитьDescription=MySQL connection to 'asterisk' database
Driver=MySQL
Server=localhost
Database=asterisk
Port=3306
Socket=/var/lib/mysql/mysql.sock
UserName=asterisk
Password=passwd123
ошибка: должно быть не username. а user. иначе при проверке echo "select 1" | isql -v MySQL-asteriskcdrdb будет пытаться подключиться по рутом, а не под пользователем как в файле.