CEL

На повестке дня Channel Event Logging!!
План действий:
CEL с чем его едят
Таблица событий
Поля таблицы событий
CELGenUserEvent
cel.conf
cel with ODBC(mysql)
Литература

CEL, или Channel Event Logging, был создан для того чтобы помочь решить некоторые вопросы связанные с прохождением вызовов, в CDR пишутся времена: «Start», «Answer», «End». Billing time это разница между «Answer» и «End», общая длительность звонка это разница между «Start» и «End». Проблема в том что звонок может быть поставлен на удержание, переадрессован, вкл в конференцию итд. Люди изобретали костыли, но появился CEL…
Философия CEL генерировать события которые можно сгруппировать в удобном для биллинга форму.
CDR и AMI механизмы отслеживания событий, 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 — Когда 1 или все участники 3-сторонней конференции вышел.
BLINDTRANSFER — Время инициации слепого трансфера
ATTENDEDTRANSFER — Время инициации трансфера с поговорить)
TRANSFER — Общее событие трансфера
PICKUP — Канал был подобран пиром
FORWARD — Канал был перенаправлен куда-то еще
HOOKFLASH — Событие hookflash на DAHDI интерфейсе
LINKEDID_END — Событие когда удален последний канал с заданным linkedid
USER_DEFINED — Триггер с диалпана, имя задано пользователем

Поля Таблицы CEL
eventtype Имя события(см выше)
eventtime Время события
cid_name CID name
cid_num CID number
cid_ani CID ANI
cid_rdnis CID RDNIS
cid_dnid CID DNID
exten extension в диалплане
context context в диалплане
channame Имя канала с которым случилось данное событие
appname Имя текущего приложения
appdata Аргументы которые были переданные в приложение
amaflags AMA флаги связанные с событием, назначены пользователем
accountcode Назначенные пользователем.
peeraccount Заданные пользователем, пиру.
uniqueid Каждые канал получает unique ID, которые сопоставляется с ним.
linkedid id звонка, возможно распространяется на несколько событий
userfield назначенные пользователем
peer Для соединения или другого двухканального события, тут будет имя другого канала
userdeftype Имя события определенного пользователем
extra Дополнительная информация ассоциированная с этим событием.

Приложение CELGenUserEvent(eventname,extra) позволяет вставлять свои события в CEL
не используйте имена стандартных событий, астериск даже не будет ругаться, а молча запишет эти данные, других ограничений в именовании событий нет)
extra дополнительный текст который будет добавлен в событие.

Теперь заглянем в конфиг cel.conf

[general]
;вкл cel
enable=yes
;из каких приложений принимать события, можно задать all.
apps=dial,park
;какие события принимать, можно задать all. Если генерируем свои события, не забываем добавлять USER_DEFINED!!
events=APP_START,CHAN_START,CHAN_END,ANSWER,HANGUP,BRIDGE_START,BRIDGE_END,USER_DEFINED
;формат даты, по умолчанию секунды.микросекунды с момента начала эпохи,
; в данном примере дата будет в таком формате "2009-06-23 17:02:35"
dateformat = %F %T

;передавать события в AMI
[manager]
;вкл\выкл
enabled=no
; устанавливает "USER_DEFINED" в EventName хидер, по умолчанию нет
show_user_defined=yes

;cel с помощью radius
[radius]
;Установка времени в GMT
;usegmtime=yes
;Местоположение конфиг файла radiusclient-ng
; По умолчанию /etc/radiusclient-ng/radiusclient.conf
;radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf

/usr/local/etc/asterisk/cel_custom.conf — используется для задания формата CSV файла.

Поскольку CEL изначально заточен под БД, то будет использовать модуль cel_odbc. Как настроить ODBC
правим /usr/local/etc/asterisk/cel_odbc.conf:

[asterisk]
connection=asterisk
table=cel
loguniqueid=yes

Создаем таблицу:

CREATE TABLE IF NOT EXISTS `cel` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`eventtype` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`eventtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`userdeftype` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`cid_name` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
`cid_num` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
`cid_ani` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
`cid_rdnis` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
`cid_dnid` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
`exten` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
`context` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
`channame` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
`appname` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
`appdata` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
`amaflags` int(11) NOT NULL,
`accountcode` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`peeraccount` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`uniqueid` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
`linkedid` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
`userfield` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`peer` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

перезагружаем модуль cel:

module reload cel_odbc.so

Литература:
https://wiki.asterisk.org/wiki/pages/viewpage.action?pageId=5242932

Asterisk Channel Event Logging (CEL)


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