什么';Bot框架(node.js)中endDialog()和endConversion()的区别是什么?

什么';Bot框架(node.js)中endDialog()和endConversion()的区别是什么?,node.js,botframework,Node.js,Botframework,在使用bot框架时,我会混淆endDialog()和endConversion() 他们之间有什么区别 如果我不调用它们,就使用send()?约束是什么?在对话框中,可以调用其他对话框。例如 bot.dialog("/", [ function(session, data, next()){ session.send("Hi"); if(session.message.text === "hello"){ // start

在使用bot框架时,我会混淆
endDialog()
endConversion()

他们之间有什么区别


如果我不调用它们,就使用
send()
?约束是什么?

在对话框中,可以调用其他对话框。例如

   bot.dialog("/", [
    function(session, data, next()){
        session.send("Hi");
        if(session.message.text === "hello"){
            // starts a new dialog
            session.beginDialog("helloDialog");
            next();
        } else {
            next();
        }
    }, function(sesion, data){
        session.send("end of root dialog");
    }
]);

bot.dialog("helloDialog",[
    function(session){
        session.send("inside the hello dialog");
        session.endDialog(); // explicitly ends the dialog
    }
])
当用户输入为hello时,输出为

  • 在hello对话框中
  • “根目录结束”对话框
当用户输入是其他内容时,输出是

  • “根目录结束”对话框
session.endDialog
结束当前对话框,并恢复父对话框。
session.endConversation
结束会话本身

在技术术语中,当调用对话框时,该对话框将移动到称为dialogStack的堆栈中。当从当前对话框调用另一个对话框时,该新对话框将放置在dialogStack的顶部。此新对话框完成其操作后,将从堆栈中弹出此对话框,并恢复最后一个对话框


调用
session.endConversation
时,对话框堆栈会立即清空(但这是一个我不完全确定的行为)

如果我将
endDialog()
替换为
endConversion()
,在您的示例中,输出是hello对话框中的
Hi
-->
。没有根对话框的结尾,是真的吗?是的。虽然我还没有测试(现在无法测试),但我只是检查了
session.endConversation的源代码,它确实会清除对话框堆栈。因此,不应该有
根目录结束对话框