; This file contains example extensions_custom.conf entries. ; extensions_custom.conf should be used to include customizations ; to FreePBX Asterisk dialplan. ; All custom context should contain the string 'custom' in it's name ; Extensions in AMP have access to the 'from-internal' context. ; The context 'from-internal-custom' is included in 'from-internal' by default [ext-did-custom] ; this will allow calls to be routed by the ZAP channel they come in on. ; example a call comming in on ZAP cahnnel 1 will have Zap1 for it's DID. ;exten => s,2,GotoIf($["${CHANNEL:0:3}" = "Zap"]?ext-did|Zap${CHANNEL:4:1}|1) [from-internal-custom] exten => *111,1,Goto(custom-queue-acct,s,1) exten => *999,1,Goto(custom-disa,s,1) exten => #999,1,Goto(custom-queue-acct,s,1) exten => _**.,1,Pickup(${EXTEN:2}) ; GXP-2000 phone press BLF to pick up ringing call exten => *60,1,ringing exten => *60,2,Set(FutureTime=$[${EPOCH} + 8]) exten => *60,3,Set(FutureTimeMod=$[${FutureTime} % 10]) exten => *60,4,Set(FutureTime=$[${FutureTime} - ${FutureTimeMod}]) ;180 in next line is max # seconds connection can be held open. Use multiples of 10. exten => *60,5,Set(MaxConnectTime=$[${FutureTime} + 180]) exten => *60,6,Set(FutureTimeMod=$[${FutureTime} - ${EPOCH}]) exten => *60,7,GotoIf($["${FutureTimeMod}" < "0"]?10:8) exten => *60,8,wait(1) exten => *60,9,goto(6) exten => *60,10,Answer exten => *60,11,Set(FutureTime=$[${FutureTime} + 10]) exten => *60,12,Set(FutureTimeMod=$[${FutureTime} % 60]) exten => *60,13,wait(1) exten => *60,14,playback(at-tone-time-exactly) exten => *60,15,SayUnixTime(${FutureTime},,I) exten => *60,16,SayUnixTime(${FutureTime},,M) exten => *60,17,GotoIf($["${FutureTimeMod}" = "0"]?18:20) exten => *60,18,SayUnixTime(${FutureTime},,p) exten => *60,19,goto(23) exten => *60,20,playback(and) exten => *60,21,SayUnixTime(${FutureTime},,S) exten => *60,22,playback(seconds) exten => *60,23,Set(FutureTimeMod=$[${FutureTime} - ${EPOCH}]) exten => *60,24,GotoIf($["${FutureTimeMod}" < "1"]?27:25) exten => *60,25,wait(1) exten => *60,26,goto(23) exten => *60,27,playback(beep) exten => *60,28,Set(FutureTimeMod=$[${MaxConnectTime} - ${EPOCH}]) exten => *60,29,GotoIf($["${FutureTimeMod}" < "1"]?30:11) exten => *60,30,Hangup ;Stuff I added for line testing. ; *1 - System Status exten => *1,1,Playback(/var/lib/asterisk/sounds/custom/systemstatus) exten => *1,n,Wait(.5) exten => *1,n,Hangup ; **1 - System status record exten => **1,1,Answer exten => **1,n,Wait(2) exten => **1,n,Record(/var/lib/sounds/custom/systemstatus:gsm) exten => **1,n,Wait(2) exten => **1,n,Playback(/var/lib/asterisk/sounds/custom/systemstatus) exten => **1,n,Wait(2) exten => **1,n,Hangup ; *2 - Say Phone Number exten => *2,1,Playback(your-exten-num-is) exten => *2,n,SayDigits(${CALLERIDNUM}) exten => *2,n,Hangup ; *3 - Say Date and Time exten => *3,1,Playback(the-current-time-is) exten => *3,n,Datetime exten => *3,n,Hangup ; *5 - Milliwatt Tone exten => *5,1,Answer exten => *5,n,Milliwatt exten => *5,n,Hangup ; *7 - Music On Hold exten => *7,1,Answer exten => *7,n,MusicOnHold(default) ; *9 - weather exten => *9,1,Answer exten => *9,2,AGI(weather.agi) exten => *9,3,Hangup ;211 Community Information and Referral Services ; Available for Reassignment ;211 - Reassigned to ;exten => 211,1, ;exten => 211,n, ;exten => 211,n, ;exten => 211,n, ;311 - non-emerg not yet setup for Non Emerg exten => 311,1,Macro(user-callerid,) exten => 311,2,Dial(LOCAL/local non emergancy nmbr here) exten => 311,3,Congestion exten => 311,102,Playback(ss-noservice) exten => 311,103,Congestion ; 411 - Information services ;External-411 exten => 411,1,Macro(user-callerid,) exten => 411,2,Dial(IAX2/darwin@teliax/3035551212,30,r) exten => 411,3,Congestion exten => 411,102,Playback(ss-noservice) exten => 411,n,hangup ;Internal-411 exten => #411,1,Wait(1) exten => #411,n,AGI(directory,$/{DIR-CONTEXT/},ext-local,$/{DIRECTORY:0:1/}$/{DIRECTORY_OPTS/}o) exten => #411,n,Playback(vm-goodbye) exten => #411,n,Hangup ;511 Traffic and Transportation Information (US); Available for Reassignment ;511 - Reassigned to Call back Wake service exten => 511,1,Macro(user-callerid,) exten => 511,n,Answer exten => 511,n,AGI(wakeup.php) exten => 511,n,Hangup ; 611 - Repair Service / TechSupport exten => 611,1,Macro(user-callerid,) exten => 611,n,Answer exten => 611,n,GotoIfTime(*|*|1|jan?611|HOLIDAY) exten => 611,n,GotoIfTime(*|*|4|jul?611|HOLIDAY) exten => 611,n,GotoIfTime(*|*|11|nov?611|HOLIDAY) exten => 611,n,GotoIfTime(*|*|24|nov?611|HOLIDAY) exten => 611,n,GotoIfTime(*|*|25|dec?611|HOLIDAY) exten => 611,n,Goto(611,START) exten => 611,n(HOLIDAY),Playback(office-closed-holiday) ; play the office we are closed message exten => 611,n,Playback(office-hours) ; play the open hours message exten => 611,n,Hangup exten => 611,n(CLOSED),Playback(office-closed&our-business-hours-are&office-hours) exten => 611,n,Voicemail(u611) exten => 611,n,Hangup exten => 611,n(START),GotoIfTime(22:00-08:00|*|*|*?611|CLOSED) exten => 611,n,Set(TIMEOUT(digit)=3) exten => 611,n,Set(TIMEOUT(response)=10) exten => 611,n,SayDigits(611) exten => 611,n,Playback(repair&and&technical-support) exten => 611,n,Playback(for-quality-purposes&this-call-may-be&recorded) exten => 611,n(ID),Playback(pls-enter-account) exten => 611,n,Read(acct,then-press-pound,) exten => 611,n,SayDigits(${acct}) exten => 611,n,Background(if-correct-press) exten => 611,n,SayDigits(1) exten => 611,n,Background(if-incorrect-press) exten => 611,n,SayDigits(2) exten => 611,n,Read(res,then-press-pound,) exten => 611,n,GotoIf($["${res}"="1"]?ACCT:ID) exten => 611,n(ACCT),Set(CALLERID(name)=${CALLERIDNAME}) exten => 611,n,Set(CALLERID(number)=${acct}) exten => 611,n,Set(MONITOR_FILENAME=/var/spool/asterisk/monitor/q${EXTEN}-${TIMESTAMP}-${UNIQUEID}) exten => 611,n,SetMusicOnHold(default) exten => 611,n,GotoIfTime(08:00-17:00|mon-fri|*|*?611|DAY) exten => 611,n,GotoIfTime(17:00-22:00|mon-fri|*|*?611|NIGHT) exten => 611,n,GotoIfTime(09:00-13:00|sat|*|*?611|NIGHT) exten => 611,n,Goto(611,closed) exten => 611,n(DAY),Queue(102|t|||300) exten => 611,n(VM),Voicemail(u611) exten => 611,n,Hangup exten => 611,n(NIGHT),Queue(104|t|||300) exten => 611,n,Goto(611,VM) ; 711 - State Relay TTY/TDD/Voice Service exten => 711,1,Macro(user-callerid,) ;exten => 711,n,Dial(SIP/${EXTEN}) ;exten => 711,n,Congestion exten => 711,n,Playback(ss-noservice) exten => 711,n,Congestion exten => 711,n,Macro(hangupcall) ;Access to One Call Services to Protect Pipeline and Utilities from Excavation ;Damage (US); Available for Reassignment ;811 - Reassigned to quick-dial TollFree Directory exten => 811,1,Macro(user-callerid,) exten => 811,n,Dial(IAX2/user@provider/8005551212,30,r) exten => 811,n,Hangup ; 911 Emergancy exten => 911,1,Macro(user-callerid,) ;exten => 911,n,Dial(SIP/${EXTEN}) ;exten => 911,n,Congestion exten => 911,n,Playback(no-911-1) exten => 911,n,Congestion exten => 911,n,Macro(hangupcall) ; 900/976 Blocking - exten => _900NXXXXXX,1,Playback(ss-noservice) exten => _1NXX976XXXX,1,Playback(ss-noservice) exten => _NXX976XXXX,1,Playback(ss-noservice) exten => _976XXXX,1,Playback(ss-noservice) [custom-fax] exten => s,1,Goto(ext-fax,in_fax,1) ; Disa using voicemail passowords via agi [custom-disa] exten => s,1,Set(LOOPCOUNT=0) exten => s,n,Answer exten => s,n,Wait(1) exten => s,n(begin),Set(TIMEOUT(digit)=3) exten => s,n,Set(TIMEOUT(response)=10) exten => s,n,Playback(please-enter-the&extension) exten => s,n,Read(ext_num,then-press-pound,,) exten => s,n,Wait(1) exten => s,n,Playback(pls-enter-vm-password) exten => s,n,Read(ext_pwd,then-press-pound,,) exten => s,n,Wait(1) exten => s,n,agi,chk_vm_pwd.agi|/etc/asterisk/voicemail.conf|${ext_num}|${ext_pwd} exten => s,n,GotoIf($["${result}" = "0"]?D:custom-disa,i,1) exten => s,n,Set(CALLERIDNUM=${ext_num}) exten => s,n(D),DISA(no-password|from-internal) exten => h,1,Hangup exten => i,1,Playback(invalid) exten => i,n,Goto(loop,1) exten => t,1,Goto(loop,1) exten => loop,1,Set(LOOPCOUNT=$[${LOOPCOUNT} + 1]) exten => loop,n,GotoIf($[${LOOPCOUNT} > 2]?hang,1) exten => loop,n,Goto(custom-disa,s,begin) exten => hang,1,Playback(vm-goodbye) exten => hang,n,Hangup [custom-queue-acct] exten => s,1,Answer exten => s,n,GotoIf($["${CONTEXT}"="from-internal"]?USERCID:SETCID) exten => s,n(USERCID),Macro(user-callerid,) exten => s,n(SETCID),Set(CALLERID(name)=${CALLERIDNAME}) exten => s,n(ID),Playback(pls-enter-account) exten => s,n,Read(acct,then-press-pound) exten => s,n,SayDigits(${acct}) exten => s,n,Background(if-correct-press) exten => s,n,SayDigits(1) exten => s,n,Background(if-incorrect-press) exten => s,n,SayDigits(2) exten => s,n,Read(res,then-press-pound,) exten => s,n,GotoIf($["${res}"="1"]?ACCT:ID) exten => s,n(ACCT),Set(CALLERID(number)=${acct}) exten => s,n,Set(MONITOR_FILENAME=/var/spool/asterisk/monitor/q${EXTEN}-${TIMESTAMP}-${UNIQUEID}) exten => s,n,Queue(100|t|||300) exten => s,n,Voicemail(u100) ;------------------------------------------------------- ; Special announcement admin (Easy IVR) ;------------------------------------------------------- [custom-special-message] ; Record/replay/turn on/off the special message played before ACD queue calls exten => s,1,Answer exten => s,n,Wait(1) exten => s,n,DigitTimeout(5) exten => s,n,BackGround(T-to-hear-cur-ancmnt) exten => s,n,BackGround(press-1) exten => s,n,BackGround(T-to-rec-ancmnt) exten => s,n,BackGround(press-2) exten => s,n,BackGround(T-to-enable-ancmnt) exten => s,n,BackGround(press-3) exten => s,n,BackGround(T-to-disable-ancmnt) exten => s,n,BackGround(press-4) ; exten => t,1,Playback(goodbye) exten => t,2,Hangup ; exten => i,1,Playback(pbx-invalid) exten => i,2,Goto(s,4) ; exten => 1,1,Playback(special-message) exten => 1,2,Goto(s,4) ; exten => 2,1,Goto(special-message-record,s,1) ; exten => 3,1,Set($DB(SpecialMessage/1=1)}) exten => 3,n,Playback(enabled) exten => 3,n,Goto(s,4) ; exten => 4,1,DBdel(SpecialMessage/1) exten => 4,n,Playback(disabled) exten => 4,n,Goto(s,4) ; exten => *,1,Playback(goodbye) exten => *,2,Hangup ; [special-message-record] ; Record the new special message exten => s,1,Playback(vm-intro) exten => s,n,Record(new-special-message:wav) exten => s,n,Playback(beep) exten => s,n,BackGround(new-special-message) exten => s,n,BackGround(save-announce-press) exten => s,n,BackGround(digits/1) exten => s,n,BackGround(to-rerecord-announce) exten => s,n,BackGround(digits/2) exten => i,1,Playback(invalid) exten => i,n,Goto(s,3) ; exten => t,1,Goto(s,3) ; exten => 1,1,System(cp -f /var/lib/asterisk/sounds/new-special-message.wav /var/lib/asterisk/sounds/special-message.wav) exten => 1,n,Playback(your-msg-has-been-saved) exten => 1,n,Goto(app-special-message,s,1) ; exten => 2,1,Goto(s,1) ; exten => *,1,Goto(special-message,s,1) ; [macro-check-special-message] ; If the flag is set, play the special message, otherwise continue exten => s,1,Set(${DB(SpecialMessage=SpecialMessage/1)}) exten => s,2,Playback(system-status-msg) exten => s,3,Playback(special-message) exten => s,4,Ringing exten => s,5,Wait(4) exten => s,102,Noop