【问题标题】:Multiple return statements from single lamda function in lex来自 lex 中单个 lambda 函数的多个返回语句
【发布时间】:2018-10-31 00:58:29
【问题描述】:

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

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

var myVar = setInterval(myTimer, 300000);

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

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

【问题讨论】:

    标签: azure aws-lambda aws-lex


    【解决方案1】:

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


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


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


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

    这是一篇关于他们如何以这种方式使用 Lambda 的 Amazon 博客,他们称之为通道和 Lex 之间的“预处理层”:Integrate Your Amazon Lex Bot with Any Messaging Service

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


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

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

    【讨论】:

    • 谢谢,但我有一个疑问,我的 azure 聊天机器人在 slack 上被解散了,那么使用这个 pre-Lex lambda 函数将如何发生。来自 slack 的消息将如何使用 aws slack 集成发送到 lambda,因为当我们在 slack 上部署 lex 机器人时,输入只发送到 lex,从 lex 发送到 lambda。
    • 另外,这 5 分钟的间隔不是垃圾邮件,我的机器人就像一个轮询机器人,所以每 5 分钟它会在代码中执行一次 API 调用,并根据结果向用户显示价值。不确定这个 pre-Lex lambda 函数将如何集成到 slack。我想要来自 slack 的用户输入,然后它应该开始轮询并在每 5 分钟后显示结果。
    • 您可以提出一个新问题:“如何将 Slack 与 Lambda 集成?”但这里有几个来自 Slack API 的链接:Creating an AWS Lambda Function and API EndpointHandling events from the Events API using AWS Lambda感谢您解释它不是垃圾邮件,我会将友好警告留给其他人。
    猜你喜欢
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2012-04-02
    • 2014-04-10
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多