Запрашивать сообщения у Slack

У меня есть приложение Slack, и до вчерашнего дня только основной владелец мог отправить сообщение. Я спросил команду Slack о том, как решить эту проблему, чтобы все пользователи могли отправлять сообщения в Slack. Ответ состоял в том, чтобы сначала использовать кнопку "Войти с помощью 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.

Может ли кто-нибудь помочь мне здесь. Я сделал кнопку работать нормально, но это должно работать.

2 ответа

Позвольте мне попытаться дать более полный ответ на вашу проблему, насколько я понимаю.

Требования

  1. У вас есть веб-сайт, и вы хотите, чтобы пользователи из вашей команды Slack могли отправлять с него сообщения.

  2. Сообщения должны отправляться от имени пользователя, а не из приложения

Решение

  1. Для аутентификации и получения слабого идентификатора пользователя пользователи должны войти на ваш сайт, используя " Войти через Slack "

  2. Когда пользователь хочет отправить сообщение, ваш веб-сайт проверяет свою базу данных на наличие токена доступа, принадлежащего текущему пользователю (идентификатор слабого пользователя является ключом), а затем использует этот токен для отправки слабого сообщения через API с помощью chat.postMessage

  3. Если веб-сайт не может найти токен для текущего пользователя в своей базе данных, токен необходимо создать. Для этого пользователю предоставляется кнопка, которая запускает поток Oauth со Slack, запрашивая необходимые разрешения (например, "Предоставить разрешения веб-сайту"). После того, как токен был создан, он сохраняется в базе данных веб-сайта, поэтому этот процесс должен запускаться только один раз для каждого пользователя. Пользователь может затем отправить свое сообщение.

Заметки

  • Процесс Oauth на шаге 3 в основном аналогичен установке приложения Slack для каждого отдельного пользователя. Это называется конфигурации. Это работает только в том случае, если администраторы вашей команды Slack предоставили всем пользователям право устанавливать именно это приложение Slack.
  • Процесс Oauth на шаге 3 не может быть запущен в фоновом режиме, как вы предложили в своем вопросе, поскольку он требует непосредственного взаимодействия с пользователем. От пользователя всегда требуется сначала войти в систему, а затем утвердить запрошенные разрешения для вашего приложения Slack.

Это не может работать. Кнопка запускает установку вашего приложения Slack пользователем через Oauth 2.0. По определению процесс Oauth не может быть запущен в фоновом режиме, но требует, чтобы пользователь выполнил перенаправление на страницу входа из Slack и утвердил разрешения, запрошенные для вашего приложения Slack.

Другие вопросы по тегам