Asterisk CDR - Call Detail Record
Что такое CDR?
CDR - это запись, характеризующая телефонный разговор, и создаваемая по окончании разговора. CDR содержит такую информацию о звонке, как номера абонентов (кто и кому звонил), дата и время начала и окончания звонка, результат звонка (ответили/занято/...) и так далее. Сохраняется информация обо всех звонках, поэтому CDR используют для ведения статистики звонков (или для систем биллинга).
По умолчанию asterisk записывает CDR в файлы CSV формата, находящиеся в каталоге /var/log/asterisk/cdr-csv/ . Вы можете отключить ведение таких файлов, или настроить набор информации (полей), которую необходимо сохранять. Можно также (для упрощения последующей обработки) сохранять CDR в базу данных, причем база может находится как на компьютере, где установлен asterisk, так и на отдельном сервере.
Конфигурация CDR: файл cdr.conf
Файл cdr.conf находится в папке с конфигурационными файлами asterisk - /etc/asterisk. Среди параметров этого файла можно отметить следующие:
enable |
разрешает (yes) или запрещает (no) логирование CDR (полностью, все модули) |
unanswered |
включает (yes) или отключает (no) сохранение в логах информации о неотвеченных вызовах |
congestion |
включает (yes) или отключает (no) запись в CDR информации о звонках, сорвавшихся по причине перегрузки линии (превышение допустимого количества одновременных звонков на один номер, и т.д.) |
safeshutdown |
Если включено (yes), то при завершении работы asterisk самого завершения работы не произойдет, пока все CDR не будут записаны.. В случае, если отключено (no), при экстренном завершении работы (например, перезагрузке сервиса asterisk) возможна потеря данных CDR. |
Теперь что касается других секций в файле cdr.conf (не считая секции general). В первую очередь речь идет о уже имеющихся там секциях [csv] и [radius]. Казалось бы, логично предположить, что это всего лишь примеры, а остальные возможные секции с названиями CDR backends могут быть вписаны самостоятельно (в файле cdr.conf идет речь о возможных cdr backends - csv, radius, tds, mysql и так далее).
На самом деле это не так! В файле cdr.conf могут быть только 3 секции: general, csv, radius. Остальных секций там нет и быть не должно (параметры каждого cdr backend описываются в своих конфигурационных файлах - например, конфигурация mysql backend задается в файле cdr_mysql.conf). Обратите на это внимание!
Поля CDR
calldate |
дата и время начала звонка (фактически, поле используется только для базы данных mysql, поскольку в настройках cdr_mysql.conf указан алиас: alias start => calldate) |
clid |
caller id звонящего |
src |
исходящий номер |
dst |
набранный номер |
dcontext |
контекст, в котором произошел набор |
channel |
исходящий канал (используемый канал от вызывающего абонента) |
dstchannel |
канал назначения (используемый канал к вызываемому абоненту) |
lastapp |
последнее вызванное приложение asterisk (например, Dial) |
lastdata |
параметры, переданные последнему вызванному приложению |
duration |
продолжительность всего разговора, секунд (с момента набора номера, включая время ожидания ответа абонента) |
billsec |
время непосредственного разговора (время вызова в секундах, от ответа абонента до окончания звонка) |
disposition |
Значение результата звонка: ANSWERED, NO ANSWER, BUSY, FAILED (на некоторых CDR в выходных драйверах, например ODBC, они могут быть числовыми: 1 – сбой, 2 – занято, 4 – нет ответа, 8 – отвечено, 0 – разрыв связи до ответа; заметьте, что более детальная инфа может быть найдена в переменной диалплана $HANGUPCAUSE) |
amaflags |
Статус биллинговой строки (AMA = Automated Message Accounting). Указывается для каждого канала подобно accountcode. Возможными значениями могут быть default, omit, billing, documentation. Это один из возможных параметров sip клиента в файле sip.conf. Например:
amaflags=billing |
accountcode |
учетный код, который можно задать в настройках (параметр файла sip.conf. Значение этого параметра, если указано, используется при заполнении CDR. Записывается значение пира, который принимает звонок). Это один из возможных параметров sip клиента в файле sip.conf. Например:
accountcode=markster
|
userfield |
пользовательское поле (заполняется пользователем самостоятельно, по умолчанию - пустое) |
uniqueid |
уникальный идентификатор |
Переменные CDR в диалплане
If the channel has a cdr, that cdr record has its own set of variables which can be accessed just like channel variables. The following builtin variables are available.
${CDR(clid)} |
Caller ID |
${CDR(src)} |
Source |
${CDR(dst)} |
Destination |
${CDR(dcontext)} |
Destination context |
${CDR(channel)} |
Channel name |
${CDR(dstchannel)} |
Destination channel |
${CDR(lastapp)} |
Last app executed |
${CDR(lastdata)} |
Last app's arguments |
${CDR(start)} |
Time the call started. |
${CDR(answer)} |
Time the call was answered. |
${CDR(end)} |
Time the call ended. |
${CDR(duration)} |
Duration of the call. |
${CDR(billsec)} |
Duration of the call once it was answered. |
${CDR(disposition)} |
ANSWERED, NO ANSWER, BUSY |
${CDR(amaflags)} |
DOCUMENTATION, BILL, IGNORE etc |
${CDR(accountcode)} |
The channel's account code. |
${CDR(uniqueid)} |
The channel's unique id. |
${CDR(userfield)} |
The channels uses specified field. |
В файле cdr.conf имеется еще масса параметров, которые здесь не описаны, однако, полагаю, что мне удалось осветить основные опции CDR.
|