Reverse Australia

From KlavoWiki
Revision as of 04:04, 11 February 2012 by David (talk | contribs) (Asterisk AGI Perl module)
Jump to: navigation, search


Reverse Australia is the premier free reverse look-up service for mobiles and landlines within Australia.

You can use the below AGI file without the requirement to use the reverse lookups. If you change the variable $query_online to equal 0 then the script will never lookup the information online and will only use the data in the MySQL tables. You would do this if you want to maintain your own caller name lookups.


Asterisk AGI Perl module

yum install perl-ExtUtils-MakeMaker perl-libwww-perl perl-CPAN

tar xvzf asterisk-perl-1.01.tar.gz

cd asterisk-perl-1.01

perl Makefile.PL
make all
make install


rpm -Uhv rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm


yum -y install perl-LWP-UserAgent-Determined

Reverse Australia Key

Log onto the Reverse Australia web site and select Request an API Key. You will need to log onto the site with a Facebook account. If you don't have one then you'll need to create one otherwise you're screwed.

MySQL Database

Create a database with the name of your choice with a table name of cid.

mysqladmin create reverseau


use reverseau;

`name` text NOT NULL,
`number` text NOT NULL

modified table

I have a WEB site that allows one to edit the contents of the Database. The web site allows one to edit/add/delete entries. You will need to use the following table. This table and the web site also allows one to use 3 or 4 digit speed dialling. The speed dial implemention is displayed below.

CREATE TABLE `callers` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(60) NOT NULL,
  `number` varchar(20) NOT NULL,
  `speed` varchar(4) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `speed_UNIQUE` (`speed`)

assign permissions

GRANT ALL ON reverseau.* to ciduser@localhost identified by 'passw0rd';
flush privileges;


The latest version is available from CRC. Download and move the file to /var/lib/asterisk/agi-bin/ (Thanks Steven Haigh for this wonder script.)

mv cid-lookup-v4.agi /var/lib/asterisk/agi-bin/
chmod +x /var/lib/asterisk/agi-bin/cid-lookup-v4.agi

Edit the file and change the following constants to the required values.

  2. db_host
  3. db_name
  4. db_username
  5. db_password

Asterisk Dialplan Implementation

exten => _XX.,1,GotoIf($["${CALLERID(name)}" = "${CALLERID(num)}"]?:3)
same  =>      n,Set(CALLERID(name)="")
same  =>      n,GotoIf($["${CALLERID(name)}" != ""]?:6)
same  =>      n,Set(CALLERID(name)=Unknown)
same  =>      n,AGI(cid-lookup-v4.agi)
same  =>      n,Dial(${EVERYONE},29,tw)
same  =>      n,VoiceMail(200@default,us)
same  =>      n,HangUp

This agi file has one modification to the original, and that is $db_table. I have added a variable for the table name.

use strict;
use Asterisk::AGI;
use LWP::UserAgent;
use DBI;

#### Your Reverse Australia Developers Key:
my $APIKEY = "";
my $query_online = 1;

## MySQL Database details.
my $db_host = "localhost";
my $db_name = "asterisk";
my $db_username = "username";
my $db_password = "password";
my $db_table = "callers";

## If you access the web via a proxy, you can define it here
#$ in the format ""
my $http_proxy = "";

my $AGI = new Asterisk::AGI;
my %input = $AGI->ReadParse();
my $number = $input{'callerid'};

## Open the SQL database and search for the number calling...
my $dbh = DBI->connect("dbi:mysql:$db_name;host=$db_host", $db_username, $db_password) or die "Error connecting to database!\n";
my $sth = $dbh->prepare("SELECT name FROM $db_table WHERE number=?");
$sth->execute($number) or die "SQL Error: $DBI::errstr\n";
my $name = $sth->fetchrow;

## If we still can't find anything, search the online database if enabled.
if ( $name eq "" and $name ne "anonymous" ) {
	if ( $query_online and $APIKEY ne "" ) {
		my $ua = new LWP::UserAgent;
		$ua->proxy("http", $http_proxy);
		my $req = new HTTP::Request GET => ''.$APIKEY.'&q='.$number.'&extended=0';
		my $res = $ua->request($req);
		if ($res->is_success) {
			## We don't need any real parsing on non-extended searches.
			## Set the caller ID and add the results to the database as a cache.
			$name = $res->content;
			$name =~ s/\t//g;
			$name =~ s/,//g;
        		$sth = $dbh->prepare("INSERT INTO $db_table (name,number) VALUES (?,?)");
        		$sth->execute($name, $number);
		} else {
			print("NOOP Error looking up online directory");

	## If we got nothing from the database, and nothing from the online directory
	## (if enabled) we fall back to this. Add the details to the database so someone
	## can come along and add a name later.
	if ( $name eq "" or $name eq "Not found") {
		print("NOOP Nothing found. Setting to unknown\n");
		$name = "Unknown Caller";
		$sth = $dbh->prepare("INSERT INTO $db_table (name,number) VALUES (?,?)");
		$sth->execute($number, $number);

$AGI->set_callerid("\"$name <$number>\"");

WEB Site Implementation

The WEB site will allow you to add, create, delete and edit entries in the MySQL database. This will allow you to easily create speed dial entries for numbers and modify incoming call display.

You can use this WEB site for free for personal use only. If you operate a home business, small office, large company then you must purchase a license. The license will allow you to run the WEB site on an individual server and not on multiple servers within your organisation. For licensing details please email sales at tech42 dot com dot au

For a copy of the WEB site please email david at klaverstyn dot com dot au.


cd /var/www/html
chmod 646 ./cid/settings.ini


Edit the settings.ini file located in the cid folder. Make sure that you have valid entries for the following example variables.

  1. client = "http://pbx.mywebsite.local/cid/"
  2. database = "asterisk"
  3. table = "callers"
  4. username = "ciduser"
  5. password = "passw0rd"

Securing settings.ini

To ensure users can not access the details of settings.ini from the web site create the following file in the cid folder.


<Files settings.ini>
  order allow,deny
  deny from all

speed dial

cp /var/www/html/cid/_api/* /var/lib/asterisk/agi-bin/
chmod +x /var/lib/asterisk/agi-bin/phpagi*
chmod +x /var/lib/asterisk/agi-bin/speed-dial.php

You need to edit the speed-dial.php file and change the required settings.

$config['host'] = 'localhost';        // FQDN, localhost, IP, etc
$config['database'] = 'reverseau';    // Database Name
$config['table'] = 'callers';         // Table Name
$config['username'] = 'ciduser';      // MySQL username
$config['password'] = 'passw0rd';     // MySQL password

Asterisk Dialplan

You can use any 3 or 4 digit speed dial number. In my example below I have used a 3 digit number starting with 4. As long as the speed dial entries from the Caller Identification WEB site matches the dial plan numbers then all will be good.

;Speed dial Numbers 4xx
exten => _4XX,1,AGI(speed-dial.php,${EXTEN})
exten => _4XX,2,Goto(internal,${response},1)
exten => _4XX,3,HangUp

exten => sd-invalid,1,PlayBack(you-dialed-wrong-number&please-try-again)