mirror of https://github.com/asterisk/asterisk
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
226 lines
7.7 KiB
226 lines
7.7 KiB
-------------------------------------------------------------------------------
|
|
--- Shared Line Appearances ---------------------------------------------------
|
|
-------------------------------------------------------------------------------
|
|
|
|
-------------------------------------------------------------------------------
|
|
INTRODUCTION
|
|
|
|
The "SLA" functionality in Asterisk is intended to allow a setup that emulates
|
|
a simple key system. It uses the various abstraction layers already built into
|
|
Asterisk to emulate key system functionality across various devices, including
|
|
IP channels.
|
|
-------------------------------------------------------------------------------
|
|
|
|
-------------------------------------------------------------------------------
|
|
DIALPLAN CONFIGURATION
|
|
|
|
The SLA implementation can automatically generate the dialplan necessary for
|
|
basic operation if the "autocontext" option is set for trunks and stations in
|
|
sla.conf. However, for reference, here is an automatically generated dialplan
|
|
to help with custom building of the dialplan to include other features, such as
|
|
voicemail.
|
|
|
|
However, note that there is a little bit of additional configuration needed if
|
|
the trunk is an IP channel. This is discussed in the TRUNKS section.
|
|
|
|
[line1]
|
|
exten => s,1,SLATrunk(line1)
|
|
|
|
[line2]
|
|
exten => s,2,SLATrunk(line2)
|
|
|
|
[sla_stations]
|
|
exten => station1,1,SLAStation(station1)
|
|
exten => station1_line1,hint,SLA:station1_line1
|
|
exten => station1_line1,1,SLAStation(station1_line1)
|
|
exten => station1_line2,hint,SLA:station1_line2
|
|
exten => station1_line2,1,SLAStation(station1_line2)
|
|
|
|
exten => station2,1,SLAStation(station2)
|
|
exten => station2_line1,hint,SLA:station2_line1
|
|
exten => station2_line1,1,SLAStation(station2_line1)
|
|
exten => station2_line2,hint,SLA:station2_line2
|
|
exten => station2_line2,1,SLAStation(station2_line2)
|
|
|
|
exten => station3,1,SLAStation(station3)
|
|
exten => station3_line1,hint,SLA:station3_line1
|
|
exten => station3_line1,1,SLAStation(station3_line1)
|
|
exten => station3_line2,hint,SLA:station3_line2
|
|
exten => station3_line2,1,SLAStation(station3_line2)
|
|
-------------------------------------------------------------------------------
|
|
|
|
-------------------------------------------------------------------------------
|
|
TRUNKS
|
|
|
|
Be sure to configure the trunk's context to be the same one that is set for the
|
|
"autocontext" option in sla.conf if automatic dialplan configuration is used.
|
|
This would be done in the regular device entry in zapata.conf, sip.conf, etc.
|
|
Note that the automatic dialplan generation creates the SLATrunk() extension
|
|
at extension 's'. This is perfect for Zap channels that are FXO trunks, for
|
|
example. However, it may not be good enough for an IP trunk, since the call
|
|
coming in over the trunk may specify an actual number.
|
|
|
|
If the dialplan is being built manually, ensure that calls coming in on a trunk
|
|
execute the SLATrunk() application with an argument of the trunk name, as shown
|
|
in the dialplan example before.
|
|
|
|
IP trunks can be used, but they require some additional configuration to work.
|
|
|
|
For this example, let's say we have a SIP trunk called "mytrunk" that is going
|
|
to be used as line4. Furthermore, when calls come in on this trunk, they are
|
|
going to say that they are calling the number "12564286000". Also, let's say
|
|
that the numbers that are valid for calling out this trunk are NANP numbers,
|
|
of the form _1NXXNXXXXXX.
|
|
|
|
In sip.conf, there would be an entry for [mytrunk]. For [mytrunk],
|
|
set context=line4.
|
|
|
|
|
|
sla.conf:
|
|
|
|
[line4]
|
|
type=trunk
|
|
device=Local/disa@line4_outbound
|
|
|
|
|
|
extensions.conf:
|
|
|
|
[line4]
|
|
exten => 12564286000,1,SLATrunk(line4)
|
|
|
|
[line4_outbound]
|
|
exten => disa,1,Disa(no-password|line4_outbound)
|
|
exten => _1NXXNXXXXXX,1,Dial(SIP/${EXTEN}@mytrunk)
|
|
|
|
|
|
So, when a station picks up their phone and connects to line 4, they are
|
|
connected to the local dialplan. The Disa application plays dialtone to the
|
|
phone and collects digits until it matches an extension. In this case, once
|
|
the phone dials a number like 12565551212, the call will proceed out the
|
|
SIP trunk.
|
|
-------------------------------------------------------------------------------
|
|
|
|
|
|
-------------------------------------------------------------------------------
|
|
STATIONS
|
|
|
|
Currently, the only channel driver that has all of the features necessary to
|
|
support an SLA environment is chan_sip. Here are some hints on configuring
|
|
a SIP phone for use with SLA:
|
|
|
|
1) Add the SIP channel as a [station] in sla.conf.
|
|
|
|
2) Configure the phone in sip.conf. If automatic dialplan configuration was
|
|
used by enabling the "autocontext" option in sla.conf, then this entry in
|
|
sip.conf should have the same context setting.
|
|
|
|
3) On the phone itself, there are various things that must be configured to
|
|
make everything work correctly:
|
|
|
|
Let's say this phone is called "station1" in sla.conf, and it uses trunks
|
|
named "line1" and line2".
|
|
|
|
a) Two line buttons must be configured to subscribe to the state of the
|
|
following extensions:
|
|
- station1_line1
|
|
- station1_line2
|
|
|
|
b) The line appearance buttons should be configured to dial the extensions
|
|
that they are subscribed to when they are pressed.
|
|
|
|
c) If you would like the phone to automatically connect to a trunk when it
|
|
is taken off hook, then the phone should be automatically configured to
|
|
dial "station1" when it is taken off hook.
|
|
-------------------------------------------------------------------------------
|
|
|
|
|
|
-------------------------------------------------------------------------------
|
|
VOICEMAIL
|
|
|
|
This is an example of how you could set up a single voicemail box for the
|
|
phone system. The voicemail box number used in this example is 1234, which
|
|
would be configured in voicemail.conf.
|
|
|
|
For this example, assume that there are 2 trunks and 3 stations. The trunks
|
|
are Zap/1 and Zap/2. The stations are SIP/station1, SIP/station2, and
|
|
SIP/station3.
|
|
|
|
In zapata.conf, channel 1 has context=line1 and channel 2 has context=line2.
|
|
|
|
In sip.conf, all three stations are configured with context=sla_stations.
|
|
|
|
When the stations pick up their phones to dial, they are allowed to dial
|
|
NANP numbers for outbound calls, or 8500 for checking voicemail.
|
|
|
|
|
|
sla.conf:
|
|
|
|
[line1]
|
|
type=trunk
|
|
device=Local/disa@line1_outbound
|
|
|
|
[line2]
|
|
type=trunk
|
|
device=Local/disa@line2_outbound
|
|
|
|
[station](!)
|
|
type=station
|
|
trunk=line1
|
|
trunk=line2
|
|
|
|
[station1](station)
|
|
device=SIP/station1
|
|
|
|
[station2](station)
|
|
device=SIP/station2
|
|
|
|
[station3](station)
|
|
device=SIP/station3
|
|
|
|
|
|
extensions.conf:
|
|
|
|
[macro-slaline]
|
|
exten => s,1,SLATrunk(${ARG1})
|
|
exten => s,n,Goto(s-${SLATRUNK_STATUS}|1)
|
|
exten => s-FAILURE,1,Voicemail(1234|u)
|
|
exten => s-UNANSWERED,1,Voicemail(1234|u)
|
|
|
|
[line1]
|
|
exten => s,1,Macro(slaline|line1)
|
|
|
|
[line2]
|
|
exten => s,2,Macro(slaline|line2)
|
|
|
|
[line1_outbound]
|
|
exten => disa,1,Disa(no-password|line1_outbound)
|
|
exten => _1NXXNXXXXXX,1,Dial(Zap/1/${EXTEN})
|
|
exten => 8500,1,VoicemailMain(1234)
|
|
|
|
[line2_outbound]
|
|
exten => disa,1,Disa(no-password|line2_outbound)
|
|
exten => _1NXXNXXXXXX,1,Dial(Zap/2/${EXTEN})
|
|
exten => 8500,1,VoicemailMain(1234)
|
|
|
|
[sla_stations]
|
|
|
|
exten => station1,1,SLAStation(station1)
|
|
exten => station1_line1,hint,SLA:station1_line1
|
|
exten => station1_line1,1,SLAStation(station1_line1)
|
|
exten => station1_line2,hint,SLA:station1_line2
|
|
exten => station1_line2,1,SLAStation(station1_line2)
|
|
|
|
exten => station2,1,SLAStation(station2)
|
|
exten => station2_line1,hint,SLA:station2_line1
|
|
exten => station2_line1,1,SLAStation(station2_line1)
|
|
exten => station2_line2,hint,SLA:station2_line2
|
|
exten => station2_line2,1,SLAStation(station2_line2)
|
|
|
|
exten => station3,1,SLAStation(station3)
|
|
exten => station3_line1,hint,SLA:station3_line1
|
|
exten => station3_line1,1,SLAStation(station3_line1)
|
|
exten => station3_line2,hint,SLA:station3_line2
|
|
exten => station3_line2,1,SLAStation(station3_line2)
|
|
|
|
-------------------------------------------------------------------------------
|