Вроде и ничего сложного, а вопросы всё поступают.. Итак CDR explained по-русски :).
Поднимем FTP-сервер, например Filezilla.
Укажем FTP-сервер в CUCM:
В Directory Path нужно указать хотя бы "/" (заливать файлы в корневой каталог)
Укажем как часто выкладывать CDR-файлы на (S)FTP (по умолчанию каждую минуту)
Запустим CDR на всех Call-processing серверах
– включим учет несостоявшихся звонков и звонков длительностью меньше секунды
Очень интересная страничка CDR Field Descriptions подробно описывает все поля CDR-файла. Например:
dateTimeConnect, dateTimeDisconnect – время соединения и разъединения абонентов соответственно. Прошу заметить, что время указывается в UTC (The time gets stored as UTC) и в секундах с 1 января 1970 года (пруфлинк, где указано как перевести количество секунд в удобоваримый вид с помощью Excel). Также нашел ссылку на самописный UCMcdr crawler by Patrick Geschwindner (запасная ссылка) на странице learningnetwork.cisco.com (не пользовался).
Для конвертации даты/времени в Excel использовал вот такую формулу:
=IF(C1=0;"0";C1/86400+DATE(1970;1;1)+TIME(6;;))
Что за цифры вместо даты/времени и как их перевести?
Сообщение со ссылкой на UCMcdr crawler
Сам UCMcdr crawler или вот так, а ещё лучше так, или даже так
CDR на Вики
Для обработки CDR (платные, не пользовался): Биллинговый комплекс Tariscope, WinTariff (пишите в комментах, добавлю еще).
Затравка
Для начала ссылка на Википедию, где говорится, что CDR – это сервис, обеспечивающий журналирование работы телекоммуникационного оборудования. Обычно (и Cisco в этом не исключение) CDR-запись представляет собой текстовый файл, содержащий различные данные о каждом (не)состоявшемся вызове. Прошу заметить, что CDR не сможет выставлять ежемесячные (и еженедельные тоже) денежно-временные лимиты на платные направления или работать в качестве pre-paid биллинга, зато позволяет анализировать активность абонентов пост-фактум, делать прогнозы, определять самых разговорчивых сотрудников (ознакомьтесь также с CAR – CDR Analysis and Reporting) и т.д.Запускаем CDR
Если мы все поняли и все равно решили познакомиться/пощупать CDR-файлы, то:Поднимем FTP-сервер, например Filezilla.
Укажем FTP-сервер в CUCM:
Cisco Unified Serviceability -> Tools -> CDR Management -> Add new
Укажем как часто выкладывать CDR-файлы на (S)FTP (по умолчанию каждую минуту)
System -> Enterprise Parameters -> CDR File Time Interval Required Field
Запустим CDR на всех Call-processing серверах
Cisco Unified CM Administration -> System -> Service Parameters -> Сервер -> Cisco CallManager: – CDR Enabled Flag -> True – включим CDR – CDR Log Calls with Zero Duration Flag -> True
Удивляемся CDR'ам
Ощущаем власть всевидящего ока до тех пор, пока не заглянем в содержимое CDR-файла:"cdrRecordType","globalCallID_callManagerId","globalCallID_callId","origLegCallIdentifier","dateTimeOrigination","origNodeId","origSpan","origIpAddr","callingPartyNumber","callingPartyUnicodeLoginUserID","origCause_location","origCause_value","origPrecedenceLevel","origMediaTransportAddress_IP","origMediaTransportAddress_Port","origMediaCap_payloadCapability","origMediaCap_maxFramesPerPacket","origMediaCap_g723BitRate","origVideoCap_Codec","origVideoCap_Bandwidth","origVideoCap_Resolution","origVideoTransportAddress_IP","origVideoTransportAddress_Port","origRSVPAudioStat","origRSVPVideoStat","destLegIdentifier","destNodeId","destSpan","destIpAddr","originalCalledPartyNumber","finalCalledPartyNumber","finalCalledPartyUnicodeLoginUserID","destCause_location","destCause_value","destPrecedenceLevel","destMediaTransportAddress_IP","destMediaTransportAddress_Port","destMediaCap_payloadCapability","destMediaCap_maxFramesPerPacket","destMediaCap_g723BitRate","destVideoCap_Codec","destVideoCap_Bandwidth","destVideoCap_Resolution","destVideoTransportAddress_IP","destVideoTransportAddress_Port","destRSVPAudioStat","destRSVPVideoStat","dateTimeConnect","dateTimeDisconnect","lastRedirectDn","pkid","originalCalledPartyNumberPartition","callingPartyNumberPartition","finalCalledPartyNumberPartition","lastRedirectDnPartition","duration","origDeviceName","destDeviceName","origCallTerminationOnBehalfOf","destCallTerminationOnBehalfOf","origCalledPartyRedirectOnBehalfOf","lastRedirectRedirectOnBehalfOf","origCalledPartyRedirectReason","lastRedirectRedirectReason","destConversationId","globalCallId_ClusterID","joinOnBehalfOf","comment","authCodeDescription","authorizationLevel","clientMatterCode","origDTMFMethod","destDTMFMethod","callSecuredStatus","origConversationId","origMediaCap_Bandwidth","destMediaCap_Bandwidth","authorizationCodeValue","outpulsedCallingPartyNumber","outpulsedCalledPartyNumber","origIpv4v6Addr","destIpv4v6Addr","origVideoCap_Codec_Channel2","origVideoCap_Bandwidth_Channel2","origVideoCap_Resolution_Channel2","origVideoTransportAddress_IP_Channel2","origVideoTransportAddress_Port_Channel2","origVideoChannel_Role_Channel2","destVideoCap_Codec_Channel2","destVideoCap_Bandwidth_Channel2","destVideoCap_Resolution_Channel2","destVideoTransportAddress_IP_Channel2","destVideoTransportAddress_Port_Channel2","destVideoChannel_Role_Channel2","IncomingProtocolID","IncomingProtocolCallRef","OutgoingProtocolID","OutgoingProtocolCallRef","currentRoutingReason","origRoutingReason","lastRedirectingRoutingReason","huntPilotPartition","huntPilotDN","calledPartyPatternUsage","IncomingICID","IncomingOrigIOI","IncomingTermIOI","OutgoingICID","OutgoingOrigIOI","OutgoingTermIOI","outpulsedOriginalCalledPartyNumber","outpulsedLastRedirectingNumber" INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,VARCHAR(50),VARCHAR(128),INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,VARCHAR(64),VARCHAR(64),INTEGER,INTEGER,INTEGER,INTEGER,VARCHAR(50),VARCHAR(50),VARCHAR(128),INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,VARCHAR(64),VARCHAR(64),INTEGER,INTEGER,VARCHAR(50),UNIQUEIDENTIFIER,VARCHAR(50),VARCHAR(50),VARCHAR(50),VARCHAR(50),INTEGER,VARCHAR(129),VARCHAR(129),INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,VARCHAR(50),INTEGER,VARCHAR(2048),VARCHAR(50),INTEGER,VARCHAR(32),INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,VARCHAR(32),VARCHAR(50),VARCHAR(50),VARCHAR(64),VARCHAR(64),INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,INTEGER,VARCHAR(32),INTEGER,VARCHAR(32),INTEGER,INTEGER,INTEGER,VARCHAR(50),VARCHAR(50),INTEGER,VARCHAR(50),VARCHAR(50),VARCHAR(50),VARCHAR(50),VARCHAR(50),VARCHAR(50),VARCHAR(50),VARCHAR(50) 1,1,3248,24720560,1368432257,1,0,269156618,"2001","",0,0,4,269156618,19932,6,20,0,0,0,0,0,0,"0","0",24720561,1,0,34341130,"2002","2002","",0,16,4,34341130,27558,6,20,0,0,0,0,0,0,"0","0",1368432262,1368432267,"2002","9f1296dd-249b-47ea-9ee8-dbbff954fb2f","devices","devices","devices","devices",5,"SEPC8F9F9D691CA","SEP5C501544120A",0,12,0,0,0,0,0,"StandAloneCluster",0,"","",0,"",3,3,0,0,64,64,"","","","10.1.11.16","10.1.12.2",0,0,0,0,0,0,0,0,0,0,0,0,0,"",0,"",0,0,0,"","",2,"","","","","","","",""
Разбираемся с CDR
Однако на самом деле всё довольно просто: для каждого вызова создается всего одна текстовая строчка (хотя, возможно, бывают ситуации и с несколькими строками, не буду обманывать), несущая всю необходимую информацию. Причем для каждого значения есть подробное описание от Cisco. Чтобы не быть голословными давайте заполучим CDR Admin Guide в несколько кликов:cisco.com/go/support -> -> Voice and Unified Communications -> -> Manager (CallManager) 8.6 -> -> Maintain and Operate Guides -> -> Cisco Unified Communications Manager Call Detail Records Administration Guide 8.6(1)
Очень интересная страничка CDR Field Descriptions подробно описывает все поля CDR-файла. Например:
dateTimeConnect, dateTimeDisconnect – время соединения и разъединения абонентов соответственно. Прошу заметить, что время указывается в UTC (The time gets stored as UTC) и в секундах с 1 января 1970 года (пруфлинк, где указано как перевести количество секунд в удобоваримый вид с помощью Excel). Также нашел ссылку на самописный UCMcdr crawler by Patrick Geschwindner (запасная ссылка) на странице learningnetwork.cisco.com (не пользовался).
Заключительный аккорд
Ну и, наконец, сводная табличка выборочных интересных параметров:dateTimeOrigination | Время начала вызова | 13.05.2013 14:04:17 | 13.05.2013 14:04:29 | 13.05.2013 14:04:37 | 13.05.2013 14:04:51 |
callingPartyNumber | Кто звонит | 2001 | 2001 | 2002 | 2002 |
origCause_value | Причина разъединения (0 если трубку положил тот, кому звонили) | 0 | 16 | 0 | 16 |
originalCalledPartyNumber | Кому звонит (после translation pattern) | 2002 | 2002 | 2001 | 2001 |
finalCalledPartyNumber | До кого дозвонился (после всех Forward) | 2002 | 2002 | 2001 | 2001 |
destCause_value | Причина разъединения (0 если трубку положил тот, кто звонил) | 16 | 0 | 16 | 0 |
dateTimeConnect | Время начала общения (0, если трубку никто не снял) | 13.05.2013 14:04:22 | 0 | 13.05.2013 14:04:42 | 0 |
dateTimeDisconnect | Время окончания разговора | 13.05.2013 14:04:27 | 13.05.2013 14:04:36 | 13.05.2013 14:04:47 | 13.05.2013 14:04:57 |
lastRedirectDn | Именно с него произошел последний Forward звонка | 2002 | 2002 | 2001 | 2001 |
duration | Длительность разговора (0, если меньше 1 или разговора не было) | 5 | 0 | 5 | 0 |
Для конвертации даты/времени в Excel использовал вот такую формулу:
=IF(C1=0;"0";C1/86400+DATE(1970;1;1)+TIME(6;;))
Источники и ссылки:
CDR Administration GuideЧто за цифры вместо даты/времени и как их перевести?
Сообщение со ссылкой на UCMcdr crawler
CDR на Вики
Для обработки CDR (платные, не пользовался): Биллинговый комплекс Tariscope, WinTariff (пишите в комментах, добавлю еще).
Спасибо за статейку! Как раз пытаюсь вникнуть в то что пишет CDR, а тут попалась ваша статья, мне ее как раз не хватало.
ОтветитьУдалитьспасибо!
ОтветитьУдалитьно нен совсем понятно куда всавлять формулу... пробовал..ничего не получается
Добрый день,
УдалитьЕсли дата/время из CDR находится в столбце C, то вставляем формулу в любой другой столбец, например в D и "растягиваем" формулу на все необходимые строки. Если дата/время в другом столбце, то необходимо подправить формулу - заменить C на необходимый столбец.
Cсылка на UCMcdr crawler битая, кто нибудь может поделится рабочей?
ОтветитьУдалитьПопробуйте вот эту: https://dl.dropboxusercontent.com/u/53426117/PermLinks/UCMcdr.exe
УдалитьЕсть возможность обновить ссылку? Очень нужна прога. Спасибо!
УдалитьСогласен, присоединяюсь. Прога нужна. Ссылка не работает(
УдалитьБлагодаря Владимиру Иванову программка UCMcdr нашлась :).
УдалитьНа всякий случай вот дополнительная ссылка https://drive.google.com/open?id=0B8GgVsQ0wE8aZHIxNFBOY2MwUFE
Этот комментарий был удален автором.
ОтветитьУдалитьнашел, вот ссылка
ОтветитьУдалитьhttps://cp.sync.com/dl/571897a70#tcnbp9bd-vc5gvqt5-j3ksydk7-mza2xryv
при попытке открыть файл логов в UCMcdr выдается ошибка
ОтветитьУдалитьhttps://ibb.co/k6Rkmd