[Asterisk-Users] CallerID name lookup AGI script

Jay Milk jay at skimmilk.net
Sun May 8 07:03:51 MST 2005


Mine does business lookups properly, and also uses a mySQL database to
cache results (and allows you to store your own results):

http://www.muware.com/asterisk/

And yes, it does both google and 411.com, and falls back to telcodata.us
to get CO information if the other two come back empty.  Since it's
already on there, it stores the address in the DB as well, if google or
411 return it.

> -----Original Message-----
> From: Nabeel Jafferali [mailto:asterisk-lists at x2n.ca] 
> Sent: Saturday, May 07, 2005 4:43 PM
> To: 'Asterisk Users Mailing List - Non-Commercial Discussion'
> Subject: RE: [Asterisk-Users] CallerID name lookup AGI script
> 
> 
> BTW This does not do most business name lookups from 411.com 
> correctly. Maybe someone who actually knows Perl can do that :)
> 
> --
> Nabeel Jafferali
> X2 Networks
> www.x2n.ca
> T: 1.647.722.6900
>    1.877.VOIP.X2N
> F: 1.866.655.6698
> FWD: 46990
> 
> 
> > -----Original Message-----
> > From: asterisk-users-bounces at lists.digium.com 
> [mailto:asterisk-users- 
> > bounces at lists.digium.com] On Behalf Of Nabeel Jafferali
> > Sent: May 7, 2005 5:35 PM
> > To: 'Asterisk Users Mailing List - Non-Commercial Discussion'
> > Subject: RE: [Asterisk-Users] CallerID name lookup AGI script
> > 
> > Jim:
> > 
> > I modified your script to first look up Google and then look up 
> > 411.com. It's better for me, because 411.com has Canadian listings 
> > too. I still left Google in because it's much faster and if it has 
> > information, I'd rather use
> > that. I removed the area code thing because it's no use to 
> me. I also
> > removed the reversing first/last names thing that you did.
> > 
> > Here's the code:
> > 
> > #!/usr/bin/perl
> > use Asterisk::AGI;
> > $AGI = new Asterisk::AGI;
> > $number = $ARGV[0];
> > $found = 0;
> > 
> > open(RESULTS, "/usr/bin/curl -s -m 2 -A Mozilla/4.0 
> > http://www.google.com/search?q=phonebook:$number |"); while 
> > (<RESULTS>) {
> >   if (m/Residential Phonebook/ || m/Business Phonebook/) {
> >     $found = 1;
> >     @fields = split(/>/);
> >     @result = split(/-/, $fields[35]);
> >     chop($result[0]);
> >     $name = $result[0];
> >   }
> >   if (m/did not match any/) {
> >     $found = 0;
> >   }
> > }
> > 
> > if ($found == 0) {
> >   open(RESULTS, "/usr/bin/curl -s -m 2 -A Mozilla/4.0 
> > http://www.411.com/10668/search/Reverse_Phone?phone=$number |");
> >   while (<RESULTS>) {
> >     if (m/__FIRST/) {
> >       $found = 1;
> >       @fname = split(/\"/);
> >     }
> >     elsif (m/__LAST/) {
> >       @lname = split(/\"/);
> >       $name = $fname[1] . " " .$lname[1];
> >     }
> >   }
> > }
> > 
> > $AGI->set_variable('googlename', "\"$name\"");
> > 
> > --
> > Nabeel Jafferali
> > X2 Networks
> > www.x2n.ca
> > T: 1.647.722.6900
> >    1.877.VOIP.X2N
> > F: 1.866.655.6698
> > FWD: 46990
> > 
> > > -----Original Message-----
> > > From: asterisk-users-bounces at lists.digium.com 
> > > [mailto:asterisk-users- bounces at lists.digium.com] On 
> Behalf Of Jim 
> > > Meehan
> > > Sent: April 9, 2005 3:05 PM
> > > To: asterisk-users at lists.digium.com
> > > Subject: [Asterisk-Users] CallerID name lookup AGI script
> > >
> > > Hi all,
> > >
> > > My VoIP provider (race.com) doesn't send name info with 
> CallerID, so 
> > > I wrote an AGI script that does the following:
> > >
> > > 1) If it's a toll free number (800|888|877|866), set the CallerID 
> > > name
> > to
> > > "TollFree Caller"
> > > 2) Use curl to look up the number in Google phonebook
> > > 3) If a business listing, set the CallerID name to 
> business name, as 
> > > is.
> > > 4) If it's a residential listing, reverse the listing so 
> it's last name
> > > first,
> > > then set the CallerID name to that.
> > > 5) If there's no match in Google phonebook, look up the NPA/NXX on
> > > www.areacodedownload.com and set the CallerID name to 
> "@ST RATECENTER"
> > > where
> > > "ST" is the two-letter state abbreviation, and 
> "RATECENTER" is the name
> > of
> > > telco rate center in that state.
> > >
> > > Thought some of you might find this AGI script useful, so I'm 
> > > including
> > it
> > > below.  It requires the Asterisk::AGI perl module.
> > >
> > > There are other reverse phone lookup sources that are 
> more complete 
> > > than Google's, but they are harder to screen scrape.  Also, I 
> > > probably could have made this a little cleaner if I used 
> the Google 
> > > API rather than screen scraping with curl/perl.  Please 
> feel free to 
> > > take a shot at making any
> > of
> > > those modifications.
> > >
> > > Here's a snippet from my extensions.conf where it gets called:
> > >
> > > exten => s,1,AGI(callerid.agi|${CALLERIDNUM})
> > > exten => s,2,SetCallerId,"${googlename} <${CALLERIDNUM}>" 
> exten => 
> > > s,3,Dial(${PHONES},30,r) exten => s,4,Answer
> > > exten => s,5,Wait(2)
> > > exten => s,6,Voicemail(u3001)
> > > exten => s,7,Hangup
> > >
> > >
> > > And here's the script:
> > >
> > > #!/usr/bin/perl
> > >
> > > use Asterisk::AGI;
> > >
> > > $AGI = new Asterisk::AGI;
> > >
> > > $number = $ARGV[0];
> > >
> > > if ($number =~ m/(800|888|877|866)\d{7}/) {
> > >   $AGI->set_variable('googlename', "\"TollFree Caller\"");
> > >   exit 0;
> > > }
> > >
> > > open(RESULTS, "/usr/bin/curl -s -m 2 -A Mozilla/4.0 
> > > http://www.google.com/search ?q=phonebook:$number |");
> > >
> > > while (<RESULTS>) {
> > >   if (m/Residential Phonebook/) {
> > >     $reverse = 1;
> > >     @fields = split(/>/);
> > >   }
> > >   if (m/Business Phonebook/) {
> > >     @fields = split(/>/);
> > >   }
> > >   if (m/did not match any/) {
> > >     @digits = split(//, $number);
> > >     $npa = $digits[0] . $digits[1] . $digits[2];
> > >     $nxx = $digits[3] . $digits[4] . $digits[5];
> > >     open(LOCATION, "/usr/bin/curl -s -m 2 -A Mozilla/4.0 
> > > http://www.areacodedown load.com/$npa/$nxx/ |");
> > >     while (<LOCATION>) {
> > >       if (m/>State</) {
> > >         $line = <LOCATION>;
> > >         $line =~ m/\"\#CACACA\">\w* (\w\w)<\/td>/;
> > >         $name = "\@$1";
> > >       }
> > >       if (m/>Rate Center</) {
> > >         $line = <LOCATION>;
> > >         $line =~ m/\"\#CACACA\">((\w|\s)*)<\/td>/;
> > >         $name = $name . " " . $1;
> > >       }
> > >     }
> > >     $AGI->set_variable('googlename', "\"$name\"");
> > >     exit 0;
> > >   }
> > > }
> > >
> > > @result = split(/-/, $fields[35]);
> > > chop($result[0]);
> > > if ($reverse) {
> > >   @words = split(/ /, $result[0]);
> > >   $last = pop(@words);
> > >   unshift(@words, "$last,");
> > >   foreach $word (@words) {
> > >     $name = $name . $word . " ";
> > >   }
> > > }
> > > if ($reverse == 0) {
> > >   $name = $result[0];
> > > }
> > >
> > > $AGI->set_variable('googlename', "\"$name\"");
> > >
> > > _______________________________________________
> > > Asterisk-Users mailing list
> > > Asterisk-Users at lists.digium.com 
> > > http://lists.digium.com/mailman/listinfo/asterisk-users
> > > To UNSUBSCRIBE or update options visit:
> > >    http://lists.digium.com/mailman/listinfo/asterisk-users
> > 
> > 
> > _______________________________________________
> > Asterisk-Users mailing list
> > Asterisk-Users at lists.digium.com 
> > http://lists.digium.com/mailman/listinfo/asterisk-users
> > To UNSUBSCRIBE or update options visit:
> >    http://lists.digium.com/mailman/listinfo/asterisk-users
> 
> 
> _______________________________________________
> Asterisk-Users mailing list
> Asterisk-Users at lists.digium.com 
> http://lists.digium.com/mailman/listinfo/aster> isk-users
> To 
> UNSUBSCRIBE or update options visit:
>    
http://lists.digium.com/mailman/listinfo/asterisk-users






More information about the asterisk-users mailing list