Asterisk NetCID
Created by: bromont,Last modification on Wed 21 of Mar, 2007 [05:13 UTC]
NetCID is a free network callerid popup program from Imptec and can be used with an AGI script called from Asterisk for talking callerid notification.
NetCID can be downloaded here:
place the following script in /var/lib/asterisk/agi-bin/
ncid.agi:
open STDOUT, '>/dev/null';
fork and exit;
my $timedata = localtime(time);
my $cidnum = $ARGV[0];
my $cidname = $ARGV[1];
my $MSG1 = "STAT Get the Phone!!!";
my $MSG2 = "RING";
my $MSG3 = "NAME $cidname";
my $MSG4 = "TTSN Call from $cidname";
my $MSG5 = "NMBR $cidnum";
my $MSG6 = "TYPE U";
my $MSG7 = "IDLE $timedata";
my $ipaddr=192.168.0.255;
my $portnum=42685;
socket(SOCKET, PF_INET, SOCK_DGRAM, getprotobyname("udp")) or die "socket: $!";
setsockopt(SOCKET, SOL_SOCKET, SO_BROADCAST, 1) or die "setsockopt: $!\n";
send(SOCKET, $MSG1, 0, sockaddr_in($portnum,$ipaddr)) or die "cannot send to $HOSTNAME($PORTNO): $!";
send(SOCKET, $MSG2, 0, sockaddr_in($portnum,$ipaddr)) or die "cannot send to $HOSTNAME($PORTNO): $!";
send(SOCKET, $MSG3, 0, sockaddr_in($portnum,$ipaddr)) or die "cannot send to $HOSTNAME($PORTNO): $!";
send(SOCKET, $MSG4, 0, sockaddr_in($portnum,$ipaddr)) or die "cannot send to $HOSTNAME($PORTNO): $!";
send(SOCKET, $MSG5, 0, sockaddr_in($portnum,$ipaddr)) or die "cannot send to $HOSTNAME($PORTNO): $!";
send(SOCKET, $MSG6, 0, sockaddr_in($portnum,$ipaddr)) or die "cannot send to $HOSTNAME($PORTNO): $!";
sleep(5);
send(SOCKET, $MSG2, 0, sockaddr_in($portnum,$ipaddr)) or die "cannot send to $HOSTNAME($PORTNO): $!";
sleep(5);
send(SOCKET, $MSG7, 0, sockaddr_in($portnum,$ipaddr)) or die "cannot send to $HOSTNAME($PORTNO): $!";
close(SOCKET);
exit;
Next add a line to your extensions.conf:
exten => s,1,NoOp(Call from:${CALLERID(all)})
exten => s,n,AGI(ncid.agi|${CALLERID(num)}|${CALLERID(name)})
exten => s,n,Dial(${HOUSEPHONES},,t)
exten => s,n,Hangup
NetCID can be downloaded here:
place the following script in /var/lib/asterisk/agi-bin/
ncid.agi:
- !/usr/bin/perl
open STDOUT, '>/dev/null';
fork and exit;
my $timedata = localtime(time);
my $cidnum = $ARGV[0];
my $cidname = $ARGV[1];
my $MSG1 = "STAT Get the Phone!!!";
my $MSG2 = "RING";
my $MSG3 = "NAME $cidname";
my $MSG4 = "TTSN Call from $cidname";
my $MSG5 = "NMBR $cidnum";
my $MSG6 = "TYPE U";
my $MSG7 = "IDLE $timedata";
my $ipaddr=192.168.0.255;
my $portnum=42685;
socket(SOCKET, PF_INET, SOCK_DGRAM, getprotobyname("udp")) or die "socket: $!";
setsockopt(SOCKET, SOL_SOCKET, SO_BROADCAST, 1) or die "setsockopt: $!\n";
send(SOCKET, $MSG1, 0, sockaddr_in($portnum,$ipaddr)) or die "cannot send to $HOSTNAME($PORTNO): $!";
send(SOCKET, $MSG2, 0, sockaddr_in($portnum,$ipaddr)) or die "cannot send to $HOSTNAME($PORTNO): $!";
send(SOCKET, $MSG3, 0, sockaddr_in($portnum,$ipaddr)) or die "cannot send to $HOSTNAME($PORTNO): $!";
send(SOCKET, $MSG4, 0, sockaddr_in($portnum,$ipaddr)) or die "cannot send to $HOSTNAME($PORTNO): $!";
send(SOCKET, $MSG5, 0, sockaddr_in($portnum,$ipaddr)) or die "cannot send to $HOSTNAME($PORTNO): $!";
send(SOCKET, $MSG6, 0, sockaddr_in($portnum,$ipaddr)) or die "cannot send to $HOSTNAME($PORTNO): $!";
sleep(5);
send(SOCKET, $MSG2, 0, sockaddr_in($portnum,$ipaddr)) or die "cannot send to $HOSTNAME($PORTNO): $!";
sleep(5);
send(SOCKET, $MSG7, 0, sockaddr_in($portnum,$ipaddr)) or die "cannot send to $HOSTNAME($PORTNO): $!";
close(SOCKET);
exit;
Next add a line to your extensions.conf:
exten => s,1,NoOp(Call from:${CALLERID(all)})
exten => s,n,AGI(ncid.agi|${CALLERID(num)}|${CALLERID(name)})
exten => s,n,Dial(${HOUSEPHONES},,t)
exten => s,n,Hangup

Comments
333The same, in Python
333
Asterisk waits until the script finishes without those two lines. We want Asterisk to launch the script then fork the script off to return to dialplan excution.
333
Are those two lines necessary?
open STDOUT, '>/dev/null';
fork and exit;
333Re: No values ?!
333No values ?!
Asterisk says:
— Executing AGI("SIP/41-081b3378", "ncid.agi|41|Alexander") in new stack
— Launched AGI Script /var/lib/asterisk/agi-bin/ncid.agi
— AGI Script ncid.agi completed, returning 0
What could be wrong?