一步步配置免費企業電話系統-設置自動話務員和語音導航

本章節,我們將討論創建語音導航菜單,也有人稱之為自動話務員和IVR菜單。IVR表示 語音交互響應,它用來描述一個系統的處理流程,當呼叫方呼入到系統時,呼叫方通過系統提示音的提示,然後按呼叫方用戶的選擇按鍵,例如,2,2,3,4等,然後進入到下一個流程中。

當呼叫方按按鍵時,電話會生成一個雙信號音,我們稱為DTMF 音。DTMF 英文表示 Dual Tone Multi-Frequency。 Asterisk收到這些DTMF音以後,通過識別,然後進行相應的處理。

現在,我們開始通過一系列的介紹在Asterisk中創建一個IVR菜單。


一步步配置免費企業電話系統-設置自動話務員和語音導航

Background 和 WaitExten Applications 應用

這裡,我們首先介紹兩個非常基礎的應用。Background() 應用播放一個語音提示,並且會監聽DTMF按鍵輸入。Asterisk然後根據輸入結果找到當前撥號規則中的一個extension,這個extension和DTMF輸入結果匹配。如果找到了匹配結果,Asterisk將會發送此呼叫到那個 extension。

Background() 應用程序的第一個參數為語音提示音的文件名稱,就像另外一個Asterisk應用- Playback()一樣,這裡記住,不要包含文件拓展後綴

如果用戶需要連續多個提示音的話,用戶可以使用Background(),然後使用 (&) 合併多個播放文件。


<code>exten => 6123,1,Background(prompt1&prompt2&prompt3), 依次播放3個提示音/<code>

如果用戶使用以上示例來播放語音的話,用戶可能遇到一點問題,就是語音文件不能有任何中間間隔,只能連續播放,這樣的話,可能會導致用戶體驗不好。為了解決這個問題,用戶可以使用一個等待應用程序,讓系統等待一段時間,然後再執行餘下的流程。

WaitExten() 應用就可以滿足以上要求。熟悉Asterisk的用戶可能在一些撥號規則的使用中經常會看到Background() 執行以後,系統會馬上執行一個WaitExten() 應用程序。在此應用中,第一個取值就是等待時長,以秒為單位。提示音後系統等待10秒鐘,讓用戶有一個反應時間,輸入DTMF按鍵。如果用戶沒有在限定時間內輸入DTMF,那麼,應用中內置的超時設置會觸發。此內置超時設置也可以通過撥號規則中的 TIMEOUT() 函數來修改。

<code>[auto_attendant]
exten => start,1,Verbose(2,Incoming call from ${CALLERID(all)})
same => n,Playback(silence/1)
same => n,Background(prompt1&prompt2&prompt3)
same => n,WaitExten(10)
same => n,Goto(timeout-handler,1)

exten => (timeout-handler,1)
same => n,Dial(${GLOBAL(OPERATOR)},30)
same => n,Voicemail(operator@default,${IF($[${DIALSTATUS} = BUSY]?b:u)})
same => n,Hangup()/<code>

Goto Application 和 Priority 標籤Labels使用方式

在我們創建簡單自動接線員菜單之前,首先我們瞭解價格其他有關的撥號規則的應用程序。Goto() 應用會要求處理流程從撥號規則中的一個位置跳到其他的處理位置上。

Goto() 就是這樣的功能程序,它比其他的應用程序可能相對複雜一點,但是也不用擔心其複雜性,讓我們一步步學習瞭解它的使用。

Goto() 應用程序可以通過一個或者兩個甚至於三個參數來調用。如果用戶使用單個參數調用Goto() 應用程序時,Asterisk將會在當前的extension中,直接跳轉到指定的優先級priority (或者它的標識label上)。如果用戶指定了兩個參數時,Asterisk將會在當前的context讀取第一個參數為一個extension,第二個參數為優先級參數 (或者標識 label) ,它們仍然在此extension上。如果用戶傳遞了三個參數時,Asterisk將會假設執行流程會跳轉到指定的context和extension和優先級priority。

<code>[StartingContext]
exten => 100,1,Goto(monkeys) // 一個參數僅在此環境執行
same => n,NoOp(We skip this)
same => n(monkeys),Playback(tt-monkeys)
same => n,Hangup()

exten => 200,1,Goto(start,1) ; play tt-weasels then tt-monkeys

exten => 300,1,Goto(start,monkeys) ; only play tt-monkeys

exten => 400,1,Goto(JumpingContext,start,1) ; play hello-world
// 3個參數,完全跳轉到完全不同的地方
exten => start,1,NoOp()
same => n,Playback(tt-weasels)
same => n(monkeys),Playback(tt-monkeys)

[JumpingContext]

exten => start,1,NoOp()
same => n,Playback(hello-world)
same => n,Hangup()/<code>

SayDigits,SayNumber,SayAlpha,和 SayPhonetic使用方式

現在,我們還沒有真正開始做和自動接線員菜單,我們還要介紹幾個應用程序可以讀取DTMF輸入結果,然後播放給呼叫方。SayDigits()SayNumber() 應用程序讀取指定的號碼回放給呼叫方。使用 SayDigits()SayNumber() 程序的話,僅傳遞給此應用用戶想播放的結果。此數據傳遞給第一個參數。

SayDigits() 應用每次讀取一個數字號碼,例如,如果用戶撥打 SayDigits(123),Asterisk將會回放“one two three”。如果執行 SayNumber() 應用程序的話,Asterisk將會讀取整個數字,而不是單獨數字讀取。例如,如果用戶撥打 SayNumber(123) ,Asterisk將會回放“one hundred twenty three”。

如果用戶需要讀取字母或者字符串的話,需要通過以下處理方式來執行。

SayAlpha()SayPhonetic() 應用程序檢測字母拼寫構成,然後回放給呼叫方。SayAlpha() 將會每次讀取指定的字符串中的每個字母。例如,SayAlpha(hello) 將會每次讀取單詞"hello" 中的每個字母。SayPhonetic() 將會使用國際拼音字母表的標準,每次回放字符串的一個起始字母。例如, SayPhonetic(hello) 將會回放"Hotel Echo Lima Lima Oscar"。這裡,回放的字符串中,都是以首字母開頭的單詞。

下面的示例中,系統演示了一個完整的呼叫示例,這個示例來讀取各種數字和字母組合形式:

<code>exten => 6592,1,SayDigits(123)
exten => 6593,1,SayNumber(123)
exten => 6594,1,SayAlpha(hello)
exten => 6595,1,SayPhonetic(hello)/<code>


分享到:


相關文章: