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