Paging: Difference between revisions
From KlavoWiki
Jump to navigationJump to search
Paging moved to Call Without Pickup |
No edit summary |
||
Line 1: | Line 1: | ||
# | The following procedure will allow you to page a group of phones to make an announcement. This will be a non interactive page and only allows the source to make an announcement and the target phones to listen. | ||
Create the following contents called page.agi and copy it to the folder /var/lib/asterisk/agi-bin/ | |||
/var/lib/asterisk/agi-bin/page.agi | |||
<pre> | |||
#!/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+\s.*/, `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; | |||
</pre> | |||
Change the page.agi file to be executable. | |||
<pre> | |||
chmod -x /var/lib/asterisk/agi-bin/page.agi | |||
</pre> | |||
Using the example in this page.agi file you need to create a dial plan so you can page the required phones. The scrip phones all the available phones so you if don’t want to only page a some and not all phones you will need to make sure you exclude the required extensions in priority 2. | |||
<pre> | |||
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() | |||
</pre> | |||
[[Category : Asterisk]] |
Revision as of 23:55, 20 April 2008
The following procedure will allow you to page a group of phones to make an announcement. This will be a non interactive page and only allows the source to make an announcement and the target phones to listen.
Create the following contents called page.agi and copy it to the folder /var/lib/asterisk/agi-bin/
/var/lib/asterisk/agi-bin/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+\s.*/, `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;
Change the page.agi file to be executable.
chmod -x /var/lib/asterisk/agi-bin/page.agi
Using the example in this page.agi file you need to create a dial plan so you can page the required phones. The scrip phones all the available phones so you if don’t want to only page a some and not all phones you will need to make sure you exclude the required extensions in priority 2.
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()