PDA

Voir la version complète : CDRS nickel



Comdif
18/09/2010, 00h01
Bonjour,

Pas mal de temps à perdre today pendant la réparation de mon PC de dev
je me suis donc amusé avec syslog pour récupérer des CDR formatés a votre choix
sur un serveur syslog windows.

J'ai pris un truc basic pour les tests http://www.sysrose.com/
mais ca permet de voir les logs en console et en plus de les écrires dans un fichier log
du pc win.

coté astérisk
installer
asterisk perl http://asterisk.gnuinter.net/files/asterisk-perl-1.01.tar.gz
perl net syslog http://search.cpan.org/CPAN/authors/id/L/LH/LHOWARD/Net-Syslog-0.03.tar.gz

pour installer un package perl toujours la meme procédure:
décompressez le fichier téléchargé, rendez vous dans le répertoire et entrez les commandes une par une:

perl Makefile.PL
make
make installbref une fois tout installé il suffit de créer dans /var/lib/asterisk/agi-bin
un fichier myagi.agi par exemple et de le rendre éxecutable



########################################
#!/usr/bin/perl
use Net::Syslog;
$SIG{HUP} = 'ignore_hup';
use Asterisk::AGI;
use POSIX qw(strftime);
sub today() {
my $now = strftime "%Y-%m-%d %H:%M:%S", localtime;
return $now;
}
$datecall = today();
$AGI = new Asterisk::AGI;
my %input = $AGI->ReadParse();
exit unless $input{'request'};

sub savecdr() {
my ($dialstatus, $answeredtime, $startcall) = @_;
&load_config();
my $s=new Net::Syslog(Facility=>'user',Priority=>'notice');
$s->send(''.$dialstatus.';'.$answeredtime.';'.$startca ll.';'.$input{'uniqueid'}.';'.$input{'callerid'}.' ;'.$input{'accountcode'}.';'.$input{'extension'}.' ;'.$datecall.'',Priority=>'info',SyslogHost=>'ip.machine.serveur.syslog',SyslogPort=>'514' );
$AGI->hangup();
exit;
}

$AGI->answer();
$dialstr = "SIP/nom_du_sip_carrier/$input{'extension'}|90|HL";
$AGI->exec("DIAL $dialstr");
$answeredtime = $AGI->get_variable("ANSWEREDTIME");
$dialstatus = $AGI->get_variable("DIALSTATUS");
$startcall = today();
#return $dialstatus;
&savecdr($dialstatus, $answeredtime, $startcall);
################################################## ####Dans le dialplan

exten => _0X.,1,DeadAGI(myagi.agi,${CDR(accountcode)},${EXT EN})voila ce que je trouve ensuite dans mon fichier log

<14>myagi.agi[17414]:
ANSWER;2;2010-09-17 23:51:12;1284760256;101;101;0469665501;2010-09-17 23:50:56traduction:

répondu;2secondes;répondu à 2010-09-17 23:51:10;uniqueID1284760256;callerid 101; accountcode 101;numero appelé 0469665501; appel envoyé à 2010-09-17 23:50:59

Résultat un fichier log propre et mis en forme sur votre PC à exploiter avec ce que vous voulez :-)

fastm3
18/09/2010, 10h06
Merci Comdif. C'est surtout un petit bout de code qui permet aussi de démystifier les agi surtout et peut inspirer pour d'autres usages.
Fastm3.
PS: J'ai ajouté des tags codes pour aider a la lisibilité.