[general] static=yes writeprotect=yes autofallthrough=yes clearglobalvars=no priorityjumping=yes [globals] CONSOLE=Console/dsp ; Console interface for demo IAXINFO=guest ; IAXtel username/password TRUNK=Zap/r1 ; default trunk if you don't dial 8 or 9 TRUNK1=Zap/r1 ; dialing 9 before a number selects trunk 1 TRUNK2=Zap/G2 ; dialing 8 before a number selects trunk 2 TRUNKMSD=1 ; MSD digits to strip (usually 1 or 0) INTDIALOPT=W OUTDIALOPT=Wg ; internal contexts for admin/sup office/int stations #include "ext_internal.conf" [macro-stdext] ; Standard extension macro: ; ${ARG1} - Extension (we could have used ${MACRO_EXTEN} here as well ; ${ARG2} - Device(s) to ring ; removed @${MACRO_CONTEXT} from all the VoiceMail tags - JC 7 Sept 06 exten => s,1,Playback(transfer,skip) exten => s,2,Ringing exten => s,3,SetMusicOnHold(default) exten => s,4,Dial(${ARG2},25,${INTDIALOPT}) ; Ring the interface, 25 seconds maximum exten => s,5,VoiceMail(u${ARG1}) ; If unavailable, send to voicem ail w/ unavail announce exten => s,6,Goto(incoming,s,1) ; If they press #, return to start exten => s,105,VoiceMail(b${ARG1}) ; If busy, send to voicemail w/ busy ann ounce exten => s,106,Goto(incoming,s,1) ; If they press #, return to sta rt exten => a,1,VoiceMailMain(${ARG1}) ; If they press *, send the user into Vo iceMailMain exten => o,1,Goto(incoming,s,1) [macro-stdexten] ; Standard extension macro with call forwarding: ; ${ARG1} - Extension(we could have used ${MACRO_EXTEN} here as well) ; ${ARG2} - Device(s) to ring ; removed @${MACRO_CONTEXT} from all the VoiceMail tags - JC 7 Sept 06 exten => s,1,Playback(transfer,skip) exten => s,2,Ringing exten => s,3,SetMusicOnHold(default) exten => s,4,Set(MYTEMP=${CUT(CHANNEL,/,2)}) exten => s,5,Set(MYEXT=${CUT(MYTEMP,-,1)}) exten => s,6,GotoIf($[ ${MYEXT} = ${ARG1} ]?16:7) exten => s,7,Set(number=${DB(CFIM/${ARG1})}) exten => s,8,GotoIf($[ "${number}" = "" ]?10:9) exten => s,9,Dial(Local/${number}/n,25,${INTDIALOPT}) exten => s,10,Dial(${ARG2},25,${INTDIALOPT}) exten => s,11,Set(number=${DB(CFBS/${ARG1})}) exten => s,12,GotoIf($[ "${number}" = "" ]?14:13) exten => s,13,Dial(Local/${number}/n,25,${INTDIALOPT}) exten => s,14,NoOp(u${ARG1}) exten => s,15,VoiceMail(u${ARG1}) exten => s,16,Playback(goodbye) exten => s,17,Hangup exten => s,18,VoiceMailMain(${ARG1}) exten => s,19,Playback(goodbye) exten => s,20,Hangup exten => s,109,Goto(s,10) exten => a,1,VoiceMailMain(${ARG1}) ; If they press *, send the user into Vo iceMailMain exten => o,1,Goto(incoming,s,1) [macro-stdextenvm] ; Standard extension macro with call forwarding: ; ${ARG1} - Extension(we could have used ${MACRO_EXTEN} here as well) exten => s,1,Playback(transfer,skip) exten => s,2,Ringing exten => s,3,SetMusicOnHold(default) exten => s,4,VoiceMail(u${ARG1}) exten => s,5,Hangup exten => o,1,Goto(incoming,s,1) [macro-twoexten] ; Special two extension macro: ; ${ARG1} - Extension ; ${ARG2} - First Device(s) to ring ; ${ARG3} - Second Device(s) to ring ; removed @${MACRO_CONTEXT} from all the VoiceMail tags - JC 7 Sept 06 exten => s,1,Playback(transfer,skip) exten => s,2,Ringing exten => s,3,SetMusicOnHold(default) exten => s,4,Dial(${ARG2},25,${INTDIALOPT}) exten => s,5,Goto(s,105) exten => s,105,Playback(transfer,skip) exten => s,106,Dial(${ARG3},25,${INTDIALOPT}) exten => s,107,Voicemail(u${ARG1}) exten => s,108,Goto(incoming,s,1) exten => s,207,Voicemail(b${ARG1}) exten => s,208,Goto(incoming,s,1) exten => a,1,VoiceMailMain(${ARG1}) exten => o,1,Goto(incoming,s,1) [macro-threeexten] ; Special two extension macro: ; ${ARG1} - Extension ; ${ARG2} - First Device(s) to ring ; ${ARG3} - Second Device(s) to ring ; ${ARG4} - Third Device(s) to ring ; removed @${MACRO_CONTEXT} from all the VoiceMail tags - JC 7 Sept 06 exten => s,1,Playback(transfer,skip) exten => s,2,Ringing exten => s,3,SetMusicOnHold(default) exten => s,4,Dial(${ARG2},25,${INTDIALOPT}) exten => s,5,Goto(s,105) exten => s,105,Playback(transfer,skip) exten => s,106,Dial(${ARG3},25,${INTDIALOPT}) exten => s,107,Goto(s,207) exten => s,207,Playback(transfer,skip) exten => s,208,Dial(${ARG4},25,${INTDIALOPT}) exten => s,209,Voicemail(u${ARG1}) exten => s,210,Goto(incoming,s,1) exten => s,309,Voicemail(b${ARG1}) exten => s,310,Goto(incoming,s,1) exten => a,1,VoiceMailMain(${ARG1}) exten => o,1,Goto(incoming,s,1) [incoming] ; main context for all incoming calls exten => s,1,Set(TIMEOUT(digit)=2) exten => s,2,Set(TIMEOUT(response)=2) exten => s,3,SetMusicOnHold(default) exten => s,4,GotoIf(${DB_EXISTS(blacklist/${CALLERID(num)})}?blacklisted,s,1) exten => s,5,NoOp( Not Blacklisted ) ;exten => s,4,LookupBlacklist ;exten => s,5,NoOp(Result of LookupBlacklist is ${LOOKUPBLSTATUS} ) ;exten => s,6,GotoIf($[ ${LOOKUPBLSTATUS} = FOUND ]?7:8) ;exten => s,7,Goto(blacklisted,s,1) exten => s,6,Answer exten => s,n,Goto(ivrmenu1|s|6) exten => s,n,Hangup ; some incoming calls get an extension exten => _XXXX,1,Goto(incoming|s|1) exten => i,1,Playback(invalid) exten => i,2,Goto(incoming,s,1) exten => t,1,Goto(incoming,s,1) exten => a,1,Goto(incoming,s,1) exten => o,1,Goto(incoming,s,1) exten => h,1,Hangup ; Incoming blacklisted calls, add w/ "database put blacklist 1" in the asterisk console [blacklisted] exten => s,1,Answer exten => s,2,Wait(1) exten => s,3,VoiceMail(u999) exten => s,4,Hangup [ivrmenu1] exten => s,1,Set(TIMEOUT(digit)=2) exten => s,2,Set(TIMEOUT(response)=2) exten => s,3,SetMusicOnHold(default) exten => s,4,Answer exten => s,5,NoOp exten => s,6,Background(ivrmenu1) exten => s,7,Background(silence/5) exten => s,n,Goto(default,100,1) exten => s,n,Hangup ; Sample extension for testing echo latency. ;exten => 6000,1,Playback(demo-echotest) ; Let them know what's going on exten => 6000,1,Echo ; Do the echo test ;exten => 6000,2,Playback(demo-echodone) ; Let them know it's over exten => 6000,2,Goto(s,6) ; Start over exten => i,1,Playback(invalid) exten => i,2,Goto(ivrmenu1,s,7) exten => t,1,Goto(ivrmenu1,s,7) exten => a,1,Goto(ivrmenu1,s,7) exten => o,1,Goto(ivrmenu1,s,7) exten => h,1,Hangup exten => _X,1,Goto(default,${EXTEN},1) exten => _XX,1,Goto(default,${EXTEN},1) exten => _XXX,1,Goto(default,${EXTEN},1) exten => _XXXX,1,Goto(default,${EXTEN},1) exten => _XXXXX,1,Goto(default,${EXTEN},1) [default] ; This context allows for calling internally around the lab include => internal include => conferences exten => s,1,Goto(incoming,s,1); ; Extension to pick up a ringing call from a specific phone exten => _**X.,1,Pickup(${EXTEN:2}) ; This extension is called if a fax tone is detected exten => fax,1,Goto(fax,2000,1) ; Company Directory ; exten => 7,1,Directory(default) ; To change the ring tone of the phone to ringtone4 ;exten => 600,1,Set(ALERT_INFO=ringtone4) ;exten => 600,2,Macro(stdexten,${EXTEN},SIP/${EXTEN}) ; The extension 600 is used for message delivery, see the ouboundmsg context ; at the end of this file exten => 600,1,Voicemail(600@default) exten => 600,2,Hangup exten => 601,hint,SIP/601 exten => 601,1,Macro(stdexten,${EXTEN},SIP/${EXTEN}) exten => 602,hint,IAX2/602 exten => 602,1,Macro(stdexten,${EXTEN},IAX2/${EXTEN}) ; Standard Asterisk extensions exten => i,1,Playback(invalid) exten => i,2,Goto(incoming,s,1) exten => t,1,Goto(incoming,s,1) exten => a,1,Goto(incoming,s,1) exten => o,1,Goto(incoming,s,1) exten => h,1,Hangup [voicemail] ; Extension for voicemail using phone buttons exten => asterisk,1,VoiceMailMain exten => default,1,VoiceMailMain ; Extension for checking voicemail via voicemailmain exten => 8500,1,Wait(2) exten => 8500,n,VoiceMailMain exten => 8500,n,Hangup exten => 8501,1,Wait(2) exten => 8501,n,VoiceMailMain(${CALLERIDNUM}) exten => 8501,n,Hangup exten => 8502,1,Wait(2) exten => 8502,n,Set(MYTEMP=${CUT(CHANNEL,/,2)}) exten => 8502,n,Set(MYMAILBOX=${CUT(MYTEMP,-,1)}) exten => 8502,n,VoiceMailMain(${MYMAILBOX}) exten => 8502,n,Hangup [catchall] ; Invalid extension catch all exten => _X,1,Playback(invalid) exten => _X,2,Goto(incoming,s,1) exten => _XX,1,Playback(invalid) exten => _XX,2,Goto(incoming,s,1) exten => _XXX,1,Playback(invalid) exten => _XXX,2,Goto(incoming,s,1) exten => _XXXX,1,Playback(invalid) exten => _XXXX,2,Goto(incoming,s,1) exten => _XXXXX,1,Playback(invalid) exten => _XXXXX,2,Goto(incoming,s,1) exten => _XXXXXX,1,Playback(invalid) exten => _XXXXXX,2,Goto(incoming,s,1) exten => _XXXXXXX.,1,Playback(invalid) exten => _XXXXXXX.,2,Goto(incoming,s,1) exten => i,1,Playback(invalid) exten => i,2,Goto(incoming,s,1) [conferences] exten => 5001,1,MeetMe(5001|M) exten => 5002,1,MeetMe(5002|M) exten => 5003,1,MeetMe(5003|M) exten => 5004,1,MeetMe(5004|M) exten => 5005,1,MeetMe(5005|M) exten => 5006,1,MeetMe(5006|M) exten => 5007,1,MeetMe(5007|M) exten => 5008,1,MeetMe(5008|M) exten => 5009,1,MeetMe(5009|M) exten => 5010,1,MeetMe(5010|M) [fax] exten => 2000,1,Macro(faxreceive) exten => h,1,system(/usr/local/sbin/mailfax ${FAXFILE} ${EMAILADDR} "${CALLERIDN UM} ${CALLERIDNAME}") [macro-faxreceive] exten => s,1,Set(FAXFILE=/var/spool/asterisk-fax/${UNIQUEID}.tif) exten => s,2,Set(EMAILADDR=${DB(extensionemail/${MACRO_EXTEN})}) exten => s,3,rxfax(${FAXFILE}) exten => s,103,Set(EMAILADDR=defaultuser@example.com) exten => s,104,Goto(3) ; Outbound message delivery: ; The default mailbox is 600 and is configured by default on this server ; This section is triggered by /usr/local/bin/vmnotifyhandler ; Use extensions 3295001 and 3295002 to record the outbound message prompts ; You MUST record these prompts since they do not exist by default [outboundmsg] exten => s,1,Set(TIMEOUT(digit)=5) exten => s,2,Set(TIMEOUT(response)=10) exten => s,3,Answer exten => s,4,Background(silence/1) exten => s,5,Background(msg-info) exten => s,6,Background(silence/1) exten => s,7,Background(outboundmessage) exten => s,8,Background(msg-ack) exten => s,9,Background(silence/1) exten => s,10,Background(msg-ack) exten => s,11,Background(silence/1) exten => s,12,Background(msg-ack) exten => s,13,NoOp(Running vmnotifyemail ${CALLEDUSER} no) exten => s,14,System(/usr/local/bin/vmnotifyemail ${CALLEDUSER} no) exten => s,15,Hangup exten => 1,1,Goto(s,5) ; replay message exten => 2,1,Goto(msgack,s,1) ; acknowledge message exten => t,1,Playback(vm-goodbye) exten => t,2,NoOp(Running vmnotifyemail ${CALLEDUSER} no) exten => t,3,System(/usr/local/bin/vmnotifyemail ${CALLEDUSER} no) exten => t,4,Hangup [msgack] exten => s,1,Playback(vm-goodbye) exten => s,2,NoOp(Running vmnotifyemail ${CALLEDUSER} yes) exten => s,3,System(/usr/local/bin/vmnotifyemail ${CALLEDUSER} yes) exten => s,4,Hangup ; CONTEXT PERMISSIONS [normal] ; Allow voicemail,internal,conferences,scheduler for normal users include => voicemail include => default [administrator] ; Add system commands include => spy include => system include => voicemail include => internal include => outgoing include => default include => catchall