2017-07-06 105 views
0
var bot = new builder.UniversalBot(connector, [ 
function (session, args, next) { 
    if (!session.userData.name) { 
     session.beginDialog('profile'); 
    } else { 
     next(); 
    } 
}, 
function (session, results) { 
    session.send('Hello %s!', session.userData.name); 
}]);bot.dialog('profile', [ 
function (session) { 
    builder.Prompts.text(session, 'Hi! What is your name?'); 
}, 
function (session, results) { 
    session.userData.name = results.response; 
    session.endDialog(); 
}]); 

上述代码取自Microsoft bot框架文档。在这里,我无法理解session.endDialog()的用途。运行此代码后,它会询问用户名并获取输入并用“hello user input”回复。会发生什么事情呢,它一次又一次地循环着。 我想在获取用户名后启动qnamaker对话框,并且应该继续使用qnamaker,并且不应该回到要求用户名的第一个函数。如何结束对话框并启动另一个对话框?

+0

我不明白你的问题。如果你想开始一个新的对话框,使用'session.beginDialog(“dialogName”)'。有关更多信息,请参见[理解对话框](https://docs.microsoft.com/zh-cn/bot-framework/nodejs/bot-builder-nodejs-dialog-overview)。 – nilsw

回答

0

session.endDialog()将结束当前对话框(在您的示例代码中,它将结束配置文件对话框),并将控件返回到调用它的对话框,所以(在您的示例中)控件将返回到默认对话框,唤醒词被发送。

您从微软网站上获取的示例代码只是为了展示一个基本示例,当然它只是有那么几个对话框。对于您想要构建的QnA机器人,您可能希望在该函数中启动QnA功能/对话框,而不是简单地将名称回显给用户,这可能包括启动另一个对话框,具体取决于您想要如何构建它。

相关问题