我希望在 MS botframework 中实现以下场景对话
Bot: => what can do for you? => User
Bot: <= I want to rent a house <= User
Bot: => Which city? => User
Bot: <= London <= User
Bot: => How many bedrooms => User
Bot: <= Ops, I want a home in New York <= User #User wish to change the topic here..
在 MS botframework 中,如何使用 waterfall 对话框来实现上述故事?有什么建议吗?
最佳答案
我认为通过合理的努力不可能用 waterfall 方法来实现它。在简单的情况下,您可以尝试分析响应,在您的情况下,它是多个卧室,如果它不是数字,您可以检查另一个请求的响应。这里的问题是,您应该对所有回复执行此操作,而对于开放文本回复,将很难区分合法答案或主题更改。
因此,您应该使用意图方法来实现它。
首先,您需要一个意图检测器,您可以使用 Luis,因为它与机器人框架高度集成,或者实现您自己的意图检测器。
在您的情况下,此检测器应该检测意图 - I want to rent a house
(汽车等)。
var intents = new builder.IntentDialog({ recognizers: [luis] });
参见https://docs.botframework.com/en-us/node/builder/chat/IntentDialog 这些代码示例适用于 Node.Js,但相同的方法也适用于 .Net。
然后,对于每个意图,您应该注册一个适当的操作来启动获取所有必要数据的 waterfall 对话框。
bot.beginDialogAction("RentHouseAction", RentHouseDialog.name+":/", { matches: "RentHouseAction"});
其中 RentHouseAction 是您在 Luis 中定义的操作 RentHouseDialog 是一个驻留在库中的 waterfall 对话框。
bot.library(RentHouseDialog);
请注意,当 RentHouseDialog 对话框完成时,它将返回到前一个对话框停止的位置。所以,它再次询问 - How many bedrooms
。
为了防止这种行为,您应该检测到您之前的对话尚未完成(您可以使用收集答案的状态)并调用 session.replaceDialog('<>');
.
希望对你有帮助。
关于node.js - 如何在Chatbot中实现 "Back"对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41908795/