node.js - 如何在Chatbot中实现 "Back"对话

标签 node.js botframework 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 对话框来实现上述故事?有什么建议吗?

最佳答案

我认为通过合理的努力不可能用 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/

相关文章:

javascript - NodeJS 一些模块不工作

javascript - 同一模板内多次触发事件

node.js - 如何自定义firebase DocumentData接口(interface)?

node.js - 关闭node js登录后弹出的窗口

nlp - 如何从网页访问 Dialogflow V2 API?

node.js - 在对话框流中使用对象列表作为参数设置上下文

javascript - Sequelize js 'include' 和 'raw'

c# - IBotToUser 实现停止事件日志记录

python - 如何构建一个人工智能系统,该系统可以从语料库中学习并在用户询问与该语料库相关的任何问题时回答用户

c# - 更新到 1.2.0.1 后 LuisDialog 不再工作