向机器人不认识的用户发送消息
Messaging a user a bot does not know
我正在使用 Slack RTM node client 并且在使用 DM 时遇到了一些问题。假设用户加入了以前从未与机器人进行过 DM 的频道,用户在机器人通常会响应的频道中键入命令,并且默认情况下机器人会在私人消息中响应用户。但是,机器人无法执行此操作,因为 dataStore
不包含该用户的任何 DM 数据。下面的代码示例...
rtm.on(RTM_EVENTS.MESSAGE, function (message) {
user = rtm.getUserById(message.user);
console.log(user); // It gets the user object fine
dm = rtm.getDMByName(user.name);
console.log(dm); // This is always undefined unless the user has DM'ed the bot previously
});
有办法解决这个问题吗?我似乎无法在文档或代码中找到任何暗示可能存在的内容。
您可以使用网络API的im.open
方法。以下是使用 @slack/client 的大致方式(未经测试,提前致歉!):
var webClient = new WebClient(token);
...
rtm.on(RTM_EVENTS.MESSAGE, function (message) {
var dm = rtm.getDMById(message.user);
if (dm) {
console.log(`Already open IM: ${dm}`);
// send a message or whatever you want to do here
} else {
webClient.im.open(message.user, function (err, result) {
var dm = result.channel.id;
console.log(`Newly opened IM: ${dm}`);
// send a message or whatever you want to do here
});
}
});
我正在使用 Slack RTM node client 并且在使用 DM 时遇到了一些问题。假设用户加入了以前从未与机器人进行过 DM 的频道,用户在机器人通常会响应的频道中键入命令,并且默认情况下机器人会在私人消息中响应用户。但是,机器人无法执行此操作,因为 dataStore
不包含该用户的任何 DM 数据。下面的代码示例...
rtm.on(RTM_EVENTS.MESSAGE, function (message) {
user = rtm.getUserById(message.user);
console.log(user); // It gets the user object fine
dm = rtm.getDMByName(user.name);
console.log(dm); // This is always undefined unless the user has DM'ed the bot previously
});
有办法解决这个问题吗?我似乎无法在文档或代码中找到任何暗示可能存在的内容。
您可以使用网络API的im.open
方法。以下是使用 @slack/client 的大致方式(未经测试,提前致歉!):
var webClient = new WebClient(token);
...
rtm.on(RTM_EVENTS.MESSAGE, function (message) {
var dm = rtm.getDMById(message.user);
if (dm) {
console.log(`Already open IM: ${dm}`);
// send a message or whatever you want to do here
} else {
webClient.im.open(message.user, function (err, result) {
var dm = result.channel.id;
console.log(`Newly opened IM: ${dm}`);
// send a message or whatever you want to do here
});
}
});