Pozn.: Odborníci na databázové servery mohou CSV soubory zpracovat rovnou pomocí (třeba) MS SQL Serveru nebo Oracle Database a importovat do tabulek, nad nimi pak provést různé pohledy.
Základní termíny
- CAR - CDR Analysis and Reporting - služba, která generuje reporty, a rozhraní pro prohlížení, má adresu
https://CUCM-IP-address/car/
- CDR - Call Detail Records - datové záznamy, které obsahují informace o všech hovorech, které zpracoval CUCM
- CMR - Call Management Records - datové záznamy, které obsahují QoS nebo diagnostické informace o hovorech
Pozn.: Celý popis byl otestován na Cisco Unified Communications Manager (CUCM) 8.6(2a)SU3, ale vše by mělo fungovat minimálně od CUCM 6.
CDR data na CUCM
Databáze CUCM
CUCM používá Informix databázi, ale není do ní povolen externí přístup. Máme možnost využívat SQL dotazy (příkazy) pomocí CLI (Command-Line Interface) CUCM. Nějaké informace jsou v článku CUCM SQL Queries: Supplemental - Informix System Catalogs. Jde o následující příkaz:
admin:run sql <náš SQL příkaz>
Druhá možnost je pomocí AXL/SOAP interface. Můžeme využít třeba AXL SQL Tool Kit, který můžeme stáhnout z CUCM (Tools - Plug-ins).
Asi poslední možnost je nastavit automatické exportování CDR dat na FTP/SFTP server. To je metoda, kterou využijeme zde.
Ukládání CDR
První podmínkou je mít správně nakonfigurováno ukládání CDR informací. Tuto konfiguraci zde ale řešit nebudeme. Není to nic složitého a popis nalezneme v dokumentaci u Cisca Cisco Unified CDR Analysis and Reporting Administration Guide, Release 8.6(1), kapitola Configuring the CDR Analysis and Reporting Tool. Další zajímavý článek je Understanding CDR (Call Detail Records).
CAR rozhraní
Pokud chceme využívat CAR, tak máme tři uživatelské role. Hlavní je CAR Administrators, to jsou uživatelé zařazení do skupiny Standard CAR Admin Users. Ti mají plná práva na CAR a mohou vidět a plánovat všechny reporty. Potom je uživatel, který může prohlížet pouze svoje reporty, a manager (nastavuje se v detailu jednotlivých uživatelů) vidí reporty svoje a svých podřízených.
Dokud jsem měl CUCM verzi 6.1 (i když to asi s verzí nesouvisí), tak výše popsané docela dobře fungovalo. Každý uživatel se mohl přihlásit na stránku CAR svým účtem a viděl svoje reporty. V současnosti na CUCM 8.6 zobrazení funguje pouze pod CAR administrátorem. Většina uživatelů po přihlášení nevidí žádný záznam. Zobrazuje se pouze varování:
Currently 123 is not configured as OwnerUserId for any device, the report might contain little or empty data for the user. Use ccmadmin->device->phone page to configure the OwnerUserId. And configuration changes will take effect only for newly generated CDR records.
Sice chápu, co tato infromace znamená, ale nechápu význam. Využívám Extension Mobility a také řada linek, kde mne zajímá historie volání, je virtuálních (nemají fyzický telefon, ale jsou různě přesměrovány). Takže vazbu na fyzický přístroj nechápu.
Každopádně ani výsledné reporty nejsou nejlepší, takže jsem příliš nepátral a spíš se zaměřil na možnost dostat data jinam a zobrazit pomocí vlastní webové stránky.
Export CDR dat a vlastní zobrazení
Ukázka, jak může vypadat výsledek, který budeme dále řešit.
Naplánování exportu na FTP server
Někde v síti (nejjednodušší je asi na webovém serveru, kde budeme CDR zpracovávat) si rozjedeme FTP nebo SFTP server. Potom na CUCM nastavíme automatické exportování souborů na tento server.
- připojíme se na CUCM stránku Cisco Unified Serviceability
- menu Tools - CDR Management
- v sekci Billing Application Server Parameters klikneme na Add new
- zadáme parametry FTP / SFTP serveru
Podle toho, jak máme nastavenou hodnotu parametru CDR File Time Interval v Cisco Unified CM Administration - System - Enterprise Parameters. Tak často se budou nahrávat soubory na server (pokud budou nějaká data k dispozici). Defaultní hodnota je 1 minuta, takže se každou minutu vytvoří jeden soubor, který bude obsahovat všechna data za tuto minutu.
Zpracování CAR souborů pomocí PHP
Zde uvádím nástin PHP skriptu, který v zadané cestě nalezne všechny soubory, které začínají cdr
. Každý soubor převede na pole, z jednotlivých řádků vybere zajímavé hodnoty a uloží je do DB. Po zpracování každý soubor smaže.
Jako databázi využívám MySQL a tabulku CDR, která obsahuje pouze pár hodnot z CDR dat, a vypadá následovně:
CREATE TABLE CDR ( id int(11) NOT NULL auto_increment, startCall int(11) NOT NULL, callingNumber varchar(20), calledNumber varchar(20, lastRedirect varchar(20), destinationNumber varchar(20), duration int(11), PRIMARY KEY (id) );
Vlastní PHP skript. Upozorňuji, že jde pouze o nástin řešení, pro zjednodušení jsem odstranil různé bezpečnostní fce (třeba u ukládání do DB).
#!/usr/bin/php -q <?php // načte CSV soubor s CDR daty a uloží ho do pole function CSV_to_Array($filename='', $delimiter=',') { if(!file_exists($filename) || !is_readable($filename)) return false; $header = NULL; $line = 0; $data = array(); if(($handle = fopen($filename, 'r')) !== false) { while(($row = fgetcsv($handle, 5000, $delimiter)) !== false) { $line++; if($line == 2) continue; // preskocit druhy radek z CDR exportu if(!$header) $header = $row; else $data[] = array_combine($header, $row); } fclose($handle); } return $data; } function analyzeCDRs() { // zpracování CDR souborů, prochází podsložku cdr a hledá soubory začínající cdr foreach(glob("cdr/cdr*") as $file) { $CDRs = CSV_to_Array($file); if($CDRs) { foreach($CDRs as $CDR) { // občas se objevili nějaké podivné prázdné záznamy if(empty($CDR["originalCalledPartyNumber"])) continue; // uloženi do lokálni DB // id, startCall , callingNumber, calledNumber, lastRedirect, destinationNumber, duration $sql = "INSERT INTO cdr VALUES (0, ".$CDR["dateTimeOrigination"].", '".$CDR["callingPartyNumber"]."', '".$CDR["originalCalledPartyNumber"]."', '".$CDR["lastRedirectDn"]."', '".$CDR["finalCalledPartyNumber"]."', ".$CDR["duration"].")"; mysql_query($sql); } } // smazání souboru unlink($file); } } // připojení k DB Connect(); analyzeCDRs(); ?>
Tento skript pak nastavíme pomocí nějakého plánovače (třeba ve Windows Scheduled Tasks), aby se pravidelně spouštěl (třeba každou minutu nebo pět). Vlastní spuštění může vypadat následně.
c:\wamp\bin\php\php.exe -c c:\wamp\bin\apache\bin\php.ini cdr_cmd.php
Pak už jde jen o to připravit jednoduchou stránku, která zobrazí tabulku z DB a případně nějaké možnosti filtrování.
Zatím zde nejsou žádné komentáře.