最简单的方法是将现有的 AWS Lex 和 Lambda 部署为 Alexa Skills Kit (ASK)?
Posted
技术标签:
【中文标题】最简单的方法是将现有的 AWS Lex 和 Lambda 部署为 Alexa Skills Kit (ASK)?【英文标题】:What is the simplest way is to deploy an existing AWS Lex and Lambda as an Alexa Skills Kit (ASK)? 【发布时间】:2022-01-07 14:24:21 【问题描述】:我目前有一个 Lex 机器人,它需要我的 AWS 账户上的 Lambda 函数。我想把这个现有的机器人变成一个 Alexa Skill,但不能轻易迁移。
到目前为止我做了什么:
发布 Lex Bot 版本并导出为 ASK 将 JSON 文件导入 Alexa 开发者控制台 JSON 编辑器 按照 this 教程让我的 Alexa Skill 和 Lambda 函数相互访问我已经检查了 CloudWatch Logs,Alexa Skill 似乎可以正确调用我的函数,但是,它无法实现意图。当它到达意图对话的末尾时,Amazon Skill 只会说:
You just triggered [IntentName]
我了解JSON format is different for Alexa and Lex和返回格式如下:
// Alexa return
return handlerInput.responseBuilder
.speak(speakOutput)
.reprompt(speakOutput)
.getResponse();
// AWS Lex return
return
sessionAttributes: attributes,
dialogAction:
type: 'Close',
fulfillmentState: fulfillStatus,
message:
contentType: "PlainText",
content: messageContent,
;
是否有任何简单的方法可以将我现有的 Lambda 函数转换为使用 Alexa Skill 而无需重写整个内容?
【问题讨论】:
【参考方案1】:我的问题的答案是:不。由于 Lex 和 Alexa 使用不同的 API,因此无法将我现有的 Lex 特定 Lambda 函数与 Alexa 一起使用。
我发现最接近使用一个 Lambda 的方法是创建一个 middleware to determine what client type is calling the Lambda,然后分别处理 Lex API calls 和 Alexa API calls。此代码来自 AWS QnABot GitHub。
在我看来,这似乎与单一职责的想法背道而驰。由于无论如何他们都使用不同的代码,因此创建 2 个单独的 Lambda 似乎会更好。请让我知道您对此的看法。
很遗憾,Lex 代码无法简单地转换为 Alexa。希望 AWS 团队将来为此创建一个简单的解决方案。
【讨论】:
以上是关于最简单的方法是将现有的 AWS Lex 和 Lambda 部署为 Alexa Skills Kit (ASK)?的主要内容,如果未能解决你的问题,请参考以下文章
如何将现有的 dynamo db 与 AWS Amplify 和 graphql 一起使用
如何使用 Terraform 将现有的“aws_route53_record”CNAME 更新/修改为 ALIAS