- Статьи из других ресурсов
- Настройка CEL в Asterisk
В настроящее время Asterisk всё больше и больше набирает популярность, им пользуются не только организации, но и обычные люди и для её пользователей встает вопрос тарификации разговоров. Например в относительно простой системе, где точность нестоль существена можно обойтись с помощью стандартного модуля CDR (Call Detail Record), который имеет три события: «Начало», «Ответ», «Конец» звонка и вести учет времени как разницу между окончанием разговора и ответом на звонок, но как быть, если у нас звонок с ненулевой вероятность может быть переадресован или поставлен на удержание? Для этого этих целей в Asterisk существует модуль CEL (Channel Event Logging) и под катом я опишу его концепцию и пример конфигурации.
Итак, основным объектом в Asterisk является «Канал», на нем основывается связь между двумя коммуникационными портами. Есть смысл иметь систему событий, записывающую важные события, каждое событие присоединяется к каналу, например ANSWER или HANGUP. CEL генерирует события, которые могут быть собраны в одном месте и в последствие использованы для подсчета статистики.
Основные события в CEL:
После рассмотрения концепции CEL можно приступить к его конфигурации. Целью является запись всех событий в БД MySql, вся работа с базой данных будет осуществляться с помощью ODBC.
Перед конфигурации ODBC в Asterisk, необходимо установить необходимые пакеты в систему:
(если Вы используете отличную от Debian систему, то следует воспользоваться другим пакетным менеджером)
Конфигурация для MySQL ODBC драйвера выполняется в файле /etc/odbcinst.ini
Пример конфигурации:
Если указанных каталогов по указанным путям нет, то они могут находиться в другом каталоге, их можно легко найти, достаточно выполнить следующие команды:
Последние две команды покажут на экране местонахождение библиотек, пропигем соответствующий путь, например: /usr/lib/i386-linux-gnu/odbc/libmyodbc.so
Следующим шагом будет конфигурация файла /etc/odbc.ini, который используется для создания идентификатора, который Asterisk будет использовать для ссылки на эту конфигурацию, если в будущем решите сменить БД, то следует переконфигурировать это файл.
Вот пример конфигурации:
Теперь сконфигурируем Asterisk для работы с БД через ODBC, для этого служит файл /etc/asterisk/res_odbc.conf .
Пример конфигурации данного файла:
Опция dsn указывает соединение, которое сконфигурировано в /etc/odbc.ini, а опция pre-connect говорит Asterisk’у поднимать соединение с базой когда загружается модуль res_odbc.so
Важное замечание, Asterisk должен быть собран с поддержкой ODBC!
Для проверки можно выполнить из CLI команду
И теперь самое главное, приступаем к конфигурации CEL. Откроем конфигурационный файл Откроем конфиг /etc/asterisk/cel.conf и внесем в него следующие изменения:
apps — данная опция указывает какие приложения следует отслеживать.
events — с помощью этой опции указываем какие события(из таблицы выше) следует заносить в БД.
Далее необходимо отредактировать файл /etc/asterisk/cel_custom.conf в нем раскомментируем секцию [mappings].
И последний файл, который следует отредактировать /etc/asterisk/cel_odbc.conf, внесем в него следующие изменения:
Опция connection задает имя коннектора из файла res_odbc.conf, а опция table указывает имя таблицы БД для сохранения данных.
Завещающим шагом настройки является создание БД и таблицы.
Перезапустим Asterisk.
Проверка работы осуществляется с помощью команд из CLI Asterisk:
На этом конфигурация закончена, осталось выполнить тестовый звонок и посмотреть на содержимое таблицы.
Итак, основным объектом в 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 MySQLDriver = /usr/lib/odbc/libmyodbc.soSetup = /usr/lib/odbc/libodbcmyS.soFileUsage = 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' databaseDriver = MySQLDatabase = asteriskServer = localhostUserName = userPassword = 123456Port = 3306Теперь сконфигурируем Asterisk для работы с БД через ODBC, для этого служит файл /etc/asterisk/res_odbc.conf .
Пример конфигурации данного файла:
[asterisk]enabled => yesdsn => asterisk-connectorusername => asteriskpassword => 123456pooling => nopre-connect => yesОпция dsn указывает соединение, которое сконфигурировано в /etc/odbc.ini, а опция pre-connect говорит Asterisk’у поднимать соединение с базой когда загружается модуль res_odbc.so
Важное замечание, Asterisk должен быть собран с поддержкой ODBC!
Для проверки можно выполнить из CLI команду
odbc show.И теперь самое главное, приступаем к конфигурации CEL. Откроем конфигурационный файл Откроем конфиг /etc/asterisk/cel.conf и внесем в него следующие изменения:
[general]enable=yesapps=allevents=alldateformat = %F %Tapps — данная опция указывает какие приложения следует отслеживать.
events — с помощью этой опции указываем какие события(из таблицы выше) следует заносить в БД.
Далее необходимо отредактировать файл /etc/asterisk/cel_custom.conf в нем раскомментируем секцию [mappings].
И последний файл, который следует отредактировать /etc/asterisk/cel_odbc.conf, внесем в него следующие изменения:
[first]connection=asterisk table=celloguniqueid=yesОпция connection задает имя коннектора из файла res_odbc.conf, а опция table указывает имя таблицы БД для сохранения данных.
Завещающим шагом настройки является создание БД и таблицы.
:~# mysql –uroot –pmysql> 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 statusodbc showНа этом конфигурация закончена, осталось выполнить тестовый звонок и посмотреть на содержимое таблицы.