[macro-stdexten]
;
; Standard extension macro:
; ${ARG1} - Device(s) to ring
; ${ARG2} - flags for Dial: if empty: tr. pass '-' for no flags.
; ${ARG3} - voicemail box. If empty: use the extension number.
exten => s,1,SetVar(VMBOX=${MACRO_EXTEN}); default for VMBOX, if no ARG3
exten => s,2,GotoIf($[${LEN(${ARG3})} > 0]?4)
exten => s,3,SetVar(VMBOX=${ARG3})
; Ring the interface, 20 seconds maximum
exten => s,4,SetVar(FLAGS=tr)
; why 'x'? see bourne shell 101
exten => s,5,GotoIf($[ "x${ARG2}" : x- ]:7); '-' as the 'flags' argument
exten => s,6,SetVar(FLAGS=${ARG2})
exten => s,7,Dial(${ARG1},20,${ARG2})
; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
exten => s,8,Goto(s-${DIALSTATUS},1)
; If unavailable, send to voicemail w/ unavail announce
exten => s-NOANSWER,1,Voicemail(u${VMBOX})
; If they press #, return to start
exten => s-NOANSWER,2,Goto(default,s,1)
; If busy, send to voicemail w/ busy announce
exten => s-BUSY,1,Voicemail(b${VMBOX})
; If they press #, return to start
exten => s-BUSY,2,Goto(default,s,1)
; Treat anything
exten => _s-.,1,Goto(s-NOANSWER,1)
;