VXML (Voice Extensible Markup Language) è uno standard definito dal World Wide Web Consortium (W3C). È progettato per creare dialoghi audio che forniscono sintesi vocale, riconoscimento delle parole pronunciate, riconoscimento delle cifre DTMF e registrazione dell'audio parlato. Il server e i client VXML utilizzano il noto protocollo HTTP per scambiare documenti/pagine VXML.
Cisco Voice Portal (CVP) offre applicazioni IVR (Voice Response) intelligenti e interattive a cui è possibile accedere telefonicamente. Esistono tre tipi di distribuzione CVP:
Servizio autonomo
Controllo delle chiamate CVP
Coda di chiamata e trasferimento
La sintesi vocale e il riconoscimento delle parole pronunciate / funzionalità delle cifre DTMF sono fornite da TTS (Text-to-Speech) e ASR (Automatic Speech Recognition Server). IOS® VXML Gateway comunica con il server TTS / ASR attraverso il protocollo MRCP (Media Resource Control Protocol). MRCP è disponibile in due versioni: MRCPv1 (MRCP over RTSP) e MRCPv2 (MRCP over SIP).
Questo documento descrive il flusso di chiamate da un gateway XML voce IOS a una chiamata CVP in una distribuzione di servizi standalone che utilizza server MRCPv2 TTS / ASR. Un'applicazione farmaceutica di esempio è stata distribuita nel server VXML CVP.
Nessun requisito specifico previsto per questo documento.
Le informazioni fornite in questo documento si basano sulle seguenti versioni software e hardware:
IOS VXML Gateway: Cisco AS5400XM, IOS 12.4(15)T1
Server VXML: CVP 4.0
Server ASR/TTS: Loquendo Speech Suite 7.0
Le informazioni discusse in questo documento fanno riferimento a dispositivi usati in uno specifico ambiente di emulazione. Su tutti i dispositivi menzionati nel documento la configurazione è stata ripristinata ai valori predefiniti. Se la rete è operativa, valutare attentamente eventuali conseguenze derivanti dall'uso dei comandi.
Per ulteriori informazioni sulle convenzioni usate, consultare il documento Cisco sulle convenzioni nei suggerimenti tecnici.
In questa sezione vengono presentate le informazioni necessarie per configurare le funzionalità descritte più avanti nel documento.
Nota: per ulteriori informazioni sui comandi menzionati in questa sezione, usare lo strumento di ricerca dei comandi (solo utenti registrati).
Nel documento viene usata questa impostazione di rete:
Nel documento vengono usate queste configurazioni:
Configurazione di VXML Gateway |
---|
!--- 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 |
In questa sezione viene descritto il flusso di chiamate risultante da questo esempio di configurazione.
Una chiamata ISDN arriva al gateway PSTN/VXML in T1 PRI 3/0.
Il gateway IOS corrisponde al dial-peer POTS 1 come dial-peer in ingresso per questa chiamata.
Il gateway IOS consegna il controllo delle chiamate al servizio Pharmacy associato al dial-peer 1.
Lo script VXML/TCL CVP associato al servizio Pharmacy invia una richiesta HTTP GET al server VXML.
Il server VXML restituisce 200 OK come risposta. La risposta contiene un documento/pagina VXML.
Il gateway IOS esegue il documento VXML.
Se il documento VXML specifica un URL per un prompt audio, il gateway IOS scarica il file audio e riproduce il prompt.
Se nel documento VXML viene specificato un testo per un prompt audio, il gateway IOS stabilisce una sessione SIP con tts@172.18.110.76 (server TTS) utilizzando il dial-peer 5. Dopo aver stabilito la sessione SIP, apre una connessione TCP al server TTS utilizzando il numero di porta TCP fornito nella risposta SDP di 200 OK dell'INVITE SIP. Questa connessione TCP viene utilizzata per lo scambio di messaggi MRCP, ad esempio TALK, TALK-COMPLETE tra il gateway IOS e il server TTS.
Il server TTS invia il flusso audio RTP G.711ulaw all'indirizzo IP e al numero di porta UDP forniti dal gateway nel SDP di SIP INVITE.
Se nel documento VXML viene specificato il gateway in modo che riconosca le cifre DTMF e/o le parole pronunciate, il gateway IOS stabilisce una sessione SIP con asr@172.18.110.76 (server ASR) con dial-peer 6. Dopo aver stabilito la sessione SIP, apre una connessione TCP al server ASR utilizzando il numero di porta TCP fornito nel SDP di 200 OK risposta di SIP INVITE. Questa connessione TCP viene utilizzata per scambiare messaggi MRCP come DEFINE GRAMMAR, COMPLETE, RECOGNITION e RECOGNITION-COMPLETE tra il gateway IOS e il server ASR.
Il gateway VXML di IOS invia il flusso audio RTP G.711ulaw all'indirizzo IP e al numero di porta UDP forniti dall'ASR nel SDP della risposta SIP 200 OK. IOS VXML Gateway invia le cifre immesse dall'utente PSTN come eventi RTP-NTE al server ASR.
Dopo l'esecuzione del documento VXML, il gateway invia una richiesta POST HTTP (con un set di parametri) come specificato nel tag <submit> del documento/pagina VXML.
I passaggi da 6 a 10 si verificano per ogni documento VXML inviato dal server.
Quando l'applicazione VXML completa il servizio fornito al chiamante, invia un documento VXML con un semplice tag <exit/> all'interno dell'elemento <form>.
Il gateway IOS disconnette le sessioni MRCPv2 stabilite con i server TTS e ASR.
Il gateway IOS disconnette la chiamata sul lato ISDN.
Per verificare che la configurazione funzioni correttamente, consultare questa sezione.
Lo strumento Output Interpreter (solo utenti registrati) (OIT) supporta alcuni comandi show. Usare l'OIT per visualizzare un'analisi dell'output del comando show.
Mostra descrizione chiamata attiva
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
Mostra descrizione breve chiamata attiva
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
Mostra dettagli attivi sessione client 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
Mostra connessioni 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
Mostra cache client 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
Le informazioni contenute in questa sezione permettono di risolvere i problemi relativi alla configurazione.
Configurare il gateway IOS in modo che registri i debug nel relativo buffer di registrazione e disabilitare la "console di registrazione".
Nota: consultare le informazioni importanti sui comandi di debug prima di usare i comandi di debug.
Nota: questi sono i comandi usati per configurare il gateway in modo da memorizzare i debug nel buffer di registrazione del gateway:
timestamp servizio debug datetime msec
sequenza di servizio
nessuna console di registrazione
registrazione con buffer 500000 debug
cancella registro
Di seguito sono riportati i comandi di debug utilizzati per risolvere i problemi relativi alla configurazione:
debug isdn q931
debug voip ccapi inout
debug voip application vxml predefinito
debug voip application vxml dump
messaggio debug ccsip
dettagli mrcp di debug
debug http client all
debug voip rtp session note named-event
In questa sezione vengono forniti gli output di debug per questo flusso di chiamate di esempio:
Il gateway avvia l'esecuzione dello script VoiceXML CVPSelfServiceBootstrap.vxml.
Il gateway invia una richiesta GET HTTP al server multimediale per scaricare il file Welcome-1.wav.
Il gateway invia una richiesta POST HTTP come definito nell'opzione Invia del documento VXML (2).
Il codec G711ulaw, l'indirizzo IP e i numeri delle porte RTP per lo streaming audio
Attributo di direzione del flusso RTP: "recvonly"
Il relay DTMF basato su RTP-NTE
Il numero della porta TCP (51001) che il gateway deve usare per stabilire una sessione MRCPv2 con il server ASR
Il gateway riceve una risposta 200 COMPLETE per la richiesta DEFINE-GRAMMAR.
Il codec G711ulaw, l'indirizzo IP e i numeri delle porte RTP per lo streaming audio
Attributo di direzione del flusso RTP:"sendonly"
Il relay DTMF basato su RTP-NTE
Il numero della porta TCP (5100) che il gateway deve usare per stabilire una sessione MRCPv2 con il server TTS
Il server ASR invia una risposta "IN CORSO" (per la richiesta RECOGNITION) al gateway.
Il server TTS invia una risposta "IN CORSO" alla richiesta SPEAKER.
Gateway invia una richiesta MRCP "SPEAK" al server TTS per riprodurre il prompt "Menu" (Immettere 1 o Pronunciare Rif/Immettere 2 o Pronunciare il farmacista). (Gli output del comando debug non vengono visualizzati).
Il server TTS invia un messaggio IN-PROGRESS, TALK-COMPLETE e termina la riproduzione del prompt. (Gli output del comando debug non vengono visualizzati).
Il server VXML invia quindi un altro documento VXML che chiede al chiamante di immettere qui la prescrizione. (Gli output del comando debug non vengono visualizzati).
Il gateway invia il messaggio MRCP al TTS per comunicare i prompt. (Gli output del comando debug non vengono mostrati, ma sono simili ai passaggi 28-30).
Gateway invia il messaggio MRCP all'ASR per rilevare il numero di prescrizione di 4 cifre parlato dall'utente. (Gli output del comando debug non vengono mostrati, ma sono simili alle fasi 25-26).
Il gateway comunica il numero di prescrizione al server VXML inviando una richiesta POST HTTP. (Gli output del comando debug non vengono visualizzati, ma sono simili a quelli del passaggio 35.)
Il server VXML invia pagine VXML per raccogliere il tempo di prelievo e informare il chiamante che la prescrizione sarà pronta per il prelievo. Il gateway esegue queste pagine tramite interazioni con il server TTS e ASR. (Gli output del comando debug non vengono visualizzati).
Il gateway disconnette la sessione SIP stabilita con il server ASR.
Il gateway disconnette la sessione SIP stabilita con il server TTS.
*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
Il corpo del messaggio di questa risposta contiene un documento VXML (1). Il documento VXML indica al file multimediale di riproduzione del gateway denominato Welcome-1.wav situato in un server multimediale.
*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
Il corpo del messaggio contiene il documento VXML (2). Il documento VXML dice al Gateway di giocare "Grazie per aver chiamato la farmacia Audium." Si noti che questo prompt deve essere sintetizzato da un server di sintesi vocale.
*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
Il corpo del messaggio contiene il documento VXML (3). In questo documento VXML viene definito un prompt di menu che indica al chiamante di immettere 1, di pronunciare Refill o di immettere 2 o di dire Pharmacist. I prompt vengono sintetizzati da un server di sintesi vocale. Gli ingressi (parlato/DTMF) vengono riconosciuti con un riconoscimento vocale automatico.
*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>
Queste grammatiche vengono quindi inviate al server ASR quando il gateway stabilisce una sessione con il server 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
Il dial-peer in uscita 6 corrisponde.
*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=)
L'SDP del messaggio INVITE contiene informazioni multimediali per il flusso audio e l'applicazione MRCPv2 (canale speechsynth).
*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
Il dial-peer in uscita 5 corrisponde.
*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=)
L'SDP contiene le informazioni multimediali per il flusso audio, il relè DTMF. e MRCPv2 (canale speechrecog).
*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, indirizzo IP e numeri di porta RTP per lo streaming audio.
L'attributo di direzione del flusso RTP è "recvonly".
Relay DTMF basato su RTP-NTE.
Numero di porta TCP (51001) che il gateway deve usare per stabilire una sessione MRCPv2 con il server ASR.
*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
La sessione SIP per l'ASR viene stabilita tra il gateway e il server 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
Di seguito è riportata una sola richiesta.
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
Il SDP del messaggio SIP INVITE specifica quanto segue:
G711ulaw codec, indirizzo IP e numeri di porta RTP per lo streaming audio.
L'attributo di direzione di questo flusso RTP è "sendonly".
Relay DTMF basato su RTP-NTE
Numero di porta TCP (5100) che il gateway deve usare per stabilire una sessione MRCPv2 con il server TTS.
*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
La sessione SIP per la sintesi vocale viene stabilita tra il gateway e il server 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
La memorizza nella cache e riproduce il prompt al chiamante.
*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: ""
Il gateway invia questa cifra come evento RTP-NTE al server 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>>>
Il gateway riceverà notifica del riconoscimento di uno degli eventi richiesti (in questo caso, cifra 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>
Dopo la ricezione di questa notifica, VXML Gateway invia una richiesta POST HTTP come specificato nel tag SUBMIT del documento VXML (3). Questa richiesta POST informa il server VXML che la cifra 1 è stata immessa dal chiamante PSTN.
*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
L'ASR invia un messaggio MRCP RECOGNITION-COMPLETE al gateway VXML di IOS.
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
In questo modo il gateway termina la sessione 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