我似乎想不出如何让Alexa skills lambda函数在本地运行。使用ngrok亚马逊可以正确地连接到我正在运行的sam容器,但我得到的只是一个产生404的POST /。
我从AWSLABS sam repo中为Alexa复制了一个示例:
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发布于 2019-07-10 01:25:50
Alexa Skills可以连接到两种不同类型的后端。它可以是AWS Lambda函数或任何HTTPS exposed web services。您试图将两者混合在一起,这就是您的示例代码不起作用的原因。
当技能作为HTTPS端点托管时,使用AWS Lambda集成与Alexa技能时不需要的it has to provide extra code。例如,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的mocha。这个想法是在Alexa开发人员控制台或Lambda日志中捕获Alexa发送的请求,并在您的笔记本电脑上本地重播。
下面是我用这个技术测试我的技能的一个例子:https://github.com/sebsto/maxi80-alexa/tree/master/lambda/test
您还可以使用第三方测试框架,例如bespoken。下面是我编写的另一个示例,用来展示如何使用定制的本地单元测试:https://github.com/alexa/skill-sample-nodejs-audio-player/tree/mainline/single-stream/test/unit
https://stackoverflow.com/questions/56928939
复制相似问题