- MRCP協(xié)議學(xué)習筆記-MRCP背景知識介紹
- MRCP協(xié)議學(xué)習筆記-語(yǔ)音處理的基本原理
- MRCP協(xié)議學(xué)習筆記-MRCP概要
- MRCP學(xué)習筆記 - 通過(guò)SIP協(xié)議實(shí)現會(huì )話(huà)管理
- MRCP協(xié)議學(xué)習筆記-控制會(huì )話(huà)中的消息類(lèi)型說(shuō)明
- MRCP學(xué)習筆記-控制會(huì )話(huà)的消息體、參數設置和頭域說(shuō)明
1、顧名思義,消息體是有多種信息按照一定的順序構成的內容。其格式和SIP協(xié)議的消息體基本相似。以下是基本的內容類(lèi)型:

這里要注意,在某些環(huán)境中,消息體可以由多個(gè)部分的信息數據來(lái)構成幫助創(chuàng )建一個(gè)完整的消息體。其具體的語(yǔ)法定義格式為:
Content-Type: multipart/mixed; boundary=a4V3bnq129s8
以上格式表示其消息體有多個(gè)數據構成,邊界標識(boundary)是a4V3bnq129s8。因為消息體是由多個(gè)數據構成,每個(gè)消息都要設置邊界標識來(lái)確認每個(gè)消息,并且邊界標識必須在起始處和結尾處都標識邊界,以表明這是一個(gè)多數據構成的一個(gè)完整的消息體(--a4V3bnq129s8--),邊界標識符前面的連字符表示消息體初始,結束邊界標識后面帶兩個(gè)連字符表示此完整的信息體結束。讓我們看一下以下示例:
MRCP/2.0 521 SPEAK 20000
Channel-Identifier: 43b9ae17@speechsynth
Content-Type: multipart/mixed; boundary=a4V3bnq129s8
Content-Length: 374
--a4V3bnq129s8 // 表示第一個(gè)數據初始,以換行符結束
Content-Type: text/uri-list
Content-Length: 68
http://www.example.com/file1.ssml
http://www.example.com/file2.ssml
--a4V3bnq129s8 // 表示第二個(gè)數據初始,以換行符結束
Content-Type: application/ssml+xml
Content-Length: 140
xmlns="http://www.w3.org/2001/10/synthesis">
Hello world!
--a4V3bnq129s8-- // 帶了兩個(gè)換行符,表示多消息體數據結束
MRCP客戶(hù)端對服務(wù)器端發(fā)送了一個(gè)SSML URL列表,包括了需要合成的消息內容,在以上的消息體中,同時(shí)包括了兩個(gè)數據結構。在MRCP的消息體中,可以通過(guò)text/uri-list來(lái)設定一個(gè)或多個(gè)URL。
2、在某些情況下,我們不需要對會(huì )話(huà)中的某些參數進(jìn)行修改或者調整。但是有一些環(huán)境中,我們可能需要對某些參數進(jìn)行適當調整來(lái)滿(mǎn)足實(shí)時(shí)環(huán)境的要求,因此MRCP提供了兩種不同的參數設置方式來(lái)支持對某些會(huì )話(huà)中的參數進(jìn)行設置。這兩種設置方式是SET-PARAMS和GET-PARAMS。從字面意思,讀者可能就會(huì )明白,一種是用來(lái)設置參數的,另外一種是用來(lái)獲取參數。比較常見(jiàn)的例子如設置語(yǔ)音合成的聲音高低,語(yǔ)音識別的定時(shí)器設置等。現在,我們分別介紹這兩種方式。
SET-PARAMS通過(guò)頭域來(lái)設定一個(gè)參數設置。如果媒體資源服務(wù)器返回200,則表示媒體資源服務(wù)器可以支持此參數;如果媒體資源服務(wù)器返回403表示媒體資源服務(wù)器識別一個(gè)或多個(gè)參數;404表示媒體資源服務(wù)器認為是無(wú)效參數。

MRCP客戶(hù)端請求支持了參數設置語(yǔ)音合成的語(yǔ)言設置請求:
- MRCP/2.099 SET-PARAMS 12309
- Channel-Identifier:23fa32fg1@speechsynth
- Speech-Language:fr-FR
媒體資源服務(wù)器的響應消息:
MRCP/2.0 77 12309 200 COMPLETE
Channel-Identifier: 23fa32fg1@speechsynth
上面我們介紹了如何設置SET-PARAMS 請求,GET-PARAMS 請求的處理也是同樣的原理。對于MRCP 客戶(hù)端對服務(wù)器端發(fā)送的頭域,服務(wù)器端必須返回相應的頭域和其相應的值,并且返回狀態(tài)碼 200,如果服務(wù)器端不能支持一些客戶(hù)端請求的頭域,服務(wù)器端則會(huì )拒絕這個(gè)請求,并且返回403 狀態(tài)碼。
MRCP客戶(hù)端發(fā)送到服務(wù)器端的請求,要求獲取兩個(gè)具體的參數:
MRCP/2.0 … GET-PARAMS 543256
Channel-Identifier:32AECB23433802@speechsynth
Voice-gender:
Voice-variant:
Vendor-Specific-Parameters:com.example.param1;
com.example.param2
服務(wù)器端返回到客戶(hù)端的響應和具體參數和其值:
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"
根據MRCP v2 的建議,如果需要獲取的參數比較多的話(huà),返回的數值打包的數據會(huì )非常大,因此這種方法獲取參數的效率比較低,不建議用戶(hù)經(jīng)常使用這種方法來(lái)獲取服務(wù)器參數。

3、在MRCP協(xié)議中,我們會(huì )使用兩種類(lèi)別的頭域數值。一種是針對媒體資源服務(wù)器的頭(resource-specific headers),另外一種是標準的頭(generic headers)。例如我們上面介紹的兩種管理參數的方式也可以適用于某些頭域設置,也可以適用于指定的媒體服務(wù)器參數設置。
這里,讀者一定要注意,根據MRCP v2 的規定,generic-header 的頭域值的發(fā)送順序或經(jīng)過(guò)轉發(fā)解析時(shí),中間代理或解析器不能修改以上頭的順序。

因為標準頭值中包括了多個(gè)具體的參數,因為篇幅的關(guān)系,我們這里不再做具體介紹,我們會(huì )在接下來(lái)的章節中繼續進(jìn)行討論。
4、安全問(wèn)題對控制協(xié)議來(lái)說(shuō)也是一個(gè)比較大的挑戰。在基于DTMF的語(yǔ)音IVR中,我們也可以輕易獲得查詢(xún)數據,安全人員可以通過(guò)DTMF解析獲取到其登錄密碼或者賬號信息等敏感內容。在MRCP的運行環(huán)境中,我們也會(huì )遇到類(lèi)似的安全問(wèn)題。在控制協(xié)議中,我們的應用程序可能會(huì )同時(shí)需要連接多個(gè)媒體資源服務(wù)器,用戶(hù)可能通過(guò)SPEAK請求來(lái)獲取系統敏感信息,例如密碼等。媒體資源服務(wù)器則會(huì )通過(guò)NLSML 數據格式在事件消息中返回RECOGNITION-COMPLETE,這些消息會(huì )把密碼等敏感數據攜帶在在事件的消息中。為了防止安全隱患的發(fā)送,系統用戶(hù)可以考慮使用TLS或VPN等其他安全機制來(lái)增加系統的安全性。
5、在本章節的分享中,我們首先介紹了MRCP中消息體的結構,在消息體中特別重點(diǎn)介紹了邊界標志符來(lái)區分數據包結構,筆者然后介紹了兩種管理參數的方式已經(jīng)交互流程,并且介紹了標準的headers,最后簡(jiǎn)單討論了在使用控制會(huì )話(huà)中的安全性問(wèn)題以及安全機制設置。
在下一個(gè)章節中,我們會(huì )繼續討論generic-header的每個(gè)具體的頭的內容。


unimrcp-MRCP協(xié)議學(xué)習分享,QQ群號:208136295
關(guān)注微信公眾號: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