The com.voicegenie.strictconformance Property

The com.voicegenie.strictconformance property is set to true, or Yes, to specify that the interpreter should conform strictly to the VoiceXML 2.0 specification in certain scenarios, requiring a set of behaviour changes from previous versions. It is set to false, or No, to choose not to make the set of changes. This property can be configured through the Media Server > VXML menu in the Dialogic(r) IP Media Server Web User Interface.


Default Setting

The com.voicegenie.strictconformance property is initially set to "true". Note that this script option will also affect the naming of call-related events and session variables.

Recommended Configuration

Note: Although the property is set in the platform defaults file, the property can still be configured per application by using multiple platform defaults files. That is, the platform would be configured in general, to use strict conformance, but specific applications could use a separate defaults file that disables strict conformance.


Behaviour Changes

The following chart documents the property's effects (i.e., the behaviour changes between setting com.voicegenie.strictconformance to "true" and "false").

Note: If an application has the <vxml> version attribute set to 2.1 (or higher), the platform will behave as if the com.voicegenie.strictconformance property is set to "true", regardless of its actual value in the platform defaults file.

 

Scenario Behaviour when "true" Behaviour when "false"
The expr and src attributes are used simultaneously in an <audio> element:

<audio src="audio.vox" expr="audiovar"/>
Results in an error.badfetch event being thrown. The value of src overrides expr.
The bridge attribute is not specified for a <transfer> element:

<transfer dest="sip:1234@host.com"/>
The default value is "false" (i.e. use blind transfer). The default value is "true" (i.e. use bridge transfer).
The xmlns attribute is not specified in the <vxml> element. Results in an error.badfetch event being thrown. The xmlns attribute must be specified as follows:

<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
Note that this applies to all application pages, any root pages, and the platform defaults file.
The xmlns attribute is not required.
The version attribute is not specified in the <vxml> element. Results in an error.badfetch event being thrown. The version attribute must be specified as follows:

<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
Note that this applies to all application pages, and the platform defaults file.
The version attribute is not required.
A. Attempt to <assign> to an undeclared variable:

<assign name="myvar" value="42"/>

OR

B. Attempt to make an assignment to an undeclared variable within an ECMAScript <script>:

<script>
  function foo()
  {
    myvar = 42;
  }
</script>



Note: Variables can be declared either by the <var> element in VoiceXML, or by the "var" keyword in ECMAScript.

Either of these scenarios will result in an error.semantic event being thrown.

Note that when the <assign> or <script> is encountered, the error.semantic is thrown at the VoiceXML level. Therefore, the error can only be handled by a matching VoiceXML <catch> or <error>.

The error cannot be caught with a try...catch statement within the ECMAScript itself. For example, the following ECMAScript content will cause the error, but will not catch an exception:

<script>
  function foo()
  {
    try
    {
      myvar = 42;
    }
    catch (e)
    {
      // ...
    }
  }
</script>

Allowed. When <assign> is encountered, variables will be declared if not already declared. Within ECMAScripts, variable definitions without "var" are allowed.
Failure to evaluate a <value> inside <log>:

<log> <value expr="bad expression"/> </log>
Results in an error.semantic event being thrown. The <value> is ignored.
A grammar returns a slot value that contains one or more "#" characters (possibly for an ambiguous result). The slot value is only used up to the first "#" character. The whole unchanged slot value is used.
There are no active grammars when an input is expected. Results in an error.semantic event being thrown. Allowed.
There's no input in a <field> (i.e. a noinput event occurs); what is the status of lastresult$.utteranceaudio? The lastresult$.utteranceaudio shadow variable is not set (i.e. is undefined). Tthe lastresult$.utteranceaudio shadow variable is always assigned an utterance filename, which is passed to the ASR engine to create the utterance audio file. Reference to the utteranceaudio shadow variable in cases where no audio file is created will result in an error.badfetch event being thrown.
There's no input in a <record> (i.e. a noinput event occurs); what is the status of the record shadow variables $.duration, $.size, $.termchar, $.maxtime, $.dest, and $.filetype? The shadow variables are not set. The shadow variables are set.
After DTMF input during a <transfer>; what is the value of the $.inputmode shadow variable? The variable is set to "dtmf" (lowercase). The variable is set to "DTMF" (uppercase).
An invalid element is encountered inside <form>:

<form>
  <dummy/>
  ...
</form>
      
    
Results in an error.badfetch event being thrown. The invalid element is ignored.

 

Scenario Behaviour when "true" Behaviour when "false"
The analysis attribute is not specified for a <transfer> element:

<transfer dest="sip:1234@host.com"/>
The default value is "true" (i.e. perform analysis). The default value is "false" (i.e. don't perform analysis).
An event is caught in a different page (ex. application root) from the page that the event was thrown in. Relative URIs in the catch element are resolved relative to the page that the event was thrown in. Relative URIs in the catch element are resolved relative to the page that catches the event.
A <field>'s type attribute references an invalid builtin type. The error.unsupported.builtin event is thrown at runtime. The error.unsupported.builtin event is thrown at compile time, and therefore cannot be caught by the application.
After a recognition session, more than MAXNBEST (specified by the maxnbest property) results are available from the ASR engine. The length of the application.lastresult$ array will not be longer than MAXNBEST. The application.lastresult$ array may be filled with more than MAXNBEST results.
The value of the session.connection. protocol.<name> session variable. When session.connection. protocol.name is available, the session.connection. protocol.<name> session variable is always defined, with the <name> specified by session.connection. protocol.name. The variable is set to an ECMAScript object (which may or may not have properties, depending on the protocol being used). The session.connection. protocol.<name> session variable is not always defined, depending on the protocol being used.
Use of <prompt> timeout. When the actual time elapsed during a timeout is measured (ex. by using JavaScript in the page), it will never be less than the specified timeout. (It may be slightly longer due to the design of the platform.) The actual timeout elapsed may be slightly shorter than the specified amount.
Use of <prompt> timeout for an empty <prompt> tag (i.e. one that doesn't contain any child elements or text). The timeout will still be processed and used. The timeouts of empty or invalid prompts are ignored.
Different bargein values are specified for each <prompt> in a sequence of queued prompts in an input item. The bargein value of each prompt is honoured during the period of time in which that prompt is playing. Within a given input item, a prompt with bargein="true" will cause bargein to remain enabled for all the remaining queued prompts.
A dialog (i.e. form or menu) transitions back to itself. The dialog's event counters are reset. The values of the dialog's event counters are preserved.