replaceDialog(),其中使用dialog.matches定义对话框

时间:2016-09-07 13:45:07

标签: botframework luis

我已将LUIS与我的聊天机器人集成,几乎所有的对话框都是使用dialog.matches()定义的。 问题是某些对话框需要重定向到其他对话框,但replaceDialogbeginDialog似乎不适用于使用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

1 个答案:

答案 0 :(得分:1)

传入matches()的字符串是不匹配对话框名称的Intent。您需要将瀑布作为单独的对话框打破,所以:

options.dialog.matches('startActivity', [
     function (session) {
           session.beginDialog('/startActivity');
     }
]);

bot.dialog('/startActivity', [
     function (session) { },
     function (session, results) {
          session.replaceDialog('/startActivity');
     }
]);