Node.js:如何使用MS Bot框架在Slack中发送直接消息?

我正在尝试使用LUIS创build一个Slack机器人,当机器人在添加的频道中看到问候语时,它会向发送问候语的用户发送直接消息。

我看了Issue #431并写了一个bot。 这是我的代码:

var builder = require('botbuilder'); var restify = require('restify'); // 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); }); server.get(/.*/, restify.serveStatic({ 'directory': '.', 'default': 'index.html' })); // 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, { persistConversationData: true // need persistent data for dictionary }); server.post('/api/messages', connector.listen()); // Create LUIS recognizer that points at our model and add it as the root '/' dialog var model = (omitted); var recognizer = new builder.LuisRecognizer(model); var dialog = new builder.IntentDialog({ recognizers: [recognizer] }); bot.dialog('/', dialog); // Add intent handlers dialog.matches('Greeting', [ function(session, args, next) { var language = builder.EntityRecognizer.findEntity(args.entities, 'Language'); next({ response: language }); }, function(session, results) { bot.beginDialog({ text: 'Hello', to: {channelId: "emulator", address:"User1", id:"(omitted)", isBot:false}, from: { channelId:"emulator", address:"Bot1", id:"(omitted)", isBot:true} }, '/'); } ]); 

然而,目前当机器人收到一个问候,它会给出以下错误信息:

 ERROR: ChatConnector: startConversation - address is invalid. Error: Invalid address. at ChatConnector.startConversation (C:\..\node_modules\botbuilder\lib\bots\ChatConnector.js:173:18) at C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:308:27 at UniversalBot.tryCatch (C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:381:13) at UniversalBot.ensureConversation (C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:302:14) at C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:163:19 at C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:337:53 at UniversalBot.tryCatch (C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:381:13) at C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:337:23 at UniversalBot.tryCatch (C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:381:13) at UniversalBot.lookupUser (C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:324:14) 

(我省略了目录的一部分)

我已经看过问题#687,但我仍然无法弄清楚问题所在。 我怎样才能使机器人工作?

我正在使用Botbuilder v3.4.4和Node v4.6.0。

我想到这里的路是这样的:

  1. session.message.address保存在某个地方,因为稍后将在bot.beginDialog使用它。
  2. 在开始新对话之前,您需要删除会话对象,以创build新对话
  3. 使用地址开始对话。

这将是类似的东西

 // consider making this an array insted var address // probably in the function that matches the greeting address = session.message.address; // in the step where you want to send the direct messsage var newConversationAddress = Object.assign({}, address); delete newConversationAddress.conversation; // begin dialog with address without conversation bot.beginDialog(newConversationAddress,... 

看看CreateNewConversation示例。 你会看到一些非常相似的东西正在被完成。