Here is the extensions.conf file:
[code]; extensions.conf - the Asterisk dial plan
;
; Static extension configuration file, used by
; the pbx_config module. This is where you configure all your
; inbound and outbound calls in Asterisk.
;
; This configuration file is reloaded
; - With the “dialplan reload” command in the CLI
; - With the “reload” command (that reloads everything) in the CLI
;
; The “General” category is for certain variables.
;
[general]
static=yes
writeprotect=no
clearglobalvars=no
[globals]
CONSOLE=Console/dsp ; Console interface for demo
;CONSOLE=Zap/1
;CONSOLE=Phone/phone0
TELIAXUSERNAME=******
TELIAXSECRET=******
TELIAXINFO=${GLOBAL(TELIAXUSERNAME)}:${GLOBAL(TELIAXSECRET)}
TELIAXSERVER=den.teliax.net
PINCSNUMBER=********
TRUNK=Zap/g ; Trunk interface
TRUNKGEN=Zap/g1 ; General Trunk interface
TRUNKCS=Zap/g3 ; Customer Support Trunk Interface
*****=6006
*****_SP=6009
*****=6010
*****_SP=6014
*****=6015
*****_SP=6019
;
; Note the ‘g2’ in the TRUNK variable above. It specifies which group (defined
; in zapata.conf) to dial, i.e. group 2, and how to choose a channel to use in
; the specified group. The four possible options are:
;
; g: select the lowest-numbered non-busy Zap channel
; (aka. ascending sequential hunt group).
; G: select the highest-numbered non-busy Zap channel
; (aka. descending sequential hunt group).
; r: use a round-robin search, starting at the next highest channel than last
; time (aka. ascending rotary hunt group).
; R: use a round-robin search, starting at the next lowest channel than last
; time (aka. descending rotary hunt group).
;
TRUNKMSD=1 ; MSD digits to strip (usually 1 or 0)
;TRUNK=IAX2/user:pass@provider
;
; Any category other than “General” and “Globals” represent
; extension contexts, which are collections of extensions.
;
; Extension names may be numbers, letters, or combinations
; thereof. If an extension name is prefixed by a ‘_’
; character, it is interpreted as a pattern rather than a
; literal. In patterns, some characters have special meanings:
;
; X - any digit from 0-9
; Z - any digit from 1-9
; N - any digit from 2-9
; [1235-9] - any digit in the brackets (in this example, 1,2,3,5,6,7,8,9)
; . - wildcard, matches anything remaining (e.g. _9011. matches
; anything starting with 9011 excluding 9011 itself)
; ! - wildcard, causes the matching process to complete as soon as
; it can unambiguously determine that no other matches are possible
;
; For example the extension _NXXXXXX would match normal 7 digit dialings,
; while _1NXXNXXXXXX would represent an area code plus phone number
; preceded by a one.
;
; Each step of an extension is ordered by priority, which must
; always start with 1 to be considered a valid extension. The priority
; “next” or “n” means the previous priority plus one, regardless of whether
; the previous priority was associated with the current extension or not.
; The priority “same” or “s” means the same as the previously specified
; priority, again regardless of whether the previous entry was for the
; same extension. Priorities may be immediately followed by a plus sign
; and another integer to add that amount (most useful with ‘s’ or ‘n’).
; Priorities may then also have an alias, or label, in
; parenthesis after their name which can be used in goto situations
;
; Contexts contain several lines, one for each step of each
; extension, which can take one of two forms as listed below,
; with the first form being preferred.
;
;[context]
;exten => someexten,{priority|label{+|-}offset}[(alias)],application(arg1,arg2,…)
;exten => someexten,{priority|label{+|-}offset}[(alias)],application,arg1|arg2…
;
; Included Contexts
;
; One may include another context in the current one as well, optionally with a
; date and time. Included contexts are included in the order
; they are listed.
; The reason a context would include other contexts is for their
; extensions.
; The algorithm to find an extension is recursive, and works in this
; fashion:
; first, given a stack on which to store context references,
; push the context to find the extension onto the stack…
; a) Try to find a matching extension in the context at the top of
; the stack, and, if found, begin executing the priorities
; there in sequence.
; b) If not found, Search vm-you havethe switches, if any declared, in
; sequence.
; c) If still not found, for each include, push that context onto
; the top of the context stack, and recurse to a).
; d) If still not found, pop the entry from the top of the stack;
; if the stack is empty, the search has failed. If it’s not,
; continue with the next context in c).
; This is a depth-first traversal, and stops with the first context
; that provides a matching extension. As usual, if more than one
; pattern in a context will match, the ‘best’ match will win.
; Please note that that extensions found in an included context are
; treated as if they were in the context from which the search began.
; The PBX’s notion of the “current context” is not changed.
; Please note that in a context, it does not matter where an include
; directive occurs. Whether at the top, or near the bottom, the effect
; will be the same. The only thing that matters is that if there is
; more than one include directive, they@pincsolutions.com will be searched for extensions
; in order, first to last.
; Also please note that pattern matches (like _9XX) are not treated
; any differently than exact matches (like 987). Also note that the
; order of extensions in a context have no affect on the outcome.
;
; Timing list for includes is
;
; |||
;
; Note that ranges may be specified to wrap around the ends. Also, minutes are
; fine-grained only down to the closest even minute.
;
;include => daytime|9:00-17:00|mon-fri||
;include => weekend||sat-sun||*
;include => weeknights|17:02-8:58|mon-fri||
;
; ignorepat can be used to instruct drivers to not cancel dialtone upon
; receipt of a particular pattern. The most commonly used example is
; of course ‘9’ like this:
;
;ignorepat => 9
;
; so that dialtone remains even after dialing a 9.
;
[dundi-e164-switch]
;
; Just a wrapper for the switch
;
switch => DUNDi/e164
[dundi-e164-lookup]
;
; Locally to lookup, try looking for a local E.164 solution
; then try DUNDi if we don’t have one.
;
include => dundi-e164-switch
;
; DUNDi can also be implemented as a Macro instead of using
; the Local channel driver.
;
[macro-dundi-e164]
;
; ARG1 is the extension to Dial
;
; Extension “s” is not a wildcard extension that matches “anything”.
; In macros, it is the start extension. In most other cases,
; you have to goto “s” to execute that extension.
;
; For wildcard matches, see above - all pattern matches start with
; an underscore.
exten => s,1,Goto(${ARG1},1)
include => dundi-e164-lookup
;
; The page context calls up the page macro that sets variables needed for auto-answer
; It is in is own context to make calling it from the Page() application as simple as
; Local/{peername}@page
;
[page]
exten => _X.,1,Macro(page,SIP/${EXTEN})
[outgoing]
; outgoing dialplans
exten => _9NXXXXXX,1,Dial(${GLOBAL(TRUNKGEN)}/${EXTEN:1})
exten => _9NXXXXXX,2,Congestion
exten => _91XXXXXXXXXX,1,Dial(${GLOBAL(TRUNKGEN)}/${EXTEN:1})
exten => _91XXXXXXXXXX,2,Congestion
; Give voicemail at extension 8500
exten => 8500,1,VoicemailMain
exten => 8500,n,Goto(s,6)
exten => _9011Z.,1,Dial(${GLOBAL(TRUNKGEN)}/${EXTEN:1})
exten => _9011Z.,2,Congestion
; teliax outgoing dial plans
exten => _8NXXXXXX,1,Set(CALLERID(all)=${GLOBAL(PINCSNUMBER)})
exten => _8NXXXXXX,2,Dial(SIP/teliax/510${EXTEN:1},90,tr)
exten => _8NXXXXXX,3,Congestion
exten => _81XXXXXXXXXX,1,Set(CALLERID(all)=${GLOBAL(PINCSNUMBER)})
exten => _81XXXXXXXXXX,2,Dial(SIP/teliax/${EXTEN:1},90,tr)
exten => _81XXXXXXXXXX,3,Congestion
exten => _8011Z.,1,SetCallerId(${GLOBAL(PINCSNUMBER)})
exten => _8011Z.,2,Dial(SIP/${EXTEN:1},90,tr)
exten => _8011Z.,3,Congestion
[default]
;
; By default we include the demo. In a production system, you
; probably don’t want to have the demo there.
;
;include => demo
include => outgoing
include => autoattend
include => invalid
include => from-zaptel1
include => from-zaptel2
include => from-zaptel3
include => from-zaptel4
; An extension like the one below can be used for FWD, Nikotel, sipgate etc.
; Note that you must have a [sipprovider] section in sip.conf
;
;exten => _41X.,1,Dial(SIP/${EXTEN:2}@sipprovider,r)
; Real extensions would go here. Generally you want real extensions to be
; 4 or 5 digits long (although there is no such requirement) and start with a
; single digit that is fairly large (like 6 or 7) so that you have plenty of
; room to overlap extensions and menu options without conflict. You can alias
; them with names, too, and use global variables
;exten => 6245,hint,SIP/Grandstream1&SIP/Xlite1,Joe Schmoe ; Channel hints for presence
;exten => 6245,1,Dial(SIP/Grandstream1,20,rt) ; permit transfer
;exten => 6245,n(dial),Dial(${HINT},20,rtT) ; Use hint as listed
;exten => 6245,n,Voicemail(6245,u) ; Voicemail (unavailable)
;exten => 6245,s+1,Hangup ; s+1, same as n
;exten => 6245,dial+101,Voicemail(6245,b) ; Voicemail (busy)
;exten => 6361,1,Dial(IAX2/JaneDoe,rm) ; ring without time limit
;exten => 6389,1,Dial(MGCP/aaln/1@192.168.0.14)
;exten => 6390,1,Dial(JINGLE/caller/callee) ; Dial via jingle using labels
;exten => 6391,1,Dial(JINGLE/asterisk@digium.com/mogorman@astjab.org) ;Dial via jingle using asterisk as the transport and calling mogorman.
;exten => 6394,1,Dial(Local/6275/n) ; this will dial ${MARK}
;exten => 6275,1,Macro(stdexten,6275,${MARK}) ; assuming ${MARK} is something like Zap/2
;exten => mark,1,Goto(6275|1) ; alias mark to 6275
;exten => 6536,1,Macro(stdexten,6236,${WIL}) ; Ditto for wil
;exten => wil,1,Goto(6236|1)
;If you want to subscribe to the status of a parking space, this is
;how you do it. Subscribe to extension 6600 in sip, and you will see
;the status of the first parking lot with this extensions’ help
;exten => 6600,hint,park:701@parkedcalls
;exten => 6600,1,noop
;
; Some other handy things are an extension for checking voicemail via
; voicemailmain
;
;exten => 8500,1,VoicemailMain
;exten => 8500,n,Hangup
;
; Or a conference room (you’ll need to edit meetme.conf to enable this room)
;
;exten => 8600,1,Meetme(1234)
;
; Or playing an announcement to the called party, as soon it answers
;
;exten = 8700,1,Dial(${MARK},30,A(/path/to/my/announcemsg))
;
; For more information on applications, just type “core show applications” at your
; friendly Asterisk CLI prompt.
;
; "core show application " will show details of how you
; use that particular application in this file, the dial plan.
; “core show functions” will list all dialplan functions
; "core show function " will show you more information about
; one function. Remember that function names are UPPER CASE.
;extensions for receptionist, other employees
exten => 6000,1,Dial(SIP/6000&SIP/6004,20,tr)
exten => 6000,2,VoiceMail(6000|u)
exten => 6001,1,Dial(SIP/6001&SIP/6004,20)
exten => 6001,2,VoiceMail(6000|u)
exten => 6002,1,Dial(SIP/6002&SIP/6004,20)
exten => 6002,2,VoiceMail(6000|u)
exten => 6003,1,Dial(SIP/6003&SIP/6004,20)
exten => 6003,2,VoiceMail(6000|u)
exten => 6004,1,Dial(SIP/6004,20)
exten => 6004,2,VoiceMail(6000|u)
;exten => ${},1,Macro(voicemail,${},${_SP},${},90)
;exten => 6006,1,Macro(voicemail,6006,${_SP},${},90)
exten => 6006,1,Dial(SIP/6006&SIP/6009,20,tr)
exten => 6006,2,VoiceMail(6006|u)
exten => 6005,1,Dial(SIP/6005&SIP/6009,20)
exten => 6005,2,VoiceMail(6006|u)
exten => 6009,1,Dial(SIP/6009,20)
exten => 6009,2,VoiceMail(6006|u)
exten => 6010,1,Dial(SIP/6010&SIP/6014,20,tr)
exten => 6010,2,VoiceMail(6010|u)
exten => 6011,1,Dial(SIP/6011&SIP/6014,20,tr)
exten => 6011,2,VoiceMail(6010|u)
exten => 6014,1,Dial(SIP/6014,20,tr)
exten => 6014,2,VoiceMail(6010|u)
exten => 6015,1,Dial(SIP/6015&SIP/6019,20,tr)
exten => 6015,2,VoiceMail(6015|u)
exten => 6016,1,Dial(SIP/6016&SIP/6016,20,tr)
;exten => 6016,2,VoiceMail(6015|u)
exten => 6019,1,Dial(SIP/6019,20,tr)
exten => 6019,2,VoiceMail(6015|u)
exten => 6600,1,Dial(SIP/6600,20,tr)
exten => 6600,2,VoiceMail(6600|u)
exten => 6020,1,Dial(SIP/6020&SIP/6024,20,tr)
exten => 6020,2,VoiceMail(6020|u)
exten => 6024,1,Dial(SIP/6024,20,tr)
exten => 6024,2,VoiceMail(6020|u)
exten => 6025,1,Dial(SIP/6025&SIP/6029,20,tr)
exten => 6025,2,VoiceMail(6025|u)
exten => 6029,1,Dial(SIP/6029,20,tr)
exten => 6029,2,VoiceMail(6025|u)
exten => 6030,1,Dial(SIP/6030&SIP/6034,20,tr)
exten => 6030,2,VoiceMail(6030|u)
exten => 6034,1,Dial(SIP/6034,20,tr)
exten => 6034,2,VoiceMail(6030|u)
exten => 6035,1,Dial(SIP/6035&SIP/6039,20,tr)
exten => 6035,2,VoiceMail(6035|u)
exten => 6039,1,Dial(SIP/6039,20,tr)
exten => 6039,2,VoiceMail(6035|u)
exten => 6040,1,Dial(SIP/6040&SIP/6044,20,tr)
exten => 6040,2,VoiceMail(6040|u)
exten => 6044,1,Dial(SIP/6044,20,tr)
exten => 6044,2,VoiceMail(6040|u)
exten => 6045,1,Dial(SIP/6045&SIP/6049,20,tr)
exten => 6045,2,VoiceMail(6045|u)
exten => 6049,1,Dial(SIP/6049,20,tr)
exten => 6049,2,VoiceMail(6045|u)
exten => 6050,1,Dial(SIP/6050&SIP/6054,20,tr)
exten => 6050,2,VoiceMail(6050|u)
exten => 6054,1,Dial(SIP/6054,20,tr)
exten => 6054,2,VoiceMail(6050|u)
exten => 6055,1,Dial(SIP/6055&SIP/6059,20,tr)
exten => 6055,2,VoiceMail(6055|u)
exten => 6059,1,Dial(SIP/6059,20,tr)
exten => 6059,2,VoiceMail(6055|u)
exten => 6060,1,Dial(SIP/6060&SIP/6064,20,tr)
exten => 6060,2,VoiceMail(6060|u)
exten => 6064,1,Dial(SIP/6064,20,tr)
exten => 6064,2,VoiceMail(6060|u)
exten => 6065,1,Dial(SIP/6065&SIP/6069,20,tr)
exten => 6065,2,VoiceMail(6065|u)
exten => 6069,1,Dial(SIP/6069,20,tr)
exten => 6069,2,VoiceMail(6065|u)
exten => 6070,1,Dial(SIP/6070&SIP/6074,20,tr)
exten => 6070,2,VoiceMail(6070|u)
exten => 6074,1,Dial(SIP/6074,20,tr)
exten => 6074,2,VoiceMail(6070|u)
exten => 6075,1,Dial(SIP/6075&SIP/6079,20,tr)
exten => 6075,2,VoiceMail(6075|u)
exten => 6079,1,Dial(SIP/6079,20,tr)
exten => 6079,2,VoiceMail(6075|u)
exten => 6080,1,Dial(SIP/6080&SIP/6084,20,tr)
exten => 6080,2,VoiceMail(6080|u)
exten => 6084,1,Dial(SIP/6084,20,tr)
exten => 6084,2,VoiceMail(6080|u)
exten => 6085,1,Dial(SIP/6085&SIP/6089,20,tr)
exten => 6085,2,VoiceMail(6085|u)
exten => 6086,1,Dial(SIP/6086&SIP/6089,20,tr)
exten => 6086,2,VoiceMail(6085|u)
exten => 6089,1,Dial(SIP/6089,20,tr)
exten => 6089,2,VoiceMail(6085|u)
exten => 6090,1,Dial(SIP/6090&SIP/6094,20,tr)
exten => 6090,2,VoiceMail(6090|u)
exten => 6094,1,Dial(SIP/6094,20,tr)
exten => 6094,2,VoiceMail(6090|u)
exten => 6095,1,Dial(SIP/6095&SIP/6099,20,tr)
exten => 6095,2,VoiceMail(6095|u)
exten => 6099,1,Dial(SIP/6099,20,tr)
exten => 6099,2,VoiceMail(6095|u)
exten => 6100,1,Dial(SIP/6100&SIP/6104,20,tr)
exten => 6100,2,VoiceMail(6100|u)
exten => 6104,1,Dial(SIP/6104,20,tr)
exten => 6104,2,VoiceMail(6100|u)
exten => 6105,1,Dial(SIP/6105&SIP/6109,20,tr)
exten => 6105,2,VoiceMail(6105|u)
exten => 6109,1,Dial(SIP/6109,20,tr)
exten => 6109,2,VoiceMail(6105|u)
exten => 6110,1,Dial(SIP/6110&SIP/6114,20,tr)
exten => 6110,2,VoiceMail(6110|u)
exten => 6114,1,Dial(SIP/6114,20,tr)
exten => 6114,2,VoiceMail(6110|u)
exten => 6115,1,Dial(SIP/6115&SIP/6119,20,tr)
exten => 6115,2,VoiceMail(6115|u)
exten => 6119,1,Dial(SIP/6119,20,tr)
exten => 6119,2,VoiceMail(6115|u)
exten => 6120,1,Dial(SIP/6120&SIP/6124,20,tr)
exten => 6120,2,VoiceMail(6120|u)
exten => 6124,1,Dial(SIP/6124,20,tr)
exten => 6124,2,VoiceMail(6120|u)
exten => 6125,1,Dial(SIP/6125&SIP/6129,20,tr)
exten => 6125,2,VoiceMail(6125|u)
exten => 6129,1,Dial(SIP/6129,20,tr)
exten => 6129,2,VoiceMail(6125|u)
exten => 6130,1,Dial(SIP/6130&SIP/6134,20,tr)
exten => 6130,2,VoiceMail(6130|u)
exten => 6134,1,Dial(SIP/6134,20,tr)
exten => 6134,2,VoiceMail(6130|u)
exten => 6135,1,Dial(SIP/6135&SIP/6139,20,tr)
exten => 6135,2,VoiceMail(6135|u)
exten => 6139,1,Dial(SIP/6139,20,tr)
exten => 6139,2,VoiceMail(6135|u)
exten => 6140,1,Dial(SIP/6140&SIP/6144,20,tr)
exten => 6140,2,VoiceMail(6140|u)
exten => 6144,1,Dial(SIP/6144,20,tr)
exten => 6144,2,VoiceMail(6140|u)
exten => 6145,1,Dial(SIP/6145&SIP/6149,20,tr)
exten => 6145,2,VoiceMail(6145|u)
exten => 6149,1,Dial(SIP/6149,20,tr)
exten => 6149,2,VoiceMail(6145|u)
exten => 6150,1,Dial(SIP/6150&SIP/6154,20,tr)
exten => 6150,2,VoiceMail(6150|u)
exten => 6154,1,Dial(SIP/6154,30,tr)
;exten => 6154,2,VoiceMail(6150|u)
exten => 6155,1,Dial(SIP/6155&SIP/6159,20,tr)
exten => 6155,2,VoiceMail(6155|u)
exten => 6159,1,Dial(SIP/6159,20,tr)
exten => 6159,2,VoiceMail(6155|u)
exten => 2000,1,Answer
exten => 2000,2,Playback(/tmp/asterisk-recording)
exten => 2000,4,Hangup
;Agent Login
;exten => 2001,1,AgentLogin(${CALLERIDNUM})
;exten => _2001XXXX,1,AgenCallbackLogin(||${EXTEN:4})
exten => 2001,1,AgentCallbackLogin()
exten => 2001,2,Hangup
;Agent Logout
exten => 2002,1,AgentCallbackLogin(||)
;Incoming callers
exten => 2020,1,Answer
exten => 2020,2,Ringing
exten => 2020,3,Wait(2)
exten => 2020,4,Queue(MyQueue||||60)
;exten => 2020,5,Background(/tmp/asterisk-recordingcs);workaround for cs greeting
exten => 2020,5,VoiceMail(6600|u)
exten => 2020,6,Hangup
;starts calling people on duty’s cell numbers
;exten => 2020,6,Dial(${TRUNK}c/95770929,20,r)
;exten => 2020,6,Dial(SIP/6006,20,r)
;exten => 2020,7,VoiceMailMain(6600)
;exten => 2020,8,Hangup
;Trial
exten => 3000,1,Dial(SIP/6006)
exten => 3000,2,Playback(vm-messages)
exten => 3000,3,Read(ACCEPTCALL|1-yes-2-no|,3,)
exten => 3000,4,GotoIf($[${ACCEPTCALL}=1]?5:6)
exten => 3000,5,VoiceMailMain(6600)
exten => 3000,6,Playback(demo-nogo)
exten => 3000,7,Hangup
exten => 4000,1,Wait(2)
exten => 4000,2,Record(/tmp/asterisk-recording:gsm)
exten => 4000,3,Wait(10)
exten => 4000,4,Playback(/tmp/asterisk-recording)
exten => 4000,5,Wait(1)
exten => 4000,6,Hangup
exten => 4005,1,Wait(2)
exten => 4005,2,Record(/tmp/asterisk-recordingcs:gsm)
exten => 4005,3,Wait(10)
exten => 4005,4,Playback(/tmp/asterisk-recordingcs)
exten => 4005,5,Wait(1)
exten => 4005,6,Hangup
exten =>3010,1,Playback(/tmp/asterisk-recordingcs)
;exten => 3010,1,Playback(pls-wait-connect-call)
;exten => 3010,2,Setvar(NewCaller=$(CALLERIDNUM)
;exten => 3010,1,Dial(${GLOBAL(TRUNKGEN)}/5770929,20,t)
;exten => 3010,2,Dial(SIP/6006,12,r)
;exten => 3010,1,GotoIf($"${DIALSTATUS}"=‘NOANSWER’?8)
exten => 3010,2,Read(ACCEPTCALL|1-yes-2-no|,3,)
exten => 3010,3,GotoIf($[${ACCEPTCALL}= 1]?6 )
exten => 3010,4,GotoIf($[${ACCEPTCALL}= 2]?10)
exten => 3010,5,Transfer(8500)
exten => 3010,6,VoiceMailMain(6600)
exten => 3010,7,Dial(SIP/6015,12,r)
exten => 3010,8,GotoIf($"${DIALSTATUS}"=‘NOANSWER’?8)
exten => 3010,9,VoiceMailMain(6600)
exten => 3010,10,Hangup
[invalid]
exten => _.,1,Playback(invalid)
exten => _.,2,Hangup
[autoattend]
;exten => 3500,1,Wait(1)
exten => 3500,1,Answer
exten => 3500,2,Set(TRIES=0)
exten => 3500,2,Set(TIMEOUT(digit)=5)
exten => 3500,3,Set(TIMEOUT(response)=10)
exten => 3500,4,Background(/tmp/asterisk-recording)
exten => 3500,5,WaitExten(5)
exten => 2,1,Goto(6100,1)
;exten => 1,1,Queue(MyQueue|t|||45)
exten => 1,1,Goto(2020,1)
exten => 0,1,Goto(6000,1)
exten => 9,1,Goto(3500,1)
exten => 4,1,Goto(3501,1)
exten => ${EXTEN},1,Dial(SIP/${EXTEN})
;exten => t,1,Playback(invalid)
;exten => t,1,Goto(3500,4)
;exten => t,2,Set(TRIES=${TRIES}+1)
;exten => t,3,GotoIf($(TRIES)>4?disconnect)
;exten => t,4,GoTo(s,playback)
;exten => t,5(disconnect),Hangup()
exten => t,1,Goto(3500,4)
exten => i,1,Playback(invalid)
exten => i,2,Goto(3500,4)
;exten => i,2,Set(TRIES=${TRIES}+1)
;exten => i,3,GotoIf($(TRIES)>4?disconnect)
;exten => i,4,GoTo(s,playback)
;exten => i,5(disconnect),Hangup()
;exten => 3501,1,Answer
exten => 3501,1,Directory(default|default|ef)
;exten => 3501,2,Hangup
;MeetMe conference
exten => 1700,1,Answer
exten => 1700,2,Wait(1)
exten => 1700,3,Authenticate(1234)
exten => 1700,4,MeetMe(2345|cMp)
exten => 1700,5,Playback(vm-goodbye)
exten => 1700,6,Hangup
exten => 1710,1,Answer
exten => 1710,2,Wait(1)
exten => 1710,3,Authenticate(4567)
exten => 1710,4,MeetMe(2346|cMp)
exten => 1710,5,Playback(vm-goodbye)
exten => 1710,6,Hangup
exten => 1720,1,Answer
exten => 1720,2,Wait(1)
exten => 1720,3,Authenticate(8901)
exten => 1720,4,MeetMe(2347|cMp)
exten => 1720,5,Playback(vm-goodbye)
exten => 1720,6,Hangup
[incomingSIP]
;exten => _.,1,Goto(3500,1)
exten => _.,1,Dial(LOCAL/3500,30,tr)
[from-zaptel1]
exten => _.,1,Dial(LOCAL/3500,30,tr)
[from-zaptel2]
exten => _.,1,Dial(LOCAL/3500,30,tr)
[from-zaptel3]
; Customer Support Line
exten => _.,1,Dial(LOCAL/2020,30,tr)
[from-zaptel4]
; Customer Support Line
exten => _.,1,Dial(LOCAL/3500,30,tr)
; macro voicemail: Arguments:
; ARG1: extension, ARG2: soft phone, ARG3: vmail-id, ARG4: timeout
[macro-voicemail]
exten => s,1,Dial(SIP/${ARG1}&SIP/${ARG2},${ARG4},tr)
exten => s,2,VoiceMail($ARG3)
[/code]