最简单的方法是将现有的 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

将现有的静态html网站集成到现有的vue js web应用程序中

将现有的 Gradle Git 项目导入 Eclipse

AWS Kinesis 连接器库

在 AWS LEX 中从一个意图调用到另一个意图