语音可扩展标记语言(VXML)是万维网联盟(W3C)定义的标准。VXML旨在创建音频对话,提供合成语音、口语词的识别、DTMF数字的识别和口语音频的录音。VXML服务器和客户端使用公认的HTTP协议来交换VXML文档和页面。
思科语音门户(CVP)提供可通过电话访问的智能交互式语音应答(IVR)应用。有三种CVP配置类型:
独立服务
CVP呼叫控制
呼叫队列和转接
合成语音、口语识别或DTMF数字功能由文本到语音(TTS)和自动语音识别(ASR)服务器提供。Cisco IOS® VXML网关使用媒体资源控制协议(MRCP)与TTS和ASR服务器通信。 MRCP(RFC 4463)有两个版本,即MRCPv1(MRCP over RTSP)和MRCPv2(MRCP over SIP)。
本文档介绍在使用MRCPv1 TTS或ASR服务器的独立服务部署中Cisco IOS语音XML网关到CVP呼叫的呼叫流。在CVP VXML服务器上部署了一个药房应用示例。
本文档没有任何特定的要求。
本文档中的信息基于以下软件和硬件版本:
IOS VXML网关:思科AS5400XM、IOS 12.4(11)T2
VXML服务器:CVP 4.0
ASR/TTS服务器:Nuance ASR v8.5和TTS v4.0.6
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。
有关文档规则的详细信息,请参阅 Cisco 技术提示规则。
本部分提供有关如何配置本文档所述功能的信息。
注意:使用命令查找工具(仅限注册客户)可查找有关本文档中使用的命令的详细信息。
本文档使用以下网络设置:
本文档使用以下配置:
VXML网关配置 |
---|
!--- Define Hostname to IP address mapping for ASR and TTS servers. ip host asr-en-us 10.86.177.39 ip host tts-en-us 10.86.177.39 !--- Define the amount of maximum memory to use for downloaded prompts. ivr prompt memory 15000 !--- Define the RTSP URI of ASR and TTS Server. ivr asr-server rtsp://10.86.177.39/recognizer ivr tts-server rtsp://10.86.177.39/synthesizer !--- Configure an application service for CVP VXML CVPSelfServiceBootstrap.vxml. application service CVPSelfService flash:CVPSelfServiceBootstrap.vxml paramspace english language en paramspace english index 0 paramspace english location flash: paramspace english prefix en !--- Configure an application service for CVP VXML CVPSelfService.tcl Script. !--- CVPSelfService-app parameter specifies the name of the VXML Application. !--- CVPPrimary parameter specifies the IP address of the VXML server. service Pharmacy flash:CVPSelfService.tcl paramspace english index 0 paramspace english language en paramspace english location flash: param CVPSelfService-port 7000 param CVPSelfService-app GoodPrescriptionRefillApp7 paramspace english prefix en param CVPPrimaryVXMLServer 172.18.110.75 !--- Specifies the Gateway’s RTP stream to the ASR or TTS to go around the !--- Content Service Switch instead of through the CSS. mrcp client rtpsetup enable !--- Specify the maximum memory size for the HTTP Client Cache. http client cache memory pool 15000 !--- Specify the maximum number of file that can be stored in the HTTP Client Cache. http client cache memory file 500 !--- Disable Persistent HTTP Connections. no http client connection persistent !--- Configure the T1 PRI. controller T1 3/0 framing esf linecode b8zs pri-group timeslots 1-24 !--- Configure the ISDN switch type and incoming-voice under the D-channel interface. interface Serial3/0:23 no ip address encapsulation hdlc isdn switch-type primary-net5 isdn incoming-voice modem no cdp enable !--- Configure a POTS dial-peer that will be used as the inbound dial-peer for calls coming !--- in across the T1 PRI line. The “pharmacy” service is applied under this dial-peer. dial-peer voice 1 pots service pharmacy destination-pattern 5555 direct-inward-dial port 3/0:D forward-digits all |
此部分描述该的呼叫流从此配置示例的结果。
ISDN呼叫通过T1 PRI 3/0到达PSTN/VXML网关。
IOS网关将POTS拨号对等体1作为此呼叫的入站拨号对等体。
IOS网关将呼叫控制移交给与拨号对等体1关联的药房服务。
与药房服务关联的CVP VXML/TCL脚本向VXML服务器发送HTTP GET请求。
VXML服务器返回200 OK响应。此响应包含VXML文档或页面。
IOS网关执行VXML文档。
如果VXML文档为音频提示指定URL,IOS网关将下载音频文件并播放提示。
如果VXML文档为音频提示指定了文本,IOS网关将与rtsp://10.86.177.39/synthesizer(TTS服务器)建立RTSP会话。 建立RTSP会话后,网关和TTS服务器使用RTSP ANNOUNCE请求交换MRCP消息,例如SPEAK、SPEAK-COMPLETE。
TTS服务器将G.711ulaw RTP音频流发送到RTSP设置请求的“传输”报头中网关提供的IP地址和UDP端口号。
如果VXML文档指定网关识别DTMF数字和口语,IOS网关将与rtsp://10.86.177.39/recognizer(ASR服务器)建立RTSP会话。 建立RTSP会话后,网关和ASR服务器使用RTSP ANNOUNCE请求交换MRCP消息,如DEFINE GRAMMAR、COMPLETE、RECOGNITE、RECOGNITION-COMPLETE。
IOS VXML网关将G.711ulaw RTP音频流发送到RTSP 200 OK响应的SDP中ASR提供的IP地址和UDP端口号。IOS VXML网关将PSTN用户输入的数字作为RTP-NTE事件发送到ASR服务器。
执行VXML文档后,网关发送HTTP POST请求(包含一组参数),如VXML文档或页面的<submit>标记中所指定。
步骤6 - 10针对服务器发送的每个VXML文档。
当VXML应用程序完成向调用方提供的服务时,它会发送一个VXML文档,该文档在<form>元素中仅包含<exit/>标记。
IOS网关断开与TTS和ASR服务器建立的MRCPv1会话。
IOS网关断开ISDN端的呼叫。
使用本部分可确认配置能否正常运行。
命令输出解释程序(仅限注册用户)(OIT) 支持某些 show 命令。使用 OIT 可查看对 show 命令输出的分析。
show call active voice brief
11E7 : 63 4728960ms.1 +0 pid:1 Answer 5555 active dur 00:00:31 tx:920/179920 rx:880/211200 Tele 3/0:D (63) [3/0.1] tx:4600/4600/0ms None noise:-80 acom:51 i/0:-79/-27 dBm Telephony call-legs: 1 SIP call-legs: 0 H323 call-legs: 0 Call agent controlled call-legs: 0 SCCP call-legs: 0 Multicast call-legs: 0 Total call-legs: 1
show mrcp client session active detail
No Of Active MRCP Sessions: 1 Call-ID: 0x3F same: 1 Resource Type: Synthesizer URL: rtsp://10.86.177.39/synthesizer Method In Progress: SPEAK State: SPEAKING Resource Type: Recognizer URL: rtsp://10.86.177.39/recognizer Method In Progress: RECOGNIZE State: RECOGNIZING ############################################################
show voip rtp connections
VoIP RTP active connections : No. CallId dstCallId LocalRTP RmtRTP LocalIP RemoteIP 1 66 63 17704 1224 172.18.110.77 10.86.177.39
show http client cache
HTTP Client cached information ============================== Maximum memory pool allowed for HTTP Client caching = 15000 K-bytes Maximum file size allowed for caching = 500 K-bytes Total memory used up for Cache = 410 Bytes Message response timeout = 10 secs Total cached entries = 1 Total non-cached entries = 0 Cached entries ============== entry 114, 1 entries Ref FreshTime Age Size context --- --------- --- ---- ------- 1 119524 31 1271 0 url: http://172.18.110.75/Welcome-1.wav
使用本部分可排除配置故障。
配置IOS网关,使其在日志记录缓冲区中记录调试并禁用日志记录控制台。
注意:在使用debug命令之前,请参阅有关Debug命令的重要信息。
这些命令用于配置网关,来将debug存储在网关的操作日志缓冲区中:
service timestamps debug datetime msec
服务顺序
no logging console
logging buffered 5000000 debug
clear log
debug isdn q931
debug voip ccapi inout
debug voip application vxml default
debug voip application vxml dump
debug rtsp all
debug mrcp all
debug http client all
debug voip rtp session nte named-event
此部分为此示例呼叫流提供debug输出:
网关将MRCP“DEFINE-GRAMMAR”请求发送到嵌入在RTSP ANNOUNCE请求中的ASR服务器(此处仅显示一个请求)
VXML服务器发送VXML页面以收集处方号、取件时间,并通知呼叫方处方准备好取件。网关通过与TTS和ASR服务器交互来执行这些页面(未显示调试输出)。
*Feb 4 03:24:54.111: ISDN Se3/0:23 Q931: RX <- SETUP pd = 8 callref = 0x0099 Bearer Capability i = 0x8090A2 Standard = CCITT Transfer Capability = Speech Transfer Mode = Circuit Transfer Rate = 64 kbit/s Channel ID i = 0xA98381 Exclusive, Channel 1 Called Party Number i = 0x81, '5555' Plan:ISDN, Type:Unknown *Feb 4 03:24:54.115: //-1/972590A48011/CCAPI/cc_api_display_ie_subfields: cc_api_call_setup_ind_common: cisco-username= ----- ccCallInfo IE subfields ----- cisco-ani= cisco-anitype=0 cisco-aniplan=0 cisco-anipi=0 cisco-anisi=0 dest=5555 cisco-desttype=0 cisco-destplan=1 cisco-rdie=FFFFFFFF cisco-rdn= cisco-rdntype=-1 cisco-rdnplan=-1 cisco-rdnpi=-1 cisco-rdnsi=-1 cisco-redirectreason=-1 fwd_final_type =0 final_redirectNumber = hunt_group_timeout =0
*Feb 4 03:24:54.115: //-1/972590A48011/CCAPI/cc_api_call_setup_ind_common: Interface=0x66C30F98, Call Info( Calling Number=,(Calling Name=)(TON=Unknown, NPI=Unknown, Screening=Not Screened, Presentation=Allowed), Called Number=5555(TON=Unknown, NPI=ISDN), Calling Translated=FALSE, Subscriber Type Str=RegularLine, FinalDestinationFlag=TRUE, Incoming Dial-peer=1, Progress Indication=NULL(0), Calling IE Present=FALSE, Source Trkgrp Route Label=, Target Trkgrp Route Label=, CLID Transparent=FALSE), Call Id=-1
*Feb 4 03:24:54.115: //63/972590A48011/CCAPI/cc_process_call_setup_ind: >>>>CCAPI handed cid 63 with tag 1 to app "_ManagedAppProcess_Pharmacy" *Feb 4 03:24:54.115: //63/972590A48011/CCAPI/ccCallSetupAck: Call Id=63
*Feb 4 03:24:54.119: ISDN Se3/0:23 Q931: TX -> CONNECT pd = 8 callref = 0x8099 *Feb 4 03:24:54.119: //63/972590A48011/CCAPI/ccCallHandoff: Silent=FALSE, Application=0x67569410, Conference Id=0xFFFFFFFF *Feb 4 03:24:54.119: //63//VXML:/Open_CallHandoff:
*Feb 4 03:24:54.131: //63/972590A48011/VXML:/vxml_vxml_proc: <vxml> URI(abs):flash:CVPSelfServiceBootstrap.vxml scheme=flash path=CVPSelfServiceBootstrap.vxml base= URI(abs):flash:CVPSelfServiceBootstrap.vxml scheme=flash path=CVPSelfServiceBootstrap.vxml lang=none version=2.0 <script>: *Feb 4 03:24:54.175: //63/972590A48011/VXML:/vxml_expr_eval: <var>: namep=handoffstring expr=session.handoff_string *Feb 4 03:24:54.243: //63/972590A48011/VXML:/vxml_expr_eval: expr=(var handoffstring=session.handoff_string) <var>: namep=application expr=getValue('APP') *Feb 4 03:24:54.243: //63/972590A48011/VXML:/vxml_expr_eval: expr=(var application=getValue('APP')) <var>: namep=port expr=getValue('PORT') *Feb 4 03:24:54.243: //63/972590A48011/VXML:/vxml_expr_eval: expr=(var port=getValue('PORT')) <var>: namep=callid expr=getValue('CALLID') *Feb 4 03:24:54.243: //63/972590A48011/VXML:/vxml_expr_eval: expr=(var callid=getValue('CALLID')) <var>: namep=servername expr=getValue('PRIMARY') *Feb 4 03:24:54.243: //63/972590A48011/VXML:/vxml_expr_eval: expr=(var servername=getValue('PRIMARY')) <var>: namep=var1 expr=getValue('var1') *Feb 4 03:24:54.243: //63/972590A48011/VXML:/vxml_expr_eval: expr=(var var1=getValue('var1')) <var>: namep=var2 expr=getValue('var2') *Feb 4 03:24:54.243: //63/972590A48011/VXML:/vxml_expr_eval: expr=(var var2=getValue('var2')) <var>: namep=var3 expr=getValue('var3') *Feb 4 03:24:54.243: //63/972590A48011/VXML:/vxml_expr_eval: expr=(var var3=getValue('var3')) <var>: namep=var4 expr=getValue('var4') *Feb 4 03:24:54.247: //63/972590A48011/VXML:/vxml_expr_eval: expr=(var var4=getValue('var4')) <var>: namep=var5 expr=getValue('var5') *Feb 4 03:24:54.247: //63/972590A48011/VXML:/vxml_expr_eval: expr=(var var5=getValue('var5')) <var>: namep=status expr=getValue('status') *Feb 4 03:24:54.247: //63/972590A48011/VXML:/vxml_expr_eval: expr=(var status=getValue('status')) <var>: namep=prevapp expr=getValue('prevapp') *Feb 4 03:24:54.247: //63/972590A48011/VXML:/vxml_expr_eval: expr=(var prevapp=getValue('prevapp')) <var>: namep=survive expr=getValue('survive') *Feb 4 03:24:54.247: //63/972590A48011/VXML:/vxml_expr_eval: expr=(var survive=getValue('survive')) <var>: namep=handoffExit *Feb 4 03:24:54.247: //63/972590A48011/VXML:/vxml_expr_eval: expr=(var handoffExit)
*Feb 4 03:24:54.255: //63//HTTPC:/httpc_write_stream: Client write buffer fd(0): GET /CVP/Server?application=GoodPrescriptionRefillApp7&callid=972590A4-185511D6-80110013- 803E8C8E&session.connection.remote.uri=5555 &session.connection.local.uri=5555 HTTP/1.1 Host: 172.18.110.75:7000 Content-Type: application/x-www-form-urlencoded Connection: close Accept: text/vxml, text/x-vxml, application/vxml, application/x-vxml, application/voicexml, application/x-voicexml, text/plain, text/html, audio/basic, audio/wav, multipart/form-data, application/octet-stream User-Agent: Cisco-IOS-C5400/12.4
此响应的消息正文包含VXML文档(1)。 VXML文档告知网关播放媒体文件Welcome-1.wav,该文件位于媒体服务器中
*Feb 4 03:24:54.263: processing server rsp msg: msg(63AC8784) URL:http://172.18.110.75:7000/CVP/Server?application=GoodPrescriptionRefillApp7& callid=972590A4-185511D6-80110013-803E8C8E&session.connection.remote.uri= 5555&session.connection.local.uri=5555, fd(0): *Feb 4 03:24:54.263: Request msg: GET /CVP/Server?application=GoodPrescriptionRefillApp7& callid=972590A4-185511D6-80110013-803E8C8E &session.connection.remote.uri=5555&session.connection.local.uri=5555 HTTP/1.1 *Feb 4 03:24:54.263: Message Response Code: 200 *Feb 4 03:24:54.263: Message Rsp Decoded Headers: *Feb 4 03:24:54.263: Date:Thu, 17 May 2007 15:48:31 GMT *Feb 4 03:24:54.263: Content-Type:text/xml;charset=ISO-8859-1 *Feb 4 03:24:54.263: Connection:close *Feb 4 03:24:54.263: Set-Cookie:JSESSIONID=6FE82FC3B0E02909CA5A9307D57F00E1; Path=/CVP *Feb 4 03:24:54.263: headers: *Feb 4 03:24:54.263: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Set-Cookie: JSESSIONID=6FE82FC3B0E02909CA5A9307D57F00E1; Path=/CVP Content-Type: text/xml;charset=ISO-8859-1 Date: Thu, 17 May 2007 15:48:31 GMT Connection: close *Feb 4 03:24:54.263: body: *Feb 4 03:24:54.263: <?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" application="/CVP/Server?audium_root=true& calling_into=GoodPrescriptionRefillApp7" xml:lang="en-us"> <form id="audium_start_form"> <block> <assign name="audium_vxmlLog" expr="''" /> <assign name="audium_element_start_time_millisecs" expr="new Date().getTime()" /> <goto next="#start" /> </block> </form> <form id="start"> <block> <prompt bargein="true"> <audio src="http://172.18.110.75/Welcome-1.wav" /> </prompt> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||audio_group$$$' + 'initial_audio_group' + '^^^' + application.getElap sedTime(audium_element_start_time_millisecs)" /> <submit next="/CVP/Server" method="post" namelist=" audium_vxmlLog" /> </block> </form> </vxml>
*Feb 4 03:24:54.371: //63//HTTPC:/httpc_write_stream: Client write buffer fd(0): GET /Welcome-1.wav HTTP/1.1 Host: 172.18.110.75 Content-Type: application/x-www-form-urlencoded Connection: close Accept: text/vxml, text/x-vxml, application/vxml, application/x-vxml, application/voicexml, application/x-voicexml, text/plain, text/html, audio/basic, audio/wav, multipart/form-data, application/octet-stream User-Agent: Cisco-IOS-C5400/12.4
*Feb 4 03:24:54.391: read data from the socket 0 : first 400 bytes of data: HTTP/1.1 200 OK Content-Length: 76152 Content-Type: audio/wav Last-Modified: Thu, 03 May 2007 19:47:43 GMT Accept-Ranges: bytes ETag: "b27d69eabb8dc71:2eb" Server: Microsoft-IIS/6.0 Date: Thu, 17 May 2007 15:48:31 GMT Connection: close RIFFo)(Unprintable char...)1057415645666D7420120007010401F00401F00108000666163744 000529106461746152910FFFFFFFFFFFFFFFF7AFFFFFFFD7E7E
*Feb 4 03:24:54.371: //63//HTTPC:/httpc_write_stream: Client write buffer fd(1): POST /CVP/Server HTTP/1.1 Host: 172.18.110.75:7000 Content-Length: 67 Content-Type: application/x-www-form-urlencoded Cookie: $Version=0; JSESSIONID=6FE82FC3B0E02909CA5A9307D57F00E1; $Path=/CVP Connection: close Accept: text/vxml, text/x-vxml, application/vxml, application/x-vxml, application/voicexml, application/x-voicexml, text/plain, text/html, audio/basic, audio/wav, multipart/form-data, application/octet-stream User-Agent: Cisco-IOS-C5400/12.4
消息正文包含VXML文档(2)。 VXML文档告诉网关播放“早上好,感谢您致电Audium药房。
注意:此提示需要由文本到语音服务器合成。
*Feb 4 03:24:54.379: processing server rsp msg: msg(63AC8D3C) URL:http://172.18.110.75:7000/CVP/Server, fd(1): *Feb 4 03:24:54.379: Request msg: POST /CVP/Server HTTP/1.1 *Feb 4 03:24:54.379: Message Response Code: 200 *Feb 4 03:24:54.379: Message Rsp Decoded Headers: *Feb 4 03:24:54.379: Date:Thu, 17 May 2007 15:48:31 GMT *Feb 4 03:24:54.379: Content-Type:text/xml;charset=ISO-8859-1 *Feb 4 03:24:54.379: Connection:close *Feb 4 03:24:54.379: headers: *Feb 4 03:24:54.379: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/xml;charset=ISO-8859-1 Date: Thu, 17 May 2007 15:48:31 GMT Connection: close *Feb 4 03:24:54.379: body: *Feb 4 03:24:54.379: <?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" application="/CVP/Server?audium_root=true& calling_into=GoodPrescriptionRefillApp7" xml:lang="en-us"> <form id="audium_start_form"> <block> <assign name="audium_vxmlLog" expr="''" /> <assign name="audium_element_start_time_millisecs" expr="new Date().getTime()" /> <goto next="#start" /> </block> </form> <form id="start"> <block>Good morning and thank you for calling Audium pharmacy. <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||audio_group$$$' + 'initial_audio_group' + '^^^' + application.getElap sedTime(audium_element_start_time_millisecs)" /> <submit next="/CVP/Server" method="post" namelist=" audium_vxmlLog" /> </block> </form> </vxml>
*Feb 4 03:24:54.399: //63//HTTPC:/httpc_write_stream: Client write buffer fd(1): POST /CVP/Server HTTP/1.1 Host: 172.18.110.75:7000 Content-Length: 67 Content-Type: application/x-www-form-urlencoded Cookie: $Version=0; JSESSIONID=6FE82FC3B0E02909CA5A9307D57F00E1; $Path=/CVP Connection: close Accept: text/vxml, text/x-vxml, application/vxml, application/x-vxml, application/voicexml, application/x-voicexml, text/plain, text/html, audio/basic, audio/wav, multipart/form-data, application/octet-stream User-Agent: Cisco-IOS-C5400/12.4
消息正文包含VXML文档(3)。 此VXML文档定义了“菜单”提示,该提示告诉呼叫方输入1或说“重新填充”、输入2或说“药剂师”。提示由TTS服务器合成。输入(语音/dtmf)使用ASR进行识别。
*Feb 4 03:24:54.415: processing server rsp msg: msg(63AC8F24) URL:http://172.18.110.75:7000/CVP/Server, fd(1): *Feb 4 03:24:54.415: Request msg: POST /CVP/Server HTTP/1.1 *Feb 4 03:24:54.415: Message Response Code: 200 *Feb 4 03:24:54.415: Message Rsp Decoded Headers: *Feb 4 03:24:54.415: Date:Thu, 17 May 2007 15:48:31 GMT *Feb 4 03:24:54.415: Content-Type:text/xml;charset=ISO-8859-1 *Feb 4 03:24:54.415: Connection:close *Feb 4 03:24:54.415: headers: *Feb 4 03:24:54.415: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/xml;charset=ISO-8859-1 Date: Thu, 17 May 2007 15:48:31 GMT Connection: close *Feb 4 03:24:54.415: body: *Feb 4 03:24:54.415: ... Buffer too large - truncated to (4096) len. *Feb 4 03:24:54.415: <?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" application="/CVP/Server?audium_root=true& calling_into=GoodPrescriptionRefillApp7" xml:lang="en-us"> <property name="timeout" value="60s" /> <property name="confidencelevel" value="0.40" /> <form id="audium_start_form"> <block> <assign name="audium_vxmlLog" expr="''" /> <assign name="audium_element_start_time_millisecs" expr="new Date().getTime()" /> <goto next="#start" /> </block> </form> <form id="start"> <block> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||audio_group$$$' + 'initial_audio_group' + '^^^' + application.getElap sedTime(audium_element_start_time_millisecs)" /> <goto nextitem="choice_fld" /> </block> <field name="choice_fld" modal="false"> <property name="inputmodes" value="dtmf voice" />Say refills or press 1. Or. Say pharmacist or press 2.Sorry. I did not understand that. Say refills or press 1. Say pharmacist or press 2. <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||nomatch$$$' + '1' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||audio_group$$$' + 'nomatch_audio_group' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> </catch> <catch event="nomatch" count="2"> <prompt bargein="true">Sorry, I still did not get that. If you are using a speaker phone. Please use the phone keypad to make your selection. Press 1 for refills. Press 2 to speak to a pharmacist.</prompt> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||nomatch$$$' + '2' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||audio_group$$$' + 'nomatch_audio_group' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> </catch> <catch event="nomatch" count="3"> <prompt bargein="true">Gee. Looks like we are having some trouble.</prompt> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||nomatch$$$' + '3' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||audio_group$$$' + 'nomatch_audio_group' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> <var name="maxNoMatch" expr="'yes'" /> <submit next="/CVP/Server" method="post" namelist=" audium_vxmlLog maxNoMatch" /> </catch> <catch event="noinput"> <prompt bargein="true">Sorry. I did not hear that. Say refills or press 1. Say pharmacist or press 2.</prompt> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||noinput$$$' + '1' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||audio_group$$$' + 'noinput_audio_group' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> </catch> <catch event="noinput" count="2"> <prompt bargein="true">I am sorry. I still did not hear that. If you are using a speaker phone. Please use the phone keypad to make your selection. Press 1 for refills. Press 2 to speak to a pharmacist.</prompt> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||noinput$$$' + '2' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||audio_group$$$' + 'noinput_audio_group' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> </catch> <catch event="noinput" count="3"> <prompt bargein="true">Gee. Looks like we are having some trouble.</prompt> <assign name="audium_vxmlLog" expr=" *Feb 4 03:24:54.435: *Feb 4 03:24:54.435: //63//AFW_:/vapp_bgpost_done: status=http OK *Feb 4 03:24:54.435: //63//HTTPC:/httpc_socket_cleanup: fd=-1, bytes_sent=531 *Feb 4 03:24:54.435: //63//AFW_:/vapp_driver: evtID: 194 vapp record state: 0 *Feb 4 03:24:54.435: //63//AFW_:/vapp_bgpost_done_event: *Feb 4 03:24:54.435: //63/972590A48011/VXML:/vxml_bgload_post_done: vxmlhandle=6767ECFC status=0 async_status=400000000 *Feb 4 03:24:54.435: //63/972590A48011/VXML:/vxml_bgload_post_done: Loading file with url (http://172.18.110.75:7000/CVP/Server) *Feb 4 03:24:54.435: //63/972590A48011/VXML:/vxml_bgload_post_done: Script Content <?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" application="/CVP/Server?audium_root=true& calling_into=GoodPrescriptionRefillApp7" xml:lang="en-us"> <property name="timeout" value="60s" /> <property name="confidencelevel" value="0.40" /> <form id="audium_start_form"> <block> <assign name="audium_vxmlLog" expr="''" /> <assign name="audium_element_start_time_millisecs" expr="new Date().getTime()" /> <goto next="#start" /> </block> </form> <form id="start"> <block> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||audio_group$$$' + 'initial_audio_group' + '^^^' + application.getElap sedTime(audium_element_start_time_millisecs)" /> <goto nextitem="choice_fld" /> </block> <field name="choice_fld" modal="false"> <property name="inputmodes" value="dtmf voice" />Say refills or press 1. Or. Say pharmacist or press 2.Sorry. I did not understand that. Say refills or press 1. Say pharmacist or press 2.</prompt> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||nomatch$$$' + '1' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||audio_group$$$' + 'nomatch_audio_group' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> </catch> <catch event="nomatch" count="2"> <prompt bargein="true">Sorry, I still did not get that. If you are using a speaker phone. Please use the phone keypad to make your selection. Press 1 for refills. Press 2 to speak to a pharmacist.</prompt> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||nomatch$$$' + '2' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||audio_group$$$' + 'nomatch_audio_group' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> </catch> <catch event="nomatch" count="3"> <prompt bargein="true">Gee. Looks like we are having some trouble.</prompt> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||nomatch$$$' + '3' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||audio_group$$$' + 'nomatch_audio_group' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> <var name="maxNoMatch" expr="'yes'" /> <submit next="/CVP/Server" method="post" namelist=" audium_vxmlLog maxNoMatch" /> </catch> <catch event="noinput"> <prompt bargein="true">Sorry. I did not hear that. Say refills or press 1. Say pharmacist or press 2.</prompt> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||noinput$$$' + '1' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||audio_group$$$' + 'noinput_audio_group' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> </catch> <catch event="noinput" count="2"> <prompt bargein="true">I am sorry. I still did not hear that. If you are using a speaker phone. Please use the phone keypad to make your selection. Press 1 for refills. Press 2 to speak to a pharmacist.</prompt> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||noinput$$$' + '2' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||audio_group$$$' + 'noinput_audio_group' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> </catch> <catch event="noinput" count="3"> <prompt bargein="true">Gee. Looks like we are having some trouble.</prompt> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||noinput$$$' + '3' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||audio_group$$$' + 'noinput_audio_group' + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> <var name="maxNoInput" expr="'yes'" /> <submit next="/CVP/Server" method="post" namelist=" audium_vxmlLog maxNoInput" /> </catch> <filled> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||utterance$$$' + choice_fld$.utterance + '^^^' + application.getElap sedTime(audium_element_start_time_millisecs)" /> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||inputmode$$$' + choice_fld$.inputmode + '^^^' + application.getElap sedTime(audium_element_start_time_millisecs)" /> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||interpretation$$$' + choice_fld + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||confidence$$$' + choice_fld$.confidence + '^^^' + application.getElapsedTime(audium_element_start_time_millisecs)" /> <var name="confidence" expr="choice_fld$.confidence" /></filled> </field> </form> </vxml>
网关与ASR服务器建立RTSP会话后,这些语法将发送到ASR服务器。
*Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_change_server: asr_server=rtsp://10.86.177.39/recognizer *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_change_url: sess-id: 17, url=rtsp://10.86.177.39/recognizer *Feb 4 03:24:54.447: //-1//RTSP:/rtsplib_pmh_parse_url: *Feb 4 03:24:54.447: //-1//RTSP:/rtsplib_pmh_parse_url: Input-Url: rtsp://10.86.177.39/recognizer *Feb 4 03:24:54.447: //-1//RTSP:/rtsplib_pmh_parse_url: Hostname: 10.86.177.39Port : 554Path : recognizer *Feb 4 03:24:54.447: //-1//RTSP:/rtsplib_pmh_parse_url: *Feb 4 03:24:54.447: //-1//RTSP:/rtsplib_pmh_parse_url: Input-Url: rtsp://10.86.177.39/recognizer *Feb 4 03:24:54.447: //-1//RTSP:/rtsplib_pmh_parse_url: Hostname: 10.86.177.39Port : 554Path : recognizer *Feb 4 03:24:54.447: //63//MRCP:/mrcp_change_url: fsm (674DA1E4) already defined *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: grammar_id=session:option322@field.grammar *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: xml_lang=en-us *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: remoteupdate=0 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?><grammar version="1.0" xmln s="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public"> prescription</rule></grammar> *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_add_param: param: Speech-Language: *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_add_param: param: Content-Base: *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_recognizer_define_grammar: sess-id: 17 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: grammar_id=session:option323@field.grammar *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: remoteupdate=0 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?><grammar version="1.0" xmln s="http://www.w3.org/2001/06/grammar" mode="dtmf" root="root"><rule id="root" scope="public">1</rule></grammar> *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_add_param: param: Content-Base: *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_recognizer_define_grammar: sess-id: 17 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: grammar_id=session:option324@field.grammar *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: xml_lang=en-us *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: remoteupdate=0 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?><grammar version="1.0" xmln s="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public"> refills</rule></grammar> *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_add_param: param: Speech-Language: *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_add_param: param: Content-Base: *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_recognizer_define_grammar: sess-id: 17 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: grammar_id=session:option325@field.grammar *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: xml_lang=en-us *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: remoteupdate=0 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?><grammar version="1.0" xmln s="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public"> prescription refills</rule></gram mar> *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_add_param: param: Speech-Language: *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_add_param: param: Content-Base: *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_recognizer_define_grammar: sess-id: 17 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: grammar_id=session:option326@field.grammar *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: xml_lang=en-us *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: remoteupdate=0 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?><grammar version="1.0" xmln s="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public"> refill my prescription</rule></gr ammar> *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_add_param: param: Speech-Language: *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_add_param: param: Content-Base: *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_recognizer_define_grammar: sess-id: 17 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: grammar_id=session:option327@field.grammar *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: xml_lang=en-us *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: remoteupdate=0 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?><grammar version="1.0" xmln s="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public"> I want to refill my prescription</rule></grammar> *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_add_param: param: Speech-Language: *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_add_param: param: Content-Base: *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_recognizer_define_grammar: sess-id: 17 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: grammar_id=session:option328@field.grammar *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: xml_lang=en-us *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: remoteupdate=0 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?><grammar version="1.0" xmln s="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public"> refills please</rule></grammar> *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_add_param: param: Speech-Language: *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_add_param: param: Content-Base: *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_recognizer_define_grammar: sess-id: 17 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: grammar_id=session:option329@field.grammar *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: xml_lang=en-us *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: remoteupdate=0 *Feb 4 03:24:54.447: //63//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?><grammar version="1.0" xmln s="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public"> Pharmacist</rule></grammar> *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_add_param: param: Speech-Language: *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_add_param: param: Content-Base: *Feb 4 03:24:54.447: //-1//MRCP:/mrcp_recognizer_define_grammar: sess-id: 17 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: grammar_id=session:option330@field.grammar *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: remoteupdate=0 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?><grammar version="1.0" xmln s="http://www.w3.org/2001/06/grammar" mode="dtmf" root="root"><rule id="root" scope="public">2</rule></grammar> *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_add_param: param: Content-Base: *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_recognizer_define_grammar: sess-id: 17 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: grammar_id=session:option331@field.grammar *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: xml_lang=en-us *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: remoteupdate=0 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?><grammar version="1.0" xmln s="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public"> I want to speak to a pharmacist</rule></grammar> *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_add_param: param: Speech-Language: *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_add_param: param: Content-Base: *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_recognizer_define_grammar: sess-id: 17 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: grammar_id=session:option332@field.grammar *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: xml_lang=en-us *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: remoteupdate=0 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?><grammar version="1.0" xmln s="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public"> pharmacist please</rule></grammar> *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_add_param: param: Speech-Language: *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_add_param: param: Content-Base: *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_recognizer_define_grammar: sess-id: 17 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: grammar_id=session:link333@document.grammar *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: xml_lang=en-us *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: remoteupdate=0 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?><grammar xmlns="http://www.w3.org/2001/06/grammar" mode="voice" version="1.0" root="Hotlink_02_VOICE" xml:lang="en-us"> <rule id="Hotlink_02_VOICE" scope="public"> <one-of> <item>operator> <item>agent> <item>pharmacist> </one-of> </rule> </grammar> *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_add_param: param: Speech-Language: *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_add_param: param: Content-Base: *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_recognizer_define_grammar: sess-id: 17 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: grammar_id=session:link334@document.grammar *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: xml_lang=en-us *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: remoteupdate=0 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?><grammar xmlns="http://www.w3.org/2001/06/grammar" mode="voice" version="1.0" root="Hotlink_01_VOICE" xml:lang="en-us"> <rule id="Hotlink_01_VOICE" scope="public"> <one-of> <item>operator> <item>agent> <item>pharmacist> </one-of> </rule> </grammar> *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_add_param: param: Speech-Language: *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_add_param: param: Content-Base: *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_recognizer_define_grammar: sess-id: 17 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: grammar_id=session:help@grammar *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: xml_lang=en-us *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: remoteupdate=1 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?><grammar version="1.0" xmln s="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public">help</rule></grammar> *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_add_param: param: Speech-Language: *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_add_param: param: Content-Base: *Feb 4 03:24:54.451: //-1//MRCP:/mrcp_recognizer_define_grammar: sess-id: 17 *Feb 4 03:24:54.451: //63//AFW_:/vapp_asr: grammar_id=session:option322@field.grammar grammar_id=session:option323@field.grammar grammar_id=session:option324@field.grammar grammar_id=session:option325@field.grammar grammar_id=session:option326@field.grammar grammar_id=session:option327@field.grammar grammar_id=session:option328@field.grammar grammar_id=session:option329@field.grammar grammar_id=session:option330@field.grammar grammar_id=session:option331@field.grammar grammar_id=session:option332@field.grammar grammar_id=session:link333@document.grammar grammar_id=session:link334@document.grammar grammar_id=session:help@grammar
*Feb 4 03:24:54.475: ######################################## *Feb 4 03:24:54.475: Request *Feb 4 03:24:54.475: SETUP rtsp://10.86.177.39/recognizer RTSP/1.0 CSeq: 0 Transport: rtp/avp;unicast;client_port=17704;mode=record
200 OK响应的SDP包含ASR服务器的IP地址和UDP端口号,网关需要将RTP数据包发送到这些端口。
*Feb 4 03:24:54.531: //-1//RTSP:/rtsp_process_single_svr_resp: *Feb 4 03:24:54.531: rtsp_process_single_svr_resp: 400 bytes of data: RTSP/1.0 200 OK CSeq: 0 Session: 27b1560a_00000748_464c95e8_000b_0000 Transport: RTP/AVP;unicast;client_port=17704;server_port=1224-1225;mode=record Content-Length: 233 Content-Type: application/sdp v=0 o=- 3388413032 3388413032 IN IP4 10.86.177.39 s=Nuance Media Server/1.0.0 SP10 (Windows 2000) c=IN IP4 10.86.177.39 t=0 0 m=audio 1224 RTP/AVP 0 101 a=rtpmap:0 pcmu/8000 a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-15
此处仅显示一个请求:
*Feb 4 03:24:54.535: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.535: rtsp_partial_socket_send: (fd:0 len:163) 400 bytes of data: ANNOUNCE rtsp://10.86.177.39/recognizer RTSP/1.0 CSeq: 1 Session: 27b1560a_00000748_464c95e8_000b_0000 Content-Type: application/mrcp Content-Length: 390 *Feb 4 03:24:54.535: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.535: (socket:0) (bytes-sent:163) *Feb 4 03:24:54.535: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.535: rtsp_partial_socket_send: (fd:0 len:28) 400 bytes of data: DEFINE-GRAMMAR 3 MRCP/1.0 *Feb 4 03:24:54.535: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.535: (socket:0) (bytes-sent:28) *Feb 4 03:24:54.535: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.535: rtsp_partial_socket_send: (fd:0 len:70) 400 bytes of data: Speech-Language: en-us Content-Base: http://172.18.110.75:7000/CVP/ *Feb 4 03:24:54.535: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.535: (socket:0) (bytes-sent:70) *Feb 4 03:24:54.535: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.535: rtsp_partial_socket_send: (fd:0 len:99) 400 bytes of data: Content-Type: application/grammar+xml Content-Id: option322@field.grammar Content-Length: 193 *Feb 4 03:24:54.535: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.535: (socket:0) (bytes-sent:99) *Feb 4 03:24:54.535: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.535: rtsp_partial_socket_send: (fd:0 len:193) 400 bytes of data:xmlns="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"> prescription
*Feb 4 03:24:54.555: rtsp_process_single_svr_resp: 400 bytes of data: RTSP/1.0 200 OK CSeq: 1 Session: 27b1560a_00000748_464c95e8_000b_0000 Content-Length: 27 Content-Type: application/mrcp MRCP/1.0 3 200 COMPLETE
*Feb 4 03:24:54.619: rtsp_partial_socket_send: (fd:0 len:24) 400 bytes of data: RECOGNIZE 17 MRCP/1.0 *Feb 4 03:24:54.619: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.619: (socket:0) (bytes-sent:24) *Feb 4 03:24:54.619: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.619: rtsp_partial_socket_send: (fd:0 len:347) 400 bytes of data: Speech-Language: en-us Confidence-Threshold: 40 Sensitivity-Level: 50 Speed-Vs-Accuracy: 50 Dtmf-Interdigit-Timeout: 10000 Dtmf-Term-Timeout: 0 Dtmf-Term-Char: # No-Input-Timeout: 60000 N-Best-List-Length: 1 Logging-Tag: 63:63 Accept-Charset: charset: utf-8 Content-Base: http://172.18.110.75:7000/CVP/ Recognizer-Start-Timers: false *Feb 4 03:24:54.619: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.619: (socket:0) (bytes-sent:347) *Feb 4 03:24:54.619: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.619: rtsp_partial_socket_send: (fd:0 len:52) 400 bytes of data: Content-Type: text/uri-list Content-Length: 453 *Feb 4 03:24:54.619: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.619: (socket:0) (bytes-sent:52) *Feb 4 03:24:54.619: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.619: rtsp_partial_socket_send: (fd:0 len:256) 400 bytes of data: session:option322@field.grammar session:option323@field.grammar session:option324@field.grammar session:option325@field.grammar session:option326@field.grammar session:option327@field.grammar session:option328@field.grammar session:option329@field.grammar *Feb 4 03:24:54.623: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.623: (socket:0) (bytes-sent:256) *Feb 4 03:24:54.623: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:24:54.623: rtsp_partial_socket_send: (fd:0 len:197) 400 bytes of data: session:option330@field.grammar session:option331@field.grammar session:option332@field.grammar session:link333@document.grammar session:link334@document.grammar session:help@grammar
*Feb 4 03:24:54.875: rtsp_process_single_svr_resp: 400 bytes of data: RTSP/1.0 200 OK CSeq: 15 Session: 27b1560a_00000748_464c95e8_000b_0000 Content-Length: 31 Content-Type: application/mrcp MRCP/1.0 17 200 IN-PROGRESS
*Feb 4 03:25:07.811: //63//HTTPC:/httpc_is_cached: HTTPC_FILE_IS_CACHED *Feb 4 03:25:07.811: //-1//HTTPC:/httpc_set_cache_revoke_cb: Registering revoke_callback(0x61D9672C)+pcontext(0x6767A9FC) for cache p(0x672DA9C8) *Feb 4 03:25:07.811: //63//AFW_:/vapp_driver: evtID: 145 vapp record state: 0 *Feb 4 03:25:07.811: //63//AFW_:/vapp_play_done: evID=145 reason=13, protocol=2, status_code=0, dur=9504, rate=0 *Feb 4 03:25:07.811: //63/972590A48011/VXML:/vxml_media_done:
*Feb 4 03:25:07.811: //-1//RTSP:/rtsplib_send_setup: *Feb 4 03:25:07.811: ######################################## *Feb 4 03:25:07.811: Request *Feb 4 03:25:07.811: SETUP rtsp://10.86.177.39/synthesizer RTSP/1.0 CSeq: 16 Session: 27b1560a_00000748_464c95e8_000b_0000 Transport: rtp/avp;unicast;source=172.18.110.77;destination=172.18.110.77; client_port=17704-17705
*Feb 4 03:25:07.831: rtsp_process_single_svr_resp: 400 bytes of data: RTSP/1.0 200 OK CSeq: 16 Session: 27b1560a_00000748_464c95e8_000b_0000 Transport: RTP/AVP;unicast;client_port=17704;server_port=1224-1225
*Feb 4 03:25:07.835: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:25:07.835: rtsp_partial_socket_send: (fd:0 len:165) 400 bytes of data: ANNOUNCE rtsp://10.86.177.39/synthesizer RTSP/1.0 CSeq: 17 Session: 27b1560a_00000748_464c95e8_000b_0000 Content-Type: application/mrcp Content-Length: 307 *Feb 4 03:25:07.835: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:25:07.835: (socket:0) (bytes-sent:165) *Feb 4 03:25:07.835: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:25:07.835: rtsp_partial_socket_send: (fd:0 len:19) 400 bytes of data: SPEAK 2 MRCP/1.0 *Feb 4 03:25:07.835: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:25:07.835: (socket:0) (bytes-sent:19) *Feb 4 03:25:07.835: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:25:07.835: rtsp_partial_socket_send: (fd:0 len:114) 400 bytes of data: Kill-On-Barge-In: true Speech-Language: en-us Logging-Tag: 63:63 Content-Base: http://172.18.110.75:7000/CVP/ *Feb 4 03:25:07.835: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:25:07.835: (socket:0) (bytes-sent:114) *Feb 4 03:25:07.835: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:25:07.835: rtsp_partial_socket_send: (fd:0 len:65) 400 bytes of data: Content-Type: application/synthesis+ssml Content-Length: 109 *Feb 4 03:25:07.835: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:25:07.835: (socket:0) (bytes-sent:65) *Feb 4 03:25:07.835: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:25:07.835: rtsp_partial_socket_send: (fd:0 len:109) 400 bytes of data:Good morning and thank you for calling Audium pharmacy.
*Feb 4 03:25:08.031: rtsp_process_single_svr_resp: 400 bytes of data: RTSP/1.0 200 OK CSeq: 17 Session: 27b1560a_00000748_464c95e8_000b_0000 Content-Length: 30 Content-Type: application/mrcp MRCP/1.0 2 200 IN-PROGRESS
*Feb 4 03:25:11.911: rtsp_process_single_svr_resp: 400 bytes of data: ANNOUNCE rtsp://10.86.177.39/synthesizer RTSP/1.0 CSeq: 1 Session: 27b1560a_00000748_464c95e8_000b_0000 Content-Length: 68 Content-Type: application/mrcp SPEAK-COMPLETE 2 COMPLETE MRCP/1.0 Completion-Cause: 000 normal
*Feb 4 03:25:19.711: //-1//RTSP:/rtsp_process_single_svr_resp: *Feb 4 03:25:19.711: rtsp_process_single_svr_resp: 400 bytes of data: ANNOUNCE rtsp://10.86.177.39/recognizer RTSP/1.0 CSeq: 3 Session: 27b1560a_00000748_464c95e8_000b_0000 Content-Length: 61 Content-Type: application/mrcp START-OF-SPEECH 17 IN-PROGRESS MRCP/1.0 Proxy-Sync-Id: 1
*Feb 4 03:25:19.711: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:25:19.711: rtsp_partial_socket_send: (fd:0 len:76) 400 bytes of data: RTSP/1.0 200 OK CSeq: 3 Session: 27b1560a_00000748_464c95e8_000b_0000
*Feb 6 00:58:17.960: rtsp_process_single_svr_resp: 400 bytes of data: ANNOUNCE rtsp://10.86.177.39/recognizer RTSP/1.0 CSeq: 4 Session: 27b1560a_00000748_464f166e_000f_0000 Content-Length: 848 Content-Type: application/mrcp RECOGNITION-COMPLETE 17 COMPLETE MRCP/1.0 Completion-Cause: 000 success Content-Type: application/x-nlsml Content-Length: 716 <?xml version="1.0" encoding="UTF-8"?> <result grammar="session:option420@field.grammar"> <interpreta *Feb 4 03:25:20.867: //-1//RTSP:/rtsp_pmh_parse_svr_response: *Feb 4 03:25:20.867: //-1//RTSP:/rtsp_pmh_parse_svr_response: just one response(may be partial): 849
此POST请求通知VXML服务器用户已选择“重新填充”选项。
*Feb 4 03:25:20.963: //63/972590A48011/VXML:/vxml_vapp_bgpost: url http://172.18.110.75:7000/CVP/Server cachable 1 timeout 0 body audium_vxmlLog=%7C%7C% 7Caudio_group$$$initial_audio_group%5E%5 E%5E4%7C%7C%7Cutterance$$$refills%5E%5E%5E26516%7C%7C%7Cinputmode$$$voice%5E%5E%5E26516% 7C%7C%7Cinterpretation$$$refills%5E%5E%5E265 16%7C%7C%7Cconfidence$$$0.55%5E%5E%5E26516&confidence=0.55&choice_fld=refills len 271maxage -1 maxstale -1 *Feb 4 03:25:20.963: //63//AFW_:/vapp_bgpost: url=http://172.18.110.75:7000/CVP/Server; mime_type=application/x-www-form-urlencoded; len=271; iov_base=audium_vxmlLog=%7C%7C% 7Caudio_group$$$initial_audio_group%5E%5E%5E4%7C%7C%7Cutterance$$$refills%5E%5E%5E26516%7C %7C%7Cinputmode$$$voice%5E%5E%5E26516%7C%7C%7Cinterpretation$$$refills%5E%5E%5E26516%7C%7C% 7Cconfidence$$$0.55%5E%5E%5E26516&confide nce=0.55&choice_fld=refills *Feb 4 03:25:21.039: //63//HTTPC:/httpc_socket_send: *Feb 4 03:25:21.039: about to send data to the socket 0 : first 400 bytes of data: POST /CVP/Server HTTP/1.1 Host: 172.18.110.75:7000 Content-Length: 271 Content-Type: application/x-www-form-urlencoded Cookie: $Version=0; JSESSIONID=6FE82FC3B0E02909CA5A9307D57F00E1; $Path=/CVP Connection: close Accept: text/vxml, text/x-vxml, application/vxml, application/x-vxml, application/voicexml, application/x-voicexml, text/plain, text/html, audio/basic, audio/wav, multipart/form-dat
这将告知网关终止VXML会话。
*Feb 4 03:26:20.623: processing server rsp msg: msg(63ABB204) URL:http://172.18.110.75:7000/CVP/Server, fd(0): *Feb 4 03:26:20.623: Request msg: POST /CVP/Server HTTP/1.1 *Feb 4 03:26:20.623: Message Response Code: 200 *Feb 4 03:26:20.623: Message Rsp Decoded Headers: *Feb 4 03:26:20.623: Date:Thu, 17 May 2007 15:49:57 GMT *Feb 4 03:26:20.623: Content-Type:text/xml;charset=ISO-8859-1 *Feb 4 03:26:20.623: Connection:close *Feb 4 03:26:20.623: Set-Cookie:JSESSIONID=NULL; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/CVP *Feb 4 03:26:20.623: headers: *Feb 4 03:26:20.623: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Set-Cookie: JSESSIONID=NULL; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/CVP Content-Type: text/xml;charset=ISO-8859-1 Date: Thu, 17 May 2007 15:49:57 GMT Connection: close *Feb 4 03:26:20.627: body: *Feb 4 03:26:20.627: <?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xml:lang="en-us"> <catch event="vxml.session.error"> <exit /> </catch> <catch event="telephone.disconnect.hangup"> <exit /> </catch> <catch event="telephone.disconnect"> <exit /> </catch> <catch event="error.unsupported.object"> <exit /> </catch> <catch event="error.unsupported.language"> <exit /> </catch> <catch event="error.unsupported.format"> <exit /> </catch> <catch event="error.unsupported.element"> <exit /> </catch> <catch event="error.unsupported.builtin"> <exit /> </catch> <catch event="error.unsupported"> <exit /> </catch> <catch event="error.semantic"> <exit /> </catch> <catch event="error.noresource"> <exit /> </catch> <catch event="error.noauthorization"> <exit /> </catch> <catch event="error.eventhandler.notfound"> <exit /> </catch> <catch event="error.connection.noroute"> <exit /> </catch> <catch event="error.connection.noresource"> <exit /> </catch> <catch event="error.connection.nolicense"> <exit /> </catch> <catch event="error.connection.noauthorization"> <exit /> </catch> <catch event="error.connection.baddestination"> <exit /> </catch> <catch event="error.condition.baddestination"> <exit /> </catch> <catch event="error.com.cisco.media.resource.unavailable"> <exit /> </catch> <catch event="error.com.cisco.handoff.failure"> <exit /> </catch> <catch event="error.com.cisco.callhandoff.failure"> <exit /> </catch> <catch event="error.com.cisco.aaa.authorize.failure"> <exit /> </catch> <catch event="error.com.cisco.aaa.authenticate.failure"> <exit /> </catch> <catch event="error.badfetch.https"> <exit /> </catch> <catch event="error.badfetch.http"> <exit /> </catch> <catch event="error.badfetch"> <exit /> </catch> <catch event="error"> <exit /> </catch> <catch event="disconnect.com.cisco.handoff"> <exit /> </catch> <catch event="connection.disconnect.hangup"> <exit /> </catch> <catch event="connection.disconnect"> <exit /> </catch> <form> <block> <exit /> </block> </form> </vxml>
*Feb 4 03:26:28.803: //63/972590A48011/VXML:/vxml_vapp_terminate: vapp_status=0 ref_count 0 *Feb 4 03:26:28.803: //63//AFW_:/vapp_terminate: *Feb 4 03:26:28.803: //63//AFW_:/vapp_session_exit_event_name: Exit Event vxml.session.complete *Feb 4 03:26:28.803: //63//AFW_:/AFW_M_VxmlModule_Terminate: *Feb 4 03:26:28.803: //63//AFW_:/vapp_checksessionstate: *Feb 4 03:26:28.803: //63//AFW_:/vapp_checkifdone: Object: 1, Leg: 1 *Feb 4 03:26:28.803: //63/972590A48011/VXML:/pop_exec_stack: *Feb 4 03:26:28.803: pop_exec_stack: sidp->vxmlp->urip=http://172.18.110.75:7000/CVP/Server *Feb 4 03:26:28.803: //63/972590A48011/VXML:/vxml_leave_scope: scope=application *Feb 4 03:26:28.803: vxml_tree_delete:mem_mgr_mempool_free: mem_refcnt(6848EE98)= 0 - mempool cleanup *Feb 4 03:26:28.803: vxml_tree_delete:mem_mgr_mempool_free: mem_refcnt(6848CD00)= 0 - mempool cleanupnls_mem_free *Feb 4 03:26:28.803: nls_mem_free:mem_mgr_mempool_free: mem_refcnt(67651498)= 0 - mempool cleanup *Feb 4 03:26:28.803: //63/972590A48011/VXML:/vxml_session_delete: *Feb 4 03:26:28.803: vxml_session_delete:mem_mgr_mempool_free: mem_refcnt(6848CD54)= 0 - mempool cleanup *Feb 4 03:26:28.803: //63//AFW_:/vapp_checksessionstate: *Feb 4 03:26:28.803: //63//AFW_:/vapp_checkifdone: Object: 0, Leg: 0 *Feb 4 03:26:28.807: //63/972590A48011/CCAPI/ccCallDisconnect: Cause Value=16, Tag=0x0, Call Entry(Previous Disconnect Cause=0, Disconnect Cause=0) *Feb 4 03:26:28.807: //63/972590A48011/CCAPI/ccCallDisconnect: Cause Value=16, Call Entry(Responsed=TRUE, Cause Value=16)
*Feb 4 03:26:28.807: ISDN Se3/0:23 Q931: TX -> DISCONNECT pd = 8 callref = 0x8099 Cause i = 0x8090 - Normal call clearing *Feb 4 03:26:28.819: ISDN Se3/0:23 Q931: RX <- RELEASE pd = 8 callref = 0x0099 *Feb 4 03:26:28.819: ISDN Se3/0:23 Q931: TX -> RELEASE_COMP pd = 8 callref = 0x8099
*Feb 4 03:26:28.823: //-1//RTSP:/rtsplib_send_teardown: *Feb 4 03:26:28.823: ######################################## *Feb 4 03:26:28.823: Request *Feb 4 03:26:28.823: TEARDOWN rtsp://10.86.177.39/recognizer RTSP/1.0 CSeq: 62 Session: 27b1560a_00000748_464c95e8_000b_0000 *Feb 4 03:26:28.975: //-1//RTSP:/rtsp_process_single_svr_resp: *Feb 4 03:26:28.975: rtsp_process_single_svr_resp: 400 bytes of data: RTSP/1.0 200 OK CSeq: 62 Session: 27b1560a_00000748_464c95e8_000b_0000
*Feb 4 03:26:28.823: //-1//RTSP:/rtsp_partial_socket_send: *Feb 4 03:26:28.823: rtsp_partial_socket_send: (fd:0 len:111) 400 bytes of data: TEARDOWN rtsp://10.86.177.39/synthesizer RTSP/1.0 CSeq: 63 Session: 27b1560a_00000748_464c95e8_000b_0000 *Feb 4 03:26:28.979: rtsp_process_single_svr_resp: 400 bytes of data: RTSP/1.0 200 OK CSeq: 63 Session: 27b1560a_00000748_464c95e8_000b_0000