База asteriskcdrdb и как с ней работать?

База asteriskcdrdb и как с ней работать?

Как и любая современная АТС, Asterisk имеет свою встроенную систему хранения истории звонков – CDR (Call Detail Record). Она используется для снятия статистики, ведения отчетности, прослушивания вызовов или подсчета биллинговых показателей.
В Asterisk для этого создана база данных asteriskcdrdb, в которой существует таблица cdr. Давайте рассмотрим как пользоваться данной таблицей и ее структуру.
[root@asterisk]# mysql
После успешного подключения, необходимо выбрать для работы базу данных asteriskcdrdb:
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
Давайте убедимся, что у нас есть таблица cdr. Выполним это, как указано ниже:
mysql> show tables;
+-------------------------+
| Tables_in_asteriskcdrdb |
+-------------------------+
| cdr |
| cel |
+-------------------------+
2 rows in set (0.00 sec)
На данном этапе мы убедились, что у нас есть база данных asteriskcdrdb, в которой находится таблица cdr. Давайте попробуем посмотреть входящие звонки из города за сегодня (дата написания статьи 18 марта 2016 года), в период с 12:00 до 12:10, т.е за 10 минут:
SELECT `dst` , `src` , `duration` , `calldate` , `recordingfile`
FROM `cdr` WHERE `calldate` >= '2016-03-18 12:00:00' AND `calldate` <= '2016-03-18 12:10:00' AND LENGTH( `src` ) >3;
+-----+-------------+----------+---------------------+----------------------------------------------------------------+
| dst | src | duration | calldate | recordingfile |
+-----+-------------+----------+---------------------+----------------------------------------------------------------+
| 113 | 84991111111 | 140 | 2016-03-18 12:00:36 | external-113-84991111111-20160318-115933-1458291573.157155.wav |
| 104 | 89162222222 | 81 | 2016-03-18 12:01:33 | external-104-89162222222-20160318-120133-1458291693.157169.wav |
+-----+-------------+----------+---------------------+----------------------------------------------------------------+
2 rows in set (0.00 sec)
В вышеуказанном примере, в SQL запросе указано LENGTH( `src` ) >3. Столбец ‘src’ – показывает номер звонящего (source – источник). Это сделано для того, чтобы исключить внутренние звонки, так как у нас используется трехзначная нумерация. Тем самым, мы получаем в результате данные, с которыми затем можем работать. Например, отправить на почту в виде отчета. Ниже рассмотрена структура таблицы cdr в базе данных asteriskcdrdb:
Столбец Пример значения Описание
calldate 2016-03-18 12:00:36 Дата и время звонка
clid “Oleg Ivanov” <84991111111> В данное поле попадает полное CallerID (CLID, CID), которое состоит из имени и номера звонящего. Это доступно только для считывания.
src 84991111111 Номер звонящего в конструкции CallerID (CNUM). Это доступно только для считывания.
dst 113 Номер назначения для звонка. Это доступно только для считывания.
dcontext CustomContext1 Контекст для обработки. Это доступно только для считывания.
channel SIP/0002B2356854-a34bh3ef Канал, через который поступил звонок
dstchannel SIP/0004F6675969-97836bb0 Канал, через который ушел исходящий звонок
lastapp Dial, Busy, Congestion Приложение, которое последним отработало этот вызов перед попаданием в таблицу cdr
lastdata SIP/0004F6675969,30,tT Аргумент, который был передан приложению, которое отработало вызов последним (lastapp)
duration 75 Количество секунд от начала (отметка start) до окончания вызова (отметка end)
billsec 67 Количество секунд от ответа (отметка answer) до окончания вызова (отметка end). Данное значение всегда меньше значения duration, и отражает длительность самого разговора, что важно для подсчета стоимости.
disposition ANSWERED, BUSY, NO ANSWER, FAILED Результат звонка
amaflags OMIT, BILLING, DOCUMENTATION, Unknown Метка Automatic Message Accounting (AMA) – автоматический учет стоимости вызова.
accountcode 23232 Идентификатор аккаунта. Данное значение пустое по умолчанию, и определяется параметрами конкретного пользователя.
uniqueid 1458291693.157169 Уникальный идентификатор звонка
userfield Пользовательское поле. Здесь можно передавать что угодно, добавляя данные в этот столбец при работе с вызовом внутри контекста обработки.
did 4996491913 DID (Direct Inward Dialing). На основании DID вызова на Asterisk осуществляется его маршрутизация (это значение приходит от провайдера).
recordingfile external-113-84991111111-20160318-115933-1458291573.157155.wav Имя файла, содержащего запись разговора. В данном имени можно проследить путь к файлу в файловой структуре сервера.
cnum 84991111111 Номер звонящего в структуре CallerID.
cnam Oleg Ivanov Имя звонящего в структуре CallerID.
Теперь, когда вы понимаете принцип формирования запросов к базе данных и ее структуру, вы можете без труда формировать собственные отчеты. Например, ежедневный отчет о количестве входящих звонков за текущий день на почту. Это реализуется средствами php скрипта и добавления расписания через cron. Поговорим об этом в следующей статье