【问题标题】:How to get info of all workspaces that installed my slack app如何获取安装了我的 slack 应用程序的所有工作区的信息
【发布时间】:2017-09-29 20:12:57
【问题描述】:

当用户安装我的 Slack 应用程序时,如何获取 Slack Workspace 数据?

我的目标是收集安装了我的应用程序的所有工作区 ID。

主要思想:

  • 用户安装了我的应用程序
  • 授权发送到某些外部 URL 后的工作区 ID(安装应用程序的位置)
  • 服务器处理请求

我可以通过这个过程解决这个问题吗? https://api.slack.com/docs/oauth

【问题讨论】:

  • 抱歉,我无法理解您想要做什么。能否请您重新措辞/详细说明?
  • 我想收集通过 slack 安装我的应用程序的所有团队(工作区)的 ID。

标签: node.js slack slack-api


【解决方案1】:

每个 Slack 团队都需要运行 OAuth 流程才能将您的 Slack 应用安装到他们的工作区。这通常通过调用具有“添加到 Slack”按钮并使用 Slack 服务器调节 Oauth 进程的应用程序网页来完成。

当 OAuth 过程成功时,您的应用将从 Slack 服务器接收工作区特定的访问令牌以及有关团队的信息,包括团队 ID 和团队域。您的应用应存储此信息,以便您以后可以根据要求检索和使用它。

如果您只存储了来自每个 Slack 团队的访问令牌,您可以使用该访问令牌致电 auth.test,以检索有关已连接 Slack 团队的更多信息,包括团队 ID。

简而言之,是的,OAuth 流程将帮助您收集这些信息。

【讨论】:

  • 感谢您的回答。 auth 请求的redirect_uri 参数是否适合保存此数据?
  • 不,redirect_uri 是您告诉 Slack 在用户完成登录过程后将其重定向到哪个网页的方式。我建议仔细阅读Oauth 上的 Slack 文档,以更好地了解它的工作原理。
  • 再次感谢您的新想法。祝您有美好的一天和心情!
  • @Sabutobi 首先寻求帮助,将某人的有效答案标记为已接受,然后对您自己的问题发布新答案并接受该答案是非常粗鲁的。如果您想继续从该论坛上的人那里获得帮助,您可能希望以后不要这样做
  • 对不起。我不是故意的!我的目标是分享解决方案。祝你有美好的一天。
【解决方案2】:

如果您没有在 OAuth 流程期间存储它们,那么您将无法检索安装了您的 Slack 应用程序的所有现有工作区。

正如 Erik 所说,每次安装应用时您都会获得工作区信息,但存储这些信息是您的工作。

【讨论】:

  • 我同意这一点。但是如何存储呢?目前我有链 Slack 用户界面 - Slack API。安装时如何连接外部服务器?
  • @Sabutobi 当用户在 Slack 应用程序目录中单击安装时,Slack 应用程序将自动将用户重定向到您的外部网页。另请查看有关Slack button 的文档。您可以使用我的一款应用程序进行尝试。尝试从应用目录安装“Raffle Bot”.....
  • 您需要一个服务器来托管您的 Node.JS 应用程序。 redirect_url(用户在 OAuth 流程中被重定向的地方)将在此服务器上,此脚本是将信息存储在您喜欢与 Node.JS 应用程序一起使用的任何存储引擎中的好地方(可以是 Mongo、Redits , MySQL 或其他任何你喜欢使用的东西)。
  • 再次感谢您的建议。加上一点业力:)。祝你有美好的一天!
【解决方案3】:

如果有人需要解决方案。 来自 slack-docs:

现在是为您的应用设置重定向 URL 的时候了。这是终点 让 Slack 在 用户的安装。然后,您的服务器将发送回此代码 使用您的客户 ID 和客户密码,以便我们知道我们可以信任 你。

因此,如果有人安装您的应用程序会重定向到您的应用程序设置的redirect_url。如果用户接受了权限:

  • Slack API 将代码发送到您的服务器
  • 您必须发回代码。节点示例如下:

const request = require('request-promise'); let options = { method: 'POST', uri: 'https://slack.com/api/oauth.access', formData: { client_id: "client_id", client_secret: "client_secret", code: req.query.code }, json: true }; request.post(options).then(result => { res.json(result) });

在结果变量中,您将拥有所有要收集的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多