Git Product home page Git Product logo

jvoicexml's Introduction

JVoiceXML

Open Source VoiceXML interpreter

A free VoiceXML interpreter for JAVA with an open architecture for custom extensions. Demo implementation platforms are supporting JAVA APIs such as JSAPI and JTAPI.

JVoiceXML is an implementation of VoiceXML 2.1, the Voice Extensible Markup Language, specified at http://www.w3.org/TR/voicexml21/. This is an extension to VoiceXML 2.0, specified at http://www.w3.org/TR/voicexml20/

VoiceXML is designed for creating audio dialogs that feature synthesized speech, digitized audio, recognition of spoken and DTMF key input, recording of spoken input, telephony, and mixed initiative conversations. Major goal is to have a platform independent implementation that can be used for free.

See also our project site at http://sourceforge.net/projects/jvoicexml

jvoicexml's People

Contributors

hotblac avatar karlnicholas avatar langep avatar nomaillard avatar schnelle avatar swarren12 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jvoicexml's Issues

BufferedDtmfInput hangs

Multiple digits are added in quick succession can cause the BufferedDtmfInput to lock permanently.

SRGS <rule> elements must have a single child?

I'm testing SRGS grammars and I believe I've found an issue. It appears that a rule element can only have a single child. It does not properly support a sequence of rule expansions.

I've attached two simple SRGS grammars. They both work fine for a simple utterance like "yes" or "nope". However, if the utterance should match the "filler" rule, the match fails for the grammar ending with "A_fails".

The utterance "ah nope" does not match defaultAssignment4_A_fails.srgs
The utterance "ah nope" does correctly match defaultAssignment4_A_works.srgs

If you notice, the only difference is that the elements within the "answer" rule have been wrapped in a single item element.

It looks like the class SrgsRule has a single instance for innerRule, so as the rules are expanded and setRule is called, the previously saved innerRule is overwritten by the current expansion. When all items are processed, the last element in the rule is saved as innerRule. So, a single child of a rule works correctly, but for a list of items in sequence, only the last item of the sequence is saved.

Is this a known issue? Is there a fix? Am I doing something wrong? Or, is this correct behavior and my existing grammars are wrong?

I've attached a JUnit test class and two grammar files to demonstrate.

TestNewRuleRef.java.txt
defaultAssignment4_A_works.srgs.txt
defaultAssignment4_A_fails.srgs.txt

Use a <var> tag and then <submit> within the namelist

Hello,

first: Great work. Thank you for this!
I will build a testing framework for my vxml application with JvoiceXML.

Here is a code snippet of my VXML:

<form>
 <block>
  <var name="ANI" expr="'1234567'"/>
  <submit next="/MyApp/ParseUserData" method="post" namelist="ANI"/>
 </block>
</form>
</vxml> 

My Problem when starting a call(session):

org.jvoicexml.event.error.SemanticError: error.semantic: 'ANI' not found

It does not matter where I define the <var>. (Inside or outside )

Is this a Issue?
Would be great If you could help me.

Thanks!
Thorty

SrgsXmlOptionConverter need set default Grammer type

in class org.jvoicexml.interpreter.formitem.SrgsXmlOptionConverter ,createVoiceGrammar ,createDtmfGrammar method return Grammer object need set default grammer type or else maybe adapter to regexGrammar to execute.

public Grammar createDtmfGrammar(final Collection options) {
if ((options == null) || options.isEmpty()) {
return null;
}
try {
final SrgsXmlDocument document = new SrgsXmlDocument();
final Grammar grammar = document.getGrammar();
//modify by Condy 2019.02.14 grammar要设置一个默认的类型
grammar.setType(GrammarType.SRGS_XML);
final Rule rule = grammar.appendChild(Rule.class);
final String name = getName(ModeType.DTMF);
rule.setId(name);

@OverRide
public Grammar createVoiceGrammar(final Collection options,
final Locale language) {
if ((options == null) || options.isEmpty()) {
return null;
}
try {
final SrgsXmlDocument document = new SrgsXmlDocument();
final Grammar grammar = document.getGrammar();
//modify by Condy 2019.02.14 grammar要设置一个默认的类型
grammar.setType(GrammarType.SRGS_XML);
grammar.setXmlLang(language);
final Rule rule = grammar.appendChild(Rule.class);
final String name = getName(ModeType.VOICE);

Documentation missing

After many days of searching for no results trying to find a way to make VXML work on Asterisk I gave up.

I just discovered JVoiceXML. However I can not find any documentation, no instructions on how it works. Does it support SIP lines ??? How are incoming and outgoing calls going?

Is JVoiceXML just a VXML interpreter or an IVR too?

Thank you for your reply.

BadFetchError causes session to close

I just coped only required jvoicexml core projects ( required* - as specified in how to build guide ) into intellij Idea project. I am using JVoiceXml in embedded mode so i created an instance of JVoiceXmlMain and started it manually. and I did not use JNDI. I am creating session like this

ConnectionInformation info = new BasicConnectionInformation("text", "text", "text");

since implementation.text using Socket to interact with JVoiceXML, i just commented all the text telephony code and inserted print statements. once the record method is called on text telephone object, i just inject string "1" as

TextSpokenInput textSpokenInput = (TextSpokenInput) input;
textSpokenInput.notifyRecognitionResult("1");

While verifying DTMF result i found that no grammar checkers are available and it cause the re-prompt. the re-prompt is answered like before, now the expection is thrown and session is being closed

org.jvoicexml.event.plain.implementation.NomatchEvent: nomatch
jvoicexml.txt

Log file Location
http://pastebin.com/GtVvAfMb

Modified TextTelephony.java
http://pastebin.com/EeGp5Mhr

please help me to find what i am doing wrong.
is there email group for this project to ask help?

Maven plugin compatibility broken

the maven plugin expects two variables to install Jars into the repo:
version
group

theses variables no longer exist in the gradle properties

Embedded Text call hangs 1 in 5 while transmitting system output, because the outputEnded event is never send.

This bug happens once in five or more times.
In a normal flow , the call would receive system output, then fire a Timer thread to wait for user input and if no input is found, proceed with the rest of the call flow.

In the problematic cases due to a mixup as I have noticed of the messages sequence,
when no more pending messages exist in TextTelephony.removePendingMessage(*):
if (textOutput != null && pendingMessages.isEmpty()) {
textOutput.checkEmptyQueue(speakable);
}
Then textOutput will also check if the speakable passed to it is not empty, in order to fire the OutputEnded event.

In the problematic cases, the speakable is empty, so textOutput simply fires the “queueEmptyEvent”. And the call stays there forever.

Below you may see some logs for the normal case and then the problematic case.

Normal flow logs(see the output ended event near the end, and then the start of the Timer Thread) :

01:02:00.954 [Thread-42] DEBUG org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform - output started <speak xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" xml:lang="el-GR" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
. . .

01:02:00.973 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - read Type: INPUT_CLOSED
SequenceNumber: 2
01:02:00.974 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 2
01:02:00.974 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 2
01:02:00.974 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - read Type: INPUT_CLOSED
SequenceNumber: 3
01:02:00.974 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 3
01:02:00.975 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 3
01:02:00.975 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - read Type: EXPECTING_INPUT
SequenceNumber: 4
01:02:00.975 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 4
01:02:00.976 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 4
01:02:00.980 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - read Type: SSML
SequenceNumber: 5
Data: "<speak xmlns="http://www.w3.org/2001/10/synthesis\"

. . .
To continue in English press one.<mark name="no-barge-in"/>"
01:02:00.985 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 5
01:02:00.985 [http-nio-8090-exec-1] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 5
01:02:00.986 [TextReceiverThread] DEBUG org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform - output ended 01:02:00.986 [TextReceiverThread] INFO org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform - will stop call playing 01:02:00.986 [TextReceiverThread] INFO org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform - done stop play request 2018-10-26 01:02:00.986 INFO 18478 --- [nio-8090-exec-1] hello.EmbeddedServerTextCall : heard '<speak xmlns="http://www.w3.org/2001/10/synthesis"
. . .
'
01:02:00.987 [TextReceiverThread] DEBUG org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform - reached last speakable. starting timer

Problematic case logs(see the ‘queue is empty” at the end):
17:54:10.846 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - read Type: INPUT_CLOSED
SequenceNumber: 0
17:54:10.847 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 0
17:54:11.446 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 0
17:54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] INFO org.jvoicexml.interpreter.scope.ScopeObserver - exiting scope 'anonymous'...
17:54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] DEBUG org.jvoicexml.interpreter.scope.ScopeObserver - current scope stack: [SESSION, APPLICATION, APPLICATION, DOCUMENT, DIALOG]
17:54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] INFO org.jvoicexml.interpreter.VoiceXmlInterpreter - entered state TRANSITIONING
17:54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] INFO org.jvoicexml.interpreter.FormInterpretationAlgorithm - processing 'F166b0de996bS000002'...
17:54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] DEBUG org.jvoicexml.interpreter.FormInterpretationAlgorithm - cleared all just_filled flags
17:54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] INFO org.jvoicexml.interpreter.FormInterpretationAlgorithm - selecting next form item in dialog 'D166b0de996aS000001'...
17:54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] DEBUG org.jvoicexml.interpreter.formitem.AbstractFormItem - checking if selectable
17:54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] DEBUG org.jvoicexml.interpreter.formitem.AbstractFormItem - value of 'F166b0de996bS000002': 'true'
17:54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] DEBUG org.jvoicexml.interpreter.formitem.AbstractFormItem - cond of 'F166b0de996bS000002': 'true'
17:54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] DEBUG org.jvoicexml.interpreter.formitem.AbstractFormItem - selectable 'F166b0de996bS000002': false
17:54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] DEBUG org.jvoicexml.interpreter.formitem.AbstractFormItem - checking if selectable
17:54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] DEBUG org.jvoicexml.interpreter.formitem.AbstractFormItem - value of 'F166b0de996bS000003': 'null'
17:54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] DEBUG org.jvoicexml.interpreter.formitem.AbstractFormItem - cond of 'F166b0de996bS000003': 'true'
17:54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] DEBUG org.jvoicexml.interpreter.formitem.AbstractFormItem - selectable 'F166b0de996bS000003': true
17:54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] INFO org.jvoicexml.interpreter.FormInterpretationAlgorithm - next form item in form 'D166b0de996aS000001' is 'F166b0de996bS000003'
17:54:30.963 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - read Type: INPUT_CLOSED
SequenceNumber: 1
54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] INFO org.jvoicexml.interpreter.VoiceXmlInterpreter - entered state WAITING
17:54:30.963 [0f157789-f9bd-4869-ba38-1020e5ef09e6] INFO org.jvoicexml.interpreter.FormInterpretationAlgorithm - collecting 'F166b0de996bS000003'...
17:54:30.964 [0f157789-f9bd-4869-ba38-1020e5ef09e6] DEBUG org.jvoicexml.interpreter.FormInterpretationAlgorithm - visiting block 'F166b0de996bS000003'...
17:54:30.964 [0f157789-f9bd-4869-ba38-1020e5ef09e6] INFO org.jvoicexml.interpreter.scope.ScopeObserver - entering new scope 'anonymous'...
17:54:30.964 [0f157789-f9bd-4869-ba38-1020e5ef09e6] DEBUG org.jvoicexml.interpreter.scope.ScopeObserver - current scope stack: [SESSION, APPLICATION, APPLICATION, DOCUMENT, DIALOG, ANONYMOUS]
17:54:30.964 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 1
17:54:30.964 [0f157789-f9bd-4869-ba38-1020e5ef09e6] DEBUG org.jvoicexml.interpreter.formitem.BlockFormItem - block 'F166b0de996bS000003' marked as visited.
17:54:30.964 [0f157789-f9bd-4869-ba38-1020e5ef09e6] DEBUG org.jvoicexml.profile.vxml21.tagstrategy.AbstractTagStrategy - node: '#text'
17:54:30.964 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 1
17:54:39.928 [0f157789-f9bd-4869-ba38-1020e5ef09e6] INFO org.jvoicexml.interpreter.VoiceXmlInterpreter - entered state WAITING
17:54:39.928 [0f157789-f9bd-4869-ba38-1020e5ef09e6] DEBUG org.jvoicexml.interpreter.event.JVoiceXmlEventHandler - waiting for an event...
17:54:39.929 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - read Type: INPUT_CLOSED
SequenceNumber: 2
17:54:39.929 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 2
17:54:40.043 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 2
17:54:40.043 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - read Type: INPUT_CLOSED
SequenceNumber: 3
17:54:40.043 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 3
17:54:40.044 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 3
17:54:40.047 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - read Type: SSML
SequenceNumber: 4
Data: "<speak xmlns="http://www.w3.org/2001/10/synthesis\" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance\" version="1.0" xml:lang="el-GR"
. . .
<mark name="no-barge-in"/>"
17:54:40.104 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 4
17:54:40.104 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - read Type: EXPECTING_INPUT
SequenceNumber: 5
17:54:40.104 [http-nio-8090-exec-1] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 4
17:54:40.292 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 5
17:54:40.292 [JVoiceXML text server] INFO org.jvoicexml.client.text.TextServer - sent Type: ACK
SequenceNumber: 5
2018-10-26 17:54:40.292 INFO 2823 --- [nio-8090-exec-1] hello.EmbeddedServerTextCall : heard '<speak xmlns="http://www.w3.org/2001/10/synthesis"
. . .
'
20:30:50.859 [TextReceiverThread] DEBUG org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform - output queue is empty

Invalid sound format for JSAPI 2 implementation platform

The allocation of the JSAPI 2 implementation platform fails with

2015-08-07 09:06:42,733 [JVoiceXmlMain       ] FATAL               org.jvoicexml.JVoiceXmlMain (   351) - error.noresource: line with format PCM_SIGNED 16000.0 Hz, 16 bit, mono, 2 bytes/frame, little-endian not supported.
org.jvoicexml.ConfigurationException: error.noresource: line with format PCM_SIGNED 16000.0 Hz, 16 bit, mono, 2 bytes/frame, little-endian not supported.
    at org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatformFactory.init(JVoiceXmlImplementationPlatformFactory.java:131)
    at org.jvoicexml.JVoiceXmlMain.run(JVoiceXmlMain.java:344)
Caused by: java.lang.Exception: error.noresource: line with format PCM_SIGNED 16000.0 Hz, 16 bit, mono, 2 bytes/frame, little-endian not supported.
    at org.jvoicexml.implementation.pool.PoolableResourceFactory.makeObject(PoolableResourceFactory.java:78)
    at org.apache.commons.pool.impl.GenericObjectPool.addObject(GenericObjectPool.java:1637)
    at org.jvoicexml.implementation.pool.KeyedResourcePool.addResourceFactory(KeyedResourcePool.java:94)
    at org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatformFactory.addSpokenInputFactory(JVoiceXmlImplementationPlatformFactory.java:242)
    at org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatformFactory.init(JVoiceXmlImplementationPlatformFactory.java:123)
    ... 1 more
Caused by: org.jvoicexml.event.error.NoresourceError: error.noresource: line with format PCM_SIGNED 16000.0 Hz, 16 bit, mono, 2 bytes/frame, little-endian not supported.
    at org.jvoicexml.implementation.jsapi20.Jsapi20SpokenInput.open(Jsapi20SpokenInput.java:175)
    at org.jvoicexml.implementation.pool.PoolableResourceFactory.makeObject(PoolableResourceFactory.java:76)
    ... 5 more
Caused by: javax.speech.AudioException: line with format PCM_SIGNED 16000.0 Hz, 16 bit, mono, 2 bytes/frame, little-endian not supported.
    at org.jvoicexml.jsapi2.recognition.BaseRecognizerAudioManager.handleAudioStart(BaseRecognizerAudioManager.java:189)
    at org.jvoicexml.jsapi2.BaseAudioManager.audioStart(BaseAudioManager.java:163)
    at org.jvoicexml.jsapi2.recognition.BaseRecognizer.baseAllocate(BaseRecognizer.java:534)
    at org.jvoicexml.jsapi2.BaseEngine.allocate(BaseEngine.java:285)
    at org.jvoicexml.implementation.jsapi20.Jsapi20SpokenInput.open(Jsapi20SpokenInput.java:170)
    ... 6 more

The Sound format should be configurable to account for different environments.

MatchConsumption execute javascript error

in org.jvoicexml.srgs.MatchConsumption class: executeSisr method:
context.evaluateString( workingScope, "var out=new Object();\nvar rules=new Object();\n" + "var meta={current: function() {return {text:'', score:1.0}}};\n", "SISR init from MatchConsumer", 0, null);

this eval script need add semicolon in the "return" statement. or else will throw error
context.evaluateString( workingScope, "var out=new Object();\nvar rules=new Object();\n" + "var meta={current: function() {return {text:'', score:1.0} ; }};\n", "SISR init from MatchConsumer", 0, null);

[subdialog] Submit url after subdialog return is resolved incorrectly

See test case and issue added in VoiceXMLRiot project, which uses JVoiceXML browser (Text implementation, VXML 2.1 profile, ECMAScript data model)

Summary
A submit tag immediately following a subdialog tag is resolved incorrectly. The submit tag is resolved relative to the subdialog, not the current document.

Test case:

  1. JVoiceXML browser fetches vxml application at /approot/invokeSubdialog.vxml
  2. /approot/invokeSubdialog.vxml has <subdialog> with src=/approot/subdialog/startSubdialog.vxml
  3. Subdialog has <return/> which returns control to caller (/approot/invokeSubdialog.vxml)
  4. /approot/invokeSubdialog.vxml then has <submit> with next=afterSubdialog.vxml (relative path)

What should happen:
afterSubdialog.vxml should be resolved relative to the caller: /approot/afterSubdialog.vxml

What actually happens:
afterSubdialog.vxml is resolved relative to completed subdialog: /approot/subdirectory/afterSubdialog.vxml

Attached:
Output of test run: mostly JVoiceXML browser output.
runner.log

Cause:
emestrategy.HttpSchemeStrategy ( 160) [] error accessing 'http://localhost:9090/voicexmlriot-junit-demo/subdialog/afterSubdialog.vxml': Not Found (HTTP error code 404)

Broken org.jvoicexml.config tests

When I run gradle org.jvoicexml.config:build, the the build fails with test failures. All 6 tests in this project fail.

Tests should be corrected or removed / disabled to enable the build to complete successfully.

Test results attached.
test.zip

Supported Java version

We still support Java 7 and 8. I noticed both CentOS 7.8 and 6 have now Java 8. If we want Java 7, there's CentOS 5 to use. May be worth to rethink about dropping (legacy) support for Java 7 and enforce Java 8.

Remote shutdown does not work

Calling the shutdown task or batch results in the following error without shutting down the JVoiceXML server

 19772 [main                ] INFO  .config.JVoiceXmlConfiguration (   357) [] loading 'org.jvoicexml.startup.RemoteShutdown'
 68527 [main                ] ERROR icexml.jndi.JndiRemoteShutdown (    98) [] error obtaining JVoiceXml. Server not running?
javax.naming.ServiceUnavailableException: null
        at com.sun.jndi.rmi.registry.RegistryContext.decodeObject(RegistryContext.java:470) ~[?:1.8.0_91]
        at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:124) ~[?:1.8.0_91]
        at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:128) ~[?:1.8.0_91]
        at javax.naming.InitialContext.lookup(InitialContext.java:417) ~[?:1.8.0_91]
        at org.jvoicexml.jndi.JndiRemoteShutdown.shutdown(JndiRemoteShutdown.java:96) [org.jvoicexml.jndi-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]
        at org.jvoicexml.startup.Shutdown.main(Shutdown.java:104) [org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]

SRGS external rule references cause semantic result to be literal and not script

I believe there is an issue in the SRGS processor. If a grammar references external rules, the semantic interpretation is always a string (the literal matched tokens) and not the executed value of the script tag.

I've attached some sample SRGS grammars.

  • NewTestParentInternalRefRule.srgs - simple grammar with two internal rule references

and the two files:

  • NewTestParentExternalRefRule.srgs - simple grammar with two external rule references
  • NewTestChildExternalRefRule.srgs - the library grammar that contains the rules referenced

Logically, these should return the same results. They are the same grammar but in one case the referenced rules broken out into a separate file.

Using the JUnit test cases below, these should both return:
key: answer
value: question

However, the example with the external grammar returns a literal semantic interpretation rather than a script interpretation from the tag. The results returned by mc.executeSisr(); are:

NewTestParentInternalRefRule.srgs:

  • key: "answer"
  • value: "question"

where o is a NativeObject

NewTestParentExternalRefRule.srgs

  • o = "question about a recent order"

where o is a string

    @Test
    public void testInternalWithQuestionsAbout() throws Exception {
        SrgsSisrGrammar parsedGrammar = Utils.loadDocument("/NewTestParentInternalRefRule.srgs");
        MatchConsumption mc = parsedGrammar.match("question about a recent order");
        Assert.assertNotNull(mc);

        Object o = mc.executeSisr();
        Assert.assertEquals("question", Utils.getItemOnNativeObject(o, "answer"));    
    }
   
    @Test
    public void testExternalWithQuestionsAbout() throws Exception {
        SrgsSisrGrammar parsedGrammar = Utils.loadDocument("/NewTestParentExternalRefRule.srgs");
        MatchConsumption mc = parsedGrammar.match("question about a recent order");
        Assert.assertNotNull(mc);

        Object o = mc.executeSisr();
        Assert.assertEquals("question", Utils.getItemOnNativeObject(o, "answer"));      
    }

NewTestParentExternalRefRule.srgs.txt
NewTestChildExternalRefRule.srgs.txt
NewTestParentInternalRefRule.srgs.txt

Broken profile tests

org.jvoicexml.profile.vxml21

TestStrategyTestBase.java depends on not accessible
org.jvoicexml.mock.implementation.MockImplementationPlatform

TestLogStrategy.java depends on not accessible
org.jvoicexml.mock.TestAppender

Maybe copy those files and their dependencies into profile.vxml21 project, or use Mockito.

Changed/Added files:
+++ b/org.jvoicexml.profile.vxml21/unittests/src/org/jvoicexml/profile/vxml21/mock/MockCallControl.java
+++ b/org.jvoicexml.profile.vxml21/unittests/src/org/jvoicexml/profile/vxml21/mock/MockImplementationPlatform.java
+++ b/org.jvoicexml.profile.vxml21/unittests/src/org/jvoicexml/profile/vxml21/mock/MockSystemOutput.java
+++ b/org.jvoicexml.profile.vxml21/unittests/src/org/jvoicexml/profile/vxml21/mock/MockUserInput.java
+++ b/org.jvoicexml.profile.vxml21/unittests/src/org/jvoicexml/profile/vxml21/tagstrategy/TagStrategyTestBase.java
+++ b/org.jvoicexml.profile.vxml21/unittests/src/org/jvoicexml/profile/vxml21/tagstrategy/TestAppender.java
+++ b/org.jvoicexml.profile.vxml21/unittests/src/org/jvoicexml/profile/vxml21/tagstrategy/TestLogStrategy.java

issue with jvoicexml version 0.7.8

Hi, I have a problem in my server jvoice xml ,
here it is my client_code:

import java.net.URI;

import java.net.URISyntaxException;
import java.net.URL;
import java.util.Hashtable;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameClassPair;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;

import org.jvoicexml.ConnectionInformation;
import org.jvoicexml.JVoiceXml;
import org.jvoicexml.Session;
import org.jvoicexml.client.BasicConnectionInformation;
import org.jvoicexml.event.ErrorEvent; // JVoiceXML Imports from User Library

class Policy {
@SuppressWarnings("unused")
ClassLoader cl = null;
@SuppressWarnings("unused")
URL policyURL = null;

Policy() {
	final ClassLoader cl = getClass().getClassLoader();
	final URL policyURL = cl.getResource("policy/jvoicexml.policy");
	System.err.println("policyURL = " + policyURL);
	// this policy file must be created in this case in the config folder
	System.setProperty("java.security.policy", policyURL.toString());
}

}

public class JVoiceXML_Client {

public static void main(final String[] args) {

	final Policy p = new Policy();
	Context context = null;
	final Hashtable<Object, Object> env = new Hashtable<>();
	env.put("java.naming.factory.initial", "com.sun.jndi.rmi.registry.RegistryContextFactory");
	env.put("java.naming.provider.url", "rmi://localhost:1099");
	env.put("java.naming.rmi.security.manager", "true");
	try {
		context = new InitialContext(env);
		final NamingEnumeration<NameClassPair> list = context.list("");
		while (list.hasMore()) {
			System.out.println(list.next().getName());
		}
	} catch (final NamingException e) {
		e.printStackTrace();
		System.exit(-1);
	}
	JVoiceXml jvxml = null;
	try {
		jvxml = (JVoiceXml) context.lookup("JVoiceXml");
		final ConnectionInformation info = new BasicConnectionInformation("dummy", "jsapi10", "jsapi10");
		final Session session = jvxml.createSession(info);

		final URI uri = new URI("file:///C://Users//A693819//eclipse-workspace//test//helloword.vxml");
		session.call(uri);
		session.waitSessionEnd();
		session.hangup();
	} catch (final NamingException e) {
		e.printStackTrace();
		System.exit(-1);
	} catch (final ErrorEvent e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (final URISyntaxException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

}

and here is the error that I get in the client side :

policyURL = file:/C:/Users/A693819/eclipse-workspace/test/bin/policy/jvoicexml.policy
Session.f9862a32-cbe1-456d-9ab9-179f77cd65d3
Application.daed8b56-d4ad-41a0-a326-9ade874037e8
Session.593e3d68-6512-4497-840e-ce629e966b7e
RemoteJVoiceXml
Application.0e458245-5f39-4bb6-ac24-a33e53fe679c
RemoteApplication.caea841a-d85e-471b-9bb3-4d8b2da54449
RemoteMappedDocumentRepository
RemoteSession.caea841a-d85e-471b-9bb3-4d8b2da54449
Session.57ff5f52-2f7b-40fa-b66e-21bbe8949c88
MappedDocumentRepository
RemoteApplication.593e3d68-6512-4497-840e-ce629e966b7e
RemoteSession.daed8b56-d4ad-41a0-a326-9ade874037e8
RemoteSession.f9862a32-cbe1-456d-9ab9-179f77cd65d3
Session.1f6a91b9-617f-479a-afd7-d5f7477199d0
Application.caea841a-d85e-471b-9bb3-4d8b2da54449
RemoteSession.0e458245-5f39-4bb6-ac24-a33e53fe679c
Session.9dc6112f-e9fb-44cf-8a20-4d9bca0e3186
Application.f9862a32-cbe1-456d-9ab9-179f77cd65d3
Application.593e3d68-6512-4497-840e-ce629e966b7e
RemoteApplication.57ff5f52-2f7b-40fa-b66e-21bbe8949c88
JVoiceXml
RemoteApplication.1f6a91b9-617f-479a-afd7-d5f7477199d0
Application.57ff5f52-2f7b-40fa-b66e-21bbe8949c88
RemoteSession.593e3d68-6512-4497-840e-ce629e966b7e
Session.daed8b56-d4ad-41a0-a326-9ade874037e8
Session.0e458245-5f39-4bb6-ac24-a33e53fe679c
RemoteSession.57ff5f52-2f7b-40fa-b66e-21bbe8949c88
RemoteSession.1f6a91b9-617f-479a-afd7-d5f7477199d0
RemoteApplication.daed8b56-d4ad-41a0-a326-9ade874037e8
RemoteApplication.f9862a32-cbe1-456d-9ab9-179f77cd65d3
RemoteSession.9dc6112f-e9fb-44cf-8a20-4d9bca0e3186
Session.caea841a-d85e-471b-9bb3-4d8b2da54449
RemoteApplication.0e458245-5f39-4bb6-ac24-a33e53fe679c
Application.1f6a91b9-617f-479a-afd7-d5f7477199d0
org.jvoicexml.event.error.NoresourceError: error.noresource: Pool of type 'dummy' is unknown!
at org.jvoicexml.implementation.pool.KeyedResourcePool.borrowObject(KeyedResourcePool.java:106)
at org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform.getExternalResourceFromPool(JVoiceXmlImplementationPlatform.java:710)
at org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform.getCallControl(JVoiceXmlImplementationPlatform.java:479)
at org.jvoicexml.implementation.jvxml.JVoiceXmlPromptAccumulator.renderPrompts(JVoiceXmlPromptAccumulator.java:119)
at org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform.renderPrompts(JVoiceXmlImplementationPlatform.java:1055)

at org.jvoicexml.profile.vxml21.tagstrategy.TextStrategy.execute(TextStrategy.java:121)
at org.jvoicexml.profile.TagStrategyExecutor.executeTagStrategy(TagStrategyExecutor.java:206)
at org.jvoicexml.profile.TagStrategyExecutor.executeChildNodes(TagStrategyExecutor.java:178)
at org.jvoicexml.profile.TagStrategyExecutor.executeChildNodes(TagStrategyExecutor.java:82)
at 

org.jvoicexml.interpreter.FormInterpretationAlgorithm.visitBlockFormItem(FormInterpretationAlgorithm.java:1164)
at org.jvoicexml.interpreter.formitem.BlockFormItem.accept(BlockFormItem.java:107)
at org.jvoicexml.interpreter.FormInterpretationAlgorithm.collect(FormInterpretationAlgorithm.java:639)
at
org.jvoicexml.interpreter.FormInterpretationAlgorithm.mainLoop(FormInterpretationAlgorithm.java:421)
at org.jvoicexml.interpreter.VoiceXmlInterpreter.process(VoiceXmlInterpreter.java:258)
at org.jvoicexml.interpreter.VoiceXmlInterpreterContext.interpret(VoiceXmlInterpreterContext.java:817)
at org.jvoicexml.interpreter.VoiceXmlInterpreterContext.process(VoiceXmlInterpreterContext.java:543)
at org.jvoicexml.interpreter.JVoiceXmlSession.run(JVoiceXmlSession.java:396)

my jvoice_xml implementation file is this:


<beans:bean
class="org.jvoicexml.implementation.jvxml.DummyTelephonySupportFactory">
<beans:property name="instances" value="1" />
</beans:bean>

and on the server side the error is this:

1367907 [ion(37)-192.168.56.1] ERROR jvoicexml.jndi.SessionSkeleton ( 171) [] error.noresource: Pool of type 'dummy' is unknown!
org.jvoicexml.event.error.NoresourceError: error.noresource: Pool of type 'dummy' is unknown!
at org.jvoicexml.implementation.pool.KeyedResourcePool.borrowObject(KeyedResourcePool.java:106) ~[org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]
at org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform.getExternalResourceFromPool(JVoiceXmlImplementationPlatform.java:710) ~[org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]
at org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform.getCallControl(JVoiceXmlImplementationPlatform.java:479) ~[org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]
at org.jvoicexml.implementation.jvxml.JVoiceXmlPromptAccumulator.renderPrompts(JVoiceXmlPromptAccumulator.java:119) ~[org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]
at org.jvoicexml.implementation.jvxml.JVoiceXmlImplementationPlatform.renderPrompts(JVoiceXmlImplementationPlatform.java:1055) ~[org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]
at org.jvoicexml.profile.vxml21.tagstrategy.TextStrategy.execute(TextStrategy.java:121) ~[?:?]
at org.jvoicexml.profile.TagStrategyExecutor.executeTagStrategy(TagStrategyExecutor.java:206) ~[org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]
at org.jvoicexml.profile.TagStrategyExecutor.executeChildNodes(TagStrategyExecutor.java:178) ~[org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]
at org.jvoicexml.profile.TagStrategyExecutor.executeChildNodes(TagStrategyExecutor.java:82) ~[org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]
at org.jvoicexml.interpreter.FormInterpretationAlgorithm.visitBlockFormItem(FormInterpretationAlgorithm.java:1164) ~[org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]
at org.jvoicexml.interpreter.formitem.BlockFormItem.accept(BlockFormItem.java:107) ~[org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]
at org.jvoicexml.interpreter.FormInterpretationAlgorithm.collect(FormInterpretationAlgorithm.java:639) ~[org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]
at org.jvoicexml.interpreter.FormInterpretationAlgorithm.mainLoop(FormInterpretationAlgorithm.java:421) ~[org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]
at org.jvoicexml.interpreter.VoiceXmlInterpreter.process(VoiceXmlInterpreter.java:258) ~[org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]
at org.jvoicexml.interpreter.VoiceXmlInterpreterContext.interpret(VoiceXmlInterpreterContext.java:817) ~[org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]
at org.jvoicexml.interpreter.VoiceXmlInterpreterContext.process(VoiceXmlInterpreterContext.java:543) ~[org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]
at org.jvoicexml.interpreter.JVoiceXmlSession.run(JVoiceXmlSession.java:396) ~[org.jvoicexml-0.7.8-SNAPSHOT.jar:0.7.8-SNAPSHOT]

Anne

URL parameters not escaped correctly

I'm attempting to access a vxml resource with URL parameters using Session.call(URI). Resource URL is http://localhost:9090/voicexmlriot-junit-demo/dynamicPage.jsp?param1=blah%2Bblah&param2=foo%2Bbar
where %2B is the URL encoding for plus (+).

The URL parameters are received correctly by JVoiceXmlDocumentServer with the %2B URL encoding but are then decoded while processing so that HttpSchemeStrategy requests URL http://localhost:9090/voicexmlriot-junit-demo/dynamicPage.jsp?param1=blah+blah&param2=foo+bar.
This fails, as + is then URL decoded as a space.

I think this problem is specific to the plus (+) character as plus (+) is itself the URL encoding for space. This means that if you URL decode it then encode it again, you get %20 (encoding for space) and not the plus (+) literal. For this reason, double-encoding the plus (+) in the URL does not work. This makes it impossible to request a URL with a + in it.

I think the problem is something to do with HttpSchemeStrategy.getInputStream(), around line 140. It builds the fragmentLessUri from the uri method parameter. As the URI class does URL encoding for us, building a new URI in this way decodes the original URI string then encodes it again when creating the new fragmentLessUri object. This works for most inputs but will fail for the plus (+) symbol.

Test case for this bug in my VoiceXMLRiot project: hotblac/voicexmlriot@a0589ed
Note that the VoiecXMLRiot driver.get() method eventually delegates to JVoiceXML Session.call().

I'm confident that this issue is in JVoiceXML rather than my own code as the following logging appears to confirm:

2018-02-25 18:25:26,426 INFO JVoiceXmlDocumentServer:232 - loading document with URI 'http://localhost:9090/voicexmlriot-junit-demo/dynamicPage.jsp?param1=blah%2Bblah&param2=foo%2Bbar...
2018-02-25 18:25:26,445 DEBUG HttpSchemeStrategy:160 - connecting to 'http://localhost:9090/voicexmlriot-junit-demo/dynamicPage.jsp?param1=blah+blah&param2=foo+bar'...

JVoiceXmlDocumentServer shows the parameters correctly encoded. HttpSchemeStrategy shows the + symbol has been decoded.

protobuf

"TextMessage.proto: TextMessage.proto: Cannot generate Java output because the file's outer class name, "TextMessage", matches the name of one of the types declared inside it. Please either rename the type or use the java_outer_classname option to specify a different outer class name for the .proto file."

The fix is simple. Please apply in GitHub, I did in my GitLab.
https://gitlab.com/rapgro/jvoicexml/commit/82198c4554cd496450af7fb77bc226b24c98a253#diff-0

org.jvoicexml.client.text/etc/proto/TextMessage.proto
option java_outer_classname = "TextMessageOuterClass";

Broken org.jvoicexml tests

On running a standard gradle build, the build fails at task :org.jvoicexml:test with test failures. The generated test report shows 62 of 190 tests failing.

Tests should be corrected or removed / disabled to enable the build to complete successfully.

Test results attached.
test.zip

system does not initiate hangup when using mrcpv2 platform

When the VXML application reaches an the JVoiceXmlSession closes which also close the JVoiceXmlImplementationPlatform. However, I think that this should also invoke org.jvoicexml.mrcpv2.callmanager.SipCallManager.cleanupSession(). Currently, it is only called when the user initiates a hangup and not when the VXML application reaches an ending point. This causes the sip call to stay active until the user hangs up.

Is there a way to propagate this information to the SipCallManager? Can I register maybe register it as a listener somewhere?

Any Other Tutorials To understand Internals And Architecture...?

I have very basic knowledge on voice application. with that i am trying to understand VoiceXML Interpreter. How to use JVoiceXml guide is not clear enough for me. is there any other tutorials or blog post available for JVoiceXml to learn its internals and architecture. and also i want to know is there any maven port for this project..

Unable to Import Project into Eclipse

Is there any quick start guide to run and learn this project. I know maven and i don't know Ant. Simple ant commands wont work in this project. and also i am Unable to import this project into eclipse. Please guide me where to start

audio tag is not rendered as a direct child of a field

JVoiceXml will skip the tag without enclosing the tag.

For example ,

<!—implicit prompt tag example 
<form id="myForm">
        <field name="input">
                <grammar src="builtin:grammar/digits?minlength=6;maxlength=8"/>
                <audio src="17000.wav"/>   <!—this audio will be skipped without enclosing the <prompt>, queueSpeakable will not be invoked.
                <property name="termtimeout" value ="0s"/>
                <filled>…</filled>
        </field>
</form>
<!—explicit prompt tag example 
<form id="myForm">
        <field name="input">
                <grammar src="builtin:grammar/digits?minlength=6;maxlength=8"/>
                <prompt><audio src="17000.wav"/></prompt>   <!—this will be processed normally.
                <property name="termtimeout" value ="0s"/>
                <filled>…</filled>
        </field>
</form>

Build fails due to missing org_jvoicexml_implementation_kinect_KinectRecognizer.h

On first build using gradle build or gradlew build, the build fails with error:

:org.jvoicexml.implementation.kinect:buildJniWin32
  KinectRecognizer.cpp
KinectRecognizer.cpp(24): fatal error C1083: Cannot open include file: 'org_jvoicexml_implementation_kinect_KinectRecognizer.h': No such file or directory [C:\dev\projects\JVoiceXML\org.jvoicexml.implementation.kinect\src\main\cpp\JVoiceXmlKinectRecognizer.vcxproj]
:org.jvoicexml.implementation.kinect:buildJniWin32 FAILED

The required file is created by an earlier build step and written to org.jvoicexml.implementation.kinect\build\include directory. However, it is not available when attempting to build the KinectRecognizer.cpp.

A workaround is to copy the org_jvoicexml_implementation_kinect_KinectRecognizer.h file to org.jvoicexml.implementation.kinect\src\main\cpp and rerun the build.

To resolve, the build.gradle for this component should be corrected to make the required header file available to the buildJniWin32 and buildJniWin64 build steps.

[subdialog] reason to ignore var in a subdialog

is there a specific reason the VarStrategy refuses to initialise vars in a subdialog ?
the VoiceXML spec seems to dictate otherwise

The element invokes a 'called' dialog (known as the subdialog) identified by its src or srcexpr attribute in the 'calling' dialog. The subdialog executes in a new execution context that includes all the declarations and state information for the subdialog, the subdialog's document, and the subdialog's application root (if present), with counters reset, and variables initialized. The subdialog proceeds until the execution of a or element, or until no form items remain eligible for the FIA to select (equivalent to an ). A element causes control and data to be returned to the calling dialog (Section 5.3.10). When the subdialog returns, its execution context is deleted, and execution resumes in the calling dialog with any appropriate elements.

How to use with maven

Hi,
I've successfully compiled JVoiceXML using gradle, but now i want to use it as a maven dependency, is this possible ? if so how can i do that ?

Thanks in advance

Form field properties arent accessible via FIA properties

Property elements with form fields are not being parsed and made accessible. For form 'block' properties, this is done via PropertyStrategy.

Furthermore, to allow bargein, form field properties must be available before prompts are queued.

SRGS SISR JavaScript strings must be escaped before evaluation

in sisr/AddToMatchedText.java and sisr/Context.java javascript strings are built to be executed. For instance, in Context.java in the method updateParentScope(), a string is built for javascript evaluation like:

        context.evaluateString(parentScope, "meta." + ruleName
                + "=function() {return {text:'" + ruleMetaCurrent
                + "', score:1.0}};", "Context:rule set meta." + ruleName, 0,
                null);

It is possible and legal for an utterance to have single quote (apostrope - ') characters in them. Some speech recognizers return strings with these characters. For example:

IVR: "Can I help you with something else?"
Caller: "i'm all set"

Since utterance strings may have single quotes, all generated SISR javascript strings must be properly escaped before evaluation. Otherwise, Javascript execution will fail with syntax errors like:

closeorg.mozilla.javascript.EvaluatorException: missing } after property list

See escapeEcmaScript(String input) - https://commons.apache.org/proper/commons-lang/javadocs/api-3.4/org/apache/commons/lang3/StringEscapeUtils.html#escapeEcmaScript(java.lang.String)

Given the limited domain of strings returned in uterances, it may be sufficient to do a simple
.replace("'", "\\'")
to fix up these strings. I'm not sure.

Cloudgarden support

The JVM crashes when cloudgarden is configured.

Environment

  • Windows 7 64 bit
  • Java version 1.8.0_51 64 bit

Upgrade to commons pool 2

It is know that there ares ome known issues with commons pool. The newer version should be able to better cope with that.

subdialog does not include declarations and state information

JVoiceXML does not include declarations and state information when calling a subdialog. Refer to https://www.w3.org/TR/voicexml20/#dml2.3.4
The element invokes a 'called' dialog (known as the subdialog) identified by its src or srcexpr attribute in the 'calling' dialog. The subdialog executes in a new execution context that includes all the declarations and state information for the subdialog, the subdialog's document, and the subdialog's application root (if present), with counters reset, and variables initialized.

Documentation

Please Update your documentation of the application as per the latest changes as it is difficult to identify the correct way to build project.
I don't about experts but for beginners.
Thanks

Speech Grammar Special Rules: NULL, VOID, GARBAGE

Hey,

I see that these special tokens are mentioned in implementation here, But when I tried to use this special tokens in my grammar

<rule id="choice" scope="public">
		<item>
			<item repeat="0-1"><ruleref uri="#filler"/></item>
			<ruleref special="GARBAGE"/>
			<ruleref uri="#dig2_3"/>
			<ruleref uri="#things"/>
		</item>
		<tag><![CDATA[out.count=rules.dig2_3; out.thing=rules.things;]]></tag>
	</rule>

I got the parsing error "Ruleref is missing or has empty URI" (Because of special rule only, other were compiling okay). It looks like JvoiceXML doesnt provide support for these special rule.

Am I doing something wrong here? Can you please let me know how to handle these special rules? If there is not implementation provided with jvoiceXML, can you please let me know how to do this on my own? Any suggestion/refrence link will be very helpful?

Thanks and Regards,
Ram

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.