您當(dāng)前的位置是:  首頁(yè) > 新聞 > 國(guó)內(nèi) >
 首頁(yè) > 新聞 > 國(guó)內(nèi) >

MRCP學(xué)習(xí)筆記-控制會(huì)話的消息體、參數(shù)設(shè)置和頭域說(shuō)明

2018-05-31 09:14:36   作者: james.zhu   來(lái)源:CTI論壇   評(píng)論:0  點(diǎn)擊:


  在上一節(jié)的分享中,我們介紹了消息類(lèi)型和基本語(yǔ)法。為了讓讀者更加清晰地了解具體的消息內(nèi)容,我們?cè)诒菊鹿?jié)會(huì)進(jìn)一步介紹消息體的內(nèi)容,兩種基本的參數(shù)設(shè)置方式,幾個(gè)標(biāo)準(zhǔn)的頭域值說(shuō)明和安全性討論。
  1、顧名思義,消息體是有多種信息按照一定的順序構(gòu)成的內(nèi)容。其格式和SIP協(xié)議的消息體基本相似。以下是基本的內(nèi)容類(lèi)型:
  這里要注意,在某些環(huán)境中,消息體可以由多個(gè)部分的信息數(shù)據(jù)來(lái)構(gòu)成幫助創(chuàng)建一個(gè)完整的消息體。其具體的語(yǔ)法定義格式為:
  Content-Type: multipart/mixed; boundary=a4V3bnq129s8
  以上格式表示其消息體有多個(gè)數(shù)據(jù)構(gòu)成,邊界標(biāo)識(shí)(boundary)是a4V3bnq129s8。因?yàn)橄Ⅲw是由多個(gè)數(shù)據(jù)構(gòu)成,每個(gè)消息都要設(shè)置邊界標(biāo)識(shí)來(lái)確認(rèn)每個(gè)消息,并且邊界標(biāo)識(shí)必須在起始處和結(jié)尾處都標(biāo)識(shí)邊界,以表明這是一個(gè)多數(shù)據(jù)構(gòu)成的一個(gè)完整的消息體(--a4V3bnq129s8--),邊界標(biāo)識(shí)符前面的連字符表示消息體初始,結(jié)束邊界標(biāo)識(shí)后面帶兩個(gè)連字符表示此完整的信息體結(jié)束。讓我們看一下以下示例:
  MRCP/2.0 521 SPEAK 20000
  Channel-Identifier: 43b9ae17@speechsynth
  Content-Type: multipart/mixed; boundary=a4V3bnq129s8
  Content-Length: 374
  --a4V3bnq129s8  // 表示第一個(gè)數(shù)據(jù)初始,以換行符結(jié)束
  Content-Type: text/uri-list
  Content-Length: 68
  http://www.example.com/file1.ssml
  http://www.example.com/file2.ssml
  --a4V3bnq129s8  // 表示第二個(gè)數(shù)據(jù)初始,以換行符結(jié)束
  Content-Type: application/ssml+xml
  Content-Length: 140
  
  
  xmlns="http://www.w3.org/2001/10/synthesis">
  Hello world!
  
  --a4V3bnq129s8--  // 帶了兩個(gè)換行符,表示多消息體數(shù)據(jù)結(jié)束
  MRCP客戶端對(duì)服務(wù)器端發(fā)送了一個(gè)SSML URL列表,包括了需要合成的消息內(nèi)容,在以上的消息體中,同時(shí)包括了兩個(gè)數(shù)據(jù)結(jié)構(gòu)。在MRCP的消息體中,可以通過(guò)text/uri-list來(lái)設(shè)定一個(gè)或多個(gè)URL。
  2、在某些情況下,我們不需要對(duì)會(huì)話中的某些參數(shù)進(jìn)行修改或者調(diào)整。但是有一些環(huán)境中,我們可能需要對(duì)某些參數(shù)進(jìn)行適當(dāng)調(diào)整來(lái)滿足實(shí)時(shí)環(huán)境的要求,因此MRCP提供了兩種不同的參數(shù)設(shè)置方式來(lái)支持對(duì)某些會(huì)話中的參數(shù)進(jìn)行設(shè)置。這兩種設(shè)置方式是SET-PARAMS和GET-PARAMS。從字面意思,讀者可能就會(huì)明白,一種是用來(lái)設(shè)置參數(shù)的,另外一種是用來(lái)獲取參數(shù)。比較常見(jiàn)的例子如設(shè)置語(yǔ)音合成的聲音高低,語(yǔ)音識(shí)別的定時(shí)器設(shè)置等,F(xiàn)在,我們分別介紹這兩種方式。
  SET-PARAMS通過(guò)頭域來(lái)設(shè)定一個(gè)參數(shù)設(shè)置。如果媒體資源服務(wù)器返回200,則表示媒體資源服務(wù)器可以支持此參數(shù);如果媒體資源服務(wù)器返回403表示媒體資源服務(wù)器識(shí)別一個(gè)或多個(gè)參數(shù);404表示媒體資源服務(wù)器認(rèn)為是無(wú)效參數(shù)。
  MRCP客戶端請(qǐng)求支持了參數(shù)設(shè)置語(yǔ)音合成的語(yǔ)言設(shè)置請(qǐng)求:
  • MRCP/2.099 SET-PARAMS 12309
  • Channel-Identifier:23fa32fg1@speechsynth
  • Speech-Language:fr-FR
  媒體資源服務(wù)器的響應(yīng)消息:
  MRCP/2.0 77 12309 200  COMPLETE
  Channel-Identifier: 23fa32fg1@speechsynth
  上面我們介紹了如何設(shè)置SET-PARAMS 請(qǐng)求,GET-PARAMS 請(qǐng)求的處理也是同樣的原理。對(duì)于MRCP 客戶端對(duì)服務(wù)器端發(fā)送的頭域,服務(wù)器端必須返回相應(yīng)的頭域和其相應(yīng)的值,并且返回狀態(tài)碼 200,如果服務(wù)器端不能支持一些客戶端請(qǐng)求的頭域,服務(wù)器端則會(huì)拒絕這個(gè)請(qǐng)求,并且返回403 狀態(tài)碼。
  MRCP客戶端發(fā)送到服務(wù)器端的請(qǐng)求,要求獲取兩個(gè)具體的參數(shù):
  MRCP/2.0 … GET-PARAMS 543256
  Channel-Identifier:32AECB23433802@speechsynth
  Voice-gender:
  Voice-variant:
  Vendor-Specific-Parameters:com.example.param1;
  com.example.param2
  服務(wù)器端返回到客戶端的響應(yīng)和具體參數(shù)和其值:
  MRCP/2.0 … 543256 200 COMPLETE
  Channel-Identifier:32AECB23433802@speechsynth
  Voice-gender:female
  Voice-variant:3
  Vendor-Specific-Parameters:com.example.param1="Company Name";
  com.example.param2="124324234@example.com"
  根據(jù)MRCP v2 的建議,如果需要獲取的參數(shù)比較多的話,返回的數(shù)值打包的數(shù)據(jù)會(huì)非常大,因此這種方法獲取參數(shù)的效率比較低,不建議用戶經(jīng)常使用這種方法來(lái)獲取服務(wù)器參數(shù)。
  3、在MRCP協(xié)議中,我們會(huì)使用兩種類(lèi)別的頭域數(shù)值。一種是針對(duì)媒體資源服務(wù)器的頭(resource-specific headers),另外一種是標(biāo)準(zhǔn)的頭(generic headers)。例如我們上面介紹的兩種管理參數(shù)的方式也可以適用于某些頭域設(shè)置,也可以適用于指定的媒體服務(wù)器參數(shù)設(shè)置。
  這里,讀者一定要注意,根據(jù)MRCP v2 的規(guī)定,generic-header 的頭域值的發(fā)送順序或經(jīng)過(guò)轉(zhuǎn)發(fā)解析時(shí),中間代理或解析器不能修改以上頭的順序。
  因?yàn)闃?biāo)準(zhǔn)頭值中包括了多個(gè)具體的參數(shù),因?yàn)槠年P(guān)系,我們這里不再做具體介紹,我們會(huì)在接下來(lái)的章節(jié)中繼續(xù)進(jìn)行討論。
  4、安全問(wèn)題對(duì)控制協(xié)議來(lái)說(shuō)也是一個(gè)比較大的挑戰(zhàn)。在基于DTMF的語(yǔ)音IVR中,我們也可以輕易獲得查詢數(shù)據(jù),安全人員可以通過(guò)DTMF解析獲取到其登錄密碼或者賬號(hào)信息等敏感內(nèi)容。在MRCP的運(yùn)行環(huán)境中,我們也會(huì)遇到類(lèi)似的安全問(wèn)題。在控制協(xié)議中,我們的應(yīng)用程序可能會(huì)同時(shí)需要連接多個(gè)媒體資源服務(wù)器,用戶可能通過(guò)SPEAK請(qǐng)求來(lái)獲取系統(tǒng)敏感信息,例如密碼等。媒體資源服務(wù)器則會(huì)通過(guò)NLSML 數(shù)據(jù)格式在事件消息中返回RECOGNITION-COMPLETE,這些消息會(huì)把密碼等敏感數(shù)據(jù)攜帶在在事件的消息中。為了防止安全隱患的發(fā)送,系統(tǒng)用戶可以考慮使用TLS或VPN等其他安全機(jī)制來(lái)增加系統(tǒng)的安全性。
  5、在本章節(jié)的分享中,我們首先介紹了MRCP中消息體的結(jié)構(gòu),在消息體中特別重點(diǎn)介紹了邊界標(biāo)志符來(lái)區(qū)分?jǐn)?shù)據(jù)包結(jié)構(gòu),筆者然后介紹了兩種管理參數(shù)的方式已經(jīng)交互流程,并且介紹了標(biāo)準(zhǔn)的headers,最后簡(jiǎn)單討論了在使用控制會(huì)話中的安全性問(wèn)題以及安全機(jī)制設(shè)置。
  在下一個(gè)章節(jié)中,我們會(huì)繼續(xù)討論generic-header的每個(gè)具體的頭的內(nèi)容。
        

  unimrcp-MRCP協(xié)議學(xué)習(xí)分享,QQ群號(hào):208136295
  關(guān)注微信公眾號(hào):asterisk-cn,獲得有價(jià)值的行業(yè)分享
  freepbx 技術(shù)論壇:www.ippbx.org.cn
  Asterisk, freepbx技術(shù)文檔: www.freepbx.org.cn
  歐米(Omni)智能客服解決方案
  融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com

【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對(duì)文中陳述、觀點(diǎn)判斷保持中立,不對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請(qǐng)讀者僅作參考,并請(qǐng)自行承擔(dān)全部責(zé)任。

專題