来自 lex 中单个 lambda 函数的多个 return 语句

Multiple return statements from single lamda function in lex

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

在我的 azure bot 中,我每 5 分钟向用户发送一次响应。 例如:-

var myVar = setInterval(myTimer, 300000);

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

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

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


这是 Lex 机器人的基本设置:


但这就是您需要的设置方式:


它实际上不需要是用户和 Lex 之间的 Lambda 函数,但无论哪种方式,它都需要使用 Lex Runtime Service API with PostContent or PostTextuserInput 传递给 Lex。

这是一篇关于他们如何以这种方式使用 Lambda 的 Amazon 博客,在他们称之为通道和 Lex 之间的 "pre-processing layer" 中:Integrate Your Amazon Lex Bot with Any Messaging Service

您会看到他们还使用 AWS API Gateway 创建 HTTPS 端点,以便将用户的通道连接到此 "pre-processing" Lambda。


设置任何类型的 "pre-processing" 层后,您可以在其中绕过 Lex 对响应的限制,而只需担心通道的限制。

友情警告: 我相信亚马逊已经在 Lex 中设置了这些限制,以阻止聊天机器人开发人员向用户发送垃圾邮件,当你说 "I am sending a response after every 5 minute to the user" ,听起来肯定会变成垃圾邮件。所以要小心。