VXML(Voice Extensible Markup Language)은 W3C(World Wide Web 컨소시엄)에서 정의한 표준입니다. 이것은 합성된 음성, 구어 인식, DTMF 숫자 인식 및 녹음된 음성 오디오를 제공하는 오디오 대화 상자를 만들도록 설계되었습니다.VXML 서버 및 클라이언트는 잘 알려진 HTTP 프로토콜을 사용하여 VXML 문서/페이지를 교환합니다.
Cisco CVP(Voice Portal)는 전화를 통해 액세스할 수 있는 지능적이고 대화형 음성 응답(IVR) 애플리케이션을 제공합니다.CVP 구축에는 세 가지 유형이 있습니다.
독립형 서비스
CVP 통화 제어
통화 대기열 및 호전환
합성된 음성 및 음성 단어/DTMF 숫자 인식 기능은 TTS(Text-to-Speech) 및 ASR(Automatic Speech Recognition Server)에서 제공합니다. IOS® VXML 게이트웨이는 MRCP(Media Resource Control) 프로토콜을 통해 TTS/ASR 서버와 통신합니다. MRCP의 두 가지 버전(RFC 4463)은 MRCPv1(RTSP를 통한 MRCP) 및 MRCPv2(MRCP over SIP)입니다.
이 문서에서는 MRCPv2 TTS/ASR 서버를 사용하는 독립형 서비스 구축에서 CVP에 대한 IOS 음성 XML 게이트웨이의 통화 흐름에 대해 설명합니다.샘플 약국 애플리케이션이 CVP VXML 서버에 구축되었습니다.
이 문서에 대한 특정 요건이 없습니다.
이 문서의 정보는 다음 소프트웨어 및 하드웨어 버전을 기반으로 합니다.
IOS VXML 게이트웨이:Cisco AS5400XM, IOS 12.4(15)T1
VXML 서버:CVP 4.0
ASR/TTS 서버:Loquendo Speech Suite 7.0
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다.이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다.현재 네트워크가 작동 중인 경우, 모든 명령어의 잠재적인 영향을 미리 숙지하시기 바랍니다.
문서 규칙에 대한 자세한 내용은 Cisco 기술 팁 표기 규칙을 참고하십시오.
이 섹션에는 이 문서에서 설명하는 기능을 구성하기 위한 정보가 표시됩니다.
참고: 명령 조회 도구(등록된 고객만 해당)를 사용하여 이 섹션에 사용된 명령에 대한 자세한 내용을 확인하십시오.
이 문서에서는 다음 네트워크 설정을 사용합니다.
이 문서에서는 다음 구성을 사용합니다.
VXML 게이트웨이 구성 |
---|
!--- Define Hostname to IP Address !---- mapping for ASR and TTS servers ip host asr-en-us 172.18.110.76 ip host tts-en-us 172.18.110.76 !--- Define the Voice class URI to match !---- the SIP URI of ASR Server in the dial-peer voice class uri TTS sip pattern tts@172.18.110.76 !--- Define the Voice class URI to match !---- the SIP URI of TTS server in the dial-peer voice class uri ASR sip pattern asr@172.18.110.76 !--- Define the amount of maximum memory !---- to used for downloaded prompts ivr prompt memory 15000 !--- Define the SIP URI of ASR !---- and TTS Server ivr asr-server sip:asr@172.18.110.76 ivr tts-server sip:tts@172.18.110.76 !--- 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 / 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 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 !--- Configure a SIP Voip !---- dial-peer that will be used !---- as an outbound dial-peer when the !---Gateway initiates a MRCP overc SIP !---- session to the ASR server. !---- Codec = G711ulaw, DTMF-Relay !---- = RTP-NTE, No Vad dial-peer voice 5 voip session protocol sipv2 destination uri ASR dtmf-relay rtp-nte codec g711ulaw no vad !--- Configure a SIP Voip !---- dial-peer that will be used !---- as an outbound dial-peer when the !---Gateway initiates a MRCP !---- overc SIP session to the TTS server !--- Codec = G711ulaw, DTMF-Relay = RTP-NTE, !---- No Vad dial-peer voice 6 voip session protocol sipv2 destination uri TTS dtmf-relay rtp-nte codec g711ulaw no vad |
이 섹션에서는 이 컨피그레이션 예제의 결과로 나타나는 통화 흐름에 대해 설명합니다.
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 게이트웨이는 다이얼 피어 5를 사용하여 tts@172.18.110.76(TTS 서버)으로 SIP 세션을 설정합니다. SIP 세션이 설정되면 SIP INVITE의 SDP 200 OK 응답에 제공된 TCP 포트 번호를 사용하여 TTS 서버에 대한 TCP 연결을 엽니다.이 TCP 연결은 IOS 게이트웨이와 TTS 서버 간에 SPEAK, SPEAK-COMPLETE 등의 MRCP 메시지를 교환하는 데 사용됩니다.
TTS 서버는 SIP INVITE의 SDP에서 게이트웨이가 제공하는 IP 주소 및 UDP 포트 번호로 G.711ulaw RTP 오디오 스트림을 전송합니다.
VXML 문서가 DTMF 숫자 및/또는 음성 단어를 인식하도록 게이트웨이를 지정하는 경우 IOS 게이트웨이는 asr@172.18.110.76(ASR 서버)와 함께 다이얼 피어 6을 사용하여 SIP 세션을 설정합니다. SIP 세션이 설정된 후 SIP INVITE의 SDP 200 OK 응답에 제공된 TCP 포트 번호를 사용하여 ASR 서버에 대한 TCP 연결을 엽니다.이 TCP 연결은 IOS 게이트웨이와 ASR 서버 간에 DEFINE GRAMMAR, COMPLETE, RECOGNITION, RECOGNITION-COMPLETE 등의 MRCP 메시지를 교환하는 데 사용됩니다.
IOS VXML 게이트웨이는 SIP 200 OK 응답의 SDP에서 ASR이 제공하는 IP 주소 및 UDP 포트 번호로 G.711ulaw RTP 오디오 스트림을 전송합니다.IOS VXML 게이트웨이는 PSTN 사용자가 RTP-NTE 이벤트로 입력한 숫자를 ASR 서버로 전송합니다.
VXML 문서를 실행한 후 게이트웨이는 VXML 문서/페이지의 <submit> 태그에 지정된 대로 HTTP POST 요청(매개변수 집합 포함)을 전송합니다.
6 - 10단계는 서버에서 전송하는 각 VXML 문서에 대해 발생합니다.
VXML 응용 프로그램은 호출자에게 제공된 서비스를 마치면 <form> 요소 내에 <exit/> 태그가 있는 VXML 문서를 보냅니다.
IOS 게이트웨이는 TTS 및 ASR 서버로 설정된 MRCPv2 세션의 연결을 해제합니다.
IOS 게이트웨이는 ISDN 측에서 통화의 연결을 끊습니다.
이 섹션을 사용하여 컨피그레이션이 제대로 작동하는지 확인합니다.
Output Interpreter 도구(등록된 고객만 해당)(OIT)는 특정 show 명령을 지원합니다.OIT를 사용하여 show 명령 출력의 분석을 봅니다.
통화 활성 음성 개요 표시
11F8 : 160 333356110ms. 1 +10 pid:1 Answer 5555 active dur 00:00:54 tx:1740/300598 rx:364/85472 Tele 3/0:D (160) [3/0.1] tx:15145/15145/0ms None noise:-52 acom:6 i/0:-32/-64 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 Media call-legs: 0 Total call-legs: 1
통화 활성 미디어 개요 표시
11F8 : 163 333360880ms.1 +60 pid:6 Originate sip:tts@172.18.110.76:5060 active dur 00:00:44 tx:0/0 rx:2212/353545 IP 172.18.110.76:10000 SRTP: off rtt:0ms pl: 4485/0ms lost:0/1/0 delay:65/65/65ms g711ulaw TextRelay: off media inactive detected:n media contrl rcvd: n/a timestamp:n/a long duration call detected:n long duration call duration:n/a timestamp:n/a11F8 : 164 333360890ms.1 +20 pid:5 Originate sip:asr@172.18.110.76:5060 active dur 00:00:44 tx:1687/297152 rx:0/0 IP 172.18.110.76:10002 SRTP: off rtt:0ms pl:6550/30ms lost:0/2/0 delay:65/65/65ms g711ulaw TextRelay: off media inactive detected:n media contrl rcvd:n/a timestamp:n/a long duration call detected:n long duration call duration:n/a timestamp:n/a Telephony call-legs: 0 SIP call-legs: 0 H323 call-legs: 0 Call agent controlled call-legs: 0 SCCP call-legs: 0 Multicast call-legs: 0 Media call-legs: 2 Total call-legs: 2
mrcp 클라이언트 세션 활성 세부 정보 표시
No Of Active MRCP Sessions: 1 Call-ID: 0xA0 same: 0 -------------------------------------------- Resource Type: Synthesizer URL: sip:tts@172.18.110.76 Method In Progress: SPEAK State: S_SYNTH_SPEAKING Associated CallID: 0xA3 MRCP version: 2.0 Control Protocol: TCP Server IP Address: 172.18.110.76 Port: 51000 Data Protocol: RTP Server IP Address: 172.18.110.76 Port: 10000 Signalling URL: sip:tts@172.18.110.76:5060 Packets Transmitted: 0 (0 bytes) Packets Received: 2265 (361968 bytes) ReceiveDelay: 65 LostPackets: 0 -------------------------------------------- -------------------------------------------- Resource Type: Recognizer URL: sip:asr@172.18.110.76 Method In Progress: RECOGNIZE State: S_RECOG_RECOGNIZING Associated CallID: 0xA4 MRCP version: 2.0 Control Protocol: TCP Server IP Address: 172.18.110.76 Port: 51001 Data Protocol: RTP Server IP Address: 172.18.110.76 Port: 10002 Packets Transmitted: 1791 (313792 bytes) Packets Received: 0 (0 bytes) ReceiveDelay: 60 LostPackets: 0
voip rtp 연결 표시
VoIP RTP active connections : No. CallId dstCallId LocalRTP RmtRTP LocalIP RemoteIP 1 163 160 18964 10000 14.1.16.25 172.18.110.76 2 164 160 23072 10002 14.1.16.25 172.18.110.76 Found 2 active RTP connections
http 클라이언트 캐시 표시
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 86400 48 1505 0 url: http://172.18.110.75/Welcome-1.wav
이 섹션에서는 컨피그레이션 문제를 해결하는 데 사용할 수 있는 정보를 제공합니다.
IOS 게이트웨이를 구성하여 디버깅 로그를 로깅 버퍼에 로깅하고 "로깅 콘솔"을 비활성화합니다.
참고: debug 명령을 사용하기 전에 디버그 명령에 대한 중요 정보를 참조하십시오.
참고: 다음은 게이트웨이를 구성하여 게이트웨이의 로깅 버퍼에 디버그를 저장하는 데 사용되는 명령입니다.
서비스 타임스탬프 디버그 datetime msec
서비스 시퀀스
로깅 콘솔 없음
버퍼된 로깅 5000000 디버그
로그 지우기
다음은 컨피그레이션 문제를 해결하는 데 사용되는 debug 명령입니다.
디버그 isdn q931
디버그 voip ccapi inout
디버그 voip 응용 프로그램 vxml 기본값
디버그 voip 응용 프로그램 vxml 덤프
디버그 ccsip 메시지
디버그 mrcp 세부 정보
디버그 http 클라이언트 모두
디버그 voip rtp 세션 nat named-event
이 섹션에서는 이 샘플 통화 흐름에 대한 디버그 출력을 제공합니다.
게이트웨이는 CVPSelfServiceBootstrap.vxml VoiceXML 스크립트 실행을 시작합니다.
게이트웨이는 Welcome-1.wav 파일을 다운로드하기 위해 미디어 서버에 HTTP GET 요청을 보냅니다.
게이트웨이는 미디어 서버에서 200 OK를 수신하고 HTTP 메시지 본문에서 Welcome-1.wav의 내용을 수신합니다.
게이트웨이는 VXML 문서 (2)의 Submit(제출) 옵션에 정의된 대로 HTTP POST 요청을 보냅니다.
게이트웨이는 DTMF/음성 인식에 사용할 문법을 만듭니다.그런 다음 게이트웨이가 ASR 서버와의 세션을 설정하면 ASR 서버로 이 그래마들을 보냅니다.
게이트웨이는 Text-to-Speech Server를 사용하여 SIP 세션을 설정하기 위해 다이얼 피어 조회를 수행합니다.아웃바운드 다이얼 피어 6이 일치합니다.
게이트웨이는 다이얼피어 조회를 수행하여 자동 음성 인식 서버를 사용하여 SIP 세션을 설정합니다.아웃바운드 다이얼 피어 5가 일치합니다.
게이트웨이는 ASR 서버에서 200 OK 응답(SIP INVITE용)을 수신합니다.SIP INVITE 메시지의 SDP는 다음을 지정합니다.
오디오 스트림의 G711ulaw 코덱과 IP 주소, RTP 포트 번호
이 RTP 스트림의 방향 특성:"recvonly"
RTP-NTE 기반 DTMF 릴레이
게이트웨이가 ASR 서버와의 MRCPv2 세션을 설정하는 데 사용할 TCP 포트 번호(51001)
게이트웨이는 SIP ACK를 ASR 서버로 전송하고 자동 음성 인식을 위한 SIP 세션이 게이트웨이와 ASR 서버 간에 설정됩니다.
게이트웨이가 ASR 서버에 "DEFINE-GRAMMER" MRCP 요청을 보냅니다.(여기에 하나의 요청만 표시됩니다.)
게이트웨이가 TTS 서버에서 200 OK 응답(SIP INVITE용)을 수신합니다.SIP INVITE 메시지의 SDP는 다음을 지정합니다.
오디오 스트림에 대한 G711ulaw 코덱과 IP 주소 및 RTP 포트 번호
이 RTP 스트림의 direction 특성: "sendonly"
RTP-NTE 기반 DTMF 릴레이
게이트웨이가 TTS 서버와의 MRCPv2 세션을 설정하는 데 사용할 TCP 포트 번호(51000)
게이트웨이가 TTS 서버로 SIP ACK를 전송하고, Text-to-Speech에 대한 SIP 세션이 게이트웨이와 TTS 서버 간에 설정됩니다.
게이트웨이가 ASR 서버에 "RECOGNIZE" MRCP 요청을 보내 DTMF/음성 언어의 인식을 시작합니다.
게이트웨이는 Welcome-1.wav 미디어 파일의 다운로드를 완료하고 캐시에 저장한 다음 호출자에게 프롬프트를 재생합니다.
게이트웨이가 TTS 서버에 "SPEAK" MRCP 요청을 보내 "Thank-You-for-Calling" 프롬프트를 재생합니다.
TTS 서버는 "Thank-you-for-Calling" 프롬프트를 입력한 후 "SPEAK-COMPLETE" 메시지를 전송합니다.
게이트웨이는 "Menu(메뉴)" 프롬프트를 재생하기 위해 TTS 서버에 "SPEAK" MRCP 요청을 보냅니다(Enter 1 or Say Refil / Enter 2 or Say medical).디버그 출력은 표시되지 않습니다.
TTS 서버가 진행 중, SPEAK-COMPLETE 메시지를 전송하고 프롬프트 재생을 완료합니다.디버그 출력은 표시되지 않습니다.
PSTN 발신자가 "1"을 입력하여 리필을 선택합니다.게이트웨이는 이 숫자를 RTP-NTE 이벤트로 ASR 서버에 보냅니다.
ASR 서버는 게이트웨이에 "RECOGNITION-COMPLETE" 메시지를 보내 요청된 이벤트 중 하나를 인식했음을 게이트웨이에 알립니다(이 경우 숫자 1).
그런 다음 VXML 서버는 호출자에게 여기에 처방전을 입력하도록 요청하는 다른 VXML 문서를 보냅니다.디버그 출력은 표시되지 않습니다.
게이트웨이는 TTS에 MRCP 메시지를 보내 프롬프트를 알립니다.디버그 출력은 표시되지 않지만 28-30단계와 유사합니다.
게이트웨이는 MRCP 메시지를 ASR로 보내 사용자가 말한 4자리 처방전 번호를 탐지합니다.디버그 출력은 표시되지 않지만 25-26단계와 유사합니다.
ASR은 4자리 처방전 번호를 인식하고 IOS VXML 게이트웨이로 "RECOGNITION-COMPLETE" MRCP 메시지를 전송합니다.
게이트웨이는 HTTP POST 요청을 전송하여 처방전 번호를 VXML 서버에 알립니다.디버그 출력은 표시되지 않지만 35단계와 유사합니다.
VXML 서버는 VXML 페이지를 보내 당겨받기 시간을 수집하고 처방전을 받을 준비가 되었음을 발신자에게 알립니다.게이트웨이는 TTS 및 ASR 서버와의 상호 작용을 통해 이러한 페이지를 실행합니다.디버그 출력은 표시되지 않습니다.
VXML 서버에서 보내는 최종 VXML 문서에는 <form>에 <exit\> 태그만 포함되어 있습니다.이렇게 하면 게이트웨이가 VXML 세션을 종료하게 됩니다.
*Jan 18 03:34:52.735: ISDN Se3/0:23 Q931: RX <- SETUP pd = 8 callref = 0x005A 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 *Jan 18 03:34:52.735: //-1/2AEE8C2A801C/ 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
*Jan 18 03:34:52.735: //-1/2AEE8C2A801C/ CCAPI/cc_api_call_setup_ind_common: Interface=0x664B4BA4, 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
*Jan 18 03:34:52.739: //127/2AEE8C2A801C/CCAPI /cc_process_call_setup_ind: >>>>CCAPI handed cid 127 with tag 1 to app "_ManagedAppProcess_Pharmacy" *Jan 18 03:34:52.739: //127/2AEE8C2A801C/CCAPI/ccCallSetupAck: Call Id=127
*Jan 18 03:34:52.739: ISDN Se3/0:23 Q931: TX -> CONNECT pd = 8 callref = 0x805A *Jan 18 03:34:52.739: //127/2AEE8C2A801C/CCAPI/ccCallHandoff: Silent=FALSE, Application=0x663106C4, Conference Id=0xFFFFFFFF *Jan 18 03:34:52.743: //127//VXML:/Open_CallHandoff:
*Jan 18 03:34:52.755: //127/2AEE8C2A801C/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>: *Jan 18 03:34:52.799: //127/2AEE8C2A801C/VXML :/vxml_expr_eval: *Jan 18 03:34:52.863: //127/2AEE8C2A801C/VXML :/vxml_jse_global_switch: switch to scope(application) <var>: namep=handoffstring expr=session.handoff_string *Jan 18 03:34:52.867: //127/2AEE8C2A801C/VXML :/vxml_expr_eval: expr=(var handoffstring=session. handoff_string) <var>: namep=application expr=getValue('APP') *Jan 18 03:34:52.867: //127/2AEE8C2A801C/VXML :/vxml_expr_eval: expr=(var application=getValue('APP')) <var>: namep=port expr=getValue('PORT') *Jan 18 03:34:52.867: //127/2AEE8C2A801C/VXML :/vxml_expr_eval: expr=(var port=getValue('PORT')) <var>: namep=callid expr=getValue('CALLID') *Jan 18 03:34:52.867: //127/2AEE8C2A801C/VXML :/vxml_expr_eval: expr=(var callid=getValue('CALLID')) <var>: namep=servername expr=getValue('PRIMARY') *Jan 18 03:34:52.867: //127/2AEE8C2A801C/VXML :/vxml_expr_eval: expr=(var servername=getValue('PRIMARY')) <var>: namep=var1 expr=getValue('var1') *Jan 18 03:34:52.867: //127/2AEE8C2A801C/VXML :/vxml_expr_eval: expr=(var var1=getValue('var1')) <var>: namep=var2 expr=getValue('var2') *Jan 18 03:34:52.867: //127/2AEE8C2A801C/VXML :/vxml_expr_eval: expr=(var var2=getValue('var2')) <var>: namep=var3 expr=getValue('var3') *Jan 18 03:34:52.867: //127/2AEE8C2A801C/VXML :/vxml_expr_eval: expr=(var var3=getValue('var3')) <var>: namep=var4 expr=getValue('var4') *Jan 18 03:34:52.867: //127/2AEE8C2A801C/VXML :/vxml_expr_eval: expr=(var var4=getValue('var4')) <var>: namep=var5 expr=getValue('var5') *Jan 18 03:34:52.867: //127/2AEE8C2A801C/VXML :/vxml_expr_eval: expr=(var var5=getValue('var5')) <var>: namep=status expr=getValue('status') *Jan 18 03:34:52.867: //127/2AEE8C2A801C/VXML :/vxml_expr_eval: expr=(var status=getValue('status')) <var>: namep=prevapp expr=getValue('prevapp') *Jan 18 03:34:52.871: //127/2AEE8C2A801C/VXML :/vxml_expr_eval: expr=(var prevapp=getValue('prevapp')) <var>: namep=survive expr=getValue('survive') *Jan 18 03:34:52.871: //127/2AEE8C2A801C/VXML :/vxml_expr_eval: expr=(var survive=getValue('survive')) <var>: namep=handoffExit
*Jan 18 03:34:52.875: //127//HTTPC:/httpc_write_stream: Client write buffer fd(3): GET /CVP/Server?application= GoodPrescriptionRefillApp7&callid= 2AEE8C2A-0AFB11D6-801C0013- 803E8C8E&session.connection.remote.uri=555 5&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, tex t/html, audio/basic, audio/wav, multipart/form-data, application/octet-stream User-Agent: Cisco-IOS-C5400/12.4
이 응답의 메시지 본문에 VXML 문서(1)가 있습니다. VXML 문서는 Media Server에 있는 Welcome-1.wav라는 Gateway play 미디어 파일을 알려줍니다.
*Jan 18 03:34:52.883: processing server rsp msg: msg(67CA63A8) URL:http://172.18.110.75:7000/CVP/ Server?application=GoodPrescription RefillApp7&callid=2AEE8C2A-0AFB11D6-801C0013 -803E8C8E&session.connection. remote.uri=5555&session.connection.local. uri=5555, fd(3): *Jan 18 03:34:52.883: Request msg: GET /CVP/Server?application= GoodPrescriptionRefillApp7&callid= 2AEE8C2A-0AFB11D6-801C0013-803E8C8 E&session.connection.remote. uri=5555&session .connection.local.uri=5555 HTTP/1.1 *Jan 18 03:34:52.883: Message Response Code: 200 *Jan 18 03:34:52.883: Message Rsp Decoded Headers: *Jan 18 03:34:52.883: Date:Mon, 30 Apr 2007 16:58:39 GMT *Jan 18 03:34:52.883: Content-Type:text/xml; charset=ISO-8859-1 *Jan 18 03:34:52.883: Connection:close *Jan 18 03:34:52.883: Set-Cookie:JSESSIONID= BBCE0F948ADFDB720497F587A7997538; Path=/CVP *Jan 18 03:34:52.883: headers: *Jan 18 03:34:52.883: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Set-Cookie: JSESSIONID=BBCE0F948ADF DB720497F587A7997538; Path=/CVP Content-Type: text/xml;charset=ISO-8859-1 Date: Mon, 30 Apr 2007 16:58:39 GMT Connection: close *Jan 18 03:34:52.883: body: *Jan 18 03:34:52.883: <?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.getEla psedTime(audium_element_start_time_millisecs)" /> <submit next="/CVP/Server" method="post" namelist=" audium_vxmlLog" /> </block> </form> </vxml>
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, tex t/html, audio/basic, audio/wav, multipart/form-data, application/octet-stream User-Agent: Cisco-IOS-C5400/12.4
*Jan 18 03:34:55.647: //127//HTTPC:/httpc_socket_read: *Jan 18 03:34:55.647: read data from the socket 3 : first 400 bytes of data: HTTP/1.1 200 OK Content-Length: 26450 Content-Type: audio/wav Last-Modified: Mon, 30 Apr 2007 15:36:51 GMT Accept-Ranges: bytes ETag: "e0c1445f3d8bc71:2d6" Server: Microsoft-IIS/6.0 Date: Mon, 30 Apr 2007 16:58:42 GMT Connection: close RIFFJg(Unprintable char...) 0057415645666D7420120001010401 F00401F00108000666163744000176700 64617461176700FFFFFF807 FFFFFFF80FFFFFF80F (other hex information not shown).
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=BBCE0F948 ADFDB720497F587A7997538; $Path=/CVP Connection: close Accept: text/vxml, text/x-vxml, application/vxml, application/x-vxml, application/voicexml, application/x-voicexml, text/plain, tex t/html, audio/basic, audio/wav, multipart/form-data, application/octet-stream User-Agent: Cisco-IOS-C5400/12.4
메시지 본문에 VXML 문서(2)가 있습니다. VXML 문서는 게이트웨이에 "Audium 약국에 연락해 주셔서 감사합니다"라는 메시지를 전달합니다. 이 프롬프트는 Text to Speech Server에서 합성해야 합니다.
*Jan 18 03:34:55.651: processing server rsp msg: msg(67CA6960)URL: http://172.18.110.75: 7000/CVP/Server, fd(4): *Jan 18 03:34:55.651: Request msg: POST /CVP/Server HTTP/1.1 *Jan 18 03:34:55.651: Message Response Code: 200 *Jan 18 03:34:55.651: Message Rsp Decoded Headers: *Jan 18 03:34:55.651: Date:Mon, 30 Apr 2007 16:58:42 GMT *Jan 18 03:34:55.651: Content-Type:text/xml; charset=ISO-8859-1 *Jan 18 03:34:55.651: Connection:close *Jan 18 03:34:55.651: headers: *Jan 18 03:34:55.651: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/xml;charset=ISO-8859-1 Date: Mon, 30 Apr 2007 16:58:42 GMT Connection: close *Jan 18 03:34:55.655: body: *Jan 18 03:34:55.655: <?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"> Thank you for calling Audium pharmacy. </prompt> <assign name="audium_vxmlLog" expr= "audium_vxmlLog + '|||audio_group$$$' + 'initial_audio_group' + '^^^' + application.getEla psedTime(audium_element_start_time_millisecs)" /> <submit next="/CVP/Server" method="post" namelist=" audium_vxmlLog" /> </block> </form> </vxml>
*Jan 18 03:34:55.667: //127//HTTPC:/httpc_write_stream: Client write buffer fd(4): 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= BBCE0F948ADFDB720497F587A7997538; $Path=/CVP Connection: close Accept: text/vxml, text/x-vxml, application/vxml, application/x-vxml, application/voicexml, application/x-voicexml, text/plain, tex t/html, audio/basic, audio/wav, multipart/form-data, application/octet-stream User-Agent: Cisco-IOS-C5400/12.4
메시지 본문에 VXML 문서(3)가 포함되어 있습니다. 이 VXML 문서는 발신자에게 1을 입력하거나 리필을 말하거나 2를 입력하거나 약사를 말하도록 지시하는 메뉴 프롬프트를 정의합니다.프롬프트는 Text-to-Speech Server에 의해 합성됩니다.입력(음성/DTMF)은 자동 음성 인식기로 인식됩니다.
*Jan 18 03:34:57.499: processing server rsp msg: msg(67CA6B48)URL: http://172.18.110.75:7000/CVP/Server, fd(4): *Jan 18 03:34:57.499: Request msg: POST /CVP/Server HTTP/1.1 *Jan 18 03:34:57.499: Message Response Code: 200 *Jan 18 03:34:57.499: Message Rsp Decoded Headers: *Jan 18 03:34:57.499: Date:Mon, 30 Apr 2007 16:58:42 GMT *Jan 18 03:34:57.499: Content-Type:text/xml;charset=ISO-8859-1 *Jan 18 03:34:57.499: Connection:close *Jan 18 03:34:57.499: headers: *Jan 18 03:34:57.499: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/xml;charset=ISO-8859-1 Date: Mon, 30 Apr 2007 16:58:42 GMT Connection: close *Jan 18 03:34:57.499: body: *Jan 18 03:34:57.499: ... Buffer too large - truncated to (4096) len. *Jan 18 03:34:57.499: <?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.getElapsedTime (audium_element_start_time_millisecs)" /> <goto nextitem="choice_fld" /> </block> <field name="choice_fld" modal="false"> <property name="inputmodes" value="dtmf voice" /> <prompt bargein="true">Say refills or press 1. Or. Say pharmacist or press 2.</prompt> <catch event="nomatch"> <prompt bargein="true">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> <option value="refills" dtmf="1"> prescription</option> <option value="refills">refills</option> <option value="refills"> prescription refills</option> <option value="refills"> refill my prescription</option> <option value="refills"> I want to refill my prescription</option> <option value="refills"> refills please</option> <option value="Pharmacist" dtmf="2">Pharmacist</option> <option value="Pharmacist"> I want to speak to a pharmacist</option> <option value="Pharmacist"> pharmacist please</option> <filled> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||utterance$$$' + choice_fld$. utterance + '^^^' + application.getElapsedTime (audium_element_start_time_millisecs)" /> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||inputmode$$$' + choice_fld$. inputmode + '^^^' + application.getElapsedTime (audium_element_start_time_millisecs)" /> <assign name="audium_vxmlLog" expr="audium_vxmlLog + '|||interpretation$$$' + choice_fld + '^^^' + application.getElapsedTim (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" /> <submit next="/CVP/Server" method="post" namelist=" audium_vxmlLog confidence choice_fld" /> </filled> </field> </form> </vxml>
그런 다음 게이트웨이가 ASR 서버와의 세션을 설정하면 ASR 서버로 이 그래마들을 보냅니다.
*Jan 18 03:34:57.523: //127//AFW_:/vapp_asr_change_server: asr_server=sip:asr@172.18.110.76 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar_id=session:option485@field.grammar *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: xml_lang=en-us *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: encoding_name=UTF-8 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: remoteupdate=0 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?> <grammar version="1.0" xm lns="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public"> prescription</rule></grammar> *Jan 18 03:34:57.523: //-1//MRCP:/mrcp_get_ev: ****>Caller PC=0x61BE1F94, Count=339, Event=0x63ACCCF0 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar_id=session:option486@field.grammar *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: encoding_name=UTF-8 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: remoteupdate=0 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?> <grammar version="1.0" xm lns="http://www.w3.org/2001/06/grammar" mode="dtmf" root= "root"><rule id="root" scope= "public">1</rule></grammar> *Jan 18 03:34:57.523: //-1//MRCP: /mrcp_get_ev: ****>Caller PC=0x61BE1F94, Count=340, Event=0x63ACCAE8 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar_id=session:option487@field.grammar *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: xml_lang=en-us *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: encoding_name=UTF-8 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: remoteupdate=0 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?> <grammar version="1.0" xm lns="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public"> refills</rule></grammar> *Jan 18 03:34:57.523: //-1//MRCP :/mrcp_get_ev: ****>Caller PC=0x61BE1F94, Count=341, Event=0x63ACBC88 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar_id=session:option488@field.grammar *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: xml_lang=en-us *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: encoding_name=UTF-8 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: remoteupdate=0 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?> <grammar version="1.0" xm lns="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public"> prescription refills</rule></grammar> *Jan 18 03:34:57.523: //-1//MRCP:/mrcp_get_ev: ****>Caller PC=0x61BE1F94, Count=342, Event=0x63ACBCB0 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar_id=session:option489@field.grammar *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: xml_lang=en-us *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: encoding_name=UTF-8 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: remoteupdate=0 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?> <grammar version="1.0" xm lns="http://www.w3.org/2001/06/grammar" xml: lang="en-us" root="root"> <rule id="root" scope="public"> refill my prescription</rule>< /grammar> *Jan 18 03:34:57.523: //-1//MRCP:/mrcp_get_ev: ****>Caller PC=0x61BE1F94, Count=343, Event=0x63ACBCD8 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar_id=session:option490@field.grammar *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: xml_lang=en-us *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: encoding_name=UTF-8 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: remoteupdate=0 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?> <grammar version="1.0" xm lns="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> *Jan 18 03:34:57.523: //-1//MRCP:/mrcp_get_ev: ****>Caller PC=0x61BE1F94, Count=344, Event=0x63ACBD00 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar_id=session:option491@field.grammar *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: xml_lang=en-us *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: encoding_name=UTF-8 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: remoteupdate=0 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?> <grammar version="1.0" xm lns="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public"> refills please</rule></grammar > *Jan 18 03:34:57.523: //-1//MRCP:/mrcp_get_ev: ****>Caller PC=0x61BE1F94, Count=345, Event=0x63ACBD28 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar_id=session:option492@field.grammar *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: xml_lang=en-us *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: encoding_name=UTF-8 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: remoteupdate=0 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?> <grammar version="1.0" xm lns="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public"> Pharmacist </rule></grammar> *Jan 18 03:34:57.523: //-1//MRCP:/mrcp_get_ev: ****>Caller PC=0x61BE1F94, Count=346, Event=0x63ACBB20 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar_id=session:option493@field.grammar *Jan 18 03:34:57.523: //127//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Jan 18 03:34:57.523: //127//AFW_:/vapp_asr_define_grammar: remoteupdate=0 *Jan 18 03:34:57.523: //127//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?> <grammar version="1.0" xm lns="http://www.w3.org/2001/06/grammar" mode="dtmf" root="root"> <rule id="root" scope= "public">2</rule></grammar> *Jan 18 03:34:57.523: //-1//MRCP:/mrcp_get_ev: ****>Caller PC=0x61BE1F94, Count=347, Event=0x63ACBD50 *Jan 18 03:34:57.523: //127//AFW_:/vapp_asr_define_grammar: *Jan 18 03:34:57.523: //127//AFW_:/vapp_asr_define_grammar: grammar_id=session: option494@field.grammar *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: xml_lang=en-us *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: encoding_name=UTF-8 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: remoteupdate=0 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?> <grammar version="1.0" xm lns="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> *Jan 18 03:34:57.523: //-1//MRCP:/mrcp_get_ev: ****>Caller PC=0x61BE1F94, Count=348, Event=0x63ACBFF8 *Jan 18 03:34:57.523: //127//AFW_ :/vapp_asr_define_grammar: *Jan 18 03:34:57.527: //127//AFW_ :/vapp_asr_define_grammar: grammar_id=session:option495@field.grammar *Jan 18 03:34:57.527: //127//AFW_ :/vapp_asr_define_grammar: xml_lang=en-us *Jan 18 03:34:57.527: //127//AFW_ :/vapp_asr_define_grammar: encoding_name=UTF-8 *Jan 18 03:34:57.527: //127//AFW_ :/vapp_asr_define_grammar: remoteupdate=0 *Jan 18 03:34:57.527: //127//AFW_ :/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?> <grammar version="1.0" xm lns="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public"> pharmacist please </rule></grammar> *Jan 18 03:34:57.527: //-1//MRCP:/mrcp_get_ev: ****>Caller PC=0x61BE1F94, Count=349, Event=0x63ACC048 *Jan 18 03:34:57.527: //127//AFW_ :/vapp_asr_define_grammar: *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: grammar_id=session:link496@document.grammar *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: xml_lang=en-us *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: remoteupdate=0 *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?> <grammar xmlns="http://ww w.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> <item>agent</item> <item>pharmacist</item> </one-of> </rule> </grammar> *Jan 18 03:34:57.527: //-1//MRCP:/mrcp_get_ev: ****>Caller PC=0x61BE1F94, Count=350, Event=0x63ACC098 *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: grammar_id=session:link497@document.grammar *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: xml_lang=en-us *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: remoteupdate=0 *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?> <grammar xmlns="http://ww w.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> <item>agent</item> <item>pharmacist</item> </one-of> </rule> </grammar> *Jan 18 03:34:57.527: //-1//MRCP:/mrcp_get_ev: ****>Caller PC=0x61BE1F94, Count=351, Event=0x63ACC0C0 *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: grammar_id=session:help@grammar *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: xml_lang=en-us *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: encoding_name=UTF-8 *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: remoteupdate=1 *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr_define_grammar: grammar=<?xml version="1.0" encoding="UTF-8"?> <grammar version="1.0" xm lns="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root"><rule id="root" scope="public"> help</rule></grammar> *Jan 18 03:34:57.527: //-1//MRCP:/mrcp_get_ev: ****>Caller PC=0x61BE1F94, Count=352, Event=0x63ACBEE0 *Jan 18 03:34:57.527: //127//AFW_:/vapp_asr: grammar_id=session:option485@field.grammar grammar_id=session:option486@field.grammar grammar_id=session:option487@field.grammar grammar_id=session:option488@field.grammar grammar_id=session:option489@field.grammar grammar_id=session:option490@field.grammar grammar_id=session:option491@field.grammar grammar_id=session:option492@field.grammar grammar_id=session:option493@field.grammar grammar_id=session:option494@field.grammar grammar_id=session:option495@field.grammar grammar_id=session:link496@document.grammar grammar_id=session:link497@document.grammar grammar_id=session:help@grammar
아웃바운드 다이얼 피어 6이 일치합니다.
*Jan 18 03:34:57.527: //-1/xxxxxxxxxxxx/CCAPI/ccCallSetupRequest: Destination Pattern=, Called Number=sip:tts@172.18.110.76, Digit Strip=FALSE *Jan 18 03:34:57.527: //-1/xxxxxxxxxxxx/CCAPI/ccCallSetupRequest: Calling Number=5555(TON=Unknown, NPI=Unknown, Screening=Not Screened, Presentation=Allowed), Called Number=sip:tts@172.18.110.76(TON=Unknown, NPI=ISDN), Redirect Number=, Display Info= Account Number=, Final Destination Flag=TRUE, Guid=2AEE8C2A-0AFB-11D6-801C-0013803E8C8E, Outgoing Dial-peer=6 *Jan 18 03:34:57.531: //-1/xxxxxxxxxxxx/CCAPI/cc _api_display_ie_subfields: ccCallSetupRequest: cisco-username= ----- ccCallInfo IE subfields ----- cisco-ani=5555 cisco-anitype=0 cisco-aniplan=0 cisco-anipi=0 cisco-anisi=0 dest=sip:tts@172.18.110.76 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 *Jan 18 03:34:57.531: //-1/xxxxxxxxxxxx/CCAPI/ ccIFCallSetupRequestPrivate: Interface=0x662CE538, Interface Type=3, Destination=, Mode=0x0, Call Params(Calling Number=5555, (Calling Name=)(TON=Unknown, NPI=Unknown, Screening=Not Screened, Presentation=Allowed), Called Number=sip:tts@172.18.110.76 (TON=Unknown, NPI=ISDN), Calling Translated=FALSE, Subscriber Type Str=RegularLine, FinalDestinationFlag=TRUE, Outgoing Dial-peer=6, Call Count On=FALSE, Source Trkgrp Route Label=, Target Trkgrp Route Label=, tg_label_flag=0, Application Call Id=)
INVITE 메시지의 SDP에는 오디오 스트림 및 MRCPv2 응용 프로그램(음성 구문 채널)에 대한 미디어 정보가 포함되어 있습니다.
*Jan 18 03:34:57.531: //-1/xxxxxxxxxxxx/SIP/Msg/ccsipDisplayMsg: Sent: INVITE sip:tts@172.18.110.76:5060 SIP/2.0 Via: SIP/2.0/UDP 14.1.16.25: 5060;branch=z9hG4bK931F1D Remote-Party-ID: <sip:5555@14.1.16.25>; party=calling;screen=no;privacy=off From: <sip:5555@14.1.16.25> ;tag=E54D43C-1EC4 To: sip:tts@172.18.110.76 Date: Fri, 18 Jan 2002 03:34:57 GMT Call-ID: 2DCA5BEF-AFB11D6-80D3DC30 -3585E95A@14.1.16.25 Supported: 100rel,timer, resource-priority,replaces Min-SE: 1800 Cisco-Guid: 720276522-184226262 -2149318675-2151582862 User-Agent: Cisco-SIPGateway/IOS-12.x Allow: INVITE, OPTIONS, BYE, CANCEL, ACK, PRACK, UPDATE, REFER, SUBSCRIBE, NOTIFY, INFO, REGISTER CSeq: 101 INVITE Max-Forwards: 70 Timestamp: 1011324897 Contact: <sip:5555@14.1.16.25:5060> Expires: 180 Allow-Events: telephone-event Content-Type: application/sdp Content-Disposition: session;handling=required Content-Length: 358 v=0 o=CiscoSystemsSIP-GW-UserAgent 6021 4611 IN IP4 14.1.16.25 s=SIP Call c=IN IP4 14.1.16.25 t=0 0 m=audio 16984 RTP/AVP 0 101 c=IN IP4 14.1.16.25 a=rtpmap:0 PCMU/8000 a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-16 a=ptime:20 a=recvonly a=mid:1 m=application 9 TCP/MRCPv2 a=setup:active a=connection:new a=resource:speechsynth a=cmid:1
아웃바운드 다이얼 피어 5가 일치합니다.
*Jan 18 03:34:57.531: //-1/xxxxxxxxxxxx/CCAPI/ccCallSetupRequest: Destination Pattern=, Called Number=sip:asr@172.18.110.76, Digit Strip=FALSE *Jan 18 03:34:57.531: //-1/xxxxxxxxxxxx/CCAPI/ccCallSetupRequest: Calling Number=5555(TON=Unknown, NPI=Unknown, Screening=Not Screened, Presentation=Allowed), Called Number=sip:asr@172.18.110.76 (TON=Unknown, NPI=ISDN), Redirect Number=, Display Info= Account Number=, Final Destination Flag=TRUE, Guid=2AEE8C2A-0AFB-11D6-801C-0013803E8C8E, Outgoing Dial-peer=5 *Jan 18 03:34:57.531: //-1/xxxxxxxxxxxx/CCAPI/cc_api _display_ie_subfields: ccCallSetupRequest: cisco-username= ----- ccCallInfo IE subfields ----- cisco-ani=5555 cisco-anitype=0 cisco-aniplan=0 cisco-anipi=0 cisco-anisi=0 dest=sip:asr@172.18.110.76 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 *Jan 18 03:34:57.535: //-1/xxxxxxxxxxxx/CCAPI /ccIFCallSetupRequestPrivate: Interface=0x662CE538, Interface Type=3, Destination=, Mode=0x0, Call Params(Calling Number=5555, (Calling Name=)(TON=Unknown, NPI=Unknown, Screening=Not Screened, Presentation=Allowed), Called Number=sip:asr@172.18.110.76 (TON=Unknown, NPI=ISDN), Calling Translated=FALSE, Subscriber Type Str=RegularLine, FinalDestinationFlag=TRUE, Outgoing Dial-peer=5, Call Count On=FALSE, Source Trkgrp Route Label=, Target Trkgrp Route Label=, tg_label_flag=0, Application Call Id=)
SDP에는 오디오 스트림 DTMF 릴레이에 대한 미디어 정보가 들어 있습니다.및 MRCPv2 애플리케이션(주문 복구 채널).
*Jan 18 03:34:57.535: //-1/xxxxxxxxxxxx/SIP/Msg/ccsipDisplayMsg: Sent: INVITE sip:asr@172.18.110.76:5060 SIP/2.0 Via: SIP/2.0/UDP 14.1.16.25:5060;branch=z9hG4bK94C0B Remote-Party-ID: <sip:5555@14.1.16.25>; party=calling;screen=no;privacy=off From: <sip:5555@14.1.16.25>;tag=E54D440-1CDB To: sip:asr@172.18.110.76 Date: Fri, 18 Jan 2002 03:34:57 GMT Call-ID: 2DCAF817-AFB11D6 -80D5DC30-3585E95A@14.1.16.25 Supported: 100rel,timer, resource-priority,replaces Min-SE: 1800 Cisco-Guid: 720276522-184226262- 2149318675-2151582862 User-Agent: Cisco-SIPGateway/IOS-12.x Allow: INVITE, OPTIONS, BYE, CANCEL, ACK, PRACK, UPDATE, REFER, SUBSCRIBE, NOTIFY, INFO, REGISTER CSeq: 101 INVITE Max-Forwards: 70 Timestamp: 1011324897 Contact: <sip:5555@14.1.16.25:5060> Expires: 180 Allow-Events: telephone-event Content-Type: application/sdp Content-Disposition: session;handling=required Content-Length: 358 v=0 o=CiscoSystemsSIP-GW-UserAgent 6805 2057 IN IP4 14.1.16.25 s=SIP Call c=IN IP4 14.1.16.25 t=0 0 m=audio 19994 RTP/AVP 0 101 c=IN IP4 14.1.16.25 a=rtpmap:0 PCMU/8000 a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-16 a=ptime:20 a=sendonly a=mid:1 m=application 9 TCP/MRCPv2 a=setup:active a=connection:new a=resource:speechrecog a=cmid:1
G711ulaw codec, 오디오 스트림에 대한 IP 주소 및 RTP 포트 번호.
이 RTP 스트림의 방향 특성은 "recvonly"입니다.
RTP-NTE 기반 DTMF 릴레이.
게이트웨이가 ASR 서버와의 MRCPv2 세션을 설정하는 데 사용할 TCP 포트 번호(51001)입니다.
*Jan 18 03:34:57.559: //-1/xxxxxxxxxxxx/SIP/Msg/ccsipDisplayMsg: Received: SIP/2.0 200 OK Via: SIP/2.0/UDP 14.1.16.25:5060; branch=z9hG4bK94C0B To: <sip:asr@172.18.110.76>;tag=a99d0500 From: <sip:5555@14.1.16.25>;tag=E54D440-1CDB Call-ID: 2DCAF817-AFB11D6-80D5DC30- 3585E95A@14.1.16.25 CSeq: 101 INVITE Contact: <sip:172.18.110.76:5060> Content-Type: application/sdp Content-Length: 342 v=0 o=MRCPv2Server 3386937590 3386937590 IN IP4 172.18.110.76 s=SIP Call c=IN IP4 172.18.110.76 t=3386937590 0 m=audio 10002 RTP/AVP 0 101 a=rtpmap:0 PCMU/8000 a=rtpmap:101 telephone-event/8000 a=recvonly m=application 51001 TCP/MRCPv2 a=connection:new a=setup:passive a=model:besteffort a=channel:000023B846361276@speechrecog
ASR에 대한 SIP 세션은 게이트웨이와 ASR 서버 간에 설정됩니다.
*Jan 18 03:34:57.563: //-1/xxxxxxxxxxxx/SIP/Msg/ccsipDisplayMsg: Sent: ACK sip:172.18.110.76:5060 SIP/2.0 Via: SIP/2.0/UDP 14.1.16.25:5060;branch=z9hG4bK9520FA From: <sip:5555@14.1.16.25>;tag=E54D440-1CDB To: <sip:asr@172.18.110.76>;tag=a99d0500 Date: Fri, 18 Jan 2002 03:34:57 GMT Call-ID: 2DCAF817-AFB11D6-80D5DC30-3585E95A@14.1.16.25 Max-Forwards: 70 CSeq: 101 ACK Allow-Events: telephone-event Content-Length: 0
여기에 하나의 요청만 표시됩니다.
MRCP/2.0 446 DEFINE-GRAMMAR 1 Channel-Identifier: 000023B846361276@speechrecog : Speech-Language: en-us Content-Base: http://172.18.110.75:7000/CVP/ : Content-Type: application/srgs+xml Content-Id: option485@field.grammar Content-Length: 193 : <?xml version="1.0" encoding="UTF-8"?> <grammar version="1.0" mlns="http://www.w3.org/2001/06/grammar" xml:lang="en-us" root="root" ><rule id="root" scope="public"> prescription</rule></grammar>
*Jan 18 03:34:57.587: //-1//MRCP:/hash_get: Table=mrcpv2_socket_connect_table, Key=0: MRCP/2.0 80 1 200 COMPLETE Channel-Identifier: 000023B846361276@speechrecog
SIP INVITE 메시지의 SDP는 다음을 지정합니다.
G711ulaw codec, 오디오 스트림에 대한 IP 주소 및 RTP 포트 번호.
이 RTP 스트림의 방향 특성은 "sendonly"입니다.
RTP-NTE 기반 DTMF 릴레이
게이트웨이가 TTS 서버와의 MRCPv2 세션을 설정하는 데 사용할 TCP 포트 번호(51000)
*Jan 18 03:34:57.591: //-1/xxxxxxxxxxxx/SIP/Msg/ccsipDisplayMsg: Received: SIP/2.0 200 OK Via: SIP/2.0/UDP 14.1.16.25:5060; branch=z9hG4bK931F1D To: <sip:tts@172.18.110.76>;tag=c1160600 From: <sip:5555@14.1.16.25>;tag=E54D43C-1EC4 Call-ID: 2DCA5BEF-AFB11D6-80D3DC30- 3585E95A@14.1.16.25 CSeq: 101 INVITE Contact: <sip:172.18.110.76:5060> Content-Type: application/sdp Content-Length: 342 v=0 o=MRCPv2Server 3386937590 3386937590 IN IP4 172.18.110.76 s=SIP Call c=IN IP4 172.18.110.76 t=3386937590 0 m=audio 10000 RTP/AVP 0 101 a=rtpmap:0 PCMU/8000 a=rtpmap:101 telephone-event/8000 a=sendonly m=application 51000 TCP/MRCPv2 a=connection:new a=setup:passive a=model:besteffort a=channel:000023EC46361276@speechsynth
Text-to-Speech에 대한 SIP 세션이 게이트웨이와 TTS 서버 간에 설정됩니다.
*Jan 18 03:34:57.595: //-1/xxxxxxxxxxxx/SIP/ Msg/ccsipDisplayMsg: Sent: ACK sip:172.18.110.76:5060 SIP/2.0 Via: SIP/2.0/UDP 14.1.16.25:5060; branch=z9hG4bK9626BC From: <sip:5555@14.1.16.25>;tag=E54D43C-1EC4 To: <sip:tts@172.18.110.76>;tag=c1160600 Date: Fri, 18 Jan 2002 03:34:57 GMT Call-ID: 2DCA5BEF-AFB11D6-80D3DC30 -3585E95A@14.1.16.25 Max-Forwards: 70 CSeq: 101 ACK Allow-Events: telephone-event Content-Length: 0
MRCP/2.0 987 RECOGNIZE 15 Channel-Identifier: 000023B846361276@speechrecog : Speech-Language: en-us Confidence-Threshold: 0.40 Sensitivity-Level: 0.50 Speed-Vs-Accuracy: 0.50 Cancel-If-Queue: false Dtmf-Interdigit-Timeout: 10000 Dtmf-Term-Timeout: 0 Dtmf-Term-Char: # No-Input-Timeout: 60000 N-Best-List-Length: 1 Logging-Tag: 127:127 Accept-Charset: charset: utf-8 Content-Base: http://172.18.110.75:7000/CVP/ Media-Type: audio/basic Start-Input-Timers: false : Content-Type: text/uri-list Content-Length: 453 : session:option485@field.grammar session:option486@field.grammar session:option487@field.grammar session:option488@field.grammar session:option489@field.grammar session:option490@field.grammar session:option491@field.grammar session:option492@field.grammar session:option493@field.grammar session:option494@field.grammar session:option495@field.grammar session:link496@document.grammar session:link497@document.grammar session:help@grammar
MRCP/2.0 84 15 200 IN-PROGRESS Channel-Identifier: 000023B846361276@speechrecog
캐시에 저장하고 발신자에게 프롬프트를 재생합니다.
*Jan 18 03:35:04.335: //127//HTTPC:/httpc_is_cached: HTTPC_FILE_IS_CACHED *Jan 18 03:35:04.335: //-1//HTTPC: /httpc_set_cache_revoke_cb: Registering revoke_callback(0x61CDD948) +pcontext(0x63A7AAA8) for cach ep(0x68734930) *Jan 18 03:35:04.335: //127//AFW_:/vapp_driver: evtID: 146 vapp record state: 0 *Jan 18 03:35:04.335: //127//AFW_:/vapp_play_done: evID=146 reason=17, protocol=5, status_code=0, dur=3291, rate=0 *Jan 18 03:35:04.335: //127/2AEE8C2A801C/VXML: /vxml_media_done:
MRCP/2.0 376 SPEAK 1 Channel-Identifier: 000023EC46361276@speechsynth : Kill-On-Barge-In: true Speech-Language: en-us Logging-Tag: 127:127 Content-Base: http://172.18.110.75:7000/CVP/ : Content-Type: application/ssml+xml Content-Length: 123 : <?xml version="1.0" encoding="UTF-8"?> <speak version="1.0" xml:lang="en-us"> Thank you for calling Audium pharmacy.</speak>
MRCP/2.0 83 1 200 IN-PROGRESS Channel-Identifier: 000023EC46361276@speechsynth
MRCP/2.0 141 SPEAK-COMPLETE 1 COMPLETE Channel-Identifier: 000023EC46361276@speechsynth Completion-Cause: 000 normal Speech-Marker: ""
게이트웨이는 이 숫자를 RTP-NTE 이벤트로 ASR 서버에 보냅니다.
*Jan 18 03:35:12.583: s=DSP d=VoIP payload 0x65 ssrc 0x15 sequence 0x1E9B timestamp 0x2FADCC60 *Jan 18 03:35:12.583: Pt:101 Evt:1 Pkt:03 00 00 <Snd>>> *Jan 18 03:35:12.587: s=DSP d=VoIP payload 0x65 ssrc 0x15 sequence 0x1E9C timestamp 0x2FADCC60 *Jan 18 03:35:12.587: Pt:101 Evt:1 Pkt:03 00 00 <Snd>>> *Jan 18 03:35:12.631: s=DSP d=VoIP payload 0x65 ssrc 0x15 sequence 0x1E9E timestamp 0x2FADCC60 *Jan 18 03:35:12.631: Pt:101 Evt:1 Pkt:03 01 90 <Snd>>> *Jan 18 03:35:12.683: s=DSP d=VoIP payload 0x65 ssrc 0x15 sequence 0x1E9F timestamp 0x2FADCC60 *Jan 18 03:35:12.683: Pt:101 Evt:1 Pkt:03 03 20 <Snd>>> *Jan 18 03:35:12.703: s=DSP d=VoIP payload 0x65 ssrc 0x15 sequence 0x1EA0 timestamp 0x2FADCC60 *Jan 18 03:35:12.703: Pt:101 Evt:1 Pkt:83 03 38 <Snd>>> *Jan 18 03:35:12.707: s=DSP d=VoIP payload 0x65 ssrc 0x15 sequence 0x1EA1 timestamp 0x2FADCC60 *Jan 18 03:35:12.707: Pt:101 Evt:1 Pkt:83 03 38 <Snd>>> *Jan 18 03:35:12.711: s=DSP d=VoIP payload 0x65 ssrc 0x15 sequence 0x1EA2 timestamp 0x2FADCC60 *Jan 18 03:35:12.711: Pt:101 Evt:1 Pkt:83 03 38 <Snd>>>
그러면 요청된 이벤트 중 하나를 인식했음을 게이트웨이에 알립니다(이 경우 숫자 1).
MRCP/2.0 513 RECOGNITION-COMPLETE 15 COMPLETE Channel-Identifier: 000023B846361276@speechrecog Proxy-Sync-Id: 0B82553000000027 Completion-Cause: 000 success Content-Type: application/nlsml+xml Content-Length: 292 <?xml version="1.0" encoding="UTF-8"?> <result grammar="session:option486@field.grammar"> <interpretation grammar= "session:option486@field.grammar" confidence="0.000000"> <instance> 1 </instance> <input mode="dtmf" confidence="1.000000"> 1 </input> </interpretation> </result>
이 알림을 받은 후 VXML 게이트웨이는 VXML 문서 (3)의 SUBMIT 태그에 지정된 대로 HTTP POST 요청을 보냅니다. 이 POST 요청은 PSTN 호출자가 숫자 1을 입력했음을 VXML 서버에 알립니다.
*Jan 18 03:35:12.863: //127/2AEE8C2A801C/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% 5E%5E4%7C%7C%7Cutterance$$$1%5E%5E%5E153 40%7C%7C%7Cinputmode $$$dtmf%5E%5E%5E15344%7C%7C%7C interpretation$$$refills%5E%5E%5E15344%7C %7C%7Cconfidence$$$0%5E%5E%5E15344&confidence= 0&choice_fld=refills len 258maxage -1 maxstale -1 *Jan 18 03:35:12.863: //127//AFW_:/vapp_bgpost: url=http://172.18.110.75:7000/CVP/Server; mime_type=application/x-www-form-urlencod ed; len=258; iov_base=audium_vxmlLog=%7C%7C%7Caudio_ group$$$initial_audio_group %5E%5E%5E4%7C%7C%7Cutterance $$$1%5E%5E%5E15340%7C%7C %7Cinputmode$$$dtmf%5E%5E%5E15344% 7C%7C%7Cinterpretation$$$refills %5E%5E%5E15344%7C%7C%7Cconfidence$$$0 %5E%5E%5E15344&confidence=0& choice_fld=refills *Jan 18 03:35:12.931: about to send data to the socket 3 : first 400 bytes of data: POST /CVP/Server HTTP/1.1 Host: 172.18.110.75:7000 Content-Length: 258 Content-Type: application/x-www-form-urlencoded Cookie: $Version=0; JSESSIONID= BBCE0F948ADFDB720497F587A7997538; $Path=/CVP Connection: close Accept: text/vxml, text/x-vxml, application/vxml, application/x-vxml, application/voicexml, application/x-voicexml, text/plain, tex t/html, audio/basic, audio/wav, multipart/form-dat
ASR은 IOS VXML 게이트웨이로 RECOGNITION-COMPLETE MRCP 메시지를 전송합니다.
MRCP/2.0 533 RECOGNITION-COMPLETE 21 COMPLETE Channel-Identifier: 000023B846361276@speechrecog Proxy-Sync-Id: 0B82553000000028 Completion-Cause: 000 success Content-Type: application/nlsml+xml Content-Length: 312 <?xml version="1.0" encoding="UTF-8"?> <result grammar= "session:field498@field.grammar"> <interpretation grammar= "session:field498@field.grammar" confidence="0.738968"> <instance> 1234 </instance> <input mode="speech" confidence="0.752155"> one two three four </input> </interpretation> </result> The final VXML document sent by the VXML server contains just the <exit\> tag in the <form> This tells the Gateway to terminate the VXML session
이렇게 하면 게이트웨이가 VXML 세션을 종료하게 됩니다.
*Jan 18 03:36:07.159: processing server rsp msg: msg(67CA85F8)URL: http://172.18.110.75:7000/CVP/Server, fd(3): *Jan 18 03:36:07.159: Request msg: POST /CVP/Server HTTP/1.1 *Jan 18 03:36:07.159: Message Response Code: 200 *Jan 18 03:36:07.159: Message Rsp Decoded Headers: *Jan 18 03:36:07.159: D ate:Mon, 30 Apr 2007 16:59:53 GMT *Jan 18 03:36:07.159: Content-Type:text/xml;charset=ISO-8859-1 *Jan 18 03:36:07.159: Connection:close *Jan 18 03:36:07.159: Set-Cookie: JSESSIONID=NULL; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/CVP *Jan 18 03:36:07.159: headers: *Jan 18 03:36:07.159: 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: Mon, 30 Apr 2007 16:59:53 GMT Connection: close *Jan 18 03:36:07.159: body: *Jan 18 03:36:07.159: <?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>
*Jan 18 03:36:14.155: //127/2AEE8C2A801C/VXML:/vxml_vapp_terminate: vapp_status=0 ref_count 0 *Jan 18 03:36:14.155: //127//AFW_:/vapp_terminate: *Jan 18 03:36:14.155: //127//AFW_ :/vapp_session_exit_event_name: Exit Event vxml.session.complete *Jan 18 03:36:14.155: //127//AFW_:/AFW_M_VxmlModule_Terminate: *Jan 18 03:36:14.155: //131/2AEE8C2A801C/CCAPI/ccCallDisconnect: Cause Value=16, Tag=0x0, Call Entry (Previous Disconnect Cause=0, Disconnect Cause=0) *Jan 18 03:36:14.155: //131/2AEE8C2A801C/CCAPI/ccCallDisconnect: Cause Value=16, Call Entry(Responsed=TRUE, Cause Value=16)
*Jan 18 03:36:14.159: //-1/xxxxxxxxxxxx/SIP/Msg/ccsipDisplayMsg: Sent: BYE sip:172.18.110.76:5060 SIP/2.0 Via: SIP/2.0/UDP 14.1.16.25: 5060;branch=z9hG4bK971131 From: <sip:5555@14.1.16.25>;tag=E54D440-1CDB To: <sip:asr@172.18.110.76>;tag=a99d0500 Date: Fri, 18 Jan 2002 03:34:57 GMT Call-ID: 2DCAF817-AFB11D6-80D5DC30- 3585E95A@14.1.16.25 User-Agent: Cisco-SIPGateway/IOS-12.x Max-Forwards: 70 Timestamp: 1011324974 CSeq: 102 BYE Reason: Q.850;cause=16 Content-Length: 0 *Jan 18 03:36:14.607: //-1/xxxxxxxxxxxx/SIP/Msg/ccsipDisplayMsg: Received: SIP/2.0 200 OK Via: SIP/2.0/UDP 14.1.16.25: 5060;branch=z9hG4bK971131 To: <sip:asr@172.18.110.76>;tag=a99d0500 From: <sip:5555@14.1.16.25>;tag=E54D440-1CDB Call-ID: 2DCAF817-AFB11D6-80D5DC30- 3585E95A@14.1.16.25 CSeq: 102 BYE Contact: <sip:172.18.110.76:5060> Content-Length: 0
*Jan 18 03:36:14.159: //-1/xxxxxxxxxxxx/SIP/Msg/ccsipDisplayMsg: Sent: BYE sip:172.18.110.76:5060 SIP/2.0 Via: SIP/2.0/UDP 14.1.16.25:5060;branch=z9hG4bK981487 From: <sip:5555@14.1.16.25>;tag=E54D43C-1EC4 To: <sip:tts@172.18.110.76>;tag=c1160600 Date: Fri, 18 Jan 2002 03:34:57 GMT Call-ID: 2DCA5BEF-AFB11D6- 80D3DC30-3585E95A@14.1.16.25 User-Agent: Cisco-SIPGateway/IOS-12.x Max-Forwards: 70 Timestamp: 1011324974 CSeq: 102 BYE Reason: Q.850;cause=16 Content-Length: 0 *Jan 18 03:36:14.215: //-1/xxxxxxxxxxxx/SIP/Msg/ccsipDisplayMsg: Received: SIP/2.0 200 OK Via: SIP/2.0/UDP 14.1.16.25:5060;branch=z9hG4bK981487 To: <sip:tts@172.18.110.76>;tag=c1160600 From: <sip:5555@14.1.16.25>;tag=E54D43C-1EC4 Call-ID: 2DCA5BEF-AFB11D6-80D3DC30-3585E95A@14.1.16.25 CSeq: 102 BYE Contact: <sip:172.18.110.76:5060> Content-Length: 0
*Jan 18 03:36:14.611: ISDN Se3/0:23 Q931: TX -> DISCONNECT pd = 8 callref = 0x805A Cause i = 0x8090 - Normal call clearing *Jan 18 03:36:14.623: ISDN Se3/0:23 Q931: RX <- RELEASE pd = 8 callref = 0x005A *Jan 18 03:36:14.623: ISDN Se3/0:23 Q931: TX -> RELEASE_COMP pd = 8 callref = 0x805A