rendered paste body;; 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=<Bellcore-dr2>)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,Congestionexten => 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