首页 > 解决方案 > 从 Slack 请求消息范围

问题描述

我有一个 Slack 应用程序,直到昨天只有主要所有者才能发送消息。我询问了 Slack 团队如何解决这个问题,让所有用户都能够在 Slack 上发送消息。答案是首先使用 Sign in with Slack 按钮让他们登录。然后是另一个按钮,但范围不同。

我的问题是,我能够使用按钮以用户身份发送消息,如下所示:

<input type="button" value="Authenticate again to send Message" class="btn btn-warning" onclick="location.href = 'https://slack.com/oauth/authorize?scope=incoming-webhook,im:write,chat:write:user&client_id=xxyyzz'"/>

现在,我试图通过显示“请稍候”的视图在后台执行相同的额外范围请求

附上以下代码:

<script>
        $.ajax({
            method: "GET",
            dataType: "json",
            url: "@Url.Action(MenuItem, "SetupSlack")",
            //data: { code: 'Model.Code' },
            data: { code: '@Model' },
            success: function(rsp) {
                window.location.replace(rsp.redirect);

            },
            error: function() {
                // Show error.
            }
        });
</script>

控制器代码如下:

 public ActionResult SetupSlack(string code)
        {
            SlackAuthToken slackToken = slackService.GetAccessToken( clientId, clientSecret, code);

            string redirectUrl;
            if (slackToken.IsAuthenticated && slackToken.HasWrite)
            {
                Alert("Slack setup successfully!!!!", AlertLevel.Success);
                redirectUrl = Url.Action(MenuItem, "Index");
            }
            else if (slackToken.IsAuthenticated)
            {
                redirectUrl = "https://slack.com/oauth/authorize?scope=incoming-webhook,im:write,chat:write:user&client_id=aabbcc";

            }
            else
            {
                Alert("Slack setup failed. Please try again, if the problem persists please contact support.", AlertLevel.Success);
                redirectUrl = Url.Action(MenuItem, "Index");
            }
            return JsonNet(new { redirect = redirectUrl });
        }

它不会导致发布消息身份验证页面。此外,另一个错误是将其“代码已使用”作为 OAuth 流中的响应之一。

有人能帮我一下吗。我使按钮工作正常,但这也应该工作。

标签: slack-api

解决方案


据我了解,让我尝试对您的问题给出更完整的答案。

要求

  1. 您有一个网站,并且您希望 Slack 团队的用户能够从该网站向 Slack 发送消息。

  2. 消息必须代表用户发送,而不是来自应用程序

解决方案

  1. 要进行身份验证并获取 Slack 用户 ID,用户需要使用“ Sign-in with Slack ”登录您的网站

  2. 当用户想要发送消息时,您的网站会检查其数据库以获取属于当前用户的访问令牌(松弛用户 ID 是密钥),然后使用该令牌通过 API 与chat.postMessage发送松弛消息

  3. 如果网站在其数据库中找不到当前用户的令牌,则需要创建令牌。为此,用户会看到一个按钮,该按钮启动Oauth 流程,Slack 请求所需的权限(例如“授予网站权限”)。创建令牌后,它将存储在网站的数据库中,因此此过程必须仅对每个用户运行一次。然后用户可以发送他的消息。

笔记

  • 步骤 3 中的 Oauth 过程与为每个用户安装 Slack 应用程序基本相同。它被称为配置。仅当您的 Slack 团队的管理员已授予所有用户安装此特定 Slack 应用程序的权利时,这才有效
  • 步骤 3 中的 Oauth 过程不能像您在问题中建议的那样在后台运行,因为它需要直接的用户交互。它始终要求用户首先登录,然后批准您的 Slack 应用程序请求的权限。

推荐阅读