2015-09-20 28 views
1

我的VoiceXML提供商,Nexmo,似乎没有处理xml:lang="es-ES"属性根vxml(这是由Rivr产生在我的Dialog context.setLanguage("es-ES")如何Rivr Java的VoiceXML的图书馆指定addPrompt()语言

我想Nexmo使用西班牙语TTS引擎,但为我用的Rivr,我看不到,我可以指定我想要的“提示”包括,例如,xml:lang="es-es-female",所以它产生的VoiceXML:

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

interaction().addPrompt()只接受SpeechSynthesis对象不允许(据我所知)的语言选项。

我也试过在SpeechSynthesis对象中使用SSML(使用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>