VXML: Могу ли я переключиться между голосовыми подсказками и подсказками перечисления?

StackOverflow https://stackoverflow.com/questions/3144716

Вопрос

Я использую VXML Powered с помощью двигателя, похожего на TESTME. Я добавляю распознавание голоса к телефонным предложению для системы голосовой почты. Новое меню будет сначала пригласить пользователю устным входом, и если совпадение не найдено, или если вход не найден, пользователь снова не будет предложено в параметрах Touch Tone.

Оригинальные меню выглядят так:

<menu id="msgedit">
        <prompt><enumerate><value expr="_prompt"/>press <value expr="_dtmf"/>.</enumerate></prompt>
        <choice dtmf="9" next="#checkurgent">To deliver your message </choice>
        <choice dtmf="7" next="#playmsg">To play your message </choice> 
        <choice dtmf="3" next="#rerecord">To discard your message and record over </choice>
        <choice dtmf="2" next="#addtomsg">To add to your message </choice>
        <choice dtmf="6" next="#testnumber">To enter a phone number where you may be reached </choice>
        <choice dtmf="1" next="#cancel">To cancel making a message </choice>
        <!-- handle no input/no match -->   
</menu>

Новое меню выглядит так:

<form id="msgedit">
      <field name="choice">
         <prompt>
         <if count == 0">
            Please choose one of the following. 
            deliver, play back, rerecord, add to, 
            enter a callback number, or cancel.
            <else/>
            Please choose one of the following. 
            To deliver your message, press 9. 
            To play back your message, press 7. 
            To discard your message and rerecord, press 3. 
            To add to your message, press 2. 
            To enter a callback number, press 6. 
            To cancel your message, press 1.
         </if>
         </prompt>
      </field>
      <filled>
         <if cond="choice == 'deliver' || choice == '9'">
            <goto next="#checkurgent"/>
            <elseif cond="choice == 'play' || choice == '7'"/>
            <goto next="#playmsg"/>
            <elseif cond="choice == 'rerecord' || choice == '3'"/>
            <goto next="#rerecord"/>
            <elseif cond="choice == 'add' || choice == 'add to' || choice == '2'"/>
            <goto next="#addtomsg"/>
            <elseif cond="choice == 'enter callback number' || choice == 'callback number' || choice =='6'"/>
            <goto next="#testnumber"/>
            <elseif cond="choice == 'cancel' || choice =='1'"/>
            <goto next="#cancel"/>
            <else/>
            <throw event="nomatch"/>
         </if>
      </filled>
      <!-- handle no input/no match -->
   </form>

Тем не менее, я хочу использовать <enumerate> а также <choice> Поведение из исходного меню для воспроизведения вместо длинного текста (который слишком длинный и вызывает ошибку).

Вот вопрос: есть ли способ использовать первый стиль запроса в течение второго стиля подсказки? Могу ли я поставить и внутри поля? и как бы я это сделал?

Это было полезно?

Решение

Элемент выбора специфичен для меню. В то время как можно использовать перечисление в целом подсказки, как он используется в первом примере, он связывает подсказки допустимым входом. Для поля вы получаете доступные входы из определенной грамматики.

На последней точке ваш фрагмент не упоминает грамматику, и поле не указывает на тип. Грамматика определяется на более высоком уровне в документе VoiceXML или встроенная грамматика? Если нет, то это может быть источником вашей ошибки.

Вы можете использовать распознавание речи с меню и вариантами, но способ определяется выбором с перечислением:

Это модифицированный пример из спецификации VoiceXML 2.0:

<menu>
  <choice dtmf="1" next="http://www.sports.example.com/vxml/start.vxml">
    <grammar src="sports.grxml" type="application/srgs+xml"/>
    Press 1 or say Sports for sports scores
  </choice>
  <choice dtmf="2" next="http://www.weather.example.com/intro.vxml">
   <grammar src="weather.grxml" type="application/srgs+xml"/>
   Press 2 or say weather for weather
  </choice>
  <choice dtmf="3" next="http://www.stargazer.example.com/voice/astronews.vxml">
   <grammar src="astronews.grxml" type="application/srgs+xml"/>
   press 3 or say Stargazer astrophysics for ?
  </choice>
</menu>

Если вы поместите подсказки в массив Ecmascript, вы, вероятно, можете также использовать перечисление.

В общем, я бы порекомендовал полевой подход. Вы получаете гораздо большую гибкость для предоставления богатых подсказок и обработки ошибок. Меню / Выбор - это ярлык механизма, который предназначен для простых, ограниченных случаев.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top