Настройка 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

На этом конфигурация закончена, осталось выполнить тестовый звонок и посмотреть на содержимое таблицы.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 10

    0
    Переписали часть книги, еще и выкинули зачем-то часть настроек…
      0
      Какую книгу Вы имеете ввиду? Я читал официальную документацию, а этих настроек вполне хватает для настройки.
        0
        Я имею виду Asterisk Definitive guide и файл res_config_mysql.conf
        Ну и плюс ко всему- зачем эта статья? Что в ней есть -чего нет в официальной документации?
          0
          Стояла задача испробовать это дело, решил поделиться результатом работы. В статье я постарался подробнее изложить суть, чтобы была возможность человеку далекому от Asterisk быстро сориентироваться в поставленной задаче, например с тем же самым нахождением libmyodbc.so и libodbcmyS.so получилось небольшое несоответствие.
            0
            Человеку далекому от астериск такая статья не понадобится, потому что в такие «дебри он не полезет», а нахождение файлов, которые лежат не по там где написано- это не сверхсложная операция требующая отдельного описания.

            Я больше не буду нудеть и брюзжать конечно, просто в будущем- если пишите то, что действительно сложно гед либо найти. или то- до чего сами додумались. а мануалов хватает и в официальной документации.
      0
      А как оно обходится с забриджованными на несколько раз каналами?
        0
        Такой вариант я к сожалению не пробывал.
          0
          Тогда вобще не очень понятно, чем оно лучше cdr.
            +1
            Ну все же CELL по подробнее. Его можно сравнить с AMI events, когда они ставятся в значение ALL, там крайне много полезного прилетает. толкьо от AMI нагрузки на систему меньше за счет того что не генерирует SQL UPDATES, а просто посылает в сокет сообщения и все.

            CELL будет полезна тем, у кого нет возможности использовать AMI LISTENER какой нить, или написать его самому.

            З.Ы. Не может не радовать очень быстрое развитие интерфейсов Asterisk. Благодаря им можно прилично разгрузить сервер от выполнения разных второстепенных процессов. Еще бы webrtc допилили как следует и вообще цены бы не было.
        0
        CEL — полезная штука. Помимо биллинга, с её помощью можно снимать всякие метрики, например сколько человек слушал IVR или сколько времени находился в очереди. Да и вообще строить маршрут звонка, и дебажить свою систему помогает.

        Only users with full accounts can post comments. Log in, please.