diff options
Diffstat (limited to 'trunk/doc/tex/sla.tex')
-rw-r--r-- | trunk/doc/tex/sla.tex | 387 |
1 files changed, 0 insertions, 387 deletions
diff --git a/trunk/doc/tex/sla.tex b/trunk/doc/tex/sla.tex deleted file mode 100644 index afafd2ae4..000000000 --- a/trunk/doc/tex/sla.tex +++ /dev/null @@ -1,387 +0,0 @@ -%\documentclass[12pt,a4]{article} -%\usepackage{hyperref} - -%\author{Russell Bryant \\ Software Engineer \\ Digium, Inc.} -%\title{Shared Line Appearances} - -%\begin{document} -%\maketitle - -%\tableofcontents - -\section{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. - -\section{Configuration} - -\subsection{Summary} - -An SLA system is built up of virtual trunks and stations mapped to real -Asterisk devices. The configuration for all of this is done in three -different files: extensions.conf, sla.conf, and the channel specific -configuration file such as sip.conf or zapata.conf. - -\subsection{Dialplan} - -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 (\ref{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 section on trunks (\ref{trunks}). - -There are extensions for incoming calls on a specific trunk, which execute the SLATrunk -application, as well as incoming calls from a station, which execute SLAStation. -Note that there are multiple extensions for incoming calls from a station. This is -because the SLA system has to know whether the phone just went off hook, or if the -user pressed a specific line button. - -Also note that there is a hint for every line on every station. This lets the SLA -system control each individual light on every phone to ensure that it shows the -correct state of the line. The phones must subscribe to the state of each of their -line appearances. - -Please refer to the examples section for full dialplan samples for SLA. - -\subsection{Trunks} -\label{trunks} - -An SLA trunk is a mapping between a virtual trunk and a real Asterisk device. -This device may be an analog FXO line, or something like a SIP trunk. A trunk -must be configured in two places. First, configure the device itself in the -channel specific configuration file such as zapata.conf or sip.conf. Once the -trunk is configured, then map it to an SLA trunk in sla.conf. -\begin{astlisting} -\begin{verbatim} -[line1] -type=trunk -device=Zap/1 -\end{verbatim} -\end{astlisting} - -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. - -\begin{astlisting} -\begin{verbatim} -[line4] -type=trunk -device=Local/disa@line4_outbound -\end{verbatim} -\end{astlisting} - -\begin{astlisting} -\begin{verbatim} -[line4] -exten => 12564286000,1,SLATrunk(line4) - -[line4_outbound] -exten => disa,1,Disa(no-password,line4_outbound) -exten => _1NXXNXXXXXX,1,Dial(SIP/${EXTEN}@mytrunk) -\end{verbatim} -\end{astlisting} - -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. - -\subsection{Stations} - -An SLA station is a mapping between a virtual station and a real Asterisk device. -Currently, the only channel driver that has all of the features necessary to -support an SLA environment is chan\_sip. So, to configure a SIP phone to use -as a station, you must configure sla.conf and sip.conf. - -\begin{astlisting} -\begin{verbatim} -[station1] -type=station -device=SIP/station1 -trunk=line1 -trunk=line2 -\end{verbatim} -\end{astlisting} - -Here are some hints on configuring a SIP phone for use with SLA: - -\begin{enumerate} -\item Add the SIP channel as a [station] in sla.conf. - -\item 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. - -\item 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". - \begin{enumerate} - - \item Two line buttons must be configured to subscribe to the state of the - following extensions: - - station1\_line1 - - station1\_line2 - - \item The line appearance buttons should be configured to dial the extensions - that they are subscribed to when they are pressed. - - \item 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. - - \end{enumerate} -\end{enumerate} - - -\section{Configuration Examples} -\subsection{Basic SLA} - -This is an example of the most basic SLA setup. It uses the automatic -dialplan generation so the configuration is minimal. - -sla.conf: -\begin{astlisting} -\begin{verbatim} -[line1] -type=trunk -device=Zap/1 -autocontext=line1 - -[line2] -type=trunk -device=Zap/2 -autocontext=line2 - -[station](!) -type=station -trunk=line1 -trunk=line2 -autocontext=sla_stations - -[station1](station) -device=SIP/station1 - -[station2](station) -device=SIP/station2 - -[station3](station) -device=SIP/station3 -\end{verbatim} -\end{astlisting} - -With this configuration, the dialplan is generated automatically. The first -zap channel should have its context set to "line1" and the second should be -set to "line2" in zapata.conf. In sip.conf, station1, station2, and station3 -should all have their context set to "sla\_stations". - -For reference, here is the automatically generated dialplan for this situation: -\begin{astlisting} -\begin{verbatim} -[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) -\end{verbatim} -\end{astlisting} - -\subsection{SLA and Voicemail} -\label{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: -\begin{astlisting} -\begin{verbatim} -[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 - -\end{verbatim} -\end{astlisting} - -extensions.conf: -\begin{astlisting} -\begin{verbatim} -[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) - -\end{verbatim} -\end{astlisting} - -\section{Call Handling} -\subsection{Summary} - -This section is intended to describe how Asterisk handles calls inside of the -SLA system so that it is clear what behavior is expected. - -\subsection{Station goes off hook (not ringing)} - -When a station goes off hook, it should initiate a call to Asterisk with the -extension that indicates that the phone went off hook without specifying a -specific line. In the examples in this document, for the station named -"station1", this extension is simply named, "station1". - -Asterisk will attempt to connect this station to the first available trunk -that is not in use. Asterisk will check the trunks in the order that they -were specified in the station entry in sla.conf. If all trunks are in use, -the call will be denied. - -If Asterisk is able to acquire an idle trunk for this station, then trunk -is connected to the station and the station will hear dialtone. The station -can then proceed to dial a number to call. As soon as a trunk is acquired, -all appearances of this line on stations will show that the line is in use. - -\subsection{Station goes off hook (ringing)} - -When a station goes off hook while it is ringing, it should simply answer -the call that had been initiated to it to make it ring. Once the station -has answered, Asterisk will figure out which trunk to connect it to. It -will connect it to the highest priority trunk that is currently ringing. -Trunk priority is determined by the order that the trunks are listed in -the station entry in sla.conf. - -\subsection{Line button on a station is pressed} - -When a line button is pressed on a station, the station should initiate a -call to Asterisk with the extension that indicates which line button was -pressed. In the examples given in this document, for a station named -"station1" and a trunk named "line1", the extension would be "station1\_line1". - -If the specified trunk is not in use, then the station will be connected to it and -will hear dialtone. All appearances of this trunk will then show that it -is now in use. - -If the specified trunk is on hold by this station, then this station will be -reconnected to the trunk. The line appearance for this trunk on this station -will now show in use. If this was the only station that had the call on hold, -then all appearances of this trunk will now show that it is in use. Otherwise, -all stations that are not currently connected to this trunk will show it -on hold. - -If the specified trunk is on hold by a different station, then this station -will be connected to the trunk only if the trunk itself and the station(s) that -have it on hold do not have private hold enabled. If connected, the appeareance -of this trunk on this station will then show in use. All stations that are not -currently connected to this trunk will show it on hold. - -%\end{document} |