; ; Standard Macros For Stirling/BTEL VOXNet VoIP Network ; [macro-std-exten] ; ; Standard extension w/voicemail ; exten => s,1,SetVar(SAVED_EXTEN=${MACRO_EXTEN}) exten => s,2,SetVar(SAVED_CONTEXT=${MACRO_CONTEXT}) exten => s,3,Macro(callerid-fixup) exten => s,4,Macro(set-ring) exten => s,5,Macro(build-dest,${DIAL_DEST}) exten => s,6,Dial(${DESTINATION},${DIAL_TIMEOUT},${DIAL_FLAGS}) exten => s,7,Goto(s-${DIALSTATUS},1) exten => s-NOANSWER,1,GotoIf($[${LEN(${CFNA_DEST})} = 0]?5:2) exten => s-NOANSWER,2,Playback(pls-wait-connect-call) exten => s-NOANSWER,3,Macro(build-dest,${CFNA_DEST}) exten => s-NOANSWER,4,Dial(${DESTINATION},${CFNA_TIMEOUT},${CFNA_FLAGS}) exten => s-NOANSWER,5,Voicemail(u${SAVED_EXTEN}) exten => s-NOANSWER,6,Hangup exten => s-BUSY,1,GotoIf($[${LEN(${CFBL_DEST})} = 0]?5:2) exten => s-BUSY,2,Playback(pls-wait-connect-call) exten => s-BUSY,3,Macro(build-dest,${CFBL_DEST}) exten => s-BUSY,4,Dial(${DESTINATION},${CFBL_TIMEOUT},${CFBL_FLAGS}) exten => s-BUSY,5,Voicemail(b${SAVED_EXTEN}) exten => s-BUSY,6,Hangup exten => s-CHANUNAVAIL,1,Goto(s-NOANSWER,1) exten => s-ANSWERED,1,Hangup exten => a,1,Goto(extensions,${EXTEN_PREFIX}09,1) exten => o,1,GotoIf($[${LEN(${OPERATOR_DEST})} = 0]?extensions,0,1:2) exten => o,2,Macro(build-dest,${OPERATOR_DEST}) exten => o,3,Dial(${DESTINATION},${OPERATOR_TIMEOUT},${OPERATOR_FLAGS}) exten => o,4,Voicemail(u${SAVED_EXTEN}) exten => o,5,Hangup [macro-build-dest] exten => s,1,Cut(DEST1=ARG1,&,1) exten => s,2,Cut(DEST2=ARG1,&,2) exten => s,3,Cut(DEST3=ARG1,&,3) exten => s,4,Cut(DEST4=ARG1,&,4) exten => s,5,GotoIf($[${DEST1:0:3} = Zap]?s,6:s,8) exten => s,6,SetVar(DESTINATION=${DEST1}${CADENCE}) exten => s,7,Goto(s,9) exten => s,8,SetVar(DESTINATION=${DEST1}) exten => s,9,GotoIf($[${LEN(${DEST2})} = 0]?s,24:s,10) exten => s,10,GotoIf($[${DEST2:0:3} = Zap]?s,11:s,13) exten => s,11,SetVar(DESTINATION=${DESTINATION}&${DEST2}${CADENCE}) exten => s,12,Goto(s,14) exten => s,13,SetVar(DESTINATION=${DESTINATION}&${DEST2}) exten => s,14,GotoIf($[${LEN(${DEST3})} = 0]?s,24:s,15) exten => s,15,GotoIf($[${DEST3:0:3} = Zap]?s,16:s,18) exten => s,16,SetVar(DESTINATION=${DESTINATION}&${DEST3}${CADENCE}) exten => s,17,Goto(s,14) exten => s,18,SetVar(DESTINATION=${DESTINATION}&${DEST3}) exten => s,19,GotoIf($[${LEN(${DEST4})} = 0]?s,24:s,20) exten => s,20,GotoIf($[${DEST4:0:3} = Zap]?s,21:s,23) exten => s,21,SetVar(DESTINATION=${DESTINATION}&${DEST4}${CADENCE}) exten => s,22,Goto(s,24) exten => s,23,SetVar(DESTINATION=${DESTINATION}&${DEST4}) exten => s,24,NoOp [macro-set-ring] exten => s,1,NoOp(CALLERIDNUM=${CALLERIDNUM}) exten => s,2,GotoIf($[${LEN(${CALLERIDNUM})} = 4]?s,5:s,3) exten => s,3,SetVar(CADENCE=r2) exten => s,4,SetVar(ALERT_INFO=) exten => s,5,NoOp [macro-callerid-fixup] ; ; This macro assumes the following: ; Extensions without a DID number have their CallerID number set to their 4 digit extension ; Extensions with a DID number have their CallerID number set to their 10 digit DID ; The last 4 digits of a DID number is the same as the extension number ; exten => s,1,NoOp(Original Caller*ID: ${CALLERIDNUM}) exten => s,2,GotoIf($["${MACRO_CONTEXT}" = "incoming"]?exit,1:s,3) exten => s,3,GotoIf($["${SAVED_CONTEXT}" = "incoming"]?exit,1:s,4) exten => s,4,GotoIf($[${LEN(${SAVED_EXTEN})} = 0]?s,5:s,6) exten => s,5,SetVar(SAVED_EXTEN=${MACRO_EXTEN}) exten => s,6,GotoIf($[${LEN(${CALLERIDNUM})} = 0]?skip,1:s,7) exten => s,7,GotoIf($[${LEN(${CALLERIDNUM})} = 4]?ext2,1:s,8) exten => s,8,GotoIf($[${LEN(${CALLERIDNUM})} != 4]?did2,1:exit,1) exten => ext2,1,GotoIf($[${LEN(${SAVED_EXTEN})} != 4]?ext2pstn,1:ext2,2) exten => ext2,2,GotoIf($[${LEN(${SAVED_EXTEN})} = 4]?exit,1:exit,1) exten => did2,1,GotoIf($[${LEN(${SAVED_EXTEN})} = 4]??did2ext,1:did2,2) exten => did2,2,GotoIf($[${LEN(${SAVED_EXTEN})} != 4]?exit,1:exit,1) exten => ext2pstn,1,NoOp(Caller*ID ${CALLERIDNUM} changed to ${ARG1}) exten => ext2pstn,2,SetCIDNum(${ARG1}) exten => did2ext,1,NoOp(Caller*ID ${CALLERIDNUM} changed to ${CALLERIDNUM:6}) exten => did2ext,2,SetCIDNum(${CALLERIDNUM:6}) exten => exit,1,NoOp(Caller*ID ${CALLERIDNUM} not changed) [macro-dial-result] ; ; Handle Disconnect Cause Codes ; exten => s,1,NoOp(HANGUPCAUSE is ${HANGUPCAUSE} and DIALSTATUS is ${DIALSTATUS}) exten => s,2,AbsoluteTimeout(120) exten => s,3,GotoIf($[${HANGUPCAUSE} = 0]?s,5) exten => s,4,Goto(cause-${HANGUPCAUSE},1) exten => s,5,GotoIf($[${DIALSTATUS} = NOANSWER]?cause-1,1) exten => s,6,GotoIf($[${DIALSTATUS} = BUSY]?cause-2,1) exten => s,7,GotoIf($[${DIALSTATUS} = CHANUNAVAIL]?cause-2,1) exten => s,8,GotoIf($[${DIALSTATUS} = ANSWER]?cause-1,1) exten => s,9,Goto(cause-0,1) exten => cause-0,1,NoOp(AST_CAUSE_NOTDEFINED) exten => cause-0,2,GotoIf($["${SAVED_EXTEN}" != ""]?cause-0,4) exten => cause-0,3,SetVar(SAVED_EXTEN=${MACRO_EXTEN}) exten => cause-0,4,GotoIf($["${SAVED_ARG1}" != ""]?cause-0,6) exten => cause-0,5,SetVar(SAVED_ARG1=${ARG1}) exten => cause-0,6,GotoIf($["${ARG1}" = ""]?cause-0,11) exten => cause-0,7,System(/bin/echo "AST_CAUSE_NOTDEFINED received when dialing ${SAVED_EXTEN} trying again using ${SAVED_ARG1}." | /bin/mail -s "${SITE} PBX ERROR" pbxadmin-pager@stirlingprop.com) exten => cause-0,8,SetVar(ARG1=) exten => cause-0,9,Dial(${SAVED_ARG1}) exten => cause-0,10,Macro(dial-result) exten => cause-0,11,System(/bin/echo "AST_CAUSE_NOTDEFINED received when dialing ${SAVED_ARG1} giving up." | /bin/mail -s "${SITE} PBX ERROR" pbxadmin-pager@stirlingprop.com) exten => cause-0,12,Zapateller(answer) exten => cause-0,13,Playback(an-error-has-occured) exten => cause-0,14,Playback(pls-try-call-later) exten => cause-0,15,Wait(3) exten => cause-0,16,Zapateller(answer) exten => cause-0,17,Playback(an-error-has-occured) exten => cause-0,18,Playback(pls-try-call-later) exten => cause-0,19,Wait(3) exten => cause-0,20,Congestion exten => cause-1,1,NoOp(AST_CAUSE_NORMAL) exten => cause-1,2,Hangup exten => cause-2,1,NoOp(AST_CAUSE_BUSY) exten => cause-2,2,Busy exten => cause-3,1,NoOp(AST_CAUSE_FAILURE) exten => cause-3,2,Zapateller(answer) exten => cause-3,3,Playback(discon-or-out-of-service) exten => cause-3,4,Wait(3) exten => cause-3,5,Zapateller(answer) exten => cause-3,6,Playback(discon-or-out-of-service) exten => cause-3,7,Wait(3) exten => cause-3,8,Congestion exten => cause-4,1,NoOp(AST_CAUSE_CONGESTION) exten => cause-4,2,Zapateller(answer) exten => cause-4,3,Playback(all-circuits-busy-now) exten => cause-4,4,Playback(pls-try-call-later) exten => cause-4,5,Wait(3) exten => cause-4,6,Zapateller(answer) exten => cause-4,7,Playback(all-circuits-busy-now) exten => cause-4,8,Playback(pls-try-call-later) exten => cause-4,9,Wait(3) exten => cause-4,10,Congestion exten => cause-5,1,NoOp(AST_CAUSE_UNALLOCATED) exten => cause-5,2,Macro(number-disconnected,${MACRO_EXTEN}) exten => _cause-X,1,NoOp(UNKNOWN_CAUSECODE) exten => _cause-X,2,Zapateller(answer) exten => _cause-X,3,Playback(an-error-has-occured) exten => _cause-X,4,Wait(1) exten => _cause-X,5,Zapateller(answer) exten => _cause-X,6,Playback(an-error-has-occured) exten => _cause-X,7,Wait(1) exten => _cause-X,8,Congestion [macro-say-digits] ; ; ARG1=number to say ; ; Should handle 1-6 digits, 7 digits, 8 digits, 10 digits, 11 digits, 12 digits ; ; exten => s,1,GotoIf($[${LEN(${ARG1})} != 10]?s,3) exten => s,2,SayDigits(${ARG1:0:3}) exten => s,3,GotoIf($[${LEN(${ARG1})} != 10]?s,6) exten => s,4,Wait(.25) exten => s,5,SayDigits(${ARG1:3:3}) exten => s,6,GotoIf($[${LEN(${ARG1})} != 10]?s,10) exten => s,7,Wait(.25) exten => s,8,SayDigits(${ARG1:6}) exten => s,9,Goto(s,12) exten => s,10,Wait(.25) exten => s,11,SayDigits(${ARG1}) exten => s,12,NoOp [macro-number-changed] ; ; ARG1=new number ; exten => s,1,Zapateller(answer) exten => s,2,Playback(the-number-u-dialed) exten => s,3,Wait(.25) exten => s,4,Macro(say-digits,${MACRO_EXTEN}) exten => s,5,Wait(.25) exten => s,6,Playback(has-been-changed-to) exten => s,7,Wait(.25) exten => s,8,Macro(say-digits,${ARG1}) exten => s,9,Wait(.25) exten => s,10,Playback(pls-wait-connect-call) exten => s,11,Goto(extensions,${ARG1},1) [macro-number-disconnected] ; ; ARG1=number dialed ; exten => s,1,Zapateller(answer) exten => s,2,Wait(.25) exten => s,3,Playback(the-number-u-dialed) exten => s,4,Wait(.25) exten => s,5,Macro(say-digits,${ARG1}) exten => s,6,Wait(.25) exten => s,7,Playback(has-been-disconnected) exten => s,8,Playback(or) exten => s,9,Playback(no-longer-in-service) exten => s,10,Wait(.25) exten => s,11,Playback(no-info-about-number) exten => s,12,Wait(3) exten => s,13,Zapateller(answer) exten => s,14,Wait(.25) exten => s,15,Playback(the-number-u-dialed) exten => s,16,Wait(.25) exten => s,17,Macro(say-digits,${ARG1}) exten => s,18,Wait(.25) exten => s,19,Playback(has-been-disconnected) exten => s,20,Playback(or) exten => s,21,Playback(no-longer-in-service) exten => s,22,Wait(.25) exten => s,23,Playback(no-info-about-number) exten => s,24,Wait(3) exten => s,25,Congestion