ќбсудим вашу задачу в Telegram - чате?

ћерион Ќетворкс

 ак и люба€ современна€ ј“—, 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:

—толбец ѕример значени€ ќписание
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. ѕоговорим об этом в следующей статье


ѕолезна ли ¬ам эта стать€?

–аз в неделю мы отправл€ем дайджест с самыми интересными стать€ми.

P.S. ≈сли укажите свою дату рождени€, то мы об€зательно ¬ас поздравим и подарим небольшой подарок :)

Ќажима€ на кнопку "ѕодписатьс€", вы даете согласие на обработку своих персональных данных