如何从AWS lambda向用户发送多条消息作为答案?

时间:2019-08-21 13:30:10

标签: python amazon-web-services aws-lambda amazon-lex

我已按照教程设置Lex&Lambda。我的lambda函数返回

return {
            "dialogAction": {
                "type": "ConfirmIntent",
                "intentName": "GetPersonInfo",
                "message": {
                    "contentType": "PlainText",
                    "content": ""
                }
            }
        }

,Lex将其显示为单个消息。当我在AWS网站上构建我的机器人时,可以将多个消息设置为答案(不使用lambda),而我想使用lambda函数来实现,就像在img:https://docs.aws.amazon.com/lex/latest/dg/images/default-response-25a.png上一样。

在AWS网站上,我已经准备了多条消息的输出,看起来像这样:

{
  "dialogState": "Fulfilled",
  "intentName": "GetPersonInfo",
  "message": "{\"messages\":[{\"type\":\"PlainText\",\"group\":1,\"value\":\"siema siemanko\"},{\"type\":\"CustomPayload\",\"group\":2,\"value\":\"{\\\"moj\\\":\\\"json\\\"}\"}]}",
  "messageFormat": "Composite",
...
}

我注意到Lex期望lambda输出为“ dialogAction”,并且在“ PostText”和“ PostContent”中使用了多消息功能。我知道,dialogAction用于构建PostText / PostContent对象。

我还想向语音发送不同的消息,以文本形式显示,以JSON显示形式(对于我的前端)。现在,我的解决方案是将所有内容以PlainText消息的形式发送到dialogAction对象中,然后通过前端执行Polly读取准备进行演讲的消息。仅仅使用Lex和lambda就能做到吗?

1 个答案:

答案 0 :(得分:0)

我知道显示多条消息的唯一方法是通过AWS Lex端的Lex配置来做到这一点。举个例子: 1.用话语I want to get information about user {UserEmailAddress}.创建一个意图 2.您创建了一个必需的插槽UserEmailAddress以及非必需的UserFirstNameUserLastName。 3.第一个空位被语音填充后,您就向Lambda导出功能内的后端API发送请求,以通过其电子邮件地址获取有关该用户的信息并填写其他空位(该代码适用于Node 8.10,您可以创建自己的Python版本): `

exports.handler = async (event, context) => {
    ...
    return context.succeed({
        event.sessionAttributes,
        dialogAction: {
            type: "Delegate",
            {
                ...event.currentIntent.slots,
                UserFirstName: httpResponse.firstName,
                UserLastName: httpResponse.lastName
            }
        }
    })
}

` 4.在意图的“响应”部分中,添加多条消息: 以下是用户{UserEmailAddress}的信息 他的名字是{UserFirstName},他的名字是{UserLastName}。 5.添加包含发话的问题作为一个/多个响应的响应卡。例如,问题“您接下来要做什么?”和一个按钮: 按钮标题:“获取他的地址”, 按钮值:“”

理想情况下,对话框应如下所示:

User: I want to get information about user simon@tech.com
Bot: Here is the information about user simon@tech.com
Bot: His first name is Simon his last name is Anderson
Bot: What do you want to do next?
     [Get his address]

当您单击该按钮时,它与广告位的普通响应相同。