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. Затем 2 подсказки: «Это не голос Google» и «Это голос Google» воспроизводились одновременно с использованием движка Google. Это правильно или 1 нужно играть с помощью mrcp, 2-й с помощью google?


person Charlie    schedule 05.09.2018    source источник
comment
Примерно так должен обрабатываться узел goto для нового документа.   -  person Charlie    schedule 05.09.2018


Ответы (2)


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

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

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

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

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

  • когда интерпретатор достигает состояния ожидания, в этот момент воспроизводятся подсказки, и интерпретатор прослушивает ввод, который соответствует одной из активных грамматик, или
  • когда интерпретатор начинает извлекать ресурс (например, документ), для которого было указано fetchaudio. В этом случае подсказки, поставленные в очередь перед fetchaudio, воспроизводятся до завершения, а затем, если ресурс действительно необходимо извлечь (т. е. срок его действия в кэше не истек), fetchaudio воспроизводится до завершения выборки. Интерпретатор остается в переходном состоянии, и во время выборки ввод не принимается.
person gawi    schedule 10.09.2018
comment
Спасибо за ответ, очень полный. В соответствии с требованиями QA я изменил нашу реализацию, например, doc1 использует mrcp, а 2-й использует google ttsengine. - person Charlie; 12.09.2018

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

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

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

menu collect digits 
play digits voice one
menu press 1 to hear the same in another voice
goto voice two
play digits voice two
person Max CodeSmith    schedule 24.04.2019