我已将LUIS与我的聊天机器人集成,几乎所有的对话框都是使用dialog.matches()定义的。
问题是某些对话框需要重定向到其他对话框,但replaceDialog
或beginDialog
似乎不适用于使用dialog.matches定义的对话框。
示例:请考虑以下对话框
options.dialog.matches('startActivity', [
function(session) {
})
如何从其他对话框中手动调用它? session.replaceDialog('startActivity')
会抛出错误。
Error: Dialog[*:startActivity] not found.
at Session.replaceDialog (D:\insight\ms-bot\src\api\node_modules\botbuilder\
lib\Session.js:146:19)
at Array.options.dialog.matches.regEx (D:\insight\ms-bot\src\api\dialogs\mor
tgage\mortgage-check-account-balance.dialog.js:7:26)
at Object.waterfallAction [as mortgageCheckBalance] (D:\insight\ms-bot\src\a
pi\node_modules\botbuilder\lib\dialogs\DialogAction.js:130:25)
at IntentDialog.invokeIntent (D:\insight\ms-bot\src\api\node_modules\botbuil
der\lib\dialogs\IntentDialog.js:264:44)
请参阅githib上的this issue
答案 0 :(得分:1)
传入matches()的字符串是不匹配对话框名称的Intent。您需要将瀑布作为单独的对话框打破,所以:
options.dialog.matches('startActivity', [
function (session) {
session.beginDialog('/startActivity');
}
]);
bot.dialog('/startActivity', [
function (session) { },
function (session, results) {
session.replaceDialog('/startActivity');
}
]);