如何在 Chatbot 中实现 "Back" 对话

How to implement "Back" conversation in Chatbot

我希望在 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 dialog来实现上面的故事?有什么建议吗?

我认为不可能通过合理的努力使用瀑布方法来实现它。在简单的情况下,您可以尝试分析响应,在您的情况下它是一些卧室,如果不是数字,您可以检查另一个请求的响应。这里的问题是你应该对所有回复都这样做,而对于开放文本回复,很难区分合法答案或主题更改。

因此,您应该使用意图方法来实现它。

首先,您需要一个意图检测器,您可以使用 Luis,因为它与 bot 框架高度集成,或者实现您自己的意图检测器。

在你的情况下,这个检测器应该检测到意图 - 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 对话框完成时,它将 return 到上一个对话框停止的地方。所以,它再次询问 - How many bedrooms。 为了防止这种行为,您应该检测到您之前的对话尚未完成(您可以在收集答案时使用它的状态)并调用 session.replaceDialog('<>');.

希望对你有所帮助