Upgrade 3CX to v18 and get it hosted free!

Super CallerID

Author image

Original .txt


#!/usr/bin/perl

# supercallerid.pl – by natas
# uses modified bm.pl code by dual
# and contributed code from strom carlson
# http://www.oldskoolphreak.com

# —- STEP BY STEP INSTRUCTIONS —- #

# Remove .txt file extension and change to .pl
# Copy file to your desired directory
# chmod +x supercallerid.pl
# Add this command to your incoming line in extensions.conf
# before your answer statement and point it to the correct location
# exten => your-number,1,System(/yourdirectory/./supercallerid.pl ${CALLERIDNUM} ${CALLERIDNUM} ${CALLERIDNAME} > /yourdirectory/super_callerid_output.txt)
# This will pass the arguments to supercallerid.pl and output the info to the super_callerid_screen.txt file
# Create the file super_callerid_output.txt or call your incoming number
# In a new terminal screen execute watch cat /yourdirectory/super_callerid_output.txt
# If you need the perl modules below do
# perl -MCPAN -e "install WWW::Mechanize" and/or
# perl -MCPAN -e "install HTML::TokeParser::Simple"
# ENJOY!

use strict;
use LWP;
use HTML::TokeParser::Simple;
use WWW::Mechanize;

my $input;
my $callerid;
my $calleridname;
my $calleridnum;

# $ARGV[0] is coverted from the npanxxxxxx format callerid
# Asterisk passes to the npa-nxx-xxx format needed by bellsmind
#~np~ $ARGV[1] is here so it gets printed neatly in the output

if ($ARGV[0] =~ /^(\d\d\d)(\d\d\d)(\d\d\d\d)$/)
{
$input = "$1-$2";
}
if ($ARGV[1] =~ /^(\d\d\d)(\d\d\d)(\d\d\d\d)$/)
{
$callerid = "$1-$2-$3";
}

# WWWW::Mechanize code by strom carlson
# uses whitepages.com to gather added info

my $mech = WWW::Mechanize->new();
$mech->get("http://www.whitepages.com/10001/reverse_phone");

$mech->submit_form(
form_number => 2,
fields => {
phone => $ARGV[0],
}
);

my $content = $mech->content();

my $firstname;
my $lastname;
my $address;
my $city;
my $state;
my $zip;

if ($content =~
/.*oas_query.+_RM_HTML_FIRST_ESC_=(.*)&_RM_HTML_LAST_ESC_=(.*)&_RM_HTML_ADDRESS_ESC_=(.*)&_RM_HTML_STREET_ESC_=(.*)&_RM_HTML_HOUSE_ESC_=(.*)&_RM_HTML_CITY_ESC_=(.*)&_RM_HTML_STATE_ESC_=(.*)&_RM_HTML_ZIP_ESC_=(.*)&_RM_HTML_PHONE_ESC_=.*/)
{
$firstname = $1;
$lastname = $2;
$address = $3;
$city = $6;
$state = $7;
$zip = $8;
}

foreach ($firstname,$lastname,$address,$city,$state,$zip)
{
$_ =~ s/%20/ /g;
}

# $callername has so many unused $ARGV’s in case the
# CNAM asterisk is passing has lots of spaces
# CNAM is up to 15 characters long

$calleridnum = "$callerid";
$calleridname = "$ARGV[2]"." "."$ARGV[3]"." "."$ARGV[4]"." "."$ARGV[5]"." "."$ARGV[6]"." "."$ARGV[7]"." "."$ARGV[8]"." "."$ARGV[9]"." "."$ARGV[10]";

print " Caller ID\t"."$calleridnum\n";
print " CNAM\t\t"."$calleridname\n";
print " First Name\t"."$firstname\n";
print " Last Name\t"."$lastname\n";
print " Address\t"."$address\n";
print " City\t\t"."$city\n";
print " State\t\t"."$state\n";
print " Zip Code\t"."$zip\n";
print "\n";

my($npa, $nxx) = split(/-/, $input);

my $browser = LWP::UserAgent->new;
$browser->env_proxy();
my $response = $browser->get(
"http://bellsmind.net/Engine/legacy/BellsMindParseExtended.php?SearchType=NPANXX&NPA=$npa&NXX=$nxx"
~np~);
die "Error: ", $response->status_line
unless $response->is_success;

my $output = $response->content;

my $stream = HTML::TokeParser::Simple->new(\$output);

my $count1 = 0;
my $count2 = 0;
my $spltrcs;

while (my $token = $stream->get_token) {
if ($token->is_text) {
my $text = $token->as_is;
if ($text =~ /Location/) {print "$text\t";}
elsif ($text =~ /Address/) {print "$text\t";}
elsif ($text =~ /Use code/) {print "$text\t";}
elsif ($text =~ /OCN/) {print "$text\t\t";}
elsif ($text =~ /Company/) {print "$text\t";}
elsif ($text =~ /Local RC/) {print "$text\t";}
elsif ($text =~ /Switch RCs/) {print "$text\t";}
elsif ($text =~ /CLLI/) {print "$text\t\t";}
elsif ($text =~ /IG/) {print "$text\t\t";}
elsif ($text =~ /Switch type/) {print "$text\t";}
elsif ($text =~ /Also serves/) {print "$text\t";}
elsif ($text =~ /Scanned/) {last;}
elsif ($text =~ /\[.+\]/) {
my @rcs = split(/\]\s\[/, $text);
for $spltrcs(@rcs) {
print "$spltrcs ";
$count1++;
if ($count1 == 5) {
print "\n\t\t";
$count1 = 0;
}
}
}
elsif ($text =~ /\d{3}-\d{3}/) {
print $text;
$count2++;
if ($count2 == 7) {
print "\n\t\t\b";
$count2 = 1;
}
}
else {print $text;}
}
}


Article Reviews

Write a Review

Your email address will not be published. Required fields are marked *

Required Field. Minimum 5 characters.

Required Field. Minimum 5 characters, maximum 50.

Required field.There is an error with this field.

Required Field.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

There are no reviews for this article. Be the first one to write a review.
Get 3CX - Absolutely Free!
Link up your team and customers Phone System Live Chat Video Conferencing

Hosted or Self-managed. Up to 10 users free forever. No credit card. Try risk free.

3CX
A 3CX Account with that email already exists. You will be redirected to the Customer Portal to sign in or reset your password if you've forgotten it.