1

私の VoiceXML プロバイダーである Nexmo はxml:lang="es-ES"、ルートの属性を処理していないようです (これは、私のダイアログでvxmlRivr によって生成されます)。context.setLanguage("es-ES")

Nexmo でスペイン語の TTS エンジンを使用したいのですが、Rivr を使用しているため、「プロンプト」に含める場所を指定できる場所がわかりません。たとえば、 xml:lang="es-es-female"VoiceXML を生成します。

<prompt xml:lang="es-es-female">
Hola.
</prompt>

interaction().addPrompt()SpeechSynthesis(私が見る限り)言語オプションを許可しないオブジェクトのみを受け入れます。

また、SpeechSynthesis オブジェクトに SSML を含めようとしましたが ( DocumentFragmentRivr Javadoc にあるように a を使用)、うまくいきません。おそらく Nexmo は SSML をサポートしていません。

回避策はありますか?(より良い VoiceXML プロバイダーへの変更の一部) どうもありがとう!!!

4

1 に答える 1

2

Message ユーザーからの入力を取得せずにメッセージを再生するだけの場合は、次のクラスを使用できます。

//Play a synthesis message in another language
Message message = new Message("synthesis-french-message",
                      new SpeechSynthesis("Ceci est un message."));

message.setLanguage("fr-CA");
DialogueUtils.doTurn(message, context);

でプロンプトの言語を指定する必要がある場合はInteractionInteractionBuilder. メソッドは、メソッドsetLanguage()の前に使用できますaddPrompt()。同じインタラクション内で複数の言語を使用できます。

Interaction interaction = OutputTurns.interaction("multilingual-interaction")
        .setLanguage("es-ES")
        .addPrompt(new SpeechSynthesis("Holá."))
        .setLanguage("fr-CA")
        .addPrompt(new SpeechSynthesis("Bonjour."))
        .build(new SpeechRecognition(new GrammarReference("grammar.grxml")),
               Duration.seconds(2));

DialogueUtils.doTurn(interaction, context);

ビルダーを使用したくない場合は、手動で行うことができますが、はるかに時間がかかります。

List<Interaction.Prompt> prompts = new ArrayList<Interaction.Prompt>();

Interaction.Prompt spanishPrompt = new Interaction.Prompt(new SpeechSynthesis("Holá."));
spanishPrompt.setLanguage("es-ES");
prompts.add(spanishPrompt);

Interaction.Prompt frenchPrompt = new Interaction.Prompt(new SpeechSynthesis("Bonjour."));
frenchPrompt.setLanguage("fr-CA");
prompts.add(frenchPrompt);

SpeechRecognition speechRecognition = new SpeechRecognition(new GrammarReference("grammar.grxml"));

FinalRecognitionWindow finalRecognitionWindow = new FinalRecognitionWindow(speechRecognition,
                                                                           Duration.seconds(2));
Interaction interaction2 = new Interaction("multilingual-interaction2",
                                           prompts,
                                           finalRecognitionWindow);

DialogueUtils.doTurn(interaction2, context);

出力 VoiceXML は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<vxml application="/rivr-cookbook-message-language/dialogue/root/efe10575-1766-48fb-9e13-572a771bc5f4" version="2.1"
  xmlns="http://www.w3.org/2001/vxml">
  <script>application.rivr.localErrorHandling = false; application.rivr.inputTurn = {};</script>
  <form id="form">
    <block name="prompt0">
      <prompt bargein="false" xml:lang="es-ES">Holá.</prompt>
    </block>
    <block name="prompt1">
      <prompt bargein="false" xml:lang="fr-CA">Bonjour.</prompt>
    </block>
    <field name="recognition">
      <grammar mode="voice" src="grammar.grxml" />
      <property name="timeout" value="2000ms" />
    </field>
    <filled mode="any">
      <script>application.rivr.addRecognitionResult()</script>
      <goto next="#submitForm" />
    </filled>
  </form>
  <catch>
    <if cond="_event.substring(0, 5) == &quot;error&quot;">
      <if cond="application.rivr.localErrorHandling">
        <goto next="#fatalErrorForm" />
        <else />
        <script>application.rivr.localErrorHandling=true</script>
      </if>
    </if>
    <script>application.rivr.addEventResult(_event, _message)</script>
    <goto next="#submitForm" />
  </catch>
  <form id="fatalErrorForm">
    <block>
      <exit />
    </block>
  </form>
  <form id="submitForm">
    <block>
      <var expr="application.rivr.toJson(application.rivr.inputTurn)" name="inputTurn" />
      <if cond="application.rivr.hasRecording(application.rivr.inputTurn)">
        <var expr="application.rivr.inputTurn.recordingMetaData.data" name="recording" />
        <assign expr="undefined" name="application.rivr.inputTurn.recordingMetaData.data" />
        <submit enctype="multipart/form-data" method="post" namelist="inputTurn recording"
          next="/rivr-cookbook-message-language/dialogue/efe10575-1766-48fb-9e13-572a771bc5f4/0/multilingual-interaction2" />
        <else />
        <submit method="post" namelist="inputTurn"
          next="/rivr-cookbook-message-language/dialogue/efe10575-1766-48fb-9e13-572a771bc5f4/0/multilingual-interaction2" />
      </if>
    </block>
  </form>
</vxml>
于 2015-09-21T01:24:44.763 に答える