[general] static=yes writeprotect=yes [globals] ; Any category other than "General" and "Globals" represent ; extension contexts, which are collections of extensions. ; ; Extension names may be numbers, letters, or combinations ; thereof. If an extension name is prefixed by a '_' ; character, it is interpreted as a pattern rather than a ; literal. In patterns, some characters have special meanings: ; ; X - any digit from 0-9 ; Z - any digit from 1-9 ; N - any digit from 2-9 ; [1235-9] - any digit in the brackets (in this example, 1,2,3,5,6,7,8,9) ; . - wildcard, matches anything remaining (e.g. _9011. matches ; anything starting with 9011 excluding 9011 itself) ; ; For example the extension _NXXXXXX would match normal 7 digit dialings, ; while _1NXXNXXXXXX would represent an area code plus phone number ; preceeded by a one. ; ; Each step of an extension is ordered by priority, which must ; always start with 1 to be considered a valid extension. ; ; Contexts contain several lines, one for each step of each ; extension, which can take one of two forms as listed below, ; with the first form being preferred. One may include another ; context in the current one as well, optionally with a ; date and time. Included contexts are included in the order ; they are listed. ; [default] exten => #,1,Hangup ; Hang them up. ; A timeout and "invalid extension rule" exten => t,1,Goto(i,1) ; If they take too long, give up exten => i,1,Playback(invalid) ; "That's not valid, try again" exten => i,2,Hangup ; Hang them up. exten => h,1,DeadAGI(agistardead.agi) exten => 198,1,Ringing exten => 198,2,Wait(2) exten => 198,3,VoicemailMain exten => 199,1,Ringing exten => 199,2,Wait(2) exten => 199,3,AGI(agistarvoicemail.agi) exten => 199,4,VoicemailMain(s${VOICEMAIL}) exten => 500,1,Ringing exten => 500,2,Wait(2) exten => 500,3,DateTime exten => 500,4,Hangup ; Hang them up. exten => 501,1,Ringing exten => 501,2,Wait(2) exten => 501,3,Playback(tt-monkeysintro) exten => 501,4,Playback(tt-somethingwrong) exten => 501,5,Playback(tt-monkeys) exten => 501,6,Playback(privacy-thankyou) exten => 501,7,Hangup ; Hang them up. exten => 502,1,Ringing exten => 502,2,Wait(2) exten => 502,3,Playback(demo-echotest) ; Let them know what's going on exten => 502,4,Echo ; Do the echo test exten => 502,5,Playback(demo-echodone) ; Let them know it's over exten => 502,6,Hangup ; Hang them up. exten => 505,1,WaitMusicOnHold(30) exten => 505,2,Congestion exten => 503,1,Ringing exten => 503,2,Wait(2) exten => 503,3,Playback(believe-its-free) exten => 503,4,Hangup ; Hang them up. exten => 112,1,Ringing exten => 112,2,Wait(1) exten => 112,3,Playback(no-112-2) exten => 112,4,Hangup ; Hang them up. exten => 911,1,Ringing exten => 911,2,Wait(1) exten => 911,3,Playback(no-911-2) exten => 911,4,Hangup ; Hang them up. exten => 999,1,Ringing exten => 999,2,Wait(1) exten => 999,3,Playback(no-112-2) exten => 999,4,Hangup ; Hang them up. ;include => from-internal include => astbill-custom include => local-sip include => astartelecom-iax include => local ;=============================================================================; ; T.38 fax support ;=============================================================================; ; for receive test ; to absolute extention ; ----------- exten => 200,1,Answer exten => 200,2,SetVar(FAXFILE=/var/spool/asterisk/t38/in/${UNIQUEID}.tif) exten => 200,3,rxfax(${FAXFILE}|debug) exten => 200,4,Hangup ; ----------- ; or to context ; ----------- [t38rx] exten => s,1,Answer exten => s,2,SetVar(FAXFILE=/var/spool/asterisk/t38/in/${UNIQUEID}.tif) exten => s,3,rxfax(${FAXFILE}|debug) exten => s,4,Hangup ; ----------- ; for send test from asterisk command line ; ----------- exten => 211,1,SetVar(__T38=yes) exten => 211,2,Dial(SIP/name@host.domain.or.ip,5,M(fax)) exten => 211,3,Hangup ; [macro-fax] exten => s,1,SetVar(FAXFILE=/var/spool/asterisk/t38/out/test.tif) exten => s,2,txfax(${FAXFILE}|debug|caller) ;=============================================================================; [astartelecom-iax] ;exten => _XXXXXX.,1,AGI(agiastar.agi,${EXTEN}|${CALLERIDNUM}) ; The parameter ${CALLERIDNUM} is used when using ANI/CLI for authentication ; It makes ${CALLERIDNUM} = accountcode. This is used in some Asterisk / SER implementations exten => _XXXX.,1,AGI(agiastar.agi,${EXTEN}) exten => _XXXX.,2,GotoIf($["${BILLSTATUS}" = "NOCREDIT"]?10) exten => _XXXX.,3,GotoIf($["${BILLSTATUS}" = "NOACCOUNT"]?10) exten => _XXXX.,4,GotoIf($["${BILLSTATUS}" = "INVALID"]?30) exten => _XXXX.,5,Dial(${DIALSTRING}) exten => _XXXX.,6,Hangup ;exten => _XXXX.,6,Dial(${DIALSTRING}?10) exten => _XXXX.,7,GotoIf($[${DIALSTATUS} = CHANUNAVAIL]?10) exten => _XXXX.,8,GotoIf($[${DIALSTATUS} = CONGESTION]?10) exten => _XXXX.,9,Hangup exten => _XXXX.,10,AGI(agiastar.agi,${EXTEN}) ; if unavailabe or no reply, send to transfered number exten => _XXXX.,11,GotoIf($["${BILLSTATUS}" = "NOCREDIT"]?15) exten => _XXXX.,12,GotoIf($["${BILLSTATUS}" = "NOACCOUNT"]?15) exten => _XXXX.,13,GotoIf($["${BILLSTATUS}" = "INVALID"]?30) exten => _XXXX.,14,Set(CALLERID(all)=${ASTCALLERID}) exten => _XXXX.,15,Dial(${DIALSTRING}) exten => _XXXX.,16,GotoIf($[${DIALSTATUS} = CHANUNAVAIL]?19) exten => _XXXX.,17,GotoIf($[${DIALSTATUS} = CONGESTION]?19) exten => _XXXX.,18,Hangup exten => _XXXX.,19,AGI(agiastar.agi,${EXTEN}) ; if unavailabe or no reply, send to transfered number exten => _XXXX.,20,GotoIf($["${BILLSTATUS}" = "NOCREDIT"]?19) exten => _XXXX.,21,Set(CALLERID(all)=${ASTCALLERID}) exten => _XXXX.,22,Dial(${DIALSTRING}) exten => _XXXX.,23,GotoIf($[${DIALSTATUS} = CHANUNAVAIL]?10) exten => _XXXX.,24,GotoIf($[${DIALSTATUS} = CONGESTION]?10) exten => _XXXX.,25,Hangup exten => _XXXX.,26,Playback(beep) exten => _XXXX.,27,Playback(not-enough-credit) ; Tells them they do not have enough money exten => _XXXX.,30,Playback(beep) exten => _XXXX.,31,Playback(that-is-not-rec-phn-num) ; "That is not a recognized phone number." exten => _XXXX.,32,Hangup ;Allow outgoing H323 calls ;No need to specify GK ip if GK is set in oh323.conf exten => _X.,1,AGI(agiastar.agi,${EXTEN}) exten => _5076.,2,Dial(OH323/${EXTEN},35) exten => _0115076.,2,Dial(OH323/${EXTEN},35) exten => _86.,2,Dial(OH323/${EXTEN},35) exten => _01186.,2,Dial(OH323/${EXTEN},35) ;Accept incoming H323 calls exten => ,1,Wait,1 exten => ,2,Answer exten => ,3,DigitTimeout,5 ; Set Digit Timeout to 5 seconds exten => ,4,ResponseTimeout,10 exten => ,5,Background(demo-thanks) exten => ,6,Hangup [macro-stdexten] ; Standard extension macro: ; ${ARG1} - Extension (we could have used ${MACRO_EXTEN} here as well exten => s,1,AGI(astlocal.agi,${ARG1}) exten => s,2,Dial(${DIALSTRING},20) ; Ring the interface, 20 seconds maximum exten => s,3,Goto(s-${DIALSTATUS},1) ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER) exten => s-NOANSWER,1,Voicemail(u${VOICEMAIL}) ; If unavailable, send to voicemail w/ unavail announce exten => s-NOANSWER,2,Goto(default,s,1) ; If they press #, return to start exten => s-BUSY,1,Voicemail(b${VOICEMAIL}) ; If busy, send to voicemail w/ busy announce exten => s-BUSY,2,Goto(default,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(${VOICEMAIL}) ; If they press *, send the user into VoicemailMain [local-sip] exten => 22100976,1,Dial(SIP/80100001,20,rt) exten => 22100989,1,Dial(SIP/80100002,20,rt) exten => _7XXXX,1,Macro(stdexten,${EXTEN}) extern =>_80.,1,Macro(stdexten,${EXTEN}) extern =>_801.,1,Macro(stdexten,${EXTEN}) extern =>_81.,1,Macro(stdexten,${EXTEN}) extern =>_821.,1,Macro(stdexten,${EXTEN}) extern =>_831.,1,Macro(stdexten,${EXTEN}) extern =>_841.,1,Macro(stdexten,${EXTEN}) extern =>_851.,1,Macro(stdexten,${EXTEN}) extern =>_871.,1,Macro(stdexten,${EXTEN}) extern =>_881.,1,Macro(stdexten,${EXTEN}) extern =>_891.,1,Macro(stdexten,${EXTEN}) extern =>_90.,1,Macro(stdexten,${EXTEN}) extern =>_8XXX,1,Macro(stdexten,${EXTEN}) exten => 333,2,Wait(1) exten => 333,3,AGI(astaccountbalance.agi) exten => 333,4,Hangup [astbill-incoming] ; Default Context for Provider Trunks and Incoming Numbers ; Still under development. AstBill include => extensions_custom.conf [from-internal] exten => _.,1,Goto(100) ;exten => _XXX86.,1,Goto(100) exten => _.,n,Goto(999) exten => _.,100,SetVar(CurrentLoopID=1) exten => _.,n,SetVar(MaxLoopID=32) exten => _.,n,SetVar(CurrentLoopID=${IF($[ ${MaxLoopID}=${CurrentLoopID} ]?$[1]:${MATH(${CurrentLoopID}+1,int)})}) exten => _.,n,GotoIf($[ ${MaxLoopID} = ${CurrentLoopID} ]?800:120) exten => _.,120,SetGlobalVar(CurrentTrunkID=${IF($[ ${MaxiumTrunkID}=${CurrentTrunkID} ]?$[1]:${MATH(${CurrentTrunkID}+1,int)})}) exten => _.,121,Set(GROUP()=OUT_${CurrentTrunkID}) ;xten => _.,122,GotoIf($[ ${GROUP_COUNT()} > ${OUTMAXCHANS_${CurrentTrunkID}} ]?100) ;exten => _.,123,SetVar(NewDailOutNumber=${IF($[${EXTEN:3:3}=852]?133${EXTEN:6:8}:0088${EXTEN:3:LEN(${EXTEN})})} ;exten => _.,124,Macro(dialout-trunk,${CurrentTrunkID},${NewDailOutNumber},,) exten => _.,122,Macro(dialout-trunk,${CurrentTrunkID},${EXTEN},,) ;exten => _.,600,Macro(dialout-trunk,${CurrentTrunkID},${EXTEN},,) exten => _.,800,Macro(outisbusy,) exten => foo,n,Noop(bar) exten => h,999,hangup exten => foo,n,Noop("Hang Up") exten => s,n,Macro(hangupcall) exten => h,n,Macro(hangupcall) ;#include extensions_additional.conf