PAGE.AGI
#!/usr/bin/perl
#
# page.agi - Original file was allpage.agi by Rob Thomas 2005.
# With parts of allcall.agi Original file by John Baker
# Modified by Adam Boeglin to allow for paging sccp phones
#Modified/Updated by Jeremy Betts 6/1/2006 for improved efficiency..
# We now use AGI to set the dialplan variable.. much smarter!
#
#
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of Version 2 of the GNU General
# Public License as published by the Free Software Foundation
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# page.agi will find all available sip & sccp phones
# it then sets the dialplan variable PAGE_GROUP to allow
# the phones to be paged with the Page cmd.
#
# This works with both my aastra, polycom, sipura/linksys and cisco sccp phones.
# It should be easily modified for other sip phones
#
# Documentation:
# Add something similar to your dialplan,arguments are extensions to
# to be excluded from the page. Use just the extension numbers.
#
#exten => *61,1,Set(TIMEOUT(absolute) = 15)
#exten => *61,n,AGI(page.agi|<arg>|<arg>)
#exten => *61,n,SetCallerID("Page:${CALLERIDNAME}" <${CALLERIDNUM}>)
#exten => *61,n,Set(_ALERT_INFO="Ring Answer")
#exten => *61,n,SIPAddHeader(Call-Info: answer-after=0)
#exten => *61,n,Page(${PAGE_GROUP})
#exten => *61,n,Hangup()
#
#
#
#use Asterisk::AGI;
use Asterisk::AGI;
$AGI = new Asterisk::AGI;
# set our array of phones that we will NOT be paging
@bypass = "@ARGV";
# Get our needed info for idle sip & sccp phones
@sips = grep(/^\s+\d+.*/, `asterisk -rx "show hints"`);
# Now check each 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
# Then set the dialplan variable thru AGI
foreach $sipline (@sips) {
my ($junk0, $exten, $junk1, $chan, $state, $junk2) = split(/ +/, $sipline,6);
my ($type, $extension) = split(/\//,$chan,2);
unless (($state ne "State:Idle") || (grep(/$exten/i, @bypass))) {
if ($type eq "SCCP") {
my $SCCP = $chan . "/aa=1wu/ringer=outside";
push(@mypage,$SCCP);
} else {
push(@mypage,"$chan");
}
}
}
$page = join("&",@mypage);
$AGI->set_variable("PAGE_GROUP", "$page");
exit;
--ASTERISK OUTPUT FOR "SHOW HINTS"
[root@pbx agi-bin]# asterisk -rx "show hints"
-= Registered Asterisk Dial Plan Hints =-
34@subcontext : SIP/34 State:Unavailable Watchers 0
33@subcontext : SIP/33 State:Idle Watchers 0
32@subcontext : SIP/32 State:Unavailable Watchers 0
31@subcontext : SIP/31 State:Unavailable Watchers 0
30@subcontext : SIP/30 State:Unavailable Watchers 0
29@subcontext : SIP/29 State:Unavailable Watchers 0
28@subcontext : SIP/28 State:Unavailable Watchers 0
27@subcontext : SIP/27 State:Unavailable Watchers 0
26@subcontext : SIP/26 State:Idle Watchers 0
25@subcontext : SIP/25 State:Unavailable Watchers 0
24@subcontext : SIP/24 State:Idle Watchers 0
23@subcontext : SIP/23 State:Idle Watchers 0
22@subcontext : SIP/22 State:Idle Watchers 0
21@subcontext : SIP/21 State:Idle Watchers 0
20@subcontext : SIP/20 State:Idle Watchers 0
19@subcontext : SIP/19 State:InUse Watchers 0
18@subcontext : SIP/18 State:Idle Watchers 0
17@subcontext : SIP/17 State:Idle Watchers 0
16@subcontext : SIP/16 State:Idle Watchers 0
15@subcontext : SIP/15 State:Idle Watchers 0
14@subcontext : SIP/14 State:Idle Watchers 0
13@subcontext : SIP/13 State:InUse Watchers 0
12@subcontext : SIP/12 State:Idle Watchers 0
11@subcontext : SIP/11 State:Idle Watchers 0
10@subcontext : SIP/10 State:Idle Watchers 0
----------------
- 25 hints registered
Verbosity is at least 3
[root@pbx agi-bin]#