IVR Autoattendant Menu ;------------------------------------------------------------------- [custom-autoattend] ;timeconditions exten => s,1,GotoIfTime(*|*|1|jan?holidays,s,1) exten => s,n,GotoIfTime(*|*|4|jul?holidays,s,3) exten => s,n,GotoIfTime(*|*|11|nov?holidays,s,5) exten => s,n,GotoIfTime(*|*|24|nov?holidays,s,7) exten => s,n,GotoIfTime(*|*|25|dec?holidays,s,9) exten => s,n,GotoIfTime(08:00-17:00|mon-fri|*|*?normal-hours,s,1) exten => s,n,Goto(after-hours,s,1); ; [holidays] ; provide Holiday greeting and provide emergency access for ; contract clients exten => s,1,Playback(office-closed-New-Years) ; play the office we are closed message exten => s,2,Goto(holiday,s,10) exten => s,3,Playback(office-closed-4TH-of-July) ; play the office we are closed message exten => s,4,Goto(holiday,s,10) exten => s,5,Playback(office-closed-Vetrans-Day) ; play the office we are closed message exten => s,6,Goto(holiday,s,10) exten => s,7,Playback(office-closed-Thanksgiving) ; play the office we are closed message exten => s,8,Goto(holiday,s,10) exten => s,9,Playback(office-closed-Christmas) ; play the office we are closed message exten => s,10,Playback(office-hours) ; play the open hours message exten => s,11,Hangup ; [normal-hours] include => selection include => all-exten include => queues ; exten => s,1,Answer exten => s,n,Background,day-msg exten => s,n,DigitTimeout,5 exten => s,n,ResponseTimeout,10 ; [after-hours] include => selection include => all-exten include => queues ; exten => s,1,Wait,2 exten => s,n,Answer exten => s,n,Plaback,night-msg ;exten => s,n,Voicemail(u) exten => s,n,Hangup ; ;------------------------------------------------------------------- ; IVR Menu ;------------------------------------------------------------------- [selection] ; exten => i,1,Background(pbx-invalid) ; "That's not valid, try again" exten => i,n,Wait(1) exten => i,n,Goto(s,9) ; exten = t,1,Playback(pls-wait-connect-call) exten = t,n,Goto(operator-queue,s,1) ; ; * - directory ; not setup yet exten => *,1,Directory,default exten => *,2,Goto,s|1 ; ; # - disconnect exten => #,1,Playback,(vm-goodbye) exten => #,2,Hangup ; ; 0 Operator exten => 0,1,GotoIfTime(08:00-16:59|mon-fri|*|*?selection,0,6) exten => 0,2,GotoIf(Time(17:00-07:29|mon-fri|*|*?selection,0,3) exten => 0,3,Playback(sales-closed) exten => 0,4,Voicemail(u0) exten => 0,5,Hangup exten => 0,6,Answer exten => 0,6,Set(CALLERID(name)=qSales${CALLERIDNAME}) exten => 0,8,Set(MONITOR_FILENAME=/var/spool/asterisk/monitor/q${EXTEN}-${TIMESTAMP}-${UNIQUEID}) exten => 0,9,Playback() exten => 0,10,Queue(qoperator|t||) exten => 0,11,Hangup exten => 0*,1,Macro(agent-add,0,) exten => 0**,1,Macro(agent-del,0,0) ; ;1 Sales Dept exten => 1,1,GotoIfTime(08:00-16:59|mon-fri|*|*?selection,1,6) exten => 1,2,GotoIf(Time(17:00-07:29|mon-fri|*|*?selection,1,3) exten => 1,3,Playback(sales-closed) exten => 1,4,Playback(vm-goodbye) exten => 1,5,Hangup exten => 1,6,BackGround(for-quality-purposes) exten => 1,7,Playback(this-call-may-be) exten => 1,8,Playback(recorded) exten => 1,9,Playback(pls-wait-connect-call) exten => 1,10,SetMusicOnHold,default exten => 1,11,SetCallerID,1 exten => 1,12,SetCallerIDName,Sales exten => 1,13,Goto,ext-queues|101|1 ; ;2 Billing Dept exten => 2,1,GotoIfTime(08:00-16:59|mon-fri|*|*?selection,2,6) exten => 2,2,GotoIfTime(17:00-07:29|mon-fri|*|*?selection,2,3) exten => 2,3,Playback(billing-closed) exten => 2,4,Playback(vm-goodbye) exten => 2,5,Hangup exten => 2,6,Playback(for-quality-purposes) exten => 2,7,Playback(this-call-may-be) exten => 2,8,Playback(recorded) exten => 2,9,Playback(pls-wait-connect-call) exten => 2,10,SetMusicOnHold,default exten => 2,11,SetCallerID,2 exten => 2,12,SetCallerIDName,Billing exten => 2,13,Goto,ext-queues|102|1 ; ;3 Technical Support Dept exten => 3,1,GotoIfTime(08:30-17:29|mon-fri|*|*?selection,3,6) exten => 3,2,GotoIfTime(17:30-08:29|mon-fri|*|*?basic-exten,611,1) exten => 3,3,Playback(tech-closed) exten => 3,4,Playback(vm-goodbye) exten => 3,5,Hangup exten => 3,6,Playback(for-quality-purposes) exten => 3,7,Playback(this-call-may-be) exten => 3,8,Playback(recorded) exten => 3,9,Playback,(pls-wait-connect-call) exten => 3,10,SetMusicOnHold,default exten => 3,11,SetCallerID,3 exten => 3,12,SetCallerIDName,TechSupport exten => 3,13,Goto,ext-queues|103|1 ; ;4 exten => 4,1,Playback,(systemstat) exten => 4,n,Hangup ; exten => 5,1,Background(staff-listing) exten => 5,n,Hangup ; ;5 exten => 6,1,Playback(vm-goodbye) exten => 6,n,Hangup ; ;7 exten => 7,1,Playback(vm-goodbye) exten => 7,n,Hangup ; ;8 exten => 8,1,Playback(vm-goodbye) exten => 8,n,Hangup ; ;9 Fax Extension exten => 9,1,Set(CALLEDFAX=${EXTEN}) exten => 9,2,Answer exten => 9,3,Goto(fax,${EXTEN},1) ; exten => fax,1,Goto(ext-fax,in_fax,1) ;------------------------------------------------------------------------------- ; *** - Disa using voicemail passowords via agi ;------------------------------------------------------------------------------- exten => ***,1,Answer exten => ***,2,Read(ext_num,vm-extension) exten => ***,3,Wait(1) exten => ***,4,Read(ext_pwd,vm-password) exten => ***,5,Wait(1) exten => ***,6,agi,chk_vm_pwd.agi|/etc/asterisk/voicemail.conf|${ext_num}|${ext_pwd} exten => ***,7,GotoIf($["${result}" = "0"]?20:30) exten => ***,20,Playback(agent-loginok) exten => ***,21,ResetCDR(w) exten => ***,22,DISA(no-password|custom-ringy-dialtone) exten => ***,21,Hangup() exten => ***,30,PlayBack(invalid) exten => ***,31,Hangup() ;----------------------------------------------------- ;Prompt management used for IVR prompt recording. ;----------------------------------------------------- [prompt] exten => ,1,Goto(prompt-management,s,1) ; [prompt-management] ; Flexible prompt recording exten => s,1,Answer exten => s,n,Wait(1) exten => s,n,DigitTimeout(5) exten => s,n,Read(PROMPT_NUMBER|enter-prompt-number|3) exten => s,n,SayDigits(${PROMPT_NUMBER}) 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 => t,1,Playback(goodbye) exten => t,n,Hangup ; exten => i,1,Playback(pbx-invalid) exten => i,n,Goto(s,5) ; exten => 1,1,Playback(beep) exten => 1,n,Playback(bsky-prompt-${PROMPT_NUMBER}) exten => 1,n,Playback(beep) exten => 1,n,Goto(s,6) ; exten => 2,1,Goto(prompt-management-record,s,1) exten => *,1,Playback(goodbye) exten => *,n,Hangup ; [prompt-management-record] ; New prompt recording exten => s,1,Playback(vm-intro) exten => s,n,Record(tmp-newprompt:wav) exten => s,n,Playback(beep) exten => s,n,BackGround(tmp-newprompt) 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/tmp-newprompt.wav /var/lib/asterisk/sounds/prompt-${PROMPT_NUMBER}.wav) exten => 1,n,Playback(your-msg-has-been-saved) exten => 1,n,Goto(app-prompt-management,s,4) ; exten => 2,1,Goto(s,1) ; exten => *,1,Goto(app-prompt-management,s,4) ;------------------------------------------------------- ; - Special announcement admin (Easy IVR) ;------------------------------------------------------- exten => ,1,Goto(special-message,s,1) ; [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