Henry Devito wrote:
I am already doing this with AGI, PERL, and PHP to set up the page
groups. I will release the code as open source if people are
interested. I’m not the best PERL scripter in the world but it works.
Attached is the agi I’m using. This is a modified script from a post on
voip-info. This works with our Cisco’s that are setup like this: Line1
- XXX and Line2 – XXX_i (for intercom).
The modifications from the stock script are paging to SIP/XXX_i (not
SIP/XXX), dynamic conferences based on original callerid, and playing
the beeps (Cisco just answers so this gives users a warning).
There is code to see if SIP/XXX is in use, and if so not to call
SIP/XXX_i, but the users wanted to see all pages so it is commented out.
Zones would be real easy with some arrays (as the conference is dynamic
based on the person calling) and the variables are there to check inuse,
etc.
extensions.conf:
[paging]
exten => *999,1,AGI(page.agi|${CALLERIDNUM})
exten => *999,2,Wait(1)
exten => *999,3,Playback(beep)
exten => *999,4,MeetMe(${CALLERIDNUM},dtqpA)
exten => *999,5,Hangup
[add-to-allcall]
exten => _X.,1,Playback(beep)
exten => _X.,2,MeetMe(${EXTEN},dmqpwx)
exten => _X.,3,Hangup
Really easy to modify. Have fun.
Again this could be cleaner, but I got that other script working and
haven’t had the time or need to clean it up.
Jeb Campbell
jebc@c4solutions.net
#!/usr/bin/perl
allcall.agi will add all your Polycom sip phones to a meet me
conference for use in office wide paging
It takes arguments in the form of SIP/XXXX where XXXX is your
sip extension. (can be any number of digits) The first argument
is the originating caller and additional arguments are any other
phone lines you wish to exclude
use strict;
use File::Copy;
A Few Variables to Set and Initialize
my $outgoing = ‘/var/spool/asterisk/outgoing’;
my $temp = ‘/var/tmp’;
my $asterisk = ‘/usr/sbin/asterisk’;
my $audio_out = ‘console/dsp’;
my @bypass = ();
my @meetme_calls = ();
my @rawsips = ();
my @sips = ();
my @intercoms = ();
my $callerid = “Error”;
Parse out the Sip phones to exclude
This truly shows my lack of understanding of perl
foreach (@ARGV) {
@bypass = split ( / /, $_ );
}
This is our originating caller. I need his
callerid so that others will know who the paging
pest is:
$callerid = $bypass[0];
$callerid =~ s-SIP/–g;
Setup an array with all the sip phones
I think I could use the Asterisk::AGI here
and also the incominglimit in sip.conf to accomplish
this, but I’m not that good.
@rawsips = $asterisk -rx "sip show inuse"
;
chomp(@rawsips);
shift (@rawsips);
shift (@rawsips);
@rawsips = sort (@rawsips);
#Jeb
split to sips and intercoms
@sips = grep ( /^\d{3,4} / , @rawsips );
@intercoms = grep ( /^\d{3,4}_i / , @rawsips );
Now check each sip phone to see if it’s in use and also
against our exclude list. If it passes both, it’s
added to our array of calls to make
foreach (@sips) {
my $sipphone = $1 if /(\d{3,4}) /;
my $sipinuse = substr( $_, 16, 1 );
unless ( grep ( /$sipphone/i, @bypass ) ) {
#if ( grep ( /${sipphone}_i/i , @intercoms ) and $sipinuse == 0 ) {
if ( grep ( /${sipphone}_i/i , @intercoms ) ) {
push ( @meetme_calls, make_call(“SIP/${sipphone}_i”) );
#push ( @meetme_calls, “SIP/${sipphone}_i” );
}
}
}
The array is complete. The push line is uncommented
if you want to add audio out to the intercom
push ( @meetme_calls, make_call(“$audio_out”) );
Now move each call file to the outgoing directory
Here’s some more perl ugly
foreach my $call (@meetme_calls) {
move( “$temp” . ‘/’ . “$call”, “$outgoing” . ‘/’ . “$call” );
}
#print join(“\n”,@meetme_calls) . “\n”;
exit 0;
sub make_call { # makes the call file and returns the name
my $stripslash = $_[0];
$stripslash =~ s////g;
my $tempcall = $temp . ‘/’ . $stripslash . $$;
my $callbase = $stripslash . $$;
open( call, “>$tempcall” );
print call << “EOF”;
Channel: $_[0]
MaxRetries: 1
Retry: 0
RetryTime: 60
Context: add-to-allcall
Extension: $callerid
Priority: 1
SetVar: ALERT_INFO=“Ring Answer”
CallerID: All-Call <$callerid>
EOF
close(call);
return $callbase;
}