首页 > 解决方案 > 来自 lex 中单个 lamda 函数的多个返回语句

问题描述

我正在尝试将机器人从 microsoft azure 迁移到 aws lex。在 azure 中,我们可以使用多个 session.send() 语句向单个用户输入发送多个响应。但是在 aws lex 中,我们不能在 lambda 函数中使用多个 return 语句。

在我的天蓝色机器人中,我每 5 分钟向用户发送一次响应。例如:-

var myVar = setInterval(myTimer, 300000);

function myTimer() {
    session.send(message);
}

如何使用 lambda 函数在 aws lex 中实现这一点。?

标签: azureaws-lambdaaws-lex

解决方案


您将无法从“post-Lex”Lambda 触发第二个响应,这意味着 Lex 之后的 Lambda 函数。您需要一个“pre-Lex”Lambda 函数,将用户输入传递给 Lex 并将 Lex 响应返回给用户。


这是 Lex 机器人的基本设置: 在此处输入图像描述


但这就是您需要它的设置方式: 在此处输入图像描述


它实际上不需要是用户和 Lex 之间的 Lambda 函数,但无论哪种方式,它都需要使用带有PostContentPostText的Lex 运行时服务 API来传递给 Lex。userInput

这是关于他们如何以这种方式使用 Lambda 的 Amazon 博客,他们称之为通道和 Lex 之间的“预处理层”:将您的 Amazon Lex 机器人与任何消息传递服务集成

您会看到他们还使用AWS API Gateway创建一个 HTTPS 端点,以便将用户的通道连接到这个“预处理”Lambda。


在设置任何类型的“预处理”层之后,您可以在其中绕过 Lex 对响应的限制,而只需担心通道的限制。

友情警告:我相信亚马逊在 Lex 中设置了这些限制,以阻止聊天机器人开发人员向用户发送垃圾邮件,当您说“我每 5 分钟向用户发送一次回复”时,听起来肯定会变成垃圾邮件。所以要小心。


推荐阅读