我們來(lái)練習配置一種最簡(jiǎn)單的情形。當有電話(huà)呼入時(shí),會(huì )播放:“您好,歡迎致電某某公司,請直撥分機號,查號請撥0”。然后,來(lái)話(huà)用戶(hù)就可以輸入1000~1019之間的分機號,也可以直接按0轉到人工臺(如分機1000)進(jìn)行查號,或要求轉接其他分機。
IVR系統默認的配置文件為conf/autoload_configs/ivr.conf.xml,它裝入conf/ivr_menus/目錄下所有的XML文件。系統有一個(gè)示例的IVR配置,叫demo_ivr,也就是我們剛才撥5000聽(tīng)到的那個(gè)。為了實(shí)現我們的目標菜單,我們創(chuàng )建一個(gè)XML配置文件conf/ivr_menus/welcome.xml,內容如下:
<include>
<menus>
<menu name="welcome"
greet-long="welcome.wav"
greet-short="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>
</menus>
</include>
在上述配置中,首先,我們指定菜單的名字(name)是welcome,其他各項的含義如下:
1.greet-long:指定最開(kāi)始的歡迎音,即為最開(kāi)始播放的“您好,歡迎致電某某公司,請直撥分機號,查號請撥0”的語(yǔ)音,該語(yǔ)音文件默認的位置應該是在/usr/local/freeswitch/sounds目錄下。
2.greet-short:該項指定一個(gè)簡(jiǎn)短的提示音。
3.invalid-sound:如果用戶(hù)按錯了鍵,則會(huì )使用該提示。如果你安裝時(shí)使用了“make sounds-install”命令安裝了聲音文件,則該文件應該是默認存在的。
4.exit-sound:該項指定最后菜單退出時(shí)(一般是超時(shí)沒(méi)有按鍵)的聲音,默認會(huì )提示“Good Bye”。
5.timeout:指定超時(shí)時(shí)間(毫秒),即多長(cháng)時(shí)間沒(méi)有收到按鍵就超時(shí),播放其他提示音。
6.max-failures:為容忍用戶(hù)按鍵錯誤的次數。如果用戶(hù)的按鍵與下面配置的正則表達式不匹配(即沒(méi)有找到相關(guān)的菜單項),就認為是錯誤。
7.max-timeouts:即最大超時(shí)次數。
8.inter-digit-timeout:為兩次按鍵的最大間隔(毫秒)。如用戶(hù)撥分機號1001時(shí),假設撥了10,等3秒,然后再按01,這時(shí)系統實(shí)際收到的號碼為10(后面的01超時(shí)后沒(méi)有收到),則會(huì )播放invalid-sound指定的聲音文件以提示錯誤。
9.digit-len:說(shuō)明菜單項的長(cháng)度,即最大收號位數。在本例中,用戶(hù)分機號長(cháng)度為4位,因此我們使用4。
以上菜單設定好后,需要在控制臺中執行reloadxml(或按F6鍵)使配置生效。
配置完成后就可以在控制臺上進(jìn)行如下測試(呼叫1001,接聽(tīng)后進(jìn)入ivr菜單):
freeswitch> originate user/1001 &ivr(welcome)
測試成功后,你就可以配置Dialplan把并戶(hù)來(lái)話(huà)轉接到菜單了,在Dialplan中加入一個(gè)extension(請注意,你需要加到正確的Dialplan Context中,如果不確定應該加到哪個(gè)Context中的話(huà),在default和public中都加上會(huì )比較保險。):
<extension name="incoming_call">
<condition field="destination_number" expression="^1234$">
<action application="answer" data=""/>
<action application="sleep" data="1000"/>
<action application="ivr" data="welcome"/>
</condition>
</extension>
接下來(lái)呼叫1234進(jìn)行測試,就可以聽(tīng)到我們剛才配置的IVR菜單了。注意,在實(shí)際應用中,為了能接受外部來(lái)的呼叫,你可能要把這里的1234改成你實(shí)際的DID(Direct Inbound Dial)號碼。
添加一個(gè)賬號
在實(shí)現應用中,FreeSWITCH默認提供的20個(gè)賬號可能不夠用;或者,我們需要不同的號碼段(如使用600~699號碼段)作為分機號。這時(shí),就需要添加一個(gè)新的賬號。
我們已經(jīng)了解現有的用戶(hù)配置文件是存放在FreeSWITCH安裝目錄的conf/directory/default目錄下,每個(gè)用戶(hù)對應一個(gè)XML配置文件,如1000.xml即包含了1000這個(gè)用戶(hù)的配置文件。例如我們要添加6001這個(gè)用戶(hù),只需以1000.xml為模板,將該文件中的內容復制為6001.xml,然后把6001.xml文件中的所有出現1000的地方全部替換成6001即可。
當然,除了手工的復制和替換外,上述步驟可以在UNIX系統上的Shell中使用下列命令完成:
# sed -e "s/1000/6001/" 1000.xml > 6001.xml
批量添加賬號
如果需要添加很多賬號,很顯然一個(gè)一個(gè)的添加是不現實(shí)的。
其實(shí)也很簡(jiǎn)單,如果在Linux系統下,我們只需要用一下Shell中的for循環(huán)就可以了。比如我們要創(chuàng )建6020~6039這20個(gè)用戶(hù),具體的Shell命令如下:
# for i in `seq 6020 6039`; do sed -e "s/1000/$i/" 1000.xml > $i.xml ; done
使用Windows平臺的人,可以安裝UnxUtils,就可以使用大部分的UNIX命令了。如我們可以使用如下“。bat”腳本完成同樣的添加用戶(hù)的功能(將下列內容存到與1000.xml相同的目錄下的擴展名為“。bat”的文件中,用鼠標雙擊即可執行):
for /L %%i in (6020, 1 6039) do sed -e "s/1000/%%i" 1000.xml > %%i.xml
創(chuàng )建完用戶(hù)配置文件后就可以在FreeSWITCH中使用reloadxml命令使之生效了。配置生效后,使用這些用戶(hù)注冊和呼出都沒(méi)有問(wèn)題,如果這些用戶(hù)也需要做被叫的話(huà),那就需要修改Dialplan,增加到這部分用戶(hù)的路由。如,我們增加了6020~6039這20個(gè)用戶(hù)后,可以簡(jiǎn)單地將默認的Dialplan中的正則表達式“10[01][0-9]$”改為“60[0-3][0-9]$”,就可以包含我們新創(chuàng )建的用戶(hù)了。更改后的部分內容如下:
<extension name="Local_Extension">
<condition field="destination_number"
expression="^(60[0-3][0-9])$">
視頻通話(huà)
FreeSWITCH也支持基于SIP的視頻通話(huà),潮流有很多型號的視頻話(huà)機如GXV3275,下面我們來(lái)看一看基本的設置,以及視頻轉碼與錄像等高級話(huà)題。
1) 配置視頻通話(huà):
FreeSWITCH默認的配置文件中并沒(méi)有對視頻編解碼的相關(guān)項,因而默認不支持視頻呼叫。如果需要支持視頻呼叫,只需要在配置文件中增加相關(guān)的視頻編解碼就可以了。
目前FreeSWITCH支持的視頻編解碼有H261、H263、H263-1998(H263+)、H263-2000(H263++)、H264、VP8等。具體應該使用哪種或哪幾種編解碼需要看SIP終端的支持。需要注意的是,與音頻編解碼不同,FreeSWITCH中的視頻編解碼目前僅支持透傳,即FreeSWITCH僅將通話(huà)中一方的視頻原樣送到另一方去,而不做任何編碼轉換。這就要求進(jìn)行視頻通信的雙方要使用一致的編解碼。
FreeSWITCH支持的媒體編碼默認是在conf/vars.xml中定義的,讀者可以在該文件中找到類(lèi)似下面的配置:
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=G722,PCMU,PCMA,GSM"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=PCMU,PCMA,GSM"/>
以上兩行分別定義了兩個(gè)全局變量,它們的字面意思分別是全局的和出局的編解碼首選項。假設我們增加H264編碼支持,配置如下:
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=G722,PCMU,PCMA,GSM,GSM,H264"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=PCMU,PCMA,GSM,GSM,H264"/>
修改完上述配置文件后,由于它實(shí)際修改的是全局變量,一般來(lái)說(shuō)需要重啟FreeSWITCH才能使之生效(當然也有不重啟FreeSWITCH使之生效的方法,但由于操作比較復雜,在此就不多介紹了)。
配置完畢后可以使用如下命令查看是否生效(其中“CODECS IN”和“CODECS OUT”分別代表入局和出局時(shí)使用的編解碼):
freeswitch> sofia status profile internal
=====================================================================
======================================
Name internal
CODECS IN G722,PCMU,PCMA,GSM,G729,H264
CODECS OUT PCMU,PCMA,GSM,G729,H264
配置了正確的視頻編解碼后,就可以在視頻話(huà)機之間進(jìn)行視頻通話(huà)了。
2) 視頻錄像與回放
FreeSWITCH中支持錄音,有了視頻通話(huà)后,大家就希望支持錄像。與錄音相比,錄像要復雜一些。錄像數據要按一定的格式存儲在文件中,而這些文件格式有好多種。不同的文件格式稱(chēng)為不同的容器(Container),在這些容器中,通常會(huì )包含多個(gè)音頻軌道(Track)和視頻軌道,有的還含有同步信息。
目前,處理視頻格式最好的開(kāi)源軟件就是ffmpeg,暫時(shí)還沒(méi)有人將它與FreeSWITCH集成(這樣說(shuō)也不全對,因為筆者已經(jīng)在做了)。FreeSWITCH中實(shí)現了一個(gè)簡(jiǎn)單的mod_fsv模塊,提供FreeSWITCH中的錄像及回放支持。它不依賴(lài)于任何其他的視頻處理庫,而是自己定義了一種私有的格式,將音頻軌道用L16編碼的數據保存,視頻軌道則將整個(gè)RTP原始包都保存進(jìn)去。
在默認的Dialplan中,也提供了錄像與回放的例子。撥打9193可以通過(guò)record_fsv App進(jìn)行錄像,Dialplan的設置如下:
<action application="record_fsv" data="/tmp/testrecord.fsv"/>
錄像過(guò)程中,用戶(hù)可以看到自己的視頻也被原樣echo了回來(lái)。
錄制完成后,就可以撥打9194播放剛剛錄制的錄像了,它是使用play_fsv App實(shí)現的:
<action application="play_fsv" data="/tmp/testrecord.fsv"/>
小結:
從上面我們可以看出, FreeSWITCH與潮流IP電話(huà)組合部署提供了很好的的企業(yè)通信解決方案。 FreeSWITCH是開(kāi)源的軟交換軟件,不僅配置非常靈活,而且在性?xún)r(jià)比方面也有非常好的優(yōu)勢。對于最終用戶(hù)來(lái)說(shuō),FreeSWITCH的默認配置就已經(jīng)包含了非常實(shí)用的功能,基本不用太多的配置。對于集成商或開(kāi)發(fā)人員來(lái)說(shuō),FreeSWITCH提供了非常豐富靈活的開(kāi)發(fā)接口,因而也能很容易的與業(yè)務(wù)系統進(jìn)行集成。