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||) #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]#