VoiceXML Grammar Input sequence

490 views Asked by At

I need to allow callers to enter their ID. It is 7 characters long and is a mixture of letters and numbers but there is a structure to it.

Example: F0G0000

  • The first character is always a letter.
  • The second character is always a number.
  • The third can be ether a letter or number.
  • The last 4 characters are always numbers.

Is there any thing that i could do to the grammar to make it switch between letters and numbers according to the structure above?

1

There are 1 answers

1
gawi On BEST ANSWER

Absolutely:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<grammar xmlns="http://www.w3.org/2001/06/grammar" xml:lang="en" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/06/grammar http://www.w3.org/TR/speech-grammar/grammar.xsd" version="1.0" mode="voice" tag-format="semantics/1.0" root="main">

  <rule scope="public" id="main">

    <!-- a letter -->
    <ruleref uri="#letter" /><tag>out = rules.latest</tag>

    <!-- a digit -->    
    <ruleref uri="#digit" /><tag>out += rules.latest</tag>

    <!-- a letter or a digit -->
    <one-of>
      <item><ruleref uri="#letter" /></item>
      <item><ruleref uri="#digit" /></item>
    </one-of>
    <tag>out += rules.latest</tag>

    <!-- 4 digits -->
    <item repeat="4">
      <ruleref uri="#digit" />
      <tag>out += rules.latest</tag>
     </item>

  </rule>

  <rule scope="private" id="letter">
    <one-of>
      <item>a</item>
      <item>b</item>
      <item>c</item>
      <item>d</item>
      <item>e</item>
      <item>f</item>
      <item>g</item>
      <item>h</item>
      <item>i</item>
      <item>j</item>
      <item>k</item>
      <item>l</item>
      <item>m</item>
      <item>n</item>
      <item>o</item>
      <item>p</item>
      <item>q</item>
      <item>r</item>
      <item>s</item>
      <item>t</item>
      <item>u</item>
      <item>v</item>
      <item>w</item>
      <item>x</item>
      <item>y</item>
      <item>z</item>
    </one-of>
  </rule>

  <rule scope="private" id="digit">
    <one-of>
      <item>
        <one-of>
          <item>zero</item>
          <item>oh</item>
        </one-of>
        <tag>out="0"</tag>
      </item>
      <item> one
        <tag>out = 1;</tag>
      </item>
      <item> two
        <tag>out = 2;</tag>
      </item>
      <item> three
        <tag>out = 3;</tag>
      </item>
      <item> four
        <tag>out = 4;</tag>
      </item>
      <item> five
        <tag>out = 5;</tag>
      </item>
      <item> six
        <tag>out = 6;</tag>
      </item>
      <item> seven
        <tag>out = 7;</tag>
      </item>
      <item> eight
        <tag>out = 8;</tag>
      </item>
      <item> nine
        <tag>out = 9;</tag>
      </item>
    </one-of>
  </rule>
</grammar>

Disclaimer: I haven't tested it.