IVR的全稱(chēng)的Interactive Voice Response,就是我們經(jīng)常說(shuō)的電話(huà)語(yǔ)音菜單。FreeSWITCH支持非常強大的語(yǔ)音菜單──你可以寫(xiě)簡(jiǎn)單的XML,或更靈活的Lua,當然還有Event Socket,Erlang Socket等等。
這里,簡(jiǎn)單介紹一下XML。其實(shí)語(yǔ)音菜單說(shuō)來(lái)也簡(jiǎn)單,說(shuō)難也難。讓我們先來(lái)一個(gè)感性的認識--其實(shí),FreeSWITCH默認的配置已包含了一個(gè)功能齊全的例子,隨便拿起一個(gè)分機,撥5000,就可以聽(tīng)到菜單提示了,當然,默認的提示是英文的,大意是說(shuō)歡迎來(lái)到FreeSWITCH,撥1進(jìn)入FreeSWITCH會(huì )議;撥2進(jìn)入回音(echo)程序,這時(shí)候可以聽(tīng)到自己的回音;撥3聽(tīng)等待音樂(lè )(MOH,Music on Hold),撥4會(huì )轉到FreeSWITCH開(kāi)發(fā)者Brian West的SIP電話(huà)上;撥5你會(huì )聽(tīng)到一只尖叫的猴子;撥6進(jìn)入下級菜單;撥9重聽(tīng),撥1000-1019之間的號碼則會(huì )轉到對應分機。
最簡(jiǎn)單的菜單
感受這些之后,讓我們先來(lái)配置一種最簡(jiǎn)單的情形。一些廉價(jià)的企業(yè)小交換機通常只能提供這點(diǎn)功能──“您好,歡迎致電XX公司,請直撥分機號,查號請撥0”。在此,我們假定使用FreeSWITCH的默認配置,分機號為1000-1019,前臺分機號為0,撥0則轉人工臺,查號或轉接其它分機。
系統默認的配置文件存放在/usr/local/freesiwtch/conf/autoload_configs/ivr.conf,配置文件是XML格式,菜單放到 中,而每一個(gè)即是一個(gè)菜單。并且,每個(gè)menu應該有一個(gè)唯一的名字(name),以便在撥號計劃(dialplan)中引用。
<configuration name="ivr.conf" description="IVR menus">
<menus>
<menu name="demo_ivr">
</menu>
</menus>
</configuration>
好,我們先來(lái)實(shí)現上述最簡(jiǎn)單的menu:
<menu name="welcome"
greet-long="custom/welcome.wav"
greet-short="custom/welcom_short.wav"
invalid-sound="ivr/ivr-that_was_an_invalid_entry.wav"
exit-sound="voicemail/vm-goodbye.wav"
timeout="15000"
max-failures="3"
max-timeouts="3"
inter-digit-timeout="2000"
digit-len="4">
<entry action="menu-exec-app" digits="0" param="transfer 1000 XML default"/>
<entry action="menu-exec-app" digits="/^(10[01][0-9])$/" param="transfer $1 XML default"/>
</menu>
我們指定菜單的名字是welcome,greet-long即為最開(kāi)始播放的語(yǔ)音--“您好,歡迎致電XX公司,請直撥分機號,查號請撥0”,該語(yǔ)音文件默認的位置應該是/usr/local/freeswitch/sounds/,所以,您應該事先把聲音文件錄好,放到custom/welcome.wav(當然,你也可以使用其它路徑,如/home/your_name/ivr/welcome.wav)。并且,由于PSTN交換機都是使用PCM編碼,所以,welcome.wav文件的格式應為單聲道,8000HZ。
如果用戶(hù)長(cháng)時(shí)間沒(méi)有按鍵,剛應重新提示撥號,但重新提示應該簡(jiǎn)短,如“請直撥分機號,查號請撥0”。所以,可以錄制這么一個(gè)聲音文件放到custom/welcome_short.wav。
invalid-sound:如果用戶(hù)按錯了鍵,則會(huì )使用該提示。如果你安裝時(shí)指定了make sounds-install,則該文件應該用默認存在的,只是它是英文的,如果你需要中文的提示,可以自己錄一個(gè)放到custom中。
exit-sound:不說(shuō)也知道,最后菜單退出時(shí)(一般時(shí)超時(shí)),會(huì )提示Good Bye。
timeout指定超時(shí)時(shí)間;max-failures容忍用戶(hù)按鍵錯誤的次數。max-timeouts即最大超時(shí)次數。inter-digit-timeout為兩次按鍵的最大間隔(毫秒),如用戶(hù)撥分機號1001時(shí),如果撥了10,等2秒,然后再按01,這時(shí)系統收到的號碼為10,則會(huì )提示錯誤 invalid-sound。
digit-len說(shuō)明菜單項的長(cháng)度,在本例中,用戶(hù)分機號為4位。
該menu中有兩個(gè)選項,第一個(gè)是在用戶(hù)按0時(shí), menu-exec-app執行一個(gè)命令(參見(jiàn)mod_command),在此處它執行transfer,將來(lái)話(huà)轉到分機1000。
如果來(lái)電用戶(hù)知道分機號,則可以直接撥分機號,而不用經(jīng)過(guò)前臺轉接,節約時(shí)間。在該例中,正則表達式"/^(10[01][0-9])$/" 會(huì )匹配用戶(hù)輸入1000-1019之間的分機,
以上菜單設定好后,需要在控制臺中執行 reloadxml (或按F6)才可以配置生效。
配置完成后就可以在控制臺上進(jìn)行測試:
FS> originate user/1001 &ivr(welcome)
測試成功后,當然,你可能需要先把用戶(hù)來(lái)話(huà)轉到語(yǔ)音菜單。根據配置不同,用戶(hù)來(lái)話(huà)的接聽(tīng)有多種配置方式,一般來(lái)說(shuō),來(lái)話(huà)會(huì )先到達public dialplan,所以,你可以在conf/dialplan/public.xml中加入一個(gè)extension:
<extension name="incoming_call">
<condition field="destination_number" expression="^你的DID號碼$">
<action application="answer" data=""/>
<action application="sleep" data="1000"/>
<action application="ivr" data="welcome"/>
</condition>
</extension>
這樣,如果有外部呼叫進(jìn)來(lái),就可以聽(tīng)到語(yǔ)音菜單了。
默認菜單簡(jiǎn)介
明白了以上簡(jiǎn)單的菜單,就很容易理解更復雜一點(diǎn)的配置了。系統默認提供了一個(gè)名字demo_ivr的菜單。最初的語(yǔ)音提示greet-long/greet-short是用phrase實(shí)現的。phrase是用XML定義的一些短語(yǔ),最終也是播放聲音文件,但在多語(yǔ)言系統中會(huì )更靈活。在此,我們不討論phrase,你可以簡(jiǎn)單的認為它就是一個(gè)聲音文件。
菜單選項大多都是根據用戶(hù)按鍵使用menu-exec-app執行相應的命令,上面已經(jīng)講到了。menu-sub表示會(huì )執行一個(gè)下級菜單,這樣,在下級菜單中(此外是demo_ivr_submenu)便可以用menu-top來(lái)返回上級菜單。
基本上就這么多。通過(guò)設置多級菜單,以及與dialplan配合,根據不同的情況進(jìn)行跳轉,可以實(shí)現相當復雜的一些功能。如果這些還不夠,可以嘗試一下更高級的LUA菜單或Event Socket。
調試
打開(kāi)控制臺或fs_cli,按F8將loglevel調到debug狀態(tài),能看到詳細的執行過(guò)程。如果看到紅色的(如果你的控制臺不支持彩色,看ERROR的吧),可能是配置錯誤,不過(guò)一般會(huì )是聲音文件找不到之類(lèi)的,檢查相應路徑下是否有對應的聲音文件。