2015-09-20 2 views
1

Мой провайдер VoiceXML, Nexmo, кажется, не обрабатывать атрибут xml:lang="es-ES" в корне vxml (Это порождается Rivr с context.setLanguage("es-ES") в моем диалоге)Как указать язык в addPrompt() в библиотеке Rivr Java VoiceXML

Я хочу Nexmo использовать испанский TTS двигатель, но, как я использую Rivr, я не могу видеть, где я могу указать, что я хочу «приглашение», чтобы включить, например, xml:lang="es-es-female", поэтому он генерирует VoiceXML:

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

interaction().addPrompt() принимает только объект SpeechSynthesis, который не позволяет (насколько я вижу) вариантов языка.

Я также попытался включить SSML в объект SpeechSynthesis (используя DocumentFragment, как я вижу в Rivr Javadoc), но это не сработает. Вероятно, Nexmo не поддерживает SSML.

Любые обходные пути? (Часть от перехода на лучшего поставщика VoiceXML) Спасибо большое!

ответ

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); 

Если вам необходимо указать язык для строки в качестве Interaction, это может быть сделано с помощью InteractionBuilder. Метод 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> 

 Смежные вопросы

  • Нет связанных вопросов^_^