Paging: Difference between revisions

From KlavoWiki
Jump to navigationJump to search
No edit summary
Line 107: Line 107:
exten => *61,n,Set(_ALERT_INFO="Ring Answer")
exten => *61,n,Set(_ALERT_INFO="Ring Answer")
exten => *61,n,SIPAddHeader(Call-Info: answer-after=0)
exten => *61,n,SIPAddHeader(Call-Info: answer-after=0)
exten => *61,n,Page(SIP/201& SIP/202& SIP/203)
exten => *61,n,Page(SIP/201&SIP/202&SIP/203)
exten => *61,n,Hangup()
exten => *61,n,Hangup()
</pre>
</pre>


[[Category : Asterisk]]
[[Category : Asterisk]]

Revision as of 00:05, 21 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.

This procedure will do a search for all registered phones and use hints to find the status of an extension.

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()


Alternative Method

An alternative method if you would just like to page a small number of phones either by creating a global variable or by entering the phones into the Page application would be to use the following dial plan.

This example will page 3 extensions 201, 202 and 203.

exten => *61,1,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(SIP/201&SIP/202&SIP/203)
exten => *61,n,Hangup()