Что такое CEL на Asterisk?

Что такое CEL на Asterisk?

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. Полученные данные можно обрабатывать и использовать для глубокой аналитики.