我已按照教程设置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就能做到吗?
答案 0 :(得分:0)
我知道显示多条消息的唯一方法是通过AWS Lex端的Lex配置来做到这一点。举个例子:
1.用话语I want to get information about user {UserEmailAddress}.
创建一个意图
2.您创建了一个必需的插槽UserEmailAddress
以及非必需的UserFirstName
和UserLastName
。
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]
当您单击该按钮时,它与广告位的普通响应相同。