...

воскресенье, 17 ноября 2013 г.

[Из песочницы] Настройка CEL в Asterisk

В настроящее время Asterisk всё больше и больше набирает популярность, им пользуются не только организации, но и обычные люди и для её пользователей встает вопрос тарификации разговоров. Например в относительно простой системе, где точность нестоль существена можно обойтись с помощью стандартного модуля CDR (Call Detail Record), который имеет три события: «Начало», «Ответ», «Конец» звонка и вести учет времени как разницу между окончанием разговора и ответом на звонок, но как быть, если у нас звонок с ненулевой вероятность может быть переадресован или поставлен на удержание? Для этого этих целей в Asterisk существует модуль CEL (Channel Event Logging) и под катом я опишу его концепцию и пример конфигурации.



Итак, основным объектом в Asterisk является «Канал», на нем основывается связь между двумя коммуникационными портами. Есть смысл иметь систему событий, записывающую важные события, каждое событие присоединяется к каналу, например ANSWER или HANGUP. CEL генерирует события, которые могут быть собраны в одном месте и в последствие использованы для подсчета статистики.

Основные события в CEL:































































































СобытиеОписание
CHAN_STARTвремя создания канала
CHAN_ENDвремя завершения канала
ANSWERвремя ответа
HANGUPвремя когда абонент «положил трубку»
CONF_ENTERвремя включения канала в конференцию
CONF_EXITвремя удаления канала из конференции
CONF_STARTвремя входа первого абонента в конференцию
CONF_ENDвремя выхода последнего абонента из конференции
APP_STARTвремя запуска приложения
APP_ENDвремя завершения приложения
PARK_STARTвремя начала приостановки звонка
PARK_ENDвремя завершения приостановки звонка
BRIDGE_STARTвремя запуска моста
BRIDGE_ENDвремя завершения моста
BRIDGE_UPDATEподмена канала()
3WAY_STARTгенерируется когда начата конференция с 3 участниками, обычно используется при условной переадресации звонка
3WAY_END
BLINDTRANSFERданное событие возникает при безусловной переадресации звонка
ATTENDEDTRANSFERвозникает при условной переадресации звонка
FORWARDсобытие возникает когда канал перенаправлен
HOOKFLASHсобытие создаваемое при сигнале отбоя DAHDI интерфейса
USER_DEFINEDзависит от диалплана и имеет имя данное пользователем

После рассмотрения концепции CEL можно приступить к его конфигурации. Целью является запись всех событий в БД MySql, вся работа с базой данных будет осуществляться с помощью ODBC.

Перед конфигурации ODBC в Asterisk, необходимо установить необходимые пакеты в систему:

apt-get install unixODBC unixODBC-dev libmyodbc

(если Вы используете отличную от Debian систему, то следует воспользоваться другим пакетным менеджером)

Конфигурация для MySQL ODBC драйвера выполняется в файле /etc/odbcinst.ini

Пример конфигурации:

[MySQL]

Description = ODBC for MySQL

Driver = /usr/lib/odbc/libmyodbc.so

Setup = /usr/lib/odbc/libodbcmyS.so

FileUsage = 1


Если указанных каталогов по указанным путям нет, то они могут находиться в другом каталоге, их можно легко найти, достаточно выполнить следующие команды:

:~# updatedb

:~# locate libmyodbc.so

:~# locate libodbcmyS.so

Последние две команды покажут на экране местонахождение библиотек, пропигем соответствующий путь, например: /usr/lib/i386-linux-gnu/odbc/libmyodbc.so


Следующим шагом будет конфигурация файла /etc/odbc.ini, который используется для создания идентификатора, который Asterisk будет использовать для ссылки на эту конфигурацию, если в будущем решите сменить БД, то следует переконфигурировать это файл.

Вот пример конфигурации:

[asterisk-connector]

Description = MySQL connection to 'asterisk' database

Driver = MySQL

Database = asterisk

Server = localhost

UserName = user

Password = 123456

Port = 3306


Теперь сконфигурируем Asterisk для работы с БД через ODBC, для этого служит файл /etc/asterisk/res_odbc.conf .

Пример конфигурации данного файла:

[asterisk]

enabled => yes

dsn => asterisk-connector

username => asterisk

password => 123456

pooling => no

pre-connect => yes

Опция dsn указывает соединение, которое сконфигурировано в /etc/odbc.ini, а опция pre-connect говорит Asterisk’у поднимать соединение с базой когда загружается модуль res_odbc.so


Важное замечание, Asterisk должен быть собран с поддержкой ODBC!

Для проверки можно выполнить из CLI команду odbc show.


И теперь самое главное, приступаем к конфигурации CEL. Откроем конфигурационный файл Откроем конфиг /etc/asterisk/cel.conf и внесем в него следующие изменения:

[general]

enable=yes

apps=all

events=all

dateformat = %F %T


apps — данная опция указывает какие приложения следует отслеживать.

events — с помощью этой опции указываем какие события(из таблицы выше) следует заносить в БД.

Далее необходимо отредактировать файл /etc/asterisk/cel_custom.conf в нем раскомментируем секцию [mappings].


И последний файл, который следует отредактировать /etc/asterisk/cel_odbc.conf, внесем в него следующие изменения:

[first]

connection=asterisk

table=cel

loguniqueid=yes

Опция connection задает имя коннектора из файла res_odbc.conf, а опция table указывает имя таблицы БД для сохранения данных.


Завещающим шагом настройки является создание БД и таблицы.

:~# mysql –uroot –p

mysql> CREATE DATABASE asterisk;

mysql> use asterisk;

mysql> 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 `linkedid_index` (`linkedid`)

);


Перезапустим Asterisk.


Проверка работы осуществляется с помощью команд из CLI Asterisk:

cel show status

odbc show


На этом конфигурация закончена, осталось выполнить тестовый звонок и посмотреть на содержимое таблицы.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. FiveFilters.org recommends: March Against Mainstream Media (More info).


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

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