我试图在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' }
那么为什么我的验证无法检查消息是否已从机器人本身发送?
感谢您的时间
答案 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');
}