Call Us Today! 877.742.2583




Page tree
Skip to end of metadata
Go to start of metadata

About

Event Socket Library allows one to retrieve CDRs in realtime. The CDR information are provided in the event CHANNEL_HANGUP_COMPLETE.

If you set channel variable hangup_complete_with_xml=true, then the body of that event will be a full XML CDR

 

Example in Perl on how to use ESL to display CDRs

#! /usr/bin/perl -wT
# handle_cdr.pl
# Connect to event socket, listen for CHANNEL_HANGUP_COMPLETE events
# Uses event data to create custom CDRs

use strict;
use warnings;

use lib '/usr/src/freeswitch.git/libs/esl/perl';

use ESL;
my $host = 'localhost';
my $port = '8021';
my $pass = 'ClueCon';
# Connect to event socket
my $con  = ESL::ESLconnection->new($host, $port, $pass);
if ( ! $con ) {
    die "Unable to establish connection to FreeSWITCH.\n";
}
# Listen for events of type CHANNEL_HANGUP_COMPLETE only
$con->events('plain','CHANNEL_HANGUP_COMPLETE');

print "Connected to FreeSWITCH $host:$port and waiting for events...\n\n";
while ( $con->connected() ) {
    my $e = $con->recvEvent();
    my @raw_data = split /\n/, $e->serialize();
    my %cdr;
    foreach my $item ( @raw_data ) {
        #print "$item\n";
        my ($header, $value) = split /: /, $item;
        $header =~ s/^variable_//;
        $cdr{$header} = $value;
    }
    # %cdr contains a complete list of channel variables
    print 'New CDR: ';
    print $cdr{uuid} . ', ' . $cdr{direction} . ', ';
    print $cdr{answer_epoch} . ', ' . $cdr{end_epoch} . ', ';
    print $cdr{hangup_cause} . "\n";
}