rendered paste body; Copyright 2006. Core Telecom Innovations ; This file may be modified by the customer for whom it was ; prepared, or their agents.
; All other rights reserved
[general]
[globals]
;**************************
;**** GLOBAL VARIABLES ****
;**************************
; PEERS AND TRUNKS
; POTS = ZAP/G1 ; This is the PSTN group
; changed from starting with highest available channel (G) to starting with lowest (g) due to noise problem on ZAP/21 with outgoing calls
SAN0 = ZAP/g0 ; from-zaptel
SAN1 = ZAP/g1 ; from-internal
SAN2 = ZAP/g2 ; SIP TRUNKS from-zaptel
POTS = ZAP/g1 ; This is the PSTN group
STRS = ZAP/g5 ; This is the new SIP Trunk group
TOLL = ${POTS} ; or perhaps IAX2/user:password@carrier
INTL = ${TOLL} ; or some other IAX2/user:password@carrier
; CORP = IAX2/user:password@headoffice
; VOIP = IAX2/NXXNXXXXXX:pass@iax01.unlimitel.ca
MAINMENUDELAY=1
PLANTMAX=3
varCustom_Prompts_Dir = /opt/prompts/
; SRV2 = IAX2/agility:agility@192.168.7.3
; MISSISSAUGA_EXT= 1905403
; CANADA_JUMP = IAX2/agility_jump:agility@10.10.10.35
; ATLANTA_EXT = ${POTS}/1404564
; ATLANTA_EXT = 1404564
; NPANXX = 704927
MAIN_CALLER_ID = 9056241888
MAIN_CALLER_NM = RAD International Ltd.
; LOCALNPAN = 704:980
#include /etc/asterisk/extensions_users.conf
#include /etc/asterisk/extensions_services.conf
#include /etc/asterisk/extensions_analogue.conf
#include /etc/asterisk/extensions_business_hours.conf
#include /etc/asterisk/extensions_NPAs.conf
#include /etc/asterisk/extensions_locateme.conf
#include /etc/asterisk/voicemail_notification.conf
;**************************
;**** ROUTING CONTEXTS ****
;**************************
[trunks_local]
exten => _8NXXNXXXXXX,1,Set(CALLERID(name)=${MAIN_CALLER_NM})
exten => _8NXXNXXXXXX,n,Set(CALLERID(num)=${MAIN_CALLER_ID})
exten => _8NXXNXXXXXX,n,Dial(${SAN2}/${EXTEN:1}|${forward_bit})
exten => _8NXXNXXXXXX,n,Dial(${SAN0}/${EXTEN:1}|${forward_bit})
exten => _8NXXNXXXXXX,n,Hangup()
exten => _NXXNXXXXXX,1,Set(CALLERID(name)=${MAIN_CALLER_NM})
exten => _NXXNXXXXXX,n,Set(CALLERID(num)=${MAIN_CALLER_ID})
exten => _NXXNXXXXXX,n,Dial(${SAN2}/${EXTEN}|${forward_bit})
exten => _NXXNXXXXXX,n,Dial(${SAN0}/${EXTEN}|${forward_bit})
exten => _NXXNXXXXXX,n,Hangup()
; exten => _9411,1,Authenticate(114)
exten => _8411,1,Dial(${SAN0}/411)
exten => _8411,n,Hangup()
exten => _8310XXXX,1,Dial(${SAN0}/${EXTEN:1})
exten => _8310XXXX,2,Hangup()
[trunks_longdist]
exten => _81NXXNXXXXXX,1,NoOp(${EXTEN})
exten => _81NXXNXXXXXX,n,Set(CALLERID(name)=${MAIN_CALLER_NM})
exten => _81NXXNXXXXXX,n,Set(CALLERID(num)=${MAIN_CALLER_ID})
exten => _81NXXNXXXXXX,n,Noop(--=--> ${EXTEN:2:3}) ; exten => _91NXXNXXXXXX,n, ;
exten => _81NXXNXXXXXX,n,GotoIf($[${EXTEN:2:3} = 416]?:normal_longd) ;
exten => _81NXXNXXXXXX,n,Goto(trunks_local,${EXTEN:2:10},1)
exten => _81NXXNXXXXXX,n(normal_longd),Dial(${SAN0}/${EXTEN:1}|${forward_bit})
exten => _81NXXNXXXXXX,n,Hangup()
exten => _1NXXNXXXXXX,1,NoOp(${EXTEN})
exten => _1NXXNXXXXXX,n,Set(CALLERID(name)=${MAIN_CALLER_NM})
exten => _1NXXNXXXXXX,n,Set(CALLERID(num)=${MAIN_CALLER_ID})
exten => _1NXXNXXXXXX,n,Noop(--=--> ${EXTEN:2:3}) ; exten => _91NXXNXXXXXX,n, ;
exten => _1NXXNXXXXXX,n,GotoIf($[${EXTEN:1:3} = 416]?:normal_longd) ;
exten => _1NXXNXXXXXX,n,Goto(trunks_local,${EXTEN:1:10},1)
exten => _1NXXNXXXXXX,n(normal_longd),Dial(${SAN0}/${EXTEN}|${forward_bit})
exten => _1NXXNXXXXXX,n,Hangup()
include => trunks_local
[trunks_intl]
exten => _8011.,1,Set(CALLERID(num)=${MAIN_CALLER_ID})
exten => _8011.,n,Set(CALLERID(name)=${MAIN_CALLER_NM})
exten => _8011.,n,Dial(${SAN0}/${EXTEN:1},120)
exten => _8011.,n,Playback(please-try-again-later) ;expensive route warning
exten => _8011.,n,Congestion()
exten => _8011.,n,Wait(2)
exten => _8011.,n,Hangup()
include => trunks_longdist
[trunks_plant]
exten => _8NXXNXXXXXX,1,Set(GROUP()=plant_phones)
exten => _8NXXNXXXXXX,n,Gotoif($[${GROUP_COUNT()} > ${PLANTMAX}]?maxlinesinuse:linesavail)
exten => _8NXXNXXXXXX,n(linesavail),Dial(${SAN0}/${EXTEN:1})
exten => _8NXXNXXXXXX,n(maxlinesinuse),Playback(all-circuits-busy-now)
exten => _8NXXNXXXXXX,n,Congestion()
exten => _8NXXNXXXXXX,n,Hangup()
[emergency]
; This context MUST be included in any contexts that contain on-site sets
exten => 911,1,MixMonitor(call_to_911_${TIMESTAMP})
exten => 911,n,Dial(${SAN0}/911)
exten => 911,n,Congestion()
exten => 911,n,Hangup()
;**************************
;**** DEVICE & CHANNEL ***
;**** CONTEXTS ***
;**************************
[analogue_incoming]
exten => s,1,Set(ZAPCALL=YES)
exten => s,n,Goto(incoming,s,1)
exten => s,n,Hangup()
[voip_incoming]
exten => s,1,Goto(incoming,s,1)
exten => s,n,Hangup()
include => incoming
[default]
exten => s,1,Goto(incoming,s,1)
include => main_menu
[executive_sets]
include => emergency
include => trunks_intl
include => user_services
include => internal
include => parkedcalls
; include => hints
exten => i,1,Wait(1)
exten => i,n,Playback(invalid)
exten => i,n,Hangup()
[normal_sets]
include => emergency
include => trunks_longdist
include => user_services
include => internal
include => parkedcalls
[plant_phones]
include => emergency
include => trunks_plant
include => user_services
include => internal
include => parkedcalls
[analog_trunk]
; Analog trunks will arrive in this context.
; We'll just drop them into incoming for now.
; Later, we may need to give them special treatment.
exten => s,1,Goto(incoming,s,1)
[user_terminals] ; all sets should enter the dialplan here
include => emergency
include => internal
include => trunks_local
include => user_services
include => hints
; Reception ringer
; exten => 554,1,Dial(SIP/554)
; exten => 554,n,Verbose(3,row 117: ${CHANNEL} :: ${EXTEN})
; exten => 554,n,Voicemail(u${receptionDN})
; exten => 554,n,Hangup()
exten => _X.,1,Noop(-----> ${CHANNEL} <----> ${CUT(CHANNEL,-,1)})
exten => _X.,n,Set(Chan=${CUT(CHANNEL,-,1)})
exten => _X.,n,Set(ChanType=${CUT(Chan,/,1)})
exten => _X.,n,Set(ChanName=${CUT(Chan,/,2)})
exten => _X.,n,Set(Number=${CUT(ChanName,@,1)});
exten => _X.,n,Set(dialed_ext=${EXTEN})
exten => _X.,n,Noop(Chan=${CUT(CHANNEL,-,1)} | ChanType=${CUT(Chan,/,1)} | ChanName=${CUT(Chan,/,2)} | Number=${CUT(ChanName,@,1)} | dialed_ext=${EXTEN})
exten => _X.,n,Gotoif($["${ChanType}"="Zap"]?blind_transfer,1)
exten => _X.,n,Gotoif($[${dialed_ext}=0]?main_menu,0,1)
exten => _X.,n,Gotoif($[ ${ISNULL(${ChanType})} = 0 ]?:nofwd)
exten => _X.,n,Gotoif($["${ChanType}" = "Local"]?:nofwd)
exten => _X.,n,Noop(-----> The channel is Local and it is going to be forwarded <---|)
exten => _X.,n,Set(CALLERID(name)=${MAIN_CALLER_NM})
exten => _X.,n,Set(CALLERID(num)=${MAIN_CALLER_ID})
exten => _X.,n,GotoIf($[${LEN(${Number})}<=9]?fwdin)
exten => _X.,n,GotoIf($[${LEN(${Number})}>12]?fwderr)
exten => _X.,n,Noop(-----> the call is forwarded out: 10 <= length <= 12 --==|)
exten => _X.,n,Set(forward_bit=120)
exten => _X.,n,GotoIf($[$[${LEN(${Number})}=12]&$[${Number:0:2}=81]]?trunks_longdist,${Number:1},1)
exten => _X.,n,GotoIf($[$[${LEN(${number})}=11]&$[${number:0:1}=8]]?trunks_local,${Number:1},1)
exten => _X.,n,GotoIf($[$[${LEN(${Number})}=11]&$[${Number:0:1}=1]]?trunks_longdist,${Number},1)
exten => _X.,n,GotoIf($[$[${LEN(${number})}=10]&$[${REGEX("[2-9]",${number:0:1})}]]?trunks_local,${Number},1)
exten => _X.,n(fwderr),Hangup()
exten => _X.,n(nofwd),Noop(-----> it is not a fwd)
exten => _X.,n,Noop(-----> chanvar: ${chanvar${CUT(${CUT(CHANNEL,-,1)},/,1)}${CUT(${CUT(CHANNEL,-,1)},/,2)}})
exten => _X.,n,GotoIf($[ ${EXISTS(${chanvar${ChanType}${Number}})} = 1]?:invalid)
exten => _X.,n(fwdin),Noop(-----> Internal FWD - EXTEN is: ${EXTEN:0:1} (${EXTEN}))
exten => _X.,n,Set(CALLERID(num)=${CUT(chanvar${ChanType}${Number},:,1)})
exten => _X.,n,Set(CALLERID(name)=${CUT(chanvar${ChanType}${Number},:,2)})
exten => _X.,n,GotoIf($[$[${REGEX("[46]",${EXTEN:0:1})}]&$[${LEN(${EXTEN})}<9]]?internal,${EXTEN},1)
exten => _X.,n,Noop(The DNextn variable contains ${DN${EXTEN}} or does it exist?: ${EXISTS(${DN${EXTEN}})})
exten => _X.,n,GotoIf($[${EXISTS(${DN${EXTEN}})} = 1 ]?valid_internal:non_internal)
exten => _X.,n(valid_internal),Noop(-------> valid_internal <-------)
exten => _X.,n,Goto(internal,${EXTEN},1)
exten => _X.,n,Hangup()
exten => _X.,n(non_internal),Noop(-------> non_internal <-------)
exten => _X.,n,Gotoif($[${ISNULL(${CUT(chanvar${ChanType}${Number},:,3)})}=1]?i,1)
exten => _X.,n,Goto(${CUT(chanvar${ChanType}${Number},:,3)},${EXTEN},1)
exten => _X.,n,Hangup()
exten => _X.,n(invalid),Noop(-------> no valid chanVAR <-------)
exten => _X.,n,Hangup()
exten => h,1,Hangup()
exten => i,1,Congestion()
exten => i,n,Wait(3)
exten => i,n,Hangup()
exten => blind_transfer,1,Noop(-----> about to blind transfer)
exten => blind_transfer,n,Goto(internal,${dialed_ext},1)
;**************************
;**** MAIN DIALPLAN ****
;**************************
[zap_incoming]
exten => s,1,Set(ZAPCALL=YES)
exten => s,n,Goto(incoming,s,1)
exten => s,n,Hangup()
include => incoming
[pri_incoming]
include => incoming
[incoming]
#include /etc/asterisk/extensions_holidays.conf
include => main_menu
#include /etc/asterisk/extensions_dnis.conf
[holiday]
exten => s,1,NoOp(------> Incoming Call from ${CALLERID(name)} <${CALLERID(num)}> --- holiday)
exten => s,n,Answer()
exten => s,n,Background(${varCustom_Prompts_Dir}holiday)
exten => s,n,Goto(main_menu,s,answered)
; exten => s,n,Goto(main_menu,s,closedmenu)
[fax]
; exten => s,1,Wait(1); # incoming fax calls go to Zap/3
; exten => s,n,Answer
exten => s,1,Dial(Zap/3,300)
exten => s,n,Hangup()
exten => fax,1,Goto(s,1)
[security]
exten => s,1,Wait(300)
exten => s,n,hangup()
[main_menu]
exten => s,1,NoOp(--==[ Incoming Call from ${CALLERID(name)} | ${CALLERID(num)} ]==--)
exten => s,n,Answer()
exten => s,n,Wait(${MAINMENUDELAY})
exten => s,n,Background(${varCustom_Prompts_Dir}msg_greeting)
exten => s,n(answered),Background(${varCustom_Prompts_Dir}msg_ifyouknow)
exten => s,n,Background(${varCustom_Prompts_Dir}msg_opt_1)
exten => s,n,Background(${varCustom_Prompts_Dir}msg_opt_2)
exten => s,n,Background(${varCustom_Prompts_Dir}msg_opt_3)
exten => s,n,Background(${varCustom_Prompts_Dir}msg_fordir)
exten => s,n,WaitExten(6)
; exten => s,n,gotoif($[$[${ISNULL(${CALLERID(name)})}=1]&$[${ISNULL(${CALLERID(num)})}=1]]?reception_BUSY,1)
exten => s,n,Goto(0,1)
exten => s,n,Hangup()
exten => 9,1,Directory(default,main_menu,f)
exten => 9,n,goto(s,answered)
; include => parkedcalls
include => internal
include => user_services
;exten => t,1,Goto(user_services,0,1)
; Auto Attendant section 8:45-18:15|mon-fri|*|*
exten => 1,1,Noop(-----> AAT service calls)
exten => 1,n,Wait(1)
exten => 1,n,dial(${DN260})
exten => 1,n,Hangup()
exten => 2,1,Noop(-----> AAT Operations calls)
exten => 2,n,Wait(1)
exten => 2,n,dial(${DN261})
exten => 2,n,Hangup()
exten => 3,1,Noop(-----> AAT ISM calls)
exten => 3,n,Wait(1)
exten => 3,n,dial(${DN265})
exten => 3,n,Hangup()
; exten => 7,1,Noop(--== [ AAT Receptions ] ==--)
; exten => 7,n,dial(${test1},15)
; exten => 7,n,dial(${test2},15)
; exten => 7,n,Goto(reception_${DIALSTATUS},1)
; exten => 7,n,Hangup()
; exten => test_NOANSWER,1,playback(${varCustom_Prompts_Dir}msg_main_vmbox)
; exten => test_NOANSWER,n,Voicemail(277)
; exten => test_NOANSWER,n,Hangup()
exten => 0,1,Noop(--== [ AAT Receptions ] ==--)
exten => 0,n,gotoif($[${ISNULL(${CALLERID(num)})}=1]?no_test)
exten => 0,n,gotoif($[${CALLERID(num)}=17770000007]?s,answered)
exten => 0,n(no_test),dial(${RECPTN},15) ; RECPTN = SIP/2226
exten => 0,n,dial(${RECPTNALT1},15) ; RECPTNALT1 = SIP/2202&SIP/2208
exten => 0,n,Goto(reception_${DIALSTATUS},1)
exten => 0,n,Hangup()
;original flow >>
; exten => reception_NOANSWER,1,playback(${varCustom_Prompts_Dir}msg_main_vmbox)
; exten => reception_NOANSWER,n,Voicemail(${MAINVMB})
; exten => reception_NOANSWER,n,Hangup()
; <<
; new flow to goto after hours >>
exten => reception_NOANSWER,1,GotoIfTime(8:45-18:15|mon-fri|*|*?open_timeout,s,1)
exten => reception_NOANSWER,n,Goto(after_hours,s,1)
exten => reception_NOANSWER,n,Hangup()
; <<
exten => reception_CONGESTION,1,Playback(all-circuits-busy-now)
exten => reception_CONGESTION,n,Playback(hangup-try-again)
exten => reception_CONGESTION,n,Hangup()
exten => reception_BUSY,1,playback(${varCustom_Prompts_Dir}msg_main_vmbox)
exten => reception_BUSY,n,Voicemail(${MAINVMB})
exten => reception_BUSY,n,Hangup()
exten => _reception_.,1,noop(--==[ something else ]==--)
exten => _reception_.,n,goto(reception_NOANSWER,1)
exten => reception_CHANUNAVAIL,1,goto(reception_NOANSWER,1)
exten => a,1,Goto(s,answered)
exten => o,1,Goto(0,1)
; exten => i,1,Wait(1)
; exten => i,n,Background(pbx-invalid)
; exten => i,n,goto(s,answered)
exten => i,1,Playback(pbx-invalid)
exten => i,n,gotoif($[${ISNULL(${CALLERID(num)})}=1]?no_test)
exten => i,n,gotoif($[${CALLERID(num)}=17770000007]?s,answered)
exten => i,n(no_test),Dial(${RECPTN},15)
exten => i,n,Dial(${RECPTNALT2},15)
exten => i,n,Voicemail(${MAINVMB})
exten => i,n,Hangup()
; exten => t,1,Goto(main_menu,0,1)
exten => t,1,Playback(one-moment-please)
exten => t,n,Dial(${RECPTN},15)
exten => t,n,GotoIfTime(8:45-18:15|mon-fri|*|*?open_timeout,s,1)
exten => t,n,Goto(after_hours,s,1)
exten => t,n,Hangup()
[open_timeout]
exten => s,1,playback(${varCustom_Prompts_Dir}msg_main_vmbox)
exten => s,n,Voicemail(${MAINVMB})
exten => s,n,Hangup()
exten => t,1,Hangup()
[after_hours]
exten => s,1,Dial(${ALLPHONE},15)
exten => s,n,Playback(sorry2)
exten => s,n,Playback(please-try-again-later)
exten => s,n,Playback(otherwise)
exten => s,n,Playback(press-1)
exten => s,n,Playback(to-leave-message-for)
exten => s,n,Set(TIMEOUT(response)=2)
exten => s,n,Background(reception)
exten => s,n,waitexten(5)
exten => s,n,goto(t,1)
exten => 1,1,Voicemail(${MAINVMB})
exten => 1,n,Hangup()
exten => t,1,Playback(thanks-for-calling-today)
exten => t,n,Playback(goodbye)
exten => t,n,Hangup()
[internal]
exten => _2XX,1,Noop(---=== [ ${CALLERID(name)} | ${CALLERID(num)} ] ===---)
exten => _2XX,n,Set(dialed_ext=${EXTEN})
exten => _2XX,n,GotoIf($[ ${EXISTS(${DB(remotefwd/${dialed_ext})})} = 1 ]?:normalrouting) ; exten in remote fwd database?
exten => _2XX,n,GotoIf($["${DB(remotefwd/${dialed_ext})}" = "off" ]?normalrouting) ; is the set forwarded?
exten => _2XX,n,GoToIf($[ ${EXISTS(${ZAPCALL})} = 1 ]?:nonflashfwd)
exten => _2XX,n,Noop(-------> ZAPCALL is: ${ZAPCALL})
exten => _2XX,n,GotoIf($[ "${ZAPCALL}" != "YES" ]?nonflashfwd:flashfwd); is the incoming a zap?
exten => _2XX,n,Goto(normalrouting) ; should not get here but still
exten => _2XX,n(flashfwd),Playback(transfer)
; exten => _2XX,n,Set(CALLERID(name)=${MAIN_CALLER_NM})
; exten => _2XX,n,Set(CALLERID(num)=${MAIN_CALLER_ID})
exten => _2XX,n,Flash() ; transfer out from the same circuit
exten => _2XX,n,Wait(1)
exten => _2XX,n,SendDTMF(${DB(remotefwd/${dialed_ext})})
exten => _2XX,n,Wait(1)
exten => _2XX,n,Hangup()
exten => _2XX,n(nonflashfwd),Goto(trunks_longdist,9${DB(remotefwd/${dialed_ext})},1)
exten => _2XX,n(normalrouting),GotoIf($[ ${EXISTS(${DN${dialed_ext}})} = 1 ]?:main_menu,i,1)
; exten => _2XX,n,Set(CALLERID(name)=${IF($[${ISNULL(${CALLERID(name)})}=1]?${MAIN_CALLER_NM}:${CALLERID(name)})})
; exten => _2XX,n,Set(CALLERID(num)=${IF($[${REGEX("([0-9]+){10}",${DN${dialed_ext}})}]?${MAIN_CALLER_ID}:${CALLERID(num)})})
exten => _2XX,n,Gotoif($[ ${ISNULL(${ChanType})} = 0 ]?:origvmbox)
exten => _2XX,n,Gotoif($[ "${ChanType}" = "Local" ]?:origvmbox)
exten => _2XX,n,Noop(--------> keep the the vm box of the orig. caller: Voicemailbox=${Voicemailbox})
exten => _2XX,n,Dial(${DN${dialed_ext}},20,r)
exten => _2XX,n,Hangup()
exten => _2XX,n(origvmbox),Noop(-----> initializing the original voice-mail-box <-----)
exten => _2XX,n,Set(Voicemailbox=${IF($[${ISNULL(${RefVM${dialed_ext}})}=1]?${dialed_ext}:${RefVM${dialed_ext}})})
exten => _2XX,n,Gotoif($["${DN${EXTEN}:0:3}"="SIP"]?:safe_dial)
exten => _2XX,n,Gotoif($[${ISNULL(${SIPPEER(${dialed_ext})})}=1]?s-NOANSWER,1)
exten => _2XX,n,Noop(---> Main Dialplan --- about to dial <---)
exten => _2XX,n(safe_dial),Dial(${DN${dialed_ext}},20)
exten => _2XX,n,Noop(---> Main Dialplan --- about to do a goto internal_noanswer <---)
exten => _2XX,n,Goto(s-${DIALSTATUS},1)
exten => _30[01],1,noop(--==[ sales extensions ]==--)
exten => _30[01],n,GotoIf($[${EXISTS(${DN${EXTEN}})}=1]?:main_menu,i,1)
exten => _30[01],n,goto(${DN${EXTEN}},1)
exten => _[45]00,1,noop(--==[ ISM extensions ]==--)
exten => _[45]00,n,GotoIf($[${EXISTS(${DN${EXTEN}})}=1]?:main_menu,i,1)
exten => _[45]00,n,goto(${DN${EXTEN}},1)
exten => locate_me,1,Noop(-----> locate-me extension reached <------)
exten => locate_me,n,Read(usr_sel,${varCustom_Prompts_Dir}lme_transfer,1,,,4)
exten => locate_me,n,GotoIf($[${ISNULL(${usr_sel})}=1]?s-NOANSWER,vm_route)
exten => locate_me,n,GotoIf($[${usr_sel} = 2]?s-NOANSWER,vm_route)
exten => locate_me,n,GotoIf($[${usr_sel} > 2]?locate_me,1)
exten => locate_me,n,Set(lme_num_cnt=${CUT(DB(locateme/${dialed_ext}),:,2))})
exten => locate_me,n,Set(lme_num=${IF($[${DB_EXISTS(locateme/${dialed_ext}/N1)}=1]?${DB(locateme/${dialed_ext}/N1)}:${DB(locateme/${dialed_ext}/N2)})})
exten => locate_me,n,Dial(${SAN0}/${lme_num},20)
exten => locate_me,n,Goto($[${lme_num_cnt}>1]?:lme_failed)
exten => locate_me,n,Set(lme_num=${DB(locateme/${dialed_ext}/N2)})
exten => locate_me,n,Dial(${SAN0}/${lme_num},20)
exten => locate_me,n(lme_failed),Set(Voicemailbox=${dialed_ext})
exten => locate_me,n,Goto(s-NOANSWER,vm_route);(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,NoOp(Voicemailbox=${Voicemailbox})
; exten => s-NOANSWER,n,GotoIf($[${EXISTS(${DB(locateme/${dialed_ext})})} = 1 ]?:vm_route)
; exten => s-NOANSWER,n,GotoIf($["${CUT(DB(locateme/${dialed_ext}),:,1))}"="ON"]?locate_me,1)
exten => s-NOANSWER,n(vm_route),Gotoif($[${ISNULL(${RefVM${dialed_ext}})}=1]?:user_services,getmailrem${RefVM${dialed_ext}},1)
exten => s-NOANSWER,n,Voicemail(${Voicemailbox},u)
exten => s-NOANSWER,n,Hangup() ;Goto(incoming,s,1) ; If they press #, return to start ${RefIAXVM${dialed_ext}}
exten => s-BUSY,1,Goto(s-NOANSWER,vm_route)
exten => _s-.,1,Goto(s-NOANSWER,1) ; Treat anything else as no answer
exten => a,1,VoicemailMain(${Voicemailbox}) ; If they press *, send the user into VoicemailMain
include => user_services
exten => i,1,Wait(1)
exten => i,n,Hangup()
[virtual_users]
exten => _X.,1,Voicemail(${EXTEN}@default,s)
exten => _X.,n,Goto(incoming,s,1)
exten => _X.,n,Hangup()
[hints]
; exten => 298,hint,SIP/298
exten => 202,hint,SIP/202
; exten => 203,hint,SIP/203
; exten => 204,hint,SIP/204
; exten => 205,hint,SIP/205
; exten => 206,hint,SIP/206
exten => 208,hint,SIP/208
; exten => 210,hint,SIP/210
exten => 211,hint,SIP/211
; exten => 212,hint,SIP/212
; exten => 214,hint,SIP/214
; exten => 215,hint,SIP/215
exten => 216,hint,SIP/216
; exten => 217,hint,SIP/217
; exten => 218,hint,SIP/218
; exten => 219,hint,SIP/219
; exten => 220,hint,SIP/220
; exten => 221,hint,SIP/221
; exten => 222,hint,SIP/222
; exten => 223,hint,SIP/223
; exten => 224,hint,SIP/224
; exten => 225,hint,SIP/225
exten => 226,hint,SIP/226
exten => 227,hint,SIP/227
; exten => 228,hint,SIP/228
; exten => 229,hint,SIP/229
; exten => 231,hint,SIP/231
; exten => 232,hint,SIP/232
; exten => 233,hint,SIP/233
; exten => 234,hint,SIP/234
; exten => 235,hint,SIP/235
exten => 236,hint,SIP/236
; exten => 237,hint,SIP/237
; exten => 238,hint,SIP/238
; exten => 248,hint,SIP/248
; exten => 249,hint,SIP/249
;**************************
;*** Macros ***
;**************************
[speeddialentry]
; Not a literal macro because we want to have a menu ; Context for setting speed dials in ASTDB
exten => s,1,Noop(Speed Dial Editing)
exten => s,n,Answer()
exten => s,n(changesdnum),Read(varSDnum,${varCustom_Prompts_Dir}changesdprompt1,4) ; put prompt wav in middle arg
exten => s,n,Set(varASTDBkey=SpeedDial/${userDN}/${varSDnum})
exten => s,n,GotoIf($["${varSDnum}"="6000"]?invalid:)
exten => s,n,GotoIf($["${varSDnum}"="6100"]?invalid:)
exten => s,n,GotoIf($[${REGEX("6[01][0-9][0-9]",${varSDnum})}]?:invalid)
exten => s,n,GotoIf($["${DB(${varASTDBkey})}"=""]?entersd:checksd)
exten => s,n,Hangup()
exten => s,n(entersd),Noop(Enter Speed Dial)
exten => s,n,Read(varSDDialStr,${varCustom_Prompts_Dir}changesdprompt2)
exten => s,n,Set(DB(${varASTDBkey})=${varSDDialStr})
exten => s,n,Goto(checksd)
exten => s,n(invalid),Playback(invalid)
exten => s,n,Goto(s,changesdnum)
exten => s,n(checksd),Noop(Check Speed Dial)
exten => s,n,Playback(${varCustom_Prompts_Dir}changesdprompt3)
exten => s,n,SayDigits(${DB(${varASTDBkey})})
exten => s,n,Background(${varCustom_Prompts_Dir}changesdprompt4)
exten => s,n,WaitExten(15)
exten => s,n,Hangup()
exten => 1,1,Goto(s,entersd)
exten => 2,1,Goto(s,changesdnum)
exten => i,1,Playback(invalid)
exten => i,n,Goto(s,checksd)
[remote_forwarding]
; Not a literal macro because we want to deal with extens
exten => s,1,Set(EXTENSIONTOFORWARD=${ExtFwd});${EXTEN})
exten => s,n,GotoIf($[ ${DB_EXISTS(remotefwd/${ExtFwd})} = 1 ]?existingfwd:newfwd)
exten => s,n,Hangup()
exten => s,n(newfwd),Noop(went to newfwd)
exten => s,n,Read(REMOTEDESTINATION,${varCustom_Prompts_Dir}EnterRemoteDestination,,,2,2)
exten => s,n,Set(DB(remotefwd/${EXTENSIONTOFORWARD})=${REMOTEDESTINATION})
exten => s,n,GotoIf($[ ${DB(remotefwd/${EXTENSIONTOFORWARD})} = 0 ]?turnfwdoff:fwdon)
exten => s,n,Hangup()
exten => s,n(existingfwd),Noop(went to existingfwd)
exten => s,n,GotoIf($[ ${DB(remotefwd/${EXTENSIONTOFORWARD})} = off]?fwdoff:fwdon) ;Hangup()_XXXX
exten => s,n(fwdon),Noop(ON - fwd is set to ${DB(remotefwd/${EXTENSIONTOFORWARD})})
exten => s,n,Playback(${varCustom_Prompts_Dir}RemoteForwardIsSetTo)
exten => s,n,SayDigits(${DB(remotefwd/${EXTENSIONTOFORWARD})})
exten => s,n,Wait(2)
exten => s,n,Goto(newfwd)
exten => s,n,Hangup()
exten => s,n(fwdoff),Noop(-----> OFF - fwd is set to ${DB(remotefwd/${EXTENSIONTOFORWARD})}) ; external fwd is off
exten => s,n,Background(${varCustom_Prompts_Dir}RemoteForwardIsOff)
exten => s,n,Goto(newfwd)
exten => s,n,Hangup()
exten => s,n(turnfwdoff),Set(DB(remotefwd/${EXTENSIONTOFORWARD})=off)
exten => s,n,Goto(fwdoff)
exten => s,n,Hangup()
exten => i,1,Goto(s,1)
[macro-executive_set]
; ARG1 - dialed extension
; ARG2 - channel to dial
; ARG3 - alternative voicemailbox to use if exist
exten => s,1,Noop(${CALLERID})
exten => s,n,Set(Voicemailbox=${IF($[ ${EXISTS(${ARG3})} = 1 ]?${ARG3}:${ARG1})})
exten => s,n,Dial(${ARG2},20)
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,Voicemail(${Voicemailbox},u)
exten => s-NOANSWER,n,Hangup()
exten => s-BUSY,1,Voicemail(${Voicemailbox},b)
exten => s-BUSY,n,Hangup()
exten => _s-.,1,Goto(s-NOANSWER,1) ; Treat anything else as no answer
exten => a,1,VoicemailMain(${Voicemailbox}) ; If they press *, send the user into VoicemailMain
[macro-reception]
exten => s,1,Dial(${ARG2},20) ; Ring the interface, 20 seconds maximum
exten => s,n,Set(Voicemailbox=${ARG1})
exten => s,n,Goto(s-${DIALSTATUS},1) ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
exten => s-NOANSWER,1,Voicemail(u${ARG1}) ; If unavailable, send to voicemail w/ unavail announce
exten => s-NOANSWER,2,Goto(incoming,s,1) ; If they press #, return to start
exten => s-BUSY,1,Voicemail(b${ARG1}) ; If busy, send to voicemail w/ busy announce
exten => s-BUSY,2,Goto(incoming,s,1) ; If they press #, return to start
exten => _s-.,1,Goto(s-NOANSWER,1) ; Treat anything else as no answer
exten => a,1,VoicemailMain(${ARG1}) ; If they press *, send the user into VoicemailMain
[macro-invalid]
exten => s,1,Playback(invalid)
exten => s,2,Congestion()
exten => s,3,Wait(3)
exten => s,4,Hangup()
[macro-queue_vm]
exten => s,1,Voicemail(${ARG1})
exten => s,n,Hangup()
[macro-alt_number_add]
; ARG1 - cnt_lmn - the number of stored numbers
exten => s,1,Playback(enter-phone-number10)
exten => s,n,Read(alt_num,and-prs-pound-whn-finished,10,,,4)
exten => s,n,GotoIf($[ ${ISNULL(${alt_num})} = 1 ]?s,1)
exten => s,n,Playback(the-num-i-have-is)
exten => s,n,SayDigits(${alt_num})
exten => s,n,Background(to-enter-a-diff-number)
exten => s,n,Background(press-any-key)
exten => s,n,Background(if-correct)
exten => s,n,Background(please-stay-on-the-line)
exten => s,n,Read(try_again,,1,,,2)
exten => s,n,Set(try_again=${IF($[ ${ISNULL(${try_again})} = 1 ]?2:1)}) ; if the choice is null Temp will be 2
exten => s,n,GotoIf($[ ${try_again} = 1 ]?s,1)
exten => s,n,Set(DB(altnumber/${ARG1})=&${SAN0}/${alt_num})
[macro-modify_clid]
[macro-mixmonitor]
[macro-assist_and_mix]
[macro-call_set]
[macro-long_dist_check]
; ${ARG1} - the area phone code
exten => s,1,Noop(---> area code: ${ARG1}) exten => s,n,Set(i_loop=1) exten => s,n,Set(long_dist_prefix=1) exten => s,n,While($[ ${ISNULL(${CUT(LOCALNPAN|:|${i_loop})})} = 0 ]) ;loop if it's not null exten => s,n,Gotoif($[${CUT(LOCALNPAN|:|${i_loop})}=${ARG1}]?:next_in_line)
exten => s,n,Goto(end_of_macro)
exten => s,n(next_in_line),set(i_loop=$[${i_loop}+1])
exten => s,n,EndWhile()
exten => s,n(end_of_macro),Noop(end of macro)
[hangup_end]
exten => h,1,Hangup()