; An Extensions.conf that WORKS <---- [general] static=yes writeprotect=no autofallthrough=no [globals] CONSOLE=Console/dsp ; Console interface for demo [macro-stdexten] ;exten => s,1,GotoIf($[${CALLERID(number)}=${ARG1}]?500) ; Dial yourself to access VM exten => s,1,Set(extension=${ARG1}) exten => s,2,DBget(forward=EXT${extension}/FWDI) exten => s,3,GotoIf($[${forward}=NO]?DIAL|1) exten => s,4,Set(type=I) exten => s,5,Goto(fwd-${forward},1) exten => s,103,Macro(setup-entension,${extension}) exten => s,104,Goto(DIAL,1) exten => fwd-NO,1,Hangup exten => fwd-VOICEMAIL,1,DBGet(box=EXT${extension}/FWD${type}TARGET) exten => fwd-VOICEMAIL,2,DBGet(msg=EXT${extension}/FWD${type}DATA) exten => fwd-VOICEMAIL,3,Voicemail(${msg}${box)}) exten => fwd-VOICEMAIL,4,Hangup exten => fwd-EXTENSION,1,DBGet(extension=EXT${extension}/FWD${type}TARGET) exten => fwd-EXTENSION,2,Goto(s,2) exten => fwd-EXTERNAL,1,DBGet(externalnumber=EXT${extension}/FWD${type}TARGET) exten => fwd-EXTERNAL,2,Dial(Local/${externalnuber}@full) exten => fwd-EXTERNAL,3,Hangup exten => DIAL,1,DBGet(dnd=EXT${extension}/DND) exten => DIAL,2,GotoIf($[${dnd}=YES]?DIAL-BUSY|1) exten => DIAL,3,DBGet(tech=EXT${extension}/TECH) exten => DIAL,4,Dial(${tech}/${extension},15) exten => DIAL,5,Goto(DIAL-${DIALSTATUS},1) exten => DIAL-BUSY,1,DBGet(forward=EXT${extension}/FWDB) exten => DIAL-BUSY,2,Set(type=B) exten => DIAL-BUSY,3,Goto(fwd-${forward},1) exten => DIAL-BUSY,4,Hangup exten => DIAL-NOANSWER,1,DBGet(forward=EXT${extension}/FWDU) exten => DIAL-NOANSWER,2,Set(type=U) exten => DIAL-NOANSWER,3,Goto(fwd-${forward},1) exten => DIAL-NOANSWER,4,Hangup exten => _DIAL-.,1,Goto(DIAL-NOANSWER,1) ; Treat anything else as no answer exten => s,500,VoicemailMain(${extension}) exten => s,501,2,Hangup [macro-setup-extension] exten => s,1,Set(theexten=${ARG1}) exten => s,n,DBput(EXT${theexten}/TECH=SIP) exten => s,n,DBput(EXT${theexten}/HASVM=NO) exten => s,n,DBput(EXT${theexten}/VMBOX=0) exten => s,n,DBput(EXT${theexten}/DND=NO) exten => s,n,DBput(EXT${theexten}/FWDI=NO) exten => s,n,DBput(EXT${theexten}/FWDITARGET=NO) exten => s,n,DBput(EXT${theexten}/FWDIDATA=NO) exten => s,n,DBput(EXT${theexten}/FWDB=NO) exten => s,n,DBput(EXT${theexten}/FWDBTARGET=NO) exten => s,n,DBput(EXT${theexten}/FWDBDATA=NO) exten => s,n,DBput(EXT${theexten}/FWDU=NO) exten => s,n,DBput(EXT${theexten}/FWDUTARGET=NO) exten => s,n,DBput(EXT${theexten}/FWDUDATA=NO) [forwarding-menu] exten => s,1,Answer exten => s,2,Wait(1) exten => s,3,Background(forwardingmenu) exten => s,4,Set(TIMEOUT(digit)=3) exten => s,5,Set(TIMEOUT(response)=15) ; 1 - Immediate exten => 1,1,Set(fwdtype=I) exten => 1,2,Goto(forwarding-type,s,1) ; 2 - Busy exten => 2,1,Set(fwdtype=B) exten => 2,2,Goto(forwarding-type,s,1) ; 3 - Unavailable exten => 3,1,Set(fwdtype=U) exten => 3,2,Goto(forwarding-type,s,1) exten => i,1,Playback(pleasetryagain) exten => i,2,Goto(s,3) exten => t,1,Playback(goodbye) exten => t,2,Hangup [forwarding-type] exten => s,1,Answer exten => s,2,Wait(1) exten => s,3,Background(forwardingtypemenu) exten => s,4,Set(TIMEOUT(digit)=3) exten => s,5,Set(TIMEOUT(response)=15) ; 1 - None exten => 1,1,DBput(EXT${fwdsource}/FWD${fwdtype}=NO) exten => 1,2,DBput(EXT${fwdsource}/FWD${fwdtype}TARGET=NO) exten => 1,3,DBput(EXT${fwdsource}/FWD${fwdtype}DATA=NO) exten => 1,4,Playback(forwardingtype${fwdtype}) exten => 1,5,Playback(removed) exten => 1,6,Hangup ; 2 - Voicemail exten => 2,1,Goto(forwarding-voicemail,s,1) ; 3 - Extension exten => 3,1,Goto(forwarding-extension,s,1) ; 4 - External exten => 4,1,Goto(forwarding-external,s,1) exten => i,1,Playback(pleasetryagain) exten => i,2,Goto(s,3) exten => t,1,Playback(goodbye) exten => t,2,Hangup [forwarding-voicemail] exten => s,1,Answer exten => s,2,Wait(1) exten => s,3,Background(entervoicemailbox) exten => s,4,Read(fwdvmbox) exten => s,5,Gotoif($[${LEN(fwdvmbox)}<1]?100) exten => s,6,Background(forwardtovmbox) exten => s,7,SayDigits(fwdvmbox) exten => s,8,Background(press1toaccept) exten => s,9,Background(press2tochange) exten => s,10,Set(TIMEOUT(digit)=3) exten => s,11,Set(TIMEOUT(response)=15) exten => s,100,Playback(pleasetryagain) exten => s,101,Goto(s,3) ; 1 - Accept exten => 2,1,Goto(forwarding-voicemail-playmsg) ; 2 - Change exten => 2,1,Goto(s,3) exten => i,1,Playback(pleasetryagain) exten => i,2,Goto(s,6) exten => t,1,Playback(goodbye) exten => t,2,Hangup [macro-forwarding-voicemail-playmsg] exten => s,1,Answer exten => s,2,Wait(1) exten => s,3,Background(selectmsgtoplay) exten => s,4,Set(TIMEOUT(digit)=3) exten => s,5,Set(TIMEOUT(response)=15) ; None exten => 1,1,Set(fwdvmplaymsg=) exten => 1,2,Goto(forwarding-voicemail-set,s,1) ; Busy exten => 2,1,Set(fwdvmplaymsg=b) exten => 2,2,Goto(forwarding-voicemail-set,s,1) ; Unavailable exten => 3,1,Set(fwdvmplaymsg=u) exten => 3,2,Goto(forwarding-voicemail-set,s,1) exten => i,1,Playback(pleasetryagain) exten => i,2,Goto(s,3) exten => t,1,Playback(goodbye) exten => t,2,Hangup [macro-forwarding-voicemail-set] exten => s,1,Answer exten => s,n,DBput(EXT${fwdsource}/FWD${fwdtype}=VOICEMAIL) exten => s,n,DBput(EXT${fwdsource}/FWD${fwdtype}TARGET=${fwdvmbox}) exten => s,n,DBput(EXT${fwdsource}/FWD${fwdtype}DATA=${fwdvmplaymsg}) exten => s,n,Playback(forwardingtype${ARG2}) exten => s,n,Playback(configured) exten => s,n,Hangup [macro-forwarding-extension] exten => s,1,Answer exten => s,2,Wait(1) exten => s,3,Background(enterextension) exten => s,n,Read(fwdextension) exten => s,n,Gotoif($[${LEN(fwdextension)}<>4]?100) exten => s,n,Gotoif($[${fwdextension}<1000]?100) exten => s,n,Gotoif($[${fwdextension}>8999]?100) exten => s,n,DBput(EXT${fwdsource}/FWD${fwdtype}=EXTENSION) exten => s,n,DBput(EXT${fwdsource}/FWD${fwdtype}TARGET=${fwdextension}) exten => s,n,DBput(EXT${ARG1}/FWD${ARG2}DATA=NO) exten => s,n,Playback(forwardingtype${fwdtype}) exten => s,n,Playback(settoextension) exten => s,n,SayDigits(fwdextension) exten => s,n,Playback(configured) exten => s,n,Hangup exten => s,100,Playback(pleasetryagain) exten => s,101,Goto(s,3) [forwarding-external] exten => s,1,Answer exten => s,2,Wait(1) exten => s,3,Background(enterextension) exten => s,n,Read(fwdexternal) exten => s,n,Gotoif($[${LEN(fwdexternal)}<2?100) exten => s,n,Gotoif($[${fwdexternal:1:1}<>9]?100) exten => s,n,DBput(EXT${fwdsource}/FWD${fwdtype}=EXTERNAL) exten => s,n,DBput(EXT${fwdsource}/FWD${fwdtype}TARGET=${fwdexternal}) exten => s,n,DBput(EXT${fwdsource}/FWD${fwdtype}DATA=NO) exten => s,n,Playback(forwardingtype${fwdtype}) exten => s,n,Playback(settoextension) exten => s,n,SayDigits(fwdexternal) exten => s,n,Playback(configured) exten => s,n,Hangup exten => s,100,Playback(pleasetryagain) exten => s,101,Goto(s,3) [features] ; Record new prompts. Don't forget to rename and move these! exten => *40,1,Answer exten => *40,2,Playback(pleaserecordafterbeep) exten => *40,3,Record(/tmp/asterisk-recording:gsm) exten => *40,4,Wait(2) exten => *40,5,Playback(/tmp/asterisk-recording) exten => *40,6,Wait(2) exten => *40,7,Hangup ; Playback the last recorded prompt exten => *41,1,Answer exten => *41,2,Wait(1) exten => *41,3,Playback(/tmp/asterisk-recording) exten => *41,4,Hangup ; Test out our main menu exten => *42,1,Goto(mainmenu,s,1) ; test to hear your CallerID exten => *43,1,Answer exten => *43,2,Playback(yourcalleridis) exten => *43,3,SayDigits(${CALLERID(number)}) exten => *43,4,Hangup ; Queue Login exten => *50,1,AgentCallbackLogin(${CALLERID(number)}|${CALLERID(number)}@QueueAgentCallback) ; Queue Logout (need to enter NOTHING) exten => *51,1,AgentCallbackLogin() ; Queue Pause Agent exten => *52,1,Answer exten => *52,2,PauseQueueMember(Agent/${CALLERID(number)}) exten => *52,3,Playback(agentpaused) exten => *52,4,Hangup ; Queue Unpause Agent exten => *53,1,Answer exten => *53,2,UnpauseQueueMember(Agent/${CALLERID(number)}) exten => *53,3,Playback(agentunpaused) exten => *53,4,Hangup ; Voicemail (by added mailbox #) exten => _*97.,1,Answer exten => _*97.,2,VoicemailMain(${EXTEN:3}@default) exten => _*97.,3,Hangup ; Voicemail (by callerID) exten => *98,1,Answer exten => *98,2,VoicemailMain(${CALLERID(number)$}@default) exten => *98,3,Hangup ; Voicemail (main) exten => *99,1,Answer exten => *99,2,VoicemailMain() exten => *99,3,Hangup [callqueue] exten => s,1,Answer exten => s,2,Wait(1) exten => s,3,Set(CALLERID(name)= Q:${CALLERID(name)}) exten => s,4,Playback(welcometomyqueue) exten => s,5,Queue(myqueue) exten => s,6,VoiceMail(u5555) exten => s,7,Hangup [QueueAgentCallback] exten => _XXXX,1,ChanIsAvail(SIP/${EXTEN},s,) exten => _XXXX,102,Set(DIALSTATUS=BUSY) exten => _XXXX,103,Hangup exten => _XXXX,2,Dial(SIP/${EXTEN},15) exten => t,1,hangup [QueueMenu] exten => #,1,VoiceMail(u5555) exten => #,2,Hangup [local-internal] ; Floor 2 (Main) Cordless exten => 2021,hint,SIP/2031 exten => 2021,1,Macro(stdexten,2021,0) ; Floor 3 (Office) SPA-941 exten => 2031,hint,SIP/2031 exten => 2031,1,Macro(stdexten,2031,0) ; Floor 3 (Office) Aastra PT390 exten => 2032,hint,SIP/2002 exten => 2032,1,Macro(stdexten,2032,0) ; Floor 3 (Bedroom) Wireless exten => 2033,hint,SIP/2003 exten => 2033,1,Macro(stdexten,2033,0) [receivefax] exten => s,1,SetVar(FAXFILE=/var/spool/asterisk/fax/${UNIQUEID}.tif) exten => s,2,rxfax(${FAXFILE}) [incoming] ; this is where voip stuff comes in on right now.... exten => s,1,NoOp("S" incoming connection) exten => s,2,NoOp(CallerID "${CALLERID(name)}" <${CALLERID(number)}>) exten => s,3,Goto(mainmenu,s,1) exten => i,1,NoOp(INVALID incoming connection) exten => i,2,NoOp(CallerID "${CALLERID(name)}" <${CALLERID(number)}>) exten => i,3,Goto(mainmenu,s,1) exten => 8323,1,NoOp("Belanger 8323 incoming connection) exten => 8323,2,NoOp(CallerID "${CALLERID(name)}" <${CALLERID(number)}>) exten => 8323,3,Goto(mainmenu,s,1) exten => 5144264825,1,GotoIf($["${CALLERID(name)}"="Incoming Line"]?5) exten => 5144264825,2,Goto(mainmenu,s,1) exten => 5144264825,5,Set(CALLERID(name)=No CID Name) exten => 5144264825,6,Goto(mainmenu,s,1) include => local-internal [mainmenu] exten => fax,1,Goto(receivefax,s,1) exten => s,1,Answer exten => s,2,NoOp(Filler 1) exten => s,3,Set(iATTEMPTS=0) exten => s,4,Set(tATTEMPTS=0) exten => s,5,Background(welcomemessage) exten => s,6,Background(pleaseenterextension) exten => s,7,NoOp(Filler 2) exten => s,8,Set(TIMEOUT(digit)=3) exten => s,9,Set(TIMEOUT(response)=15) exten => h,1,Hangup exten => i,1,Set(iATTEMPTS=$[${iATTEMPTS}+1]) exten => i,2,GotoIf($[${iATTEMPTS}=4]:?4]) exten => i,3,Goto(s,5) exten => i,4,Playback(sorryyouarehavingtrouble) exten => i,5,Hangup exten => t,1,Set(tATTEMPTS=$[${tATTEMPTS}+1]) exten => t,2,GotoIf($[${tATTEMPTS}=4]:?4]) exten => t,3,Goto(s,5) exten => t,4,Playback(sorryyouarehavingtrouble) exten => t,5,Hangup include => local-internal ; Let them dial internal extensions directly ; **************** Leaving this in just to examine later ************ [ext-fax] exten => s,1,Answer exten => s,2,Goto(in_fax,1) exten => in_fax,1,GotoIf($[${FAX_RX} = system]?2:analog_fax,1) exten => in_fax,2,Macro(faxreceive) exten => in_fax,3,system(tiff2ps -2eaz -w 8.5 -h 11 ${FAXFILE} | ps2pdf - ${FAXFILE}.pdf) exten => in_fax,4,system(mime-construct --to ${EMAILADDR} --subject "Fax from ${CALLERIDNUM} ${CALLERIDNAME}" --attachment ${CALLERIDNUM}.pdf --type application/pdf --file ${FAXFILE}.pdf) exten => in_fax,5,system(rm ${FAXFILE} ${FAXFILE}.pdf) exten => in_fax,6,Hangup exten => analog_fax,1,GotoIf($[${FAX_RX} = disabled]?3:2) ;if fax is disabled, just hang up exten => analog_fax,2,DBGet(DIAL=DEVICE/${FAX_RX}/dial); exten => analog_fax,3,Dial(${DIAL},20,d) exten => analog_fax,4,Hangup ;exten => out_fax,1,wait(7) exten => out_fax,1,txfax(${TXFAX_NAME}|caller) exten => out_fax,2,Hangup exten => h,1,Hangup() ; ******************************************************************* [local-external] ;exten => _9x.,1,Dial(SIP/2999/${EXTEN:1}) ;exten => _9x.,2,Congestion [belanger-external] exten => _9x.,1,Dial(SIP/8323/9${EXTEN:1}) exten => _9x.,2,Congestion [belanger-internal] exten => _8xxx,1,Dial(SIP/8323/${EXTEN}) exten => _8xxx,2,Congestion [guest] include => local-internal include => features [full] include => guest include => local-external include => belanger-internal include => belanger-external