www.SAMURAJ-cz.com 

24.04.2024 Jiří Translate to English by Google     VÍTEJTE V MÉM SVĚTĚ

Články

CUCM zpracování historie hovorů (CDR)

Neděle, 23.02.2014 18:55 | Samuraj - Petr Bouška |
Cisco Unified Communications Manager (CUCM) může ukládat podrobné záznamy o hovorech. Také obsahuje nástroj (stránku) CAR, kde si můžeme prohlížet různé reporty z těchto dat. To ale není úplně pohodlné a praktické a ne vždy funguje. Popíšeme si zde možnost, jak data automaticky exportovat na jiný server v podobě CSV souborů a tato data zpracovat pomocí PHP.

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.

Vlastní aplikace na zobrazení CDR záznamů z CUCM

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 IntervalCisco 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í.

zobrazeno: 6781krát | Komentáře [0]

Autor:

Související články:

Cisco Unified Communications - CUCM

Články z kategorie Cisco UC popisují obecně IP telefonii od Cisca. Hlavní zaměření je na ústřednu Cisco Unified Communications Manager (CUCM). Jiná kategorie se věnuje UCCX.

Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže.

Komentáře

Zatím tento záznam nikdo nekomentoval.

Přidat komentář

Vložit tag: strong em link

Vložit smajlík: :-) ;-) :-( :-O

Nápověda:
  • maximální délka komentáře je 2000 znaků
  • HTML tagy nejsou povoleny (budou odstraněny), použít se mohou pouze speciální tagy (jsou uvedeny nad vstupním polem)
  • nový řádek (ENTER) ukončí odstavec a začne nový
  • pokud odpovídáte na jiný komentář, vložte na začátek odstavce (řádku) číslo komentáře v hranatých závorkách