#!/usr/bin/perl
use strict;
use warnings;
use DBI;
use Data::Dumper;
use REST::Client;
use JSON;
my $client = REST::Client->new();
$client->setHost('http://your3cx.yourdomain.com');
$client->addHeader('Accept', 'application/json');
$client->addHeader('Content-Type', 'application/json');
$client->addHeader('charset', 'UTF-8');
$client->getUseragent()->cookie_jar({});
print ": --- 3CX to MySQL ---\n";
my $req = '{"username":"3CXUSERNAME","password":"SECRET"}';
$client->POST('/api/login', $req);
if ($client->responseContent() eq 'AuthSuccess')
{
print ": login ok\n";
$client->GET('/api/activeCalls'); # or /api/SystemStatus (Call config page and network debug with browser)
my $pbxdata = from_json($client->responseContent());
$req = '{}';
$client->POST('/api/logout', $req);
print ": logout: ".$client->responseContent()."\n";
# print Dumper $pbxdata;
my $strext = "SIP-Trunk"; # The Text which indentifies a External Call
my $calls_external = 0;
my $calls_internal = 0;
for my $item( @{$pbxdata->{'list'}} ) {
print $item->{'Caller'} . " ---> ". $item->{'Callee'} . "\n";
if ( (index($item->{'Caller'}, $strext) != -1) || (index($item->{'Callee'}, $strext) != -1) ) {
$calls_external++;
}
else {
$calls_internal++;
}
}
print "Internal:".$calls_internal." External:".$calls_external."\n";
print ": Insert to DB...\n";
my $dbh = DBI->connect("DBI:mysql:database=YOURDB;host=yourmysql.yourdomain.com", "MYSQLUSERNAME", "SECRET", {'RaiseError' => 1});
$dbh->do("INSERT INTO pbx (time, CallsInternal, CallsExternal) VALUES (NOW(),
\'".$calls_internal."\',
\'".$calls_external."\'
)");
$dbh->disconnect();
}
else
{
print ": ERROR - Login failed\n";
}
print ": Finished\n";