我正在尝试将机器人从 microsoft azure 迁移到 aws lex。 在 azure 中,我们可以使用多个 session.send() 语句向单个用户输入发送多个响应。 但在 aws lex 中,我们不能在 lambda 函数中使用多个 return 语句。
在我的 azure 机器人中,我每 5 分钟向用户发送一个响应。 例如:-
var myVar = setInterval(myTimer, 300000);
function myTimer() {
session.send(message);
}
如何使用 lambda 函数在 aws lex 中实现此目的?
最佳答案
您将无法触发来自“Lex 后”Lambda 的第二个响应,即 Lex 之后的 Lambda 函数。您需要一个“Lex 之前”的 Lambda 函数,它将用户输入传递给 Lex 并将 Lex 响应返回给用户。
<小时/> <小时/> <小时/>它实际上不需要是用户和 Lex 之间的 Lambda 函数,但无论如何,它都需要使用 Lex Runtime Service API与 PostContent或PostText将 userInput
传递给 Lex。
这是一个 Amazon 博客,介绍了他们如何以这种方式使用 Lambda,即 channel 和 Lex 之间的“预处理层”:Integrate Your Amazon Lex Bot with Any Messaging Service
您会看到他们还使用 AWS API Gateway创建 HTTPS 端点,以便将用户的 channel 连接到此“预处理”Lambda。
<小时/>设置任何类型的“预处理”层后,您可以在其中绕过 Lex 对响应的限制,而只需担心 channel 的限制。
友好警告:我相信 Amazon 在 Lex 中设置了这些限制,以阻止聊天机器人开发人员向用户发送垃圾邮件,并且当您说“我每 5 分钟后向user”,听起来确实可能会成为垃圾邮件。所以要小心。
关于azure - lex 中单个 lambda 函数的多个返回语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53065446/