Amazon web services 如何设置sam cli以启动Alexa skills lambda进行测试?

Amazon web services 如何设置sam cli以启动Alexa skills lambda进行测试?,amazon-web-services,alexa-skills-kit,aws-sam-cli,Amazon Web Services,Alexa Skills Kit,Aws Sam Cli,我似乎不知道如何让Alexa skills lambda函数在本地运行。使用ngrokAmazon可以正确地连接到我正在运行的sam容器,但我得到的只是一个POST/,结果是404 我从Alexa的sam repo复制了一个样本: AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Description: Demonstrates a basic skill built with the

我似乎不知道如何让Alexa skills lambda函数在本地运行。使用
ngrok
Amazon可以正确地连接到我正在运行的sam容器,但我得到的只是一个
POST/
,结果是404

我从Alexa的sam repo复制了一个样本:

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: Demonstrates a basic skill built with the Amazon Alexa Skills Kit.
Parameters: 
  TopicNameParameter: 
    Type: String
Resources:
  alexaskillskitcolorexpert:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: .
      Description: Demonstrates a basic skill built with the Amazon Alexa Skills Kit.
      MemorySize: 128
      Timeout: 3
      Policies:
        - SNSPublishMessagePolicy:
            TopicName: !Ref TopicNameParameter
      Events:
        AlexaSkillEvent:
          Type: AlexaSkill

Alexa Skills可以连接到两种不同类型的后端。它可以是AWS Lambda函数或任何函数。您试图将两者混合,这就是示例代码无法工作的原因

当一项技能作为HTTPS端点托管时,在将AWS Lambda inetgration与Alexa Skills一起使用时,这不是必需的。例如,Alexa服务将通过HTTP POST发送您的技能必须回复的签名请求。另一方面,当作为AWS Lambda函数托管时,不需要签名,因为AWS Lambda触发机制确保只有Alexa服务可以调用您的技能代码

您下载的示例将代码公开为AWS Lambda函数,并创建Lambda触发器以授权Alexa服务调用您的函数。这是这里的一行:

Events:
        AlexaSkillEvent:
          Type: AlexaSkill
但是,当您通过
ngrok
公开本地运行的代码时,您正在切换到另一种模式:自定义HTTPS端点。因此,Alexa服务希望您的代码回答它发送的
POST
请求,而示例没有这样做

我建议不要使用
ngrok
测试作为AWS Lambda函数公开的Alexa技能。仅当您计划测试要部署为Alexa Skill自定义HTTPS端点的代码时,才使用
ngrok

要在本地测试代码,您可以使用单元测试框架,例如NodeJS。想法是在Alexa开发者控制台或Lambda日志中捕获Alexa发送的请求,并在笔记本电脑上本地重播

下面是一个我用这个技巧测试自己技能的例子:


您还可以使用第三方测试框架,例如。下面是我写的另一个例子,展示了如何使用bespoken进行本地单元测试:

我想我得到了您发布的内容,非常感谢。我也找到了进入项目的途径。我想我想学山姆的东西。允许本地sam启动的lambda与HTTPS端点一起运行需要什么?这显然不会用于任何类型的生产——甚至不会用于其他beta测试人员。这将大大简化和加速我的迭代。(对于我的第一项技能,我发现即使使用askcli,一次又一次地进行单个stmt更改和部署也是非常烦人的。>>)我不建议从AWSLAPES示例开始,因为它们很旧,并且没有使用最新的Alexa skill SDK。有很多锅炉铭牌代码需要编写。看看Alexa Skill命令行,这将在几分钟内启动一个新项目。我知道这不能回答你的韩国问题。今天我将设法抽出时间来建立一个例子。其思想是编写代码来处理在本地运行时将接收到的HTTP请求,并使用HTTP框架(如Express)将请求路由到代码。这段代码显示了一个示例(它基于旧的Alexa SDK,带有
This.emit()
不要使用它),但目的是展示如何使用express处理HTTP请求并路由到您的代码)太棒了!我会在明天的休息时间达到高峰。感谢您跟踪此问题。