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

naomi

Moderator
Команда форума
Как и любая современная АТС, Asterisk имеет свою встроенную систему хранения истории звонков - CDR (Call Detail Record). Она используется для снятия статистики, ведения отчетности, прослушивания вызовов или подсчета биллинговых показателей.

В Asterisk для этого создана база данных asteriskcdrdb, в которой существует таблица cdr. Давайте рассмотрим как пользоваться данной таблицей и ее структуру.

[root@asterisk]# mysql // подключаемся к 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:

СтолбецПример значенияОписание
calldate2016-03-18 12:00:36Дата и время звонка
clid"Oleg Ivanov" <84991111111>В данное поле попадает полное CallerID (CLID, CID), которое состоит из имени и номера звонящего. Это доступно только для считывания.
src84991111111Номер звонящего в конструкции CallerID (CNUM). Это доступно только для считывания.
dst113Номер назначения для звонка. Это доступно только для считывания.
dcontextCustomContext1Контекст для обработки. Это доступно только для считывания.
channelSIP/0002B2356854-a34bh3efКанал, через который поступил звонок
dstchannelSIP/0004F6675969-97836bb0Канал, через который ушел исходящий звонок
lastappDial, Busy, CongestionПриложение, которое последним отработало этот вызов перед попаданием в таблицу cdr
lastdataSIP/0004F6675969,30,tTАргумент, который был передан приложению, которое отработало вызов последним (lastapp)
duration75Количество секунд от начала (отметка start) до окончания вызова (отметка end)
billsec67Количество секунд от ответа (отметка answer) до окончания вызова (отметка end). Данное значение всегда меньше значения duration, и отражает длительность самого разговора, что важно для подсчета стоимости.
dispositionANSWERED, BUSY, NO ANSWER, FAILEDРезультат звонка
amaflagsOMIT, BILLING, DOCUMENTATION, UnknownМетка Automatic Message Accounting (AMA) – автоматический учет стоимости вызова.
accountcode23232Идентификатор аккаунта. Данное значение пустое по умолчанию, и определяется параметрами конкретного пользователя.
uniqueid1458291693.157169Уникальный идентификатор звонка
userfield-Пользовательское поле. Здесь можно передавать что угодно, добавляя данные в этот столбец при работе с вызовом внутри контекста обработки.
did4996491913DID (Direct Inward Dialing). На основании DID вызова на Asterisk осуществляется его маршрутизация (это значение приходит от провайдера).
recordingfileexternal-113-84991111111-20160318-115933-1458291573.157155.wavИмя файла, содержащего запись разговора. В данном имени можно проследить путь к файлу в файловой структуре сервера.
cnum84991111111Номер звонящего в структуре CallerID.
cnamOleg IvanovИмя звонящего в структуре CallerID.

Теперь, когда вы понимаете принцип формирования запросов к базе данных и ее структуру, вы можете без труда формировать собственные отчеты.
 
Верх