例如,如果用户问机器人“天气怎么样”,luis将识别该实体,机器人将询问位置。在那之后,机器人必须从一个点上选择一个答案,并必须用一个答案回复用户。我不能对用户进行‘回复回复’。
提前谢谢。
发布于 2017-07-06 20:20:50
你是否在你的对话中使用了标准的瀑布方法?例如,以下代码取自我构建的一个演示(用TypeScript编写):
bot.dialog("location", [
(sess, args, next) => {
builder.Prompts.choice(sess, "We are showing multiple results. Please choose one:", getEntities(builder, args));
},
(sess, results) => {
sess.send(new builder.Message(sess).addAttachment(dialogs.createHeroCard(sess, parser.findExact("title", results.response.entity))));
}
]).triggerAction({
matches: "location"
});在本例中,LUIS中的intent被标记为"location",因此triggerAction会对其进行匹配。该对话框有两个功能。第一个是在LUIS返回时调用的,它显示一个包含多个选项的选择对话框。当用户选择其中一个选项时,结果将在第二个函数中结束。因此,这包括两个问题。首先,用户询问在哪里举行特定的演讲约定,机器人返回一些与意图匹配的项目(可能在会议上有三个关于“机器人”的演示)。它显示一个包含元素的选择对话框,用户的选择将返回到对话框(但在第二个函数中),并发送所选演示文稿的主人公卡片。
在第一个实例中,机器人使用builder.Prompts.choice()请求选择信息,第二个响应使用session.send()显示结果。
在您的示例中,您可以使用builder.Prompts.text()询问用户的位置,在收到响应(在瀑布的第二个函数中以results.response的形式提供,如果您的函数参数是session和results)时,您将解析该数据,然后使用session.send()显示结果。
因此,如果将其转换为您的示例,您可能会这样做:
bot.dialog("weather", [
(sess, args, next) => {
builder.Prompts.text(sess, "What location do you want weather for?");
},
(sess, results) => {
//Do something with the results
sess.send("Here's the weather!");
}
]).triggerAction({
matches: "weather"
});https://stackoverflow.com/questions/44941975
复制相似问题