Грамматика VXML dtmf с неизвестным количеством цифр и определенным завершающим символом

Я новичок в VXML и пытаюсь создать встроенную грамматику dtmf, которая позволит возвращать любую последовательность цифр от 1 до 5, заканчивающуюся цифрой 6.

Таким образом, все три из следующих последовательностей должны привести к заливке:

1123236, 236, 55555555552342346

Я пробовал реализовать грамматику так:

<grammar mode="dtmf">
  <rule>
    <item>
      <item repeat"0-">1|2|3|4|5<item>6</item>
    </item>
  </rule>
</grammar>

а еще вот так:

<grammar mode="dtmf">
  <rule>
    <item repeat"0-">1|2|3|4|5</item>
    <item>6</item>
  </rule>
</grammar>

У меня нет идей, и я был бы очень признателен за вашу помощь


person Hendrik Botha    schedule 03.10.2014    source источник
comment
Непонятно, чего вы пытаетесь достичь. Вы имеете в виду, что когда пользователь вводит одну цифру 6, распознаватель должен возвращать приложению случайную последовательность из 1-5 цифр?   -  person dmitri    schedule 03.10.2014
comment
Распознаватель не должен возвращать случайные цифры. Он должен собрать все действительные (1,2,3,4 и 5) числа, введенные пользователем, и вернуться к приложению, как только обнаружит, что пользователь вводит число 6. Распознаватель понятия не имеет, сколько чисел будет введено. и должен вернуться, как только будет введено число 6.   -  person Hendrik Botha    schedule 03.10.2014


Ответы (1)


Вот грамматика, которую вы можете использовать:

<grammar mode="dtmf" version="1.0" root="oneToFiveSequence">

    <rule id="onetofive">
        <one-of>    
            <item>1</item>
            <item>2</item>
            <item>3</item>
            <item>4</item>
            <item>5</item>
        </one-of>   
    </rule>

    <rule id="oneToFiveSequence" scope="public" >
        <one-of>    
            <item repeat="0-">
                <ruleref uri="#onetofive"/>
            </item>     
        </one-of>   
    </rule>
</grammar>

To stop recognition with digit "6" set a property in your VXML form:

<property name="termchar" value="6" />

В форме при обработке «заполненного» события вы будете знать, что последовательность была завершена цифрой «6», поэтому вы можете добавить ее к данным, если это необходимо.

Эквивалентная грамматика единого правила, как указано в комментариях

 <grammar mode="dtmf" version="1.0" root="oneToFiveSequence">
    <rule id="oneToFiveSequence" scope="public" >
        <one-of>    
            <item repeat="0-">      
                <one-of>                
                    <item>1</item>          
                    <item>2</item>          
                    <item>3</item>          
                    <item>4</item>          
                    <item>5</item>          
                </one-of>               
            </item>                 
        </one-of>   
    </rule>
</grammar>

Оба варианта протестированы с голосовой платформой Holly Connects

Вот приложение, которое вы можете использовать для быстрого тестирования.

<?xml version="1.0" encoding="utf-8"?>
<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml">
  <property name="inputmodes" value="dtmf"/>
  <form id="welcome">
    <field name="option">
      <property name="termchar" value="6"/>
      <grammar mode="dtmf" version="1.0" root="oneToFiveSequence">
          <rule id="oneToFiveSequence" scope="public" >
        <one-of>                
            <item repeat="0-">      
          <one-of>                      
              <item>1</item>                
              <item>2</item>                
              <item>3</item>                
              <item>4</item>                
              <item>5</item>                
          </one-of>                     
            </item>                 
        </one-of>               
          </rule>           
      </grammar>        
        <prompt>Enter digits</prompt>
      <filled>          
        <log> You entered <value expr="option"/></log>
      </filled>         
    </field>    
  </form>
</vxml>
person dmitri    schedule 03.10.2014
comment
Мой браузер VXML (Voiceglue v0.14) не поддерживает несколько правил в грамматике. Ваш ответ выглядит правильным, но я не знаю, как его проверить, чтобы поставить отметку «принято». Вероятно, мне следует поднять отдельный вопрос о том, как добиться того же самого с помощью одного правила (т. е. без использования элемента ruleref). Я не знал, что это ограничение браузера, когда задавал вопрос. - person Hendrik Botha; 07.10.2014