8

我尝试基于https://github.com/amzn/alexa-skills-kit-java创建一个 HelloWorld 技能,但是当我测试 lambda 函数时,它显示了这个错误

{
  "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

对我来说,我遇到了这个异常,因为我试图在 Actions 选项卡下没有正确的测试事件 JSON 的情况下运行我的 lambda 函数。如果单击“操作”选项卡,然后单击“配置测试事件”,则应该以它可以解释的 JSON 形式提供函数输入。经过大量查看后,我发现您可以通过转到开发人员控制台来获取此 JSON,您可以在其中创建包含所有技能配置的技能。在左侧单击“测试”选项卡,然后转到“服务模拟器”部分。有一个文本框显示“输入话语”,您可以在其中以文本形式输入语音命令到您的功能,例如“Alexa 告诉 [yourApp] 说 Hello”。点击 'Ask [yourApp] ' 按钮,左侧框会生成一个 Lambda 请求 JSON,右侧的输出。然后只需将左侧的 JSON 复制并粘贴到 lambda 控制台中的测试事件中,就可以了。

于 2017-01-03T02:58:50.280 回答
1

我尝试创建包含在https://github.com/amzn/alexa-skills-kit-java中的地址技能,但我遇到了相同类型的错误。

事实证明,问题出在并在静态 {} 块中DeviceAddressSpeechletRequestStreamHandler创建实例。Set<String> supportedApplicationIds

当我开始new HashSet<>();声明类的属性时,它开始工作了。

于 2017-08-03T21:33:15.153 回答
0

我会将static代码放到您创建的扩展类中SpeechletLambda。我相信,这是在加载此类并执行其静态代码之前进行评估并得到解决的地方。

或者,您可以关闭验证。如果有人非常了解您的开发环境以调用您的私有 lambda 函数,那么他们可能知道足以欺骗您的应用程序 ID。所以验证它没有太多的安全价值。有关将其关闭的示例,请参见此处

于 2016-06-10T13:27:19.373 回答