VXML перейти к новому документу, а запросы в очереди

У меня есть 2 документа VXML, как показано ниже:

<vxml xmlns="http://www.w3.org/2001/vxml" version="2.0">

  <catch event="error.badfetch">
    <prompt> Error in fetching document. end of test</prompt>
    <exit />
  </catch>

  <catch event="error.connection.baddestination">
    <prompt> Error 600. End of test</prompt>
    <exit />
  </catch>

  <form id="main_menu">

    <property name="confidencelevel" value="0.1" />

    <field name="menu_choice" type="digits?maxlength=1">
      <prompt>
        <break time="1s" />
        Enter a number
      </prompt>

      <filled>
        <prompt>
          <break time="1.5s" />
          This is not Google voice
          <break time="2s" />
        </prompt>
        <goto next="doc2.vxml" />
      </filled>
    </field>

  </form>
</vxml>

<?xml version="1.0" ?>

<vxml xmlns="http://www.w3.org/2001/vxml" version="2.0">

  <form id="main">
    <property name="ttsengine" expr="'google-tts'" />

    <block>
      <log>Google TTS test</log>
    </block>
    <field name="menu_choice" type="digits?maxlength=1">
      <prompt>This is Google voice</prompt>

      <filled>
        <goto next="doc1.vxml" />
      </filled>
    </field>
  </form>
</vxml>

Мой вопрос: в doc1.vxml "Это не голос Google" был поставлен в очередь (не воспроизводился), когда для ttsengine было установлено значение mrcp. В doc2.vxml ttsengine был установлен на Google. Затем два запроса: "Это не Google Voice" и "Это Google Voice" были воспроизведены одновременно с использованием движка Google. Это правильно, или 1 следует играть с помощью mrcp, 2-й - с помощью Google?

1 ответ

Из того, что я могу сказать, спецификация VoiceXML не предписывает какого-либо конкретного поведения.

Я ожидал бы, что интерпретатор VoiceXML должен поставить в очередь первое приглашение со всем, что имеет отношение к генерации того же результата, как если бы он воспроизводился там, где он находится в очереди, включая любые нестандартные свойства, влияющие на сгенерированный вывод, такие как ttsengine имущество. К сожалению, стандарт VoiceXML не поддерживает это понятие шага генерации. Он только ставится в очередь или воспроизводится, оставляя неопределенным фактический момент, когда генерируется приглашение. audiofetchhint Это свойство влияет на то, когда платформа VoiceXML действительно извлекает аудиофайлы, но нет эквивалента для синтеза речи.

Если вы добавите fetchaudio на goto элемент, очередь подсказок должна быть сброшена (и, следовательно, сгенерирована) в первом документе. Обратите внимание, что это не обязательно правильный обходной путь, если вы хотите, чтобы эта подсказка воспроизводилась с включенной врезкой во втором вопросе.

Из спецификации:

В то время как в переходном состоянии различные запросы помещаются в очередь, либо элементом в исполняемом содержимом, либо <prompt> элемент в элементах формы. Кроме того, аудио может быть поставлено в очередь атрибутом fetchaudio. Приглашения и аудио в очереди воспроизводятся либо

  • когда интерпретатор достигает состояния ожидания, в этот момент воспроизводятся подсказки, и интерпретатор прослушивает ввод, соответствующий одной из активных грамматик, или
  • когда интерпретатор начинает извлекать ресурс (например, документ), для которого fetchaudio был указан. В этом случае запросы ставятся в очередь перед fetchaudio воспроизводятся до конца, и затем, если ресурс действительно должен быть извлечен (то есть он не является устаревшим в кэше), fetchaudio воспроизводится, пока выборка не завершится. Интерпретатор остается в переходном состоянии, и во время выборки ввод не принимается.

Вам необходимо вернуть управление пользователю, чтобы буфер подсказок очищался перед переходом к следующему документу.

Чтобы все вышеперечисленное работало, добавьте простое меню перед переходом.

Что-то вроде:

menu collect digits 
play digits voice one
menu press 1 to hear the same in another voice
goto voice two
play digits voice two
Другие вопросы по тегам