我希望在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对话框实现上述故事?任何建议?
答案 0 :(得分:0)
我不认为可以通过瀑布方法以合理的努力来实现它。在简单的情况下,您可以尝试分析响应,在您的情况下,它是多个卧室,如果它不是数字,您可以检查另一个请求的响应。这里的问题是你应该为所有回复和开放文本回复做到这一点,很难区分合法答案或主题变化。
因此,您应该使用intent方法实现它。
首先,您需要一个意图检测器,您可以使用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。
然后,对于每个意图,您应该注册一个适当的操作,启动一个获取所有必要数据的瀑布式对话框。
bot.beginDialogAction("RentHouseAction", RentHouseDialog.name+":/", { matches: "RentHouseAction"});
其中RentHouseAction是您在Luis中定义的操作 RentHouseDialog是一个位于库中的瀑布对话框。
bot.library(RentHouseDialog);
请注意,当RentHouseDialog对话框完成后,它将返回上一个对话框已停止的位置。所以,它再次询问 - How many bedrooms
。
为了防止出现这种情况,您应该检测到之前的对话框尚未完成(您可以使用收集答案的状态)并致电session.replaceDialog('<>');
。
我希望它可以帮到你。