0

私はVUIとAlexaにはかなり新しいです。私はAlexa Voice Servicesの優れたスキルを開発しました。今では第二言語を追加したいと思います。私は the develop documationのチュートリアルを見つけましたが、EclipseとJavaを使ってこのようなラムダ関数を作成しています。walkthrough 問題は、ラムダ関数で第2言語オプションを有効にする方法がわかりません。私は両方の言語に同じラムダ関数を使用する必要があります。Javaを使用して多言語Alexaスキルを作成するには?

私のStreamRequestHandler:

public class ApiOmatBlogSpeechletStreamRequestHandler extends SpeechletRequestStreamHandler { 
private static final Set<String> supportedApplicationIds = new HashSet<String>(); 
static { 
    /* 
    * This Id can be found on https://developer.amazon.com/edw/home.html#/ "Edit" the relevant 
    * Alexa Skill and put the relevant Application Ids in this Set. 
    */ 
    supportedApplicationIds.add("amzn1.ask.skill.xxxxxxxx"); 
} 

public ApiOmatBlogSpeechletStreamRequestHandler() { 
    super(new ApiOmatBlogSkillSpeechlet(), supportedApplicationIds); 
    System.out.println("Super ApiOmatBlogSpeechletStreamRequestHandler"); 
} 

}

マイSpechlet:

public SpeechletResponse onIntent(IntentRequest intentRequest, Session session) { 
    Intent intent = intentRequest.getIntent(); 
    String intentName = (intent != null) ? intent.getName() : null; 
    System.out.println("onIntent requestId={ " + intentRequest.getRequestId() + " }, sessionId={ " 
      + session.getSessionId() + " } "); 

    Integer step = (Integer) session.getAttribute("step"); 
    System.out.println("IntentName= " + intentName + " | step = " + step); 

    if ("AMAZON.HelpIntent".equals(intentName)) { 
     return getHelpResponse(); 
    } else if ("AMAZON.StopIntent".equals(intentName)) { 
     return getStopResponse(); 
    } else if (step != null) { 
     return testing(intent, session, step); 
    } else { 
     if ("TestIntent".equals(intentName)) { 
      step = 1; 
      session.setAttribute("step", step); 
      return testing(intent, session, step); 
     } else { 
      SsmlOutputSpeech speechText = new SsmlOutputSpeech(); 

      speechText.setSsml("<speak> " + "The intent is invalid." + "Please repeat your demand. " 
        + "<break time='0.5s'/> " + " </speak>"); 

      // Create reprompt 
      PlainTextOutputSpeech speech2 = new PlainTextOutputSpeech(); 
      speech2.setText("I'm sorry. Please repeat your statement."); 
      Reprompt reprompt = new Reprompt(); 
      reprompt.setOutputSpeech(speech2); 

      return SpeechletResponse.newAskResponse(speechText, reprompt); 
     } 
    } 
} 

/** 
* This function will be called if you say 'start' 
*/ 
public SpeechletResponse onLaunch(final LaunchRequest request, final Session session) throws SpeechletException { 
    System.out.println(
      "onLaunch requestId={ " + request.getRequestId() + " }, sessionId={ " + session.getSessionId() + " } "); 

    return getHelpResponse(); 
} 

はあなたがそれぞれの言語をサポートするために、異なるラムダロジックを必要としないあなたに

答えて

0

公式ドキュメントを読んでください。 私は、ユーザーがどの言語を話すかを尋ねることで解決しました。 Spechlet.javaで

私は、コードを追加:

private Boolean german; 
    public SpeechletResponse onIntent(IntentRequest intentRequest, Session session) { 
     if (intentRequest.getLocale().getLanguage().equals(new Locale("de").getLanguage())){ 
      System.out.println("Spoken language == Deutsch"); 
      german=true; 
     }else{ 
      System.out.println("Spoken language == Englisch"); 
      german=false; 
     } 
... 
} 

と私はブールドイツと協力し、私の応答を設定することができfollwingを。

2つの言語で動作する優れたソリューションがある場合は、投稿された回答またはコメントをお待ちしています。しかし、現時点では、これはJavaで多言語を扱う最良の回避策です。

0

ありがとうございます。リージョンに基づいて複数のラムダ関数を作成して、レイテンシを回避することができます。複数のエンドポイントにコードを展開する場合は、すべてのエンドポイントで同じコードを維持する必要があります。コードでは、サポートするすべての言語を処理する必要があります。あなたがする必要がある唯一のセットアップは、以下のマークされているAlexaのスキル情報に

enter image description here

を言語をサポートアレクサを追加することであるそれはそれを解決するためには非常に困難ですhere

+0

私は英語のスキルを作成しているので、そうではありません。回答テキストも英語です。今、私は第二言語、ドイツ語を追加しました。開発者のポータルでは、2番目のラムダ関数を使用できませんでした。私は英語とドイツ語の同じ機能を使用する必要があります。私はドイツ語のモードで英語の回答を得たくないので、スキルがドイツ語か英語かを決定する必要があります。 –

+0

私が提供したドキュメントのリンクを読んだ場合、「コードはサポートしているすべての言語を処理する必要があります」というメッセージが表示されている可能性があります。 –

+0

これはまさにポイントです!しかし、JavaのドキュメンテーションとJavaのドキュメンテーションはありません。ラムダ関数で言語を分割するにはどうすればよいですか。質問には次のような質問があります: "問題は、ラムダ機能... " –

関連する問題