[general] writeprotect=yes autofallthrough=yes clearglobalvars=yes priorityjumping=no [globals] ; TDM04B (4) POTS is Zap/g0 ; Channel bank is Zap/g1 ; Outbound T1 is Zap/g2 ; Emergency trunk is Zap/3 EMERTRUNK=Zap/3 LOCALTRUNK=Zap/g0 CB=Zap/g1 LDTRUNK=Zap/g2 ; Program code length PGCODE=4 [from-internal] include => applications include => monitor include => localextensions include => tollfree include => localtoll include => ldtoll include => remoteextensions [from-pstn] include => receptionist [macro-stdexten] ; Standard extension macro: ; ${ARG1} - Extension (we could have used ${MACRO_EXTEN} here as well ; ${ARG2} - Device(s) to ring exten => s,1,Dial(${ARG2},20) exten => s,2,Goto(s-${DIALSTATUS},1) exten => s-NOANSWER,1,Voicemail(u${ARG1}) exten => s-NOANSWER,n,Playback(vm-goodbye) exten => s-NOANSWER,n,Hangup exten => s-BUSY,1,Voicemail(b${ARG1}) exten => s-BUSY,n,Playback(vm-goodbye) exten => s-BUSY,n,Hangup exten => _s-.,1,Goto(s-NOANSWER,1) exten => a,1,VoicemailMain(${ARG1}) exten => a,n,Playback(vm-goodbye) exten => a,n,Hangup [remoteextensions] ; FIXME ;switch => IAX2/rpcpbx005:rpcpbx005@rpcpbx001/default exten => _5XX,1,Dial(IAX2/rpcpbx005:rpcpbx005@rpcpbx001/${EXTEN}|1000|t) exten => _2XX,1,Dial(IAX2/rpcpbx005:rpcpbx005@rpcpbx001/${EXTEN}|1000|t) exten => _3XX,1,Dial(IAX2/rpcpbx005:rpcpbx005@rpcpbx001/${EXTEN}|1000|t) [localextensions] exten => _7XX,1,NoOp(Finding channel for local exten ${EXTEN}) exten => _7XX,n,Set(channel=$[ ${EXTEN} - 695 ]) exten => _7XX,n,NoOp(Calling ${EXTEN} on channel Zap/${channel}) exten => _7XX,n,Macro(stdexten|${EXTEN}|Zap/${channel}) exten => _7XX,n,Hangup [macro-monitor] ; ARG1 = EXTEN exten => s,1,NoOp(Monitor macro initiated via exten ${ARG1}) exten => s,n,Set(channel=$[ ${ARG1} - 695 ]) exten => s,n,NoOp(Starting monitor on channel ${channel}) exten => s,n,ZapBarge(${channel}) exten => s,n,Hangup [monitor] exten => _*7XX,1,Macro(monitor|${EXTEN}) exten => _*7XX,n,Hangup [applications] exten => 8500,1,VoicemailMain(${CALLERID(num)}) [receptionist] exten => s,1,Macro(stdexten|700|Zap/25) [localtoll] ; Best place as any to include 911 support exten => 911,1,NoOp(!!! EMERGENCY 911 CALL !!!) exten => 911,n,Macro(call911) exten => 911,n,NoOp(!!! EMERGENCY 911 CALL ENDED !!!) ; Begin processing local call 11 digit, AAAA-NXX-XXXX exten => _XXXXNXXXXXX,1,NoOp(Processing local call dialed as ${EXTEN}) ; Capture the accountcode exten => _XXXXNXXXXXX,n,Set(accountcode=${EXTEN:${PGCODE}}) exten => _XXXXNXXXXXX,n,NoOp(Account code extracted as ${accountcode}) ; Get the number to be dialed (length of account code) exten => _XXXXNXXXXXX,n,Set(mynum=${EXTEN:${PGCODE}}) exten => _XXXXNXXXXXX,n,NoOp(Local number extracted as ${mynum}) ; Dial exten => _XXXXNXXXXXX,n,NoOp(Dialing local call) exten => _XXXXNXXXXXX,n,Macro(localdial|${accountcode}|${mynum}) exten => _XXXXNXXXXXX,n,NoOp(Local call to ${mynum} ended) [macro-localdial] ; $ARG1 = Accountcode ; $ARG2 = Number exten => s,1,Set(CDR(accountcode)=${ARG1}) exten => s,n,Dial(${LOCALTRUNK}|${ARG2}|100|tRP) exten => s,n,Hangup [ldtoll] ; Begin processing LD call 14 digit, AAAA-NPA-NXX-XXXX exten => _XXXXNXXNXXXXXX,1,NoOp(Processing LD call dialed as ${EXTEN}) ; Capture the accountcode exten => _XXXXNXXNXXXXXX,n,Set(accountcode=${EXTEN:0:${PGCODE}}) exten => _XXXXNXXNXXXXXX,n,NoOp(Account code extracted as ${accountcode}) ; Get the number to be dialed (length of account code) exten => _XXXXNXXNXXXXXX,n,Set(mynum=${EXTEN:${PGCODE}}) exten => _XXXXNXXNXXXXXX,n,NoOp(LD number extracted as ${mynum}) ; Dial exten => _XXXXNXXNXXXXXX,n,NoOp(Dialing LD call) exten => _XXXXNXXNXXXXXX,n,Macro(lddial|${accountcode}|${mynum}) exten => _XXXXNXXNXXXXXX,n,NoOp(LD call to ${mynum} ended) exten => _XXXXNXXNXXXXXX,n,Hangup ; Begin processing LD call 15 digit, AAAA-1-NPA-NXX-XXXX exten => _XXXX1NXXNXXXXXX,1,NoOp(Processing LD call dialed as ${EXTEN}) ; Capture the accountcode and assign it to CDR exten => _XXXX1NXXNXXXXXX,n,Set(accountcode=${EXTEN:0:${PGCODE}}) exten => _XXXX1NXXNXXXXXX,n,NoOp(Account code extracted as ${accountcode}) ; Get the number to be dialed (length of accountcode + 1) exten => _XXXX1NXXNXXXXXX,n,Set(mynum=${EXTEN:$[ ${PGCODE} + 1 ]}) exten => _XXXX1NXXNXXXXXX,n,NoOp(LD number extracted as ${mynum}) ; Dial exten => _XXXX1NXXNXXXXXX,n,NoOp(Dialing LD call) exten => _XXXX1NXXNXXXXXX,n,Macro(lddial|${accountcode}|${mynum}) exten => _XXXX1NXXNXXXXXX,n,NoOp(LD call to ${mynum} ended) exten => _XXXX1NXXNXXXXXX,n,Hangup [macro-lddial] ; $ARG1 = account code ; $ARG2 = number exten => s,1,Set(CDR(accountcode)=$ARG1) exten => s,n,Dial(${LDTRUNK}|${ARG2}|100|tRP) exten => s,n,Hangup [macro-tfdial] ; $ARG1 = account code ; $ARG2 = number exten => s,1,Set(CDR(accountcode)=${ARG1}) exten => s,n,Dial(${LOCALTRUNK}|${ARG2}|100|tRP) exten => s,n,Hangup [tollfree] ; 1-800-NXX-XXXX / 800-NXX-XXXX exten => _XXXX800NXXXXXX,1,Set(accountcode=${EXTEN:0:${PGCODE}}) exten => _XXXX800NXXXXXX,n,Set(mynum=${EXTEN:${PGCODE}}) exten => _XXXX800NXXXXXX,n,Macro(tfdial|${accountcode}|1${mynum}) exten => _XXXX1800NXXXXXX,1,Set(accountcode=${EXTEN:0:${PGCODE}}) exten => _XXXX1800NXXXXXX,n,Set(mynum=${EXTEN:${PGCODE}}) exten => _XXXX1800NXXXXXX,n,Macro(tfdial|${accountcode}|${mynum}) ; 1-855-NXX-XXXX / 855-NXX-XXXX exten => _XXXX855NXXXXXX,1,Set(accountcode=${EXTEN:0:${PGCODE}}) exten => _XXXX855NXXXXXX,n,Set(mynum=${EXTEN:${PGCODE}}) exten => _XXXX855NXXXXXX,n,Macro(tfdial|${accountcode}|1${mynum}) exten => _XXXX1855NXXXXXX,1,Set(accountcode=${EXTEN:0:${PGCODE}}) exten => _XXXX1855NXXXXXX,n,Set(mynum=${EXTEN:${PGCODE}}) exten => _XXXX1855NXXXXXX,n,Macro(tfdial|${accountcode}|${mynum}) ; 1-866-NXX-XXXX / 866-NXX-XXXX exten => _XXXX866NXXXXXX,1,Set(accountcode=${EXTEN:0:${PGCODE}}) exten => _XXXX866NXXXXXX,n,Set(mynum=${EXTEN:${PGCODE}}) exten => _XXXX866NXXXXXX,n,Macro(tfdial|${accountcode}|1${mynum}) exten => _XXXX1866NXXXXXX,1,Set(accountcode=${EXTEN:0:${PGCODE}}) exten => _XXXX1866NXXXXXX,n,Set(mynum=${EXTEN:${PGCODE}}) exten => _XXXX1866NXXXXXX,n,Macro(tfdial|${accountcode}|${mynum}) ; 1-877-NXX-XXXX / 877-NXX-XXXX exten => _XXXX877NXXXXXX,1,Set(accountcode=${EXTEN:0:${PGCODE}}) exten => _XXXX877NXXXXXX,n,Set(mynum=${EXTEN:${PGCODE}}) exten => _XXXX877NXXXXXX,n,Macro(tfdial|${accountcode}|1${mynum}) exten => _XXXX1877NXXXXXX,1,Set(accountcode=${EXTEN:0:${PGCODE}}) exten => _XXXX1877NXXXXXX,n,Set(mynum=${EXTEN:${PGCODE}}) exten => _XXXX1877NXXXXXX,n,Macro(tfdial|${accountcode}|${mynum}) ; 1-888-NXX-XXXX / 888-NXX-XXXX exten => _XXXX888NXXXXXX,1,Set(accountcode=${EXTEN:0:${PGCODE}}) exten => _XXXX888NXXXXXX,n,Set(mynum=${EXTEN:${PGCODE}}) exten => _XXXX888NXXXXXX,n,Macro(tfdial|${accountcode}|1${mynum}) exten => _XXXX1888NXXXXXX,1,Set(accountcode=${EXTEN:0:${PGCODE}}) exten => _XXXX1888NXXXXXX,n,Set(mynum=${EXTEN:${PGCODE}}) exten => _XXXX1888NXXXXXX,n,Macro(tfdial|${accountcode}|${mynum}) [macro-call911] exten => s,1,Monitor(wav|/var/spool/asterisk/monitor/911/Caller-${CALLERID(num)}-Called-911-On-${TIMESTAMP}.wav|b) exten => s,n,SoftHangup(${EMERTRUNK}) exten => s,n,Dial(${EMERTRUNK}|911|1000) exten => s,n,Hangup