Channel event logging (события на канале) – система, созданная для детального логирования телефонных событий. Система CEL позволяет пошагово отслеживать сложные сценарии вызовов, последовательно записывая их в таблицу данных. Сегодня расскажем о типах событий CEL и о содержимом таблицы ‘cel’
Как и обычно, подключаемся к базе данных asteriskcdrdb:
[root@asterisk]# mysql // подключаемся к MySQL mysql> use asteriskcdrdb; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed
Смотрим содержимое таблица cel, видим поля и типы данных:
mysql> show columns from cel; +-------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | eventtype | varchar(30) | NO | | NULL | | | eventtime | datetime | NO | | NULL | | | cid_name | varchar(80) | NO | | NULL | | | cid_num | varchar(80) | NO | | NULL | | | cid_ani | varchar(80) | NO | | NULL | | | cid_rdnis | varchar(80) | NO | | NULL | | | cid_dnid | varchar(80) | NO | | NULL | | | exten | varchar(80) | NO | | NULL | | | context | varchar(80) | NO | MUL | NULL | | | channame | varchar(80) | NO | | NULL | | | appname | varchar(80) | NO | | NULL | | | appdata | varchar(80) | NO | | NULL | | | amaflags | int(11) | NO | | NULL | | | accountcode | varchar(20) | NO | | NULL | | | uniqueid | varchar(32) | NO | MUL | NULL | | | linkedid | varchar(32) | NO | MUL | NULL | | | peer | varchar(80) | NO | | NULL | | | userdeftype | varchar(255) | NO | | NULL | | | extra | varchar(512) | NO | | NULL | | +-------------+--------------+------+-----+---------+----------------+ 20 rows in set (0.00 sec)
К описанию таблицы CEL мы вернемся чуть позже, а сейчас давайте разберем возможные события в рамках системы Channel Event Logging :
Событие | Описание |
---|---|
CHAN_START | Канал связи был создан |
CHAN_END | Канал связи был разорван |
LINKEDID_END | Канал связи с указанным ID был разорван |
ANSWER | На созданном канале связи ответили на звонок. При звонке в город, данное событие генерируется когда удаленный (вызываемый абонент) поднимет трубку |
HANGUP | Была повешена трубка. Как правило, это событие сразу же сопровождается событием CHAN_END. Разница в том, что HANGUP происходит когда трубка положена, а CHAN_END, когда Asterisk освободил все ресурсы, занимаемые этим каналом |
APP_START | Определенное приложение было запущено для этого канала. Например, это может быть Dial, Busy или Congestion |
APP_END | Указанное приложение в событие APP_START завершило свое выполнение |
PARK_START | Была произведена «Парковка» вызова. Функция парковки, представляет собой определенный номер, в который помещается вызов, работу с которым, могут продолжить другие сотрудники. |
PARK_END | Вызов был снят с «Парковки» |
BRIDGE_START | Между двумя каналами образовалось соединение (мост). Данное событие сопровождает такие приложения, как Dial() или Queue() |
BRIDGE_END | Мост между каналами был разрушен |
BRIDGE_UPDATE | В соединении между каналами произошло обновление. Это события появляется тогда, например, если изменится имя или прочая канальная информация |
BLINDTRANSFER | Был выполнен «слепой» (без предварительной консультации) трансфер |
ATTENDEDTRANSFER | На канале был выполнен трансфер с предварительной консультацией |
USER_DEFINED | Кастомное событие, которое определяется в приложении CELGenUserEvent() |
В таблице выше мы перечислили основные события в рамках системы CEL. Теперь перейдем к описанию таблицы ‘cel’ в рамках базы asteriskcdrdb:
Столбец | Пример значения | Описание |
---|---|---|
eventtype | CHAN_START | Имя произошедшего события (все события описаны в таблице выше) |
eventtime | 2016-04-01 14:53:54 | Время, в которое произошло указанное выше событие |
cidname | Oleg Ivanov | Имя, передаваемое в рамках CallerID (CID), закрепленное за данным каналом |
cidnum | 84991111111 | Номер, передаваемый в рамках CallerID (CID), закрепленный за данным каналом в рамках соответствующего события |
cidani | 84991111111 | Automatic Number Identification (ANI), или другими словами – автоматическое определение номера на данном канале в рамках соответствующего события |
cidrdnis | 84991111234 | Номер перенаправления на данном канале в рамках соответствующего события |
ciddnid | 84993456458 | Набранный номер на канале в рамках соответствующего события |
exten | 7057 | Добавочный номер, который был набран, в рамках плана нумерации |
context | Local | Контекст для добавочного номера, который был набран |
channame | SIP/0007B3060EB4-00000010 | Имя установленного канала |
appname | Dial | Название приложения, которое было выполнено |
appdata | SIP/0007B3060EB4 | Параметры, которые были переданы в приложении согласно плана нумерации |
amaflags | DOCUMENTATION | Метка Automatic Message Accounting (AMA) – автоматический учет стоимости вызова. |
accountcode | 6473 | Идентификатор аккаунта. Данное значение пустое по умолчанию, и определяется параметрами конкретного пользователя. |
uniqueid | 6547653456.18332 | Уникальный идентификатор для канала |
userfield | Chto ugodno | Пользовательское поле |
linkedid | 6547653456.18332 | Данный идентификатор, позволяет связать воедино звонок по частям. Например, если одна часть звонка была входящей из города, следом был трансфер, потом еще один – у все этих вызовов будет разный uniqueid, но одинаковый linkedid |
peer | SIP/0007B306054F-00000020 | Название канала, к которому, который соединен (bridge) с каналом с идентификатором channame |
Теперь, давайте рассмотрим как выглядит запись в таблице ‘cel’. Для этого выполним нижеследующий запрос к базе данных asteriskcdrdb:
mysql> SELECT * FROM `cel` WHERE `uniqueid` = '1459503113.15'; +------+------------+---------------------+-------------+-------------+-------------+-----------+----------+-------------+------------------+--------------------------------------------+------------+----------------------------------------------------------------------------------+----------+-------------+---------------+---------------+------+-------------+----------------------------------------------------------------------------+ | id | eventtype | eventtime | cid_name | cid_num | cid_ani | cid_rdnis | cid_dnid | exten | context | channame | appname | appdata | amaflags | accountcode | uniqueid | linkedid | peer | userdeftype | extra | +------+------------+---------------------+-------------+-------------+-------------+-----------+----------+-------------+------------------+--------------------------------------------+------------+----------------------------------------------------------------------------------+----------+-------------+---------------+---------------+------+-------------+----------------------------------------------------------------------------+ | 2339 | CHAN_START | 2016-04-01 12:31:53 | | | | | | 89641111111 | from-internal | Local/89641111111@from-internal-00000004;2 | | | 3 | | 1459503113.15 | 1459503090.11 | | | | | 2346 | APP_START | 2016-04-01 12:31:53 | 79252222222 | 79252222222 | 79252222222 | | | recordcheck | sub-record-check | Local/89641111111@from-internal-00000004;2 | MixMonitor | 2016/04/01/out-89641111111-79252222222-20160401-123153-1459503113.15.wav,ai(LOCA | 3 | | 1459503113.15 | 1459503090.11 | | | | | 2347 | APP_END | 2016-04-01 12:31:53 | 79252222222 | 79252222222 | 79252222222 | | | recordcheck | sub-record-check | Local/89641111111@from-internal-00000004;2 | MixMonitor | 2016/04/01/out-89641111111-79252222222-20160401-123153-1459503113.15.wav,ai(LOCA | 3 | | 1459503113.15 | 1459503090.11 | | | | | 2364 | HANGUP | 2016-04-01 12:32:10 | | 79252222222 | 79252222222 | | | h | from-internal | Local/89641111111@from-internal-00000004;2 | | | 3 | | 1459503113.15 | 1459503090.11 | | | {"dialstatus":"CANCEL","hangupcause":16,"hangupsource":"dialplan/builtin"} | | 2365 | CHAN_END | 2016-04-01 12:32:10 | | 79252222222 | 79252222222 | | | h | from-internal | Local/89641111111@from-internal-00000004;2 | | | 3 | | 1459503113.15 | 1459503090.11 | | | | +------+------------+---------------------+-------------+-------------+-------------+-----------+----------+-------------+------------------+--------------------------------------------+------------+----------------------------------------------------------------------------------+----------+-------------+---------------+---------------+------+-------------+----------------------------------------------------------------------------+ 5 rows in set (0.00 sec)
В указанном выше запросе мы извлекли все содержимое таблицы ‘cel’, где поле uniqueid = 1459503113.15. Полученные данные можно обрабатывать и использовать для глубокой аналитики