asterisk 裡有一個很好用的指令,可針對不同的時間做不同的事,可惜說明文件裡範例不多…
所以只能靠自己來摸索了。
範例1
底下是常用範例,下班時間撥放”我們下班了”的語音提示,其餘時間則撥放正常的IVR
[callIN]
exten => s,1,Playback(silence/1)
;這是播放語音提示前的標準動作,可避免最初的幾毫秒提示音被忽略。
;GotoIfTime 語法 (時間,星期,日,月?要跳到的context,分機,priority順序)
;GotoIfTime 語法 上面的時段,若是全時段的話,可用*星號代替
same => n,GotoIfTime(17:00-08:59,mon-fri,*,*?callIN,s,offtime)
;撥放現在是下班時間提醒,上班時間 09:00-17:00 週一至五 除此之外都是下班時間
same => n,GotoIfTime(*,sat-sun,*,*?callIN,s,offtime) ;六日休
same => n,GotoIfTime(*,*,10,oct?callIN,s,offtime) ;雙十節
;same => n,GotoIfTime(*,*,25,dec?callIN,s,offtime) ;12/25
same => n,GotoIfTime(*,*,1,jan?callIN,s,offtime) ;1/1元旦
same => n,Background(IVR)
;撥放IVR:XX公司您好,請直撥分機號碼....
same => n,WaitExten(20)
;20秒等待輸入分機號,時間一到,自動跳總機
same => n,Goto(0,1) ;自動跳總機
same => n(offtime),Background(offtime)
;撥放offtime IVR:XX公司您好!現在是下班時間 , 請直撥分機或於上班時間再來電...
;說明,這裡的priority順序很特別,我們採用了 priority命名的方式,所以你會看到 n(offtime) 這樣的寫法
same => n,WaitExten(15)
same => n,Background(custom/tks4call) ;謝謝您的來電
same => n,Hangup()
;規則說明: 1接聽電話 2語音宣告 3等待分機輸入若15秒後沒有輸入任何分機則進行下一動 4掛斷
範例2
下班時間則不讓員工撥打手機電話了
[callOut]
exten => _09XXXXXXXX,1,Set(VOLUME(RX)=5)
;GotoIfTime 語法 (時間,星期,日,月?要跳到的context,分機,priority順序)
same => n,GotoIfTime(18:00-07:59,*,*,*?callOut,${EXTEN},5)
;時段限定,18點至早上8點前都不能打電話了
same => n,Dial(SIP/gateway1/${EXTEN},60)
same => 4,Hangup
same => n,Playback(offtime-setting)
;撥放語音提示:現在是下班時間,你不能打電話了
same => n,Hangup
這個範例與前面不同的是,分機採用了變數 ${EXTEN} 可以比較靈活。而priority順序卻是寫死的,寫成5,這樣的寫法比較不好,不夠靈活。因為萬一我們要修改什麼,加入或刪除一行的話,那整個priority的順序就都不一樣了,所以請參考上一個範例,使用priority命名的方式來寫會比較。