8

https://github.com/amzn/alexa-skills-kit-javaに基づいて HelloWorld スキルを作成しようとしましたが、ラムダ関数をテストすると、このエラーが表示されました

{
  "errorMessage":"com.amazon.speech.speechlet.SpeechletRequestHandlerException: Could not validate SpeechletRequest null using verifier ApplicationIdSpeechletRequestVerifier, rejecting request",

  "errorType": "java.lang.RuntimeException",

  "stackTrace": [    "com.amazon.speech.speechlet.lambda.SpeechletRequestStreamHandler.handleRequest(SpeechletRequestStreamHandler.java:101)",
 "helloworld.HelloWorldSpeechletRequestStreamHandler.handleRequest(HelloWorldSpeechletRequestStreamHandler.java:43)"

 ],

  "cause": {

    "errorMessage": "Could not validate SpeechletRequest null using 
verifier ApplicationIdSpeechletRequestVerifier, rejecting request",
    "errorType": "com.amazon.speech.speechlet.SpeechletRequestHandlerException",

    "stackTrace": [
      "com.amazon.speech.speechlet.SpeechletRequestHandler.handleSpeechletCall(SpeechletRequestHandler.java:73)",
      "com.amazon.speech.speechlet.lambda.SpeechletRequestStreamHandler.handleRequest(SpeechletRequestStreamHandler.java:98)",
      "helloworld.HelloWorldSpeechletRequestStreamHandler.handleRequest(HelloWorldSpeechletRequestStreamHandler.java:43)"
    ]
  }
}

これは私のJavaファイルです

public final class HelloWorldSpeechletRequestStreamHandler 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.echo-sdk-ams.app.[amzn1.echo-sdk-ams.app.56bcdaf9-97fc-47f9-9918-43cb6a90d9f5]");
    }


    public HelloWorldSpeechletRequestStreamHandler() {
        super(new HelloWorldSpeechlet(), supportedApplicationIds);
    }
}

私は何が欠けていますか??

4

4 に答える 4

10

サポートされているアプリケーション ID に間違った ID があります。この ID は、スキル情報ページにある Alexa Skills アプリケーションの ID である必要があります。次のようになります。

supportedApplicationIds.add("amzn1.ask.skill.c236d019-7d2a-5c96-a02f-ef8ab6f8e023");

デモには [place id here] が含まれていることは知っていますが、実際にはすべてを置き換えます。

于 2016-10-25T18:20:32.277 に答える
8

私にとっては、[アクション] タブで適切なテスト イベント JSON なしでラムダ関数を実行しようとしたため、この例外が発生しました。[アクション] タブをクリックしてから [テスト イベントの構成] をクリックすると、解釈可能な JSON 形式で関数入力を指定することになります。よく調べた結果、すべてのスキル構成を含むスキルを作成した開発者コンソールに移動すると、この JSON を取得できることがわかりました。左側の [テスト] タブをクリックし、[サービス シミュレーター] というセクションに移動します。「発話を入力してください」というテキスト ボックスがあり、機能への音声コマンドをテキストで入力できます。たとえば、「Alexa tell [yourApp] to say Hello」などです。[Ask [yourApp]] ボタンをクリックすると、左側のボックスに Lambda リクエストの JSON が生成されます。右側に出力があります。次に、左側の JSON をコピーして、ラムダ コンソールのテスト イベントに貼り付けるだけで問題ありません。

于 2017-01-03T02:58:50.280 に答える
0

static拡張する作成したクラスにコードを配置しますSpeechletLambda。これは、このクラスがロードされてその静的コードが実行される前に、評価が行われ、解決される場所だと私は信じています。

または、検証をオフにすることもできます。誰かが開発環境をよく知っていて、プライベート ラムダ関数を呼び出すことができる場合、その人はアプリケーション ID を偽装するのに十分な知識を持っている可能性があります。したがって、それを検証するセキュリティ上の価値はあまりありません。オフにする例については、こちらを参照してください。

于 2016-06-10T13:27:19.373 に答える