0

我正在开发一个简单的 Slack Bot 以在任何渠道(私人、公共、bot dms)中发布。我正在使用 node.js、axios 和 chat.postMessage 松弛方法 ( https://api.slack.com/methods/chat.postMessage ) 在我的频道中发帖。该机器人非常适合我,但是当其他人将应用程序/机器人添加到他们的频道时​​,它不会为他们发布。测试用户也都在同一个工作区中。它仍然看到他们正在调用它,但是它没有为他们发布。

module.exports.result = function postMessage(message,ID){



  axios.post(url, 
          JSON.stringify(message),
      {headers: 
        {
          'Content-type': contentType,
        'Authorization': auth
    }})
  .then(function (response) {
      console.log("status: " + response.status + " status test:" + response.statusText +" ");
      return response.status;

  })
  .catch(function (error) {
      console.log(error);
  });
  }
4

1 回答 1

0

如前所述,您的机器人无法在某些频道中运行的原因是它只能看到安装机器人的用户/API 令牌的所有者也是其成员的私人频道。这是基本 Slack 安全性的标准,无法更改。

它们是解决此问题的三种常用方法:

A. 斜线命令

如果您使用斜杠命令调用您的机器人,它将在任何通道中工作,并且它还可以响应对该通道的调用(仅对调用用户或整个通道)。但是,您将无法使用任何与通道相关的 API 方法。

B. 机器人用户邀请

另一种常见的方法是让机器人用户使用您的应用程序,并要求用户邀请该机器人用户访问您的应用程序无法访问的每个频道。一旦被邀请,您的应用程序就可以通过其机器人用户访问该频道。

C. 收集所有用户代币

或者,您可以让您的应用程序从工作区中的每个用户那里收集用户令牌。这样它就可以通过这些令牌访问每个通道。但是,这种方法绕过了 Slack 的安全性,需要所有用户的支持。所以大多数管理员可能不会允许这样的应用程序。

总之,如果您不需要在通道中运行 API 方法,我建议使用方法 A。否则我会建议方法B。

于 2019-09-30T23:04:25.330 回答