- MRCP協(xié)議學(xué)習(xí)筆記-MRCP背景知識(shí)介紹
- MRCP協(xié)議學(xué)習(xí)筆記-語音處理的基本原理
- MRCP協(xié)議學(xué)習(xí)筆記-MRCP概要
- MRCP學(xué)習(xí)筆記 - 通過SIP協(xié)議實(shí)現(xiàn)會(huì)話管理
- MRCP協(xié)議學(xué)習(xí)筆記-控制會(huì)話中的消息類型說明
- MRCP學(xué)習(xí)筆記-控制會(huì)話的消息體、參數(shù)設(shè)置和頭域說明
1、顧名思義,消息體是有多種信息按照一定的順序構(gòu)成的內(nèi)容。其格式和SIP協(xié)議的消息體基本相似。以下是基本的內(nèi)容類型:
這里要注意,在某些環(huán)境中,消息體可以由多個(gè)部分的信息數(shù)據(jù)來構(gòu)成幫助創(chuàng)建一個(gè)完整的消息體。其具體的語法定義格式為:
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í)來確認(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的消息體中,可以通過text/uri-list來設(shè)定一個(gè)或多個(gè)URL。
2、在某些情況下,我們不需要對(duì)會(huì)話中的某些參數(shù)進(jìn)行修改或者調(diào)整。但是有一些環(huán)境中,我們可能需要對(duì)某些參數(shù)進(jìn)行適當(dāng)調(diào)整來滿足實(shí)時(shí)環(huán)境的要求,因此MRCP提供了兩種不同的參數(shù)設(shè)置方式來支持對(duì)某些會(huì)話中的參數(shù)進(jìn)行設(shè)置。這兩種設(shè)置方式是SET-PARAMS和GET-PARAMS。從字面意思,讀者可能就會(huì)明白,一種是用來設(shè)置參數(shù)的,另外一種是用來獲取參數(shù)。比較常見的例子如設(shè)置語音合成的聲音高低,語音識(shí)別的定時(shí)器設(shè)置等,F(xiàn)在,我們分別介紹這兩種方式。
SET-PARAMS通過頭域來設(shè)定一個(gè)參數(shù)設(shè)置。如果媒體資源服務(wù)器返回200,則表示媒體資源服務(wù)器可以支持此參數(shù);如果媒體資源服務(wù)器返回403表示媒體資源服務(wù)器識(shí)別一個(gè)或多個(gè)參數(shù);404表示媒體資源服務(wù)器認(rèn)為是無效參數(shù)。
MRCP客戶端請(qǐng)求支持了參數(shù)設(shè)置語音合成的語言設(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)常使用這種方法來獲取服務(wù)器參數(shù)。
3、在MRCP協(xié)議中,我們會(huì)使用兩種類別的頭域數(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)過轉(zhuǎn)發(fā)解析時(shí),中間代理或解析器不能修改以上頭的順序。
因?yàn)闃?biāo)準(zhǔn)頭值中包括了多個(gè)具體的參數(shù),因?yàn)槠年P(guān)系,我們這里不再做具體介紹,我們會(huì)在接下來的章節(jié)中繼續(xù)進(jìn)行討論。
4、安全問題對(duì)控制協(xié)議來說也是一個(gè)比較大的挑戰(zhàn)。在基于DTMF的語音IVR中,我們也可以輕易獲得查詢數(shù)據(jù),安全人員可以通過DTMF解析獲取到其登錄密碼或者賬號(hào)信息等敏感內(nèi)容。在MRCP的運(yùn)行環(huán)境中,我們也會(huì)遇到類似的安全問題。在控制協(xié)議中,我們的應(yīng)用程序可能會(huì)同時(shí)需要連接多個(gè)媒體資源服務(wù)器,用戶可能通過SPEAK請(qǐng)求來獲取系統(tǒng)敏感信息,例如密碼等。媒體資源服務(wù)器則會(huì)通過NLSML 數(shù)據(jù)格式在事件消息中返回RECOGNITION-COMPLETE,這些消息會(huì)把密碼等敏感數(shù)據(jù)攜帶在在事件的消息中。為了防止安全隱患的發(fā)送,系統(tǒng)用戶可以考慮使用TLS或VPN等其他安全機(jī)制來增加系統(tǒng)的安全性。
5、在本章節(jié)的分享中,我們首先介紹了MRCP中消息體的結(jié)構(gòu),在消息體中特別重點(diǎn)介紹了邊界標(biāo)志符來區(qū)分?jǐn)?shù)據(jù)包結(jié)構(gòu),筆者然后介紹了兩種管理參數(shù)的方式已經(jīng)交互流程,并且介紹了標(biāo)準(zhǔn)的headers,最后簡(jiǎn)單討論了在使用控制會(huì)話中的安全性問題以及安全機(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