Voxeo平臺(tái)構(gòu)建VoiceXML驅(qū)動(dòng)的SIP會(huì)議系統(tǒng)
2008/12/02
一、概述
VoiceXML(語音可擴(kuò)展標(biāo)志語言)[1]是為了創(chuàng)建音頻會(huì)話而設(shè)計(jì),用于描繪合成語音、數(shù)字音頻、話音與DTMF按鍵式輸入識(shí)別、話音輸入錄制、電話和混合式主動(dòng)轉(zhuǎn)換,其主要目標(biāo)是將基于Web開發(fā)和內(nèi)容交付的優(yōu)勢(shì)延伸到IVR(交互式語音應(yīng)答)應(yīng)用。
SIP(會(huì)話啟動(dòng)協(xié)議)[2]是一種應(yīng)用層控制(信令)協(xié)議,用于建立、修改和終止與一個(gè)或多個(gè)參與者的會(huì)話,這些會(huì)話包括因特網(wǎng)電話呼叫、多媒體發(fā)布和多媒體會(huì)議。
CCXML(呼叫控制可擴(kuò)展標(biāo)志語言)[3]是為了給諸如VoiceXML這樣的會(huì)話系統(tǒng)提供電話呼叫控制而設(shè)計(jì)的,盡管它可使用在任何能夠處理媒體的會(huì)話系統(tǒng),但主要還是為了補(bǔ)充和與VoiceXML解釋器進(jìn)行集成。
Voxeo公司提供的Prophecy平臺(tái)(http://cn.voxeo.com/prophecy/)是一個(gè)靈活可靠的完全開放式IVR語音應(yīng)用的開發(fā)、部署和運(yùn)行平臺(tái)。其核心的呼叫控制全部基于SIP,可以運(yùn)行和部署任何基于VoiceXML、CCXML標(biāo)準(zhǔn)的電話應(yīng)用,是構(gòu)建包括SIP多方會(huì)議系統(tǒng)在內(nèi)的新一代VoIP應(yīng)用的利器。
二、SIP會(huì)議系統(tǒng)
考慮一個(gè)SIP會(huì)議系統(tǒng),用戶通過撥入會(huì)議URI sip:staffmeet@conference.com來加入會(huì)議。只有按鍵式電話的傳統(tǒng)電話用戶無法撥打這類一般性的URI。我們可以每次會(huì)議為直接向內(nèi)撥號(hào)(DID)分配電話號(hào)碼,但是首選的是用戶總是撥打VoiceXML瀏覽器的號(hào)碼,該瀏覽器將依次提示PIN(個(gè)人身份號(hào)碼)認(rèn)證和會(huì)議號(hào)。一旦用戶通過認(rèn)證,瀏覽器把呼叫轉(zhuǎn)移給選定的會(huì)議。用戶也可以使用單一PIN標(biāo)識(shí)參與者和會(huì)議。
圖1顯示了一個(gè)用戶(比如說Alice)在加入會(huì)議前是如何同語音瀏覽器進(jìn)行交互的:
- Alice撥打?yàn)g覽器的電話號(hào)碼(212-9397137)或SIP URI (sip:7137@server.com)。
- 瀏覽器接受呼叫,提示主叫方輸入PIN標(biāo)識(shí)。
- Alice鍵入她的PIN號(hào)碼1-2-3-4,后面跟著一個(gè)終結(jié)鍵“#”。DTMF數(shù)字在RTP中發(fā)送。
- 瀏覽器查詢數(shù)據(jù)庫,把主叫方標(biāo)識(shí)為Alice。
- 基于使用權(quán)限,瀏覽器向她提示一個(gè)會(huì)議列表供她選擇。
- Alice選擇標(biāo)識(shí)符為23的會(huì)議。
- 瀏覽器再次核對(duì)Alice是否允許加入標(biāo)識(shí)為23的會(huì)議,在本例中是sip:staffmeet@conference.com。
- 一旦認(rèn)證完成,瀏覽器將使用SIP REFER方法把呼叫轉(zhuǎn)移給實(shí)際的會(huì)議服務(wù)器,該方法攜帶了會(huì)議SIP URI。
- Alice的電話接受轉(zhuǎn)移,并向會(huì)議服務(wù)器發(fā)起一個(gè)新的呼叫。
- Alice的電話與會(huì)議服務(wù)器直接交換音頻,不必再經(jīng)過瀏覽器。
圖1. 方法一:在盲目轉(zhuǎn)移模式中加入會(huì)議
注意:用戶認(rèn)證、會(huì)議查詢和轉(zhuǎn)移實(shí)際上由會(huì)議服務(wù)器CGI腳本調(diào)用,而瀏覽器只是解釋腳本生成的VoiceXML頁面來完成實(shí)際的轉(zhuǎn)移或提示主叫方。例如,業(yè)務(wù)腳本可能在第(9)步為呼叫轉(zhuǎn)移生成以下轉(zhuǎn)移標(biāo)簽:
<block><prompt>Your
call is being transferred,
please wait.</prompt></block>
<transfer dest="sip:staffmeet@conference.com"
bridge="false" />
轉(zhuǎn)移有兩種模式:盲目轉(zhuǎn)移和橋接轉(zhuǎn)移。前者是不查閱服務(wù)器的呼叫轉(zhuǎn)移,而后者是查閱后轉(zhuǎn)移,從而瀏覽器可以選擇進(jìn)入媒體路徑。
圖2. 方法二:使用橋接模式加入會(huì)議
圖2顯示了橋接轉(zhuǎn)移情形,其中瀏覽器作為一個(gè)“背靠背用戶代理”在用戶電話和會(huì)議服務(wù)器之間橋接音頻路徑。步驟1~7與盲目轉(zhuǎn)移情形相同,所不同的是,瀏覽器并非發(fā)送REFER,而是向會(huì)議服務(wù)器發(fā)送一個(gè)新的呼叫請(qǐng)求,在SIP
INVITE消息的Request-URI中標(biāo)識(shí)會(huì)議sip:staffmeet@conference.com。瀏覽器為雙向RTP/RTCP媒體流量充當(dāng)了應(yīng)用級(jí)包轉(zhuǎn)發(fā)器。
橋接轉(zhuǎn)移的優(yōu)點(diǎn)在于,瀏覽器逗留在媒體路徑中,可以接受隨后來自用戶電話(使用DTMF)的控制命令。對(duì)于會(huì)議來說,這一點(diǎn)可能是有用的,例如將DTMF
6-6-#解釋為關(guān)閉你的音頻或者6-8-#表示加入另一個(gè)虛擬聊天或會(huì)議室。其次,瀏覽器也需要給會(huì)議服務(wù)器轉(zhuǎn)發(fā)其它的信令消息,例如來自主叫方的re-INVITE。而且,維持會(huì)議期間的數(shù)據(jù)包轉(zhuǎn)發(fā)狀態(tài)在可以同時(shí)處理的主叫數(shù)目方面限制了瀏覽器的可擴(kuò)展性。瀏覽器可以向主叫方和會(huì)議服務(wù)器發(fā)布帶更新的RTP/RTCP傳輸?shù)刂返膔e-INVITE,以便媒體路徑是直接的。但是,這依然需要維持呼叫期間的信令狀態(tài)。另一方面,盲目轉(zhuǎn)移在會(huì)議期間無須瀏覽器的任何呼叫狀態(tài),不過它期望主叫IP電話支持REFER方法。
三、安全性
每一個(gè)因特網(wǎng)應(yīng)用都應(yīng)該處理安全性。我們的體系結(jié)構(gòu)有三個(gè)方面需要考慮安全性:電話網(wǎng)關(guān)、SIP信令與RTP媒體傳輸和對(duì)后臺(tái)服務(wù)器的HTTP/RTSP訪問。
在橋接轉(zhuǎn)移情形,VoiceXML瀏覽器使用PIN認(rèn)證主叫方,并在SIP認(rèn)證中提供自己的機(jī)密信息給會(huì)議服務(wù)器。而在盲目轉(zhuǎn)移情形,如果主叫方使用通過網(wǎng)關(guān)連接的傳統(tǒng)電話,那么SIP認(rèn)證將包含網(wǎng)關(guān)的機(jī)密信息。為了防止惡意用戶連接到受限會(huì)議,我們?cè)赗EFER消息中把機(jī)密信息從瀏覽器傳遞給主叫方網(wǎng)關(guān),隨即用于主叫方網(wǎng)關(guān)呼叫會(huì)議服務(wù)器。機(jī)密信息可以是瀏覽器或主叫方的。例如,Refer-To頭可能包含sip:staffmeet-@conference.com,這里是base-64編碼的,hash是browser-host:timestamp:shared-secret的MD5哈希值。這種方案只在會(huì)議服務(wù)器能解釋該URI時(shí)起作用。如果時(shí)間戳老化了,服務(wù)器應(yīng)該拒絕呼叫,以防重播攻擊。
瀏覽器應(yīng)該使用HTTP POST方法,而不是GET方法,以避免在Web服務(wù)器日志中保存CGI輸入。
四、功能擴(kuò)充
除了安全性,我們還可以對(duì)會(huì)議系統(tǒng)進(jìn)行功能擴(kuò)充,比如控制會(huì)議音量和增強(qiáng)系統(tǒng)魯棒性。
不同聲音設(shè)備的異構(gòu)客戶機(jī)之間的多方音頻會(huì)議常常導(dǎo)致惱人的音頻失真,一些參與者聽起來太大聲,而另一些可能根本聽不見。理想狀態(tài)下,會(huì)議服務(wù)器應(yīng)該在混音前平衡來自所有參與者的輸入音量,但是這將在服務(wù)器上為每一個(gè)音頻數(shù)據(jù)包帶來額外處理要求。另一個(gè)辦法是告訴參與者調(diào)整他的麥克風(fēng)和揚(yáng)聲器的音量。參與者在加入會(huì)議之前連接到一個(gè)“音量反饋”的系統(tǒng),并且對(duì)它說話。該系統(tǒng)宣布用戶的麥克風(fēng)音量是可接受、太高或太低。它也播放一個(gè)預(yù)先錄制好的音頻文件,允許用戶調(diào)整其揚(yáng)聲器音量。這個(gè)處理過程由一個(gè)服務(wù)器側(cè)腳本建立,VoiceXML瀏覽器可以訪問它。
在過去幾年,開發(fā)人員已經(jīng)日益使用CCXML給他們的電話系統(tǒng)增加強(qiáng)健的呼叫控制特性。圖3展示了如何在VoiceXML與SIP環(huán)境中運(yùn)用CCXML平臺(tái)進(jìn)行高級(jí)會(huì)議控制[4]。在這里CCXML作為SIP的“背靠背用戶代理”,面向呼叫者和網(wǎng)絡(luò)資源(比如VoiceXML瀏覽器和會(huì)議混合器)執(zhí)行基于SIP的呼叫控制職能,可以基于開放式的行業(yè)標(biāo)準(zhǔn)方式創(chuàng)建健壯可靠的多方會(huì)議系統(tǒng)。Voxeo
Prophecy 8.0是一個(gè)強(qiáng)大的完全基于標(biāo)準(zhǔn)的IVR和SIP VoIP應(yīng)用平臺(tái),它捆綁了業(yè)界第一個(gè)(也是目前唯一的)
100% 通過VoiceXML官方規(guī)定的全部兼容性測(cè)試(全部強(qiáng)制性和可選功能)的VoiceXML瀏覽器和世界上目前最完整CCXML實(shí)現(xiàn),同時(shí)它還與任意網(wǎng)絡(luò)開發(fā)語言(包括ASP,
CGI, C#, Java,PERL, PHP, Python 和 Ruby)或服務(wù)器兼容,給VoIP語音應(yīng)用開發(fā)與部署人員提供了有力的工具和平臺(tái)。
圖3. CCXML SIP體系結(jié)構(gòu)
五、小結(jié)
本文講述了SIP會(huì)議系統(tǒng)的兩種轉(zhuǎn)移模式,以及體系安全性的一些考慮,最后簡(jiǎn)單介紹了可以采用VoiceXML服務(wù)器側(cè)編程邏輯和CCXML腳本來擴(kuò)充會(huì)議服務(wù)器的功能,并推薦了一款完全基于標(biāo)準(zhǔn)的開發(fā)工具和平臺(tái)――Voxeo
Prophecy 8.0。
參考資料:
[1] VoiceXML 2.1: http://www.w3.org/TR/voicexml21/
[2] SIP: Session Initiation Protocol: http://www.ietf.org/rfc/rfc3261.txt
[3] CCXML 1.0: http://www.w3.org/TR/ccxml/
[4] Using Call Control XML (CCXML) as a SIP Softswitch:
http://www.voicexml
.org/Review/Apr2005/features/softswitch.html
CTI論壇編輯
相關(guān)鏈接:
名山县|
肃南|
花莲市|
曲周县|
赤水市|
五指山市|
顺义区|
青铜峡市|
苏尼特右旗|
长沙市|
彰化县|
泰顺县|
孙吴县|
开化县|
乐亭县|
英吉沙县|
云霄县|
常州市|
阿拉善右旗|
厦门市|
汉沽区|
老河口市|
镇赉县|
萨迦县|
永年县|
遂川县|
连南|
兖州市|
溆浦县|
克什克腾旗|
会昌县|
桃江县|
镶黄旗|
榆中县|
济宁市|
曲靖市|
句容市|
藁城市|
北宁市|
慈溪市|
东乌珠穆沁旗|