Slack Bot在Node js

时间:2016-11-23 05:14:02

标签: node.js slack-api slack

我试图在nodejs中创建一个slack bot,根据他们的输入回复用户。但到目前为止,机器人一直在回复他自己的消息

这是我的机器人的代码

let Bot = require('slackbots');

// create a bot
let settings = {
    token: 'xoxb-10584202949',
name: 'BotHelp'};

let bot = new Bot(settings);
bot.on('start', function() {

  bot.postMessageToChannel('general', 'At your service');

    });

bot.on('message',function (data) {
  console.log(data);
    if (data.username != "BotHelp" && data.subtype != 'bot_message'){
     bot.postMessageToChannel('general', 'Yoooo');
    }
});

数据的控制台日志 打印

{ type: 'hello' }
{ text: 'At your service',
  username: 'BotHelp',
  bot_id: 'B336WGVSM',
  type: 'message',
  subtype: 'bot_message',
  team: 'T2ZAW44P3',
  user_team: 'T2ZAW44P3',
  channel: 'C303W2D4M',
  ts: '1479877794.000266' }
{ type: 'presence_change',
  presence: 'active',
  user: 'U33QS0VEF' }

那么为什么我的验证无法检查消息是否已从机器人本身发送?

感谢您的时间

3 个答案:

答案 0 :(得分:2)

我有同样的问题。 slackbots 中的消息事件将针对每个事件触发,即user_typing,message_marked,desktop_notification。可以找到所有活动here。 现在我做了什么来确保我的机器人收到它自己后没有发送消息:

console.log(data)

data.user提供唯一ID,您可以user获取此ID,并找到您的channel ID。

此外,如果您想指定要收听的邮件,请说明直接邮件。 data内的Web Server CERTIFICATE ----------------- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- INTERMEDIATE CA: --------------------------------------- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- ID将以 D 开头。对于私人频道,频道ID以 G

开头

希望这会有所帮助。我知道还有很多事要做,但这是基本的。你可以在这方面成长。我知道我会努力:D

答案 1 :(得分:0)

如果我是你,我会检查参数是否真的是 user_name 子类型。如果它是正确的,我会尝试检查即将到来的对象的类型(也许在来自Slack api的对象中有一个强制转换)。我已经完成了与您非常相似的small project,使用相同的库slackbots以及我自己构建的库,nodejslack(https://github.com/marcogbarcellos/nodejslack),但没有遇到此问题。

答案 2 :(得分:0)

我知道问题已经回答,但是我想添加我的答案,因为松弛api已进行了一些更改。

 if (data.type !== "message" || data.subtype === 'bot_message' ){
    return;
    }
    else{
        bot.postMessageToChannel('general', 'Yoooo');
    }