Author Message
MarceloPariggi [Avatar]

Joined: Nov 15, 2013
Messages: 24
Offline
Record node - NoInput - POUND is not detected as terminating char

Hi all,

I was trying to make it work, but I could not find the right way

OD version : 06.00.13.01
Java version: Java 7 (Update 67)

The current behavior:
1- reach the recording node
2- listen the initial prompt, and after the beep, just press #
3- the application replays the initial prompt (step 2)

The expected behavior is
1- reach the recording node
2- listen the prompt, and after the beep, just press #
3- then, the application should continue through the NO-INPUT path

According with the properties of the RECORD node:
DTMF Terminate: If true recording terminates on any DTMF tone, if false only active DTMF grammars will terminate recording

We tried changing the "DTMF Terminate" to true, false... setting "Modal" to true, false... adding a grammar which allows only # ... but didn't work.

What should be the configuration to make this work as the expected behavior?


Thanks you!

Regards,
Marcelo.
NeilGoldsmith
Joined: Nov 6, 2013
Messages: 902
Offline
Can you post your application log showing VXML output as well as the session slot log showing the AVB log from the MPP? You should set AVB logging to finest.

It's easiest to reset logging on the MPP, place one call and gather the log from that channel.

MarceloPariggi [Avatar]

Joined: Nov 15, 2013
Messages: 24
Offline
Hi Neil,

This is the AAEP application:
MPariggi_SurveyAssit ... VoiceXML ... http://135.105.98.131:9090/SurveyMain/Start ... 33061

I made a call and here are the logs. (attached)

Description about the call:
The initial prompt (on this recording node) is a TTS.
After the beep, I pressed the # key about 4-5 times and all times the initial prompt was replayed.

Please, let me know if they are the correct ones.
Filename logs.zip [Disk] Download
NeilGoldsmith
Joined: Nov 6, 2013
Messages: 902
Offline
Thanks for the logs. I'm having the browser folks look at it and will get back to you today with the response.
MarcosVergani
Joined: Nov 15, 2013
Messages: 17
Offline
Hi Neil,

Did you have any news from the browser team?


Thanks!
Marcos
NeilGoldsmith
Joined: Nov 6, 2013
Messages: 902
Offline
Yes, in the case you press the DTMF key to exit the recording without anything being recorded, it will not generate a no input and will not store a recording. This matches what is in the VXML spec:

If no audio is collected during execution of <record>, then the record variable remains unfilled (note). This can occur, for example, when DTMF or speech input is received during prompt playback or before the timeout interval expires. In particular, if no audio is collected before the user terminates recording with DTMF input matching a local DTMF grammar (or when the dtmfterm attribute is set to true), then the record variable is not filled (so shadow variables are not set), and the FIA applies as normal without a noinput event being thrown. However, information about the input may be available in these situations via application.lastresult$ as described in Section 5.1.5.

There is some VXML provided by AVB folks to get around the issue. You will have to enter this VXML in a VXML servlet instead of using the generated code.

<form id="recordform">
<block>
<assign name="application.lastresult$" expr="undefined"/>
</block>

<record name="rec_1" beep="true" modal="true" dtmfterm="true"
cond="typeof application.lastresult$ == 'undefined'">
<prompt>Press any key to terminate recording</prompt>

<filled>
<prompt>You recorded something</prompt>
<goto next="#processrecording"/>
</filled>
<noinput>
<prompt>no input, try again</prompt>
</noinput>
</record>

<block>
<prompt>You terminated recording without saying anything</prompt>
<goto next=”#norecording”/>
</block>
</form>

MarcosVergani
Joined: Nov 15, 2013
Messages: 17
Offline
Thank you, Neil!
MarceloPariggi [Avatar]

Joined: Nov 15, 2013
Messages: 24
Offline
Hi Neil, I took the original VXML (generated by the Record Node) and I have added just the "application.lastresult$" lines, and the Submit Object. it worked like a charm!

for future readers, I'm posting the markupLanguageGeneration() method.

Thank you for your help!
Marcelo.


public void markupLanguageGeneration(java.io.PrintStream out, com.avaya.sce.runtime.Submit submit,
com.avaya.sce.runtimecommon.SCESession mySession) {

// ================================================================================
// ================================================================================
// See: https://jira.forge.avaya.com/browse/SURVEY-144
// See: http://www.devconnectprogram.com/forums/posts/list/0/17968.page#p73017
// ================================================================================
// ================================================================================

String encodedSessionId = mySession.getEncodedSessionId();
String rdmInitialPrompt = mySession.getVariableField(IProjectVariables.INPUTS_RDM, IProjectVariables.INPUTS_RDM_FIELD_INITIAL).getStringValue();
String rdmNoInputPrompt = mySession.getVariableField(IProjectVariables.INPUTS_RDM, IProjectVariables.INPUTS_RDM_FIELD_NO_INPUT_PROMPT).getStringValue();
boolean isInitialTTS = mySession.getVariableField(IProjectVariables.INITIAL_IS_TTS).getBooleanValue();
boolean isNoInputTTS = mySession.getVariableField(IProjectVariables.NO_INPUT_IS_TTS).getBooleanValue();
boolean isValidatable = mySession.getVariableField(IProjectVariables.IS_VALIDATABLE).getBooleanValue();

String vBeep = "true";
String vModal = "true";
String vDtmfTerm = "true";
String vMaxTime = "120s";
String vFinalsilence = "3s";
String vBargeInInitial = "5000ms";
String vBargeInNoInput = "8000ms";

// ==================================================
// GENERATED (by the code generator.)
// ==================================================
// out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?> ");
// out.println("<vxml version=\"2.1\" xmlns=\"http://www.w3.org/2001/vxml\" xml:lang=\"en-us\"> ");
// out.println("<meta name=\"author\" content=\"Avaya Aura Orchestration Designer\"/> ");
// out.println("<meta name=\"runtime-version\" content=\"06.00.13.01\"/> ");
// out.println("<meta name=\"runtimecommon-version\" content=\"06.00.13.01\"/> ");
// out.println("<meta name=\"copyright\" content=\"Copyright (c) 2002-2011, Avaya\"/> ");
// out.println("<form id=\"RecordingVXML\"> ");
// ==================================================

out.println("<block> ");
// New Extra Line - Reset application.lastresult$
out.println("<assign name=\"application.lastresult$\" expr=\"undefined\"/> ");
out.println("</block> ");

out.println("<var name=\"RecordingVXML___value\"/> ");
out.println("<var name=\"RecordingVXML___confidence\"/> ");
out.println("<var name=\"RecordingVXML___utterance\"/> ");
out.println("<var name=\"RecordingVXML___duration\"/> ");
out.println("<var name=\"RecordingVXML___size\"/> ");
out.println("<var name=\"RecordingVXML___termchar\"/> ");
out.println("<var name=\"RecordingVXML___maxtime\"/> ");

//Original Line
//out.println("<record name=\"RecordingVXML\" beep=\""+vBeep+"\" maxtime=\""+vMaxTime+"\" modal=\""+vModal+"\" finalsilence=\""+vFinalsilence+"\" dtmfterm=\""+vDtmfTerm+"\" type=\"audio/x-wav\"> ");
//New Extra Line - Set application.lastresult$ as condition
out.println("<record name=\"RecordingVXML\" beep=\""+vBeep+"\" maxtime=\""+vMaxTime+"\" modal=\""+vModal+"\" finalsilence=\""+vFinalsilence+"\" dtmfterm=\""+vDtmfTerm+"\" type=\"audio/x-wav\" cond=\"typeof application.lastresult$ == 'undefined'\"> ");

// INITIAL PROMPT
out.println("<prompt bargein=\"true\" bargeintype=\"speech\" timeout=\""+vBargeInInitial+"\"> ");
if(isInitialTTS) {
out.println("" + rdmInitialPrompt + "");
} else {
out.println("<audio src=\"" + rdmInitialPrompt + "\"/> ");
}
out.println("</prompt> ");

// DISCONNECT EVENT
out.println("<catch event=\"connection.disconnect\"> ");
out.println("<assign name=\"RecordingVXML___value\" expr=\"try {RecordingVXML} catch (errMsg) {'undefined'}\"/> ");
out.println("<assign name=\"RecordingVXML___confidence\" expr=\"try {RecordingVXML$.confidence} catch (errMsg) {'undefined'}\"/> ");
out.println("<assign name=\"RecordingVXML___utterance\" expr=\"try {RecordingVXML$.utterance} catch (errMsg) {'undefined'}\"/> ");
out.println("<assign name=\"RecordingVXML___duration\" expr=\"try {RecordingVXML$.duration} catch (errMsg) {'undefined'}\"/> ");
out.println("<assign name=\"RecordingVXML___size\" expr=\"try {RecordingVXML$.size} catch (errMsg) {'undefined'}\"/> ");
out.println("<assign name=\"RecordingVXML___termchar\" expr=\"try {RecordingVXML$.termchar} catch (errMsg) {'undefined'}\"/> ");
out.println("<assign name=\"RecordingVXML___maxtime\" expr=\"try {RecordingVXML$.maxtime} catch (errMsg) {'undefined'}\"/> ");
out.println("<var name=\"null___noinputcount\" expr=\"try {_avayaNoinputCounter} catch (errMsg) {'0'}\"/> ");
out.println("<var name=\"null___nomatchcount\" expr=\"try {_avayaNomatchCounter} catch (errMsg) {'0'}\"/> ");
out.println("<submit next=\"setRecDisconnect?___DDSESSIONID=" + encodedSessionId + "\" namelist=\"RecordingVXML___value RecordingVXML___confidence RecordingVXML___utterance RecordingVXML___duration RecordingVXML___size RecordingVXML___termchar RecordingVXML___maxtime\" method=\"post\" enctype=\"multipart/form-data\"/> ");
out.println("</catch> ");

// NO_INPUT EVENT (1)
out.println("<catch event=\"noinput\" count=\"1\"> ");
out.println("<assign name=\"_avayaNoinputCounter\" expr=\"_avayaNoinputCounter + 1\"/> ");
out.println("<prompt bargein=\"true\" bargeintype=\"speech\" timeout=\""+vBargeInNoInput+"\"> ");
if(isValidatable) {
if(isNoInputTTS){
out.println("" + rdmNoInputPrompt + "");
} else {
out.println("<audio src=\"" + rdmNoInputPrompt + "\"/> ");
}
}
out.println("</prompt> ");
// New Extra Line - Reset application.lastresult$
out.println("<assign name=\"application.lastresult$\" expr=\"undefined\"/> ");
out.println("<reprompt/> ");
out.println("</catch> ");

// NO_INPUT EVENT (2)
out.println("<catch event=\"noinput\" count=\"2\"> ");
out.println("<assign name=\"_avayaNoinputCounter\" expr=\"_avayaNoinputCounter + 1\"/> ");
out.println("<prompt bargein=\"true\" bargeintype=\"speech\" timeout=\""+vBargeInNoInput+"\"> ");
out.println("</prompt> ");
out.println("<goto next=\"setRecNoInput?___DDSESSIONID=" + encodedSessionId + "\"/> ");
out.println("</catch> ");

// FILL VARIABLES IF SUCCESS (OR NO_INPUT BECAUSE #)
out.println("<filled> ");
out.println("<assign name=\"RecordingVXML___value\" expr=\"try {RecordingVXML} catch (errMsg) {'undefined'}\"/> ");
out.println("<assign name=\"RecordingVXML___confidence\" expr=\"try {RecordingVXML$.confidence} catch (errMsg) {'undefined'}\"/> ");
out.println("<assign name=\"RecordingVXML___utterance\" expr=\"try {RecordingVXML$.utterance} catch (errMsg) {'undefined'}\"/> ");
out.println("<assign name=\"RecordingVXML___duration\" expr=\"try {RecordingVXML$.duration} catch (errMsg) {'undefined'}\"/> ");
out.println("<assign name=\"RecordingVXML___size\" expr=\"try {RecordingVXML$.size} catch (errMsg) {'undefined'}\"/> ");
out.println("<assign name=\"RecordingVXML___termchar\" expr=\"try {RecordingVXML$.termchar} catch (errMsg) {'undefined'}\"/> ");
out.println("<assign name=\"RecordingVXML___maxtime\" expr=\"try {RecordingVXML$.maxtime} catch (errMsg) {'undefined'}\"/> ");
out.println("</filled> ");

out.println("</record> ");

//out.println("<block> ");
//out.println("<submit next=\"setGrabQuestionResp?___DDSESSIONID=" + encodedSessionId + "\" namelist=\"RecordingVXML___value RecordingVXML___confidence RecordingVXML___utterance RecordingVXML___duration RecordingVXML___size RecordingVXML___termchar RecordingVXML___maxtime\" method=\"post\" enctype=\"multipart/form-data\"/> ");
//out.println("</block> ");
submit.setNext("setGrabQuestionResp");
submit.addToSubmitList("RecordingVXML___value");
submit.addToSubmitList("RecordingVXML___confidence");
submit.addToSubmitList("RecordingVXML___utterance");
submit.addToSubmitList("RecordingVXML___duration");
submit.addToSubmitList("RecordingVXML___size");
submit.addToSubmitList("RecordingVXML___termchar");
submit.addToSubmitList("RecordingVXML___maxtime");
submit.setPost(true);
submit.setEncodingType(Submit.ENCODING_MULTIPART);

// ==================================================
// GENERATED (by the code generator.)
// ==================================================
// out.println("</form> ");
// out.println("</vxml> ");
// ==================================================
}
Go to:   
Mobile view