asterisk 裡有一個很好用的指令,可針對不同的時間做不同的事,可惜說明文件裡範例不多…
所以只能靠自己來摸索了。
範例1
底下是常用範例,下班時間撥放”我們下班了”的語音提示,其餘時間則撥放正常的IVR
檢視程式碼 BASH
[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
下班時間則不讓員工撥打手機電話了
檢視程式碼 BASH
[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命名的方式來寫會比較。