I ran into a strange issue the other day while testing my VXML application on Voxeo Prophecy. Originally this caller input function was tested with Avaya, and as I discovered, was never tested on Voxeo. I have long know that Voxeo is much stricter than Avaya, and this is another case where VXML leniency can create issues with cross browser compatibility.

Symptoms

The main symptom was, when trying to enter a 2 digit input on my dial pad, the input was registered as invalid. This is the rule that worked fine on Avaya. But on Voxeo Prophecy I would continue to get is a NoMatch Error, then transfer out. The actual grammar function was to enter a 2 digit month like this:

    <rule scope="public" id="___ROOT___">
        <one-of>
            <item>
                <item>
                    <ruleref uri="#Months_01_12"/>
                </item>
            </item>
        </one-of>
    </rule>
    <rule id="Months_01_12">
        <ONE-OF>
            <item>01</item>
            <item>02</item>
            <item>03</item>
            <item>04</item>
            <item>05</item>
            <item>06</item>
            <item>07</item>
            <item>08</item>
            <item>09</item>
            <item>10</item>
            <item>11</item>
            <item>12</item>
        </ONE-OF>
    </rule>

Resolution

The issue seems to be that Avaya allows there to be multiple digits in a single rule item which essentially allows for overloading the items function.

According to the VXML 2.1 and Grammar 1.0 specification it seems that you can only use a single digit for your rule item

#ABNF 1.0 ISO-8859-1;

mode dtmf;

$digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
public $pin = $digit &lt;4&gt; "#" | "*" 9;

taken from: http://www.w3.org/TR/speech-grammar/

SO what I had to do was separate the each rule into single digit rule references to create the two month rule grammar like:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<grammar root="___ROOT___" mode="dtmf" lang="en-us" xmlns="http://www.w3.org/2001/06/grammar" version="1.0" xml:>

    <rule scope="public" id="___ROOT___">
        <ONE-OF>
            <item>
                <item>
                    <ruleref uri="#Digits_01" />
                </item>
                <item>
                    <ruleref uri="#Digits_09" />
                </item>
            </item>
        </ONE-OF>
        <ONE-OF>
            <item>
                <item>
                    <ruleref uri="#Digits_03" />
                </item>
                <item>
                    <ruleref uri="#Digits_09" />
                </item>
            </item>
        </ONE-OF>
    </rule>

    <rule id="Digits_01">
        <ONE-OF>
            <item>0</item>
            <item>1</item>
        </ONE-OF>
    </rule>

    <rule id="Digits_03">
        <ONE-OF>
            <item>0</item>
            <item>1</item>
            <item>2</item>
            <item>3</item>
        </ONE-OF>
    </rule>

    <rule id="Digits_09">
        <ONE-OF>
            <item>0</item>
            <item>1</item>
            <item>2</item>
            <item>3</item>
            <item>4</item>
            <item>5</item>
            <item>6</item>
            <item>7</item>
            <item>8</item>
            <item>9</item>
        </ONE-OF>
    </rule>
</grammar>

The new grammar works successfully on Voxeo Prophecy voice browser, and well as on Avaya (AVP).

Conclusion

I use Voxeo Prophecy exclusevly for grammar development and for initial testing before I move to my Avaya integration environment. There just seems to be to many non-standard implementations that Avaya allows the developers to get away with, which makes your VXML code not-portable and currently my application is taking >450,000 calls per day from Avaya, Voice Genie, Voxeo and Holly Connect so portable VXML is possible and I feel is attainable.

Mick Knutson

Java, JavaEE, J2EE, WebLogic, WebSphere, JBoss, Tomcat, Oracle, Spring, Maven, Architecture, Design, Mentoring, Instructor and Agile Consulting. http://www.baselogic.com/blog/resume

View all posts

Java / JavaEE / Spring Boot Channel

BLiNC Supporters

BLiNC Adsense

Archives

Newsletter