2017-03-01 57 views
0

我想將使用BotFramework和LUIS的我的bot分離到它自己的庫中,並將它導入app.js.我遵循BotFramework GitHub上的教程和示例,但它讓我無處可尋。有一次,我把路易斯·對話機器人到它自己的文件,並將其導出,它從來沒有伸出手來LUIS:用LUIS分離BotFramework NodeJS Bot到自己的庫中

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()); 

我怎樣才能達到這個正常嗎?我沒有想過這是正確的方式嗎?

UPDATE

我能夠通過使用不同的語法向L​​uis BOT隔離(bot.dialog聯手triggerAction):

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 
}); 

最後剩下的問題,我有是,父app.js需要擁有LUIS端點,如果我的子機器人有或沒有,則無關緊要。任何額外的想法?

+0

是代碼頂塊「./bots/changeName」或內容是你的原始的不分離機器人的內容?你似乎是兩次創建bot實例?即兩個電話給建設者.UniversalBot?您需要使用RequireJS的module.export從包含的庫中導出函數,並將在您的服務器中創建的機器人實例傳遞給該函數。 – Gareth

+0

我對這個框架有點新,所以我不確定我是否創建了兩次。但是,當我導出機器人本身時,我得到了相同的錯誤:module.exports = {bot}; 我的意圖是能夠導入多個LUIS啓用的機器人,每個都有自己的LUIS端點應用程序到一個位置,以構建出我自己的框架並使代碼更易於維護。從我能告訴我最大的問題是語法,但我甚至確定botframework是否支持NodeJS中的這種思維方式。 –

回答

0

使用這個代碼將隔離機器人,並允許它被稱爲成app.js文件,使用LUIS:

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 
}); 
相關問題