Запрашивать сообщения у 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 ответа
Позвольте мне попытаться дать более полный ответ на вашу проблему, насколько я понимаю.
Требования
У вас есть веб-сайт, и вы хотите, чтобы пользователи из вашей команды Slack могли отправлять с него сообщения.
Сообщения должны отправляться от имени пользователя, а не из приложения
Решение
Для аутентификации и получения слабого идентификатора пользователя пользователи должны войти на ваш сайт, используя " Войти через Slack "
Когда пользователь хочет отправить сообщение, ваш веб-сайт проверяет свою базу данных на наличие токена доступа, принадлежащего текущему пользователю (идентификатор слабого пользователя является ключом), а затем использует этот токен для отправки слабого сообщения через API с помощью chat.postMessage
Если веб-сайт не может найти токен для текущего пользователя в своей базе данных, токен необходимо создать. Для этого пользователю предоставляется кнопка, которая запускает поток Oauth со Slack, запрашивая необходимые разрешения (например, "Предоставить разрешения веб-сайту"). После того, как токен был создан, он сохраняется в базе данных веб-сайта, поэтому этот процесс должен запускаться только один раз для каждого пользователя. Пользователь может затем отправить свое сообщение.
Заметки
- Процесс Oauth на шаге 3 в основном аналогичен установке приложения Slack для каждого отдельного пользователя. Это называется конфигурации. Это работает только в том случае, если администраторы вашей команды Slack предоставили всем пользователям право устанавливать именно это приложение Slack.
- Процесс Oauth на шаге 3 не может быть запущен в фоновом режиме, как вы предложили в своем вопросе, поскольку он требует непосредственного взаимодействия с пользователем. От пользователя всегда требуется сначала войти в систему, а затем утвердить запрошенные разрешения для вашего приложения Slack.
Это не может работать. Кнопка запускает установку вашего приложения Slack пользователем через Oauth 2.0. По определению процесс Oauth не может быть запущен в фоновом режиме, но требует, чтобы пользователь выполнил перенаправление на страницу входа из Slack и утвердил разрешения, запрошенные для вашего приложения Slack.