Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 将带有LUIS的BotFramework NodeJS Bot隔离到自己的库中_Node.js_Botframework_Azure Language Understanding - Fatal编程技术网

Node.js 将带有LUIS的BotFramework NodeJS Bot隔离到自己的库中

Node.js 将带有LUIS的BotFramework NodeJS Bot隔离到自己的库中,node.js,botframework,azure-language-understanding,Node.js,Botframework,Azure Language Understanding,我想将使用BotFramework和LUIS的bot隔离到它自己的库中,并将其导入app.js。我遵循了BotFramework GitHub上的教程和示例,但这对我毫无帮助。一旦我将带有LUIS对话的机器人放入它自己的文件并导出,它就再也不会接触LUIS: var builder = require('botbuilder'); //Import our libraries var profileDialogue = require('../dialogues/profileDialogue

我想将使用BotFramework和LUIS的bot隔离到它自己的库中,并将其导入app.js。我遵循了BotFramework GitHub上的教程和示例,但这对我毫无帮助。一旦我将带有LUIS对话的机器人放入它自己的文件并导出,它就再也不会接触LUIS:

var builder = require('botbuilder');

//Import our libraries
var profileDialogue = require('../dialogues/profileDialogue');

//=========================================================
// Bot Setup
//=========================================================

// Create chat bot
var bot = new builder.UniversalBot(null, null, 'changeName');

// Add locale tools library to bot
bot.library(profileDialogue.createLibrary());

// Export createLibrary() function
exports.createLibrary = function() {
    return bot.clone();
}

var model = URL;
var recognizer = new builder.LuisRecognizer(model);
var dialog = new builder.IntentDialog({ recognizers: [recognizer] });

//=========================================================
// Bots Dialogs
//=========================================================

bot.dialog('/changeName', dialog);

bot.dialog('change name', [
    function(session, args, next) {
        console.log(args);
        if (args.score > 0.5) {
            profileDialogue.profile(session);
        }
    },
    function(session, results) {
        session.send('Ok... Changed your name to %s', session.userData.name);
    }
]);
此代码仅在节点调用的app.js文件中存在时有效,而在我想将其隔离以在其他机器人程序中使用时不起作用

这是我的app.js:

var restify = require('restify');
var builder = require('botbuilder');

//Import our libraries
var changeName = require('./bots/changeName');

//=========================================================
// Bot Setup
//=========================================================

// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function() {
    console.log('%s listening to %s', server.name, server.url);
});

// Create chat bot
var connector = new builder.ChatConnector({
    appId: process.env.MICROSOFT_APP_ID,
    appPassword: process.env.MICROSOFT_APP_PASSWORD
});
var bot = new builder.UniversalBot(connector);

server.post('/api/messages', connector.listen());

//=========================================================
// Bots Dialogs
//=========================================================

bot.dialog('/', [function(session, args, next) { session.send("I don't understand") }]);

// Add locale tools library to bot
bot.library(changeName.createLibrary());
我怎样才能正确地做到这一点?我不是这样想的吗

更新

我能够通过使用不同的语法(bot.dialog与triggerAction合作)隔离LUIS机器人:


我还有最后一个问题,父app.js需要有LUIS端点,不管我的子机器人是否有它。任何其他想法?

使用此代码将隔离bot,并允许使用LUIS将其调用到app.js文件中:

bot.dialog('/changeName', [
    function(session, args, next) {
        if (args && args.intent && args.intent.score && args.intent.score > 0.5) {
            console.log(args);
            profileDialog.profile(session);
        }
    },
    function(session, results) {
        session.send('Ok... Changed your name to %s', session.userData.name);
    }
]).triggerAction({
    matches: 'change name',
    intentThreshold: .50
});

顶部代码块是“./bots/changeName”的内容还是原始未分离bot的内容?您似乎要创建两次bot实例?即两次呼叫builder.UniversalBot?您需要使用RequireJS的module.export从包含的库中导出函数,并将在服务器中创建的bot实例传递到该函数中。我对该框架有点陌生,因此我不确定是否创建了两次。但是,当我导出bot本身时,我使用以下命令得到相同的错误:module.exports={bot};我的目的是能够将多个启用LUIS的机器人(每个机器人都有自己的LUIS端点应用程序)导入到一个位置,以构建我自己的框架,并使代码更易于维护。据我所知,我最大的问题是语法,但我甚至确定botframework是否支持NodeJS中的这种思维方式。
bot.dialog('/changeName', [
    function(session, args, next) {
        if (args && args.intent && args.intent.score && args.intent.score > 0.5) {
            console.log(args);
            profileDialog.profile(session);
        }
    },
    function(session, results) {
        session.send('Ok... Changed your name to %s', session.userData.name);
    }
]).triggerAction({
    matches: 'change name',
    intentThreshold: .50
});