GotoIfTime指令

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命名的方式來寫會比較。

本篇發表於 voip。將永久鏈結加入書籤。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *