Если вы не жили под камнем в течение прошлого года, вы слышали о Slack или, скорее всего, используете его в своей компании. Для тех, кто действительно жил под одним из них, Slack — это коммуникационная платформа для команды, которая является неотъемлемой частью рабочих процессов тысяч компаний. Запущенный в 2013 году уровень внедрения продукта был просто феноменальным. Есть целый ряд новых вещей, которые Slack может предложить, что существующие средства связи не смогли, что в некотором роде привело к его стремительному росту.
Одним из его уникальных предложений является возможность создавать расширения, называемые ботами, для развлечения и производительности. С недавним запуском платформы Slack самое время создавать всевозможные расширения и приложения для Slack.
Сегодня мы рассмотрим, как создать одного из этих забавных слабаков в Ruby. Этот бот «может быть» полезен для вас, но основная цель этой статьи — познакомить вас с входящими API Slack для webhook и slash. Без дальнейших церемоний, давайте начнем.
Наш бот, назовем его anonbot, позволяет людям публиковать анонимные сообщения в Slack. Мы реализуем это с помощью API команды слэша Slack и входящего API webhook. Мы используем команды косой черты, потому что эти сообщения являются частными и показываются только получателю даже внутри канала. Затем, используя входящий веб-крючок, мы опубликуем контент, который был отправлен нам с помощью команды косой черты, на соответствующий канал, с которого он был отправлен.
Настройка проекта
Как уже отмечалось, мы собираемся построить это в Ruby и Sinatra. Это простое приложение, которое может быть построено на простом Ruby, но мы используем Sinatra, чтобы еще больше упростить его. Sinatra — это облегченный веб-фреймворк для Ruby, который очень полезен для создания простых веб-приложений, подобных нашему.
Начнем с создания необходимых файлов для нашего приложения, которых всего два. Начните с создания папки для нашего проекта и создайте в ней два упомянутых ниже файла:
anonbot | | -------- app.rb | -------- Gemfile | -------- config.ru
app.rb
используется логика, а в Gemfile
указываются реквизиты для Gemfile
. config.ru
требуется для хостинга в Heroku , но это не обязательно для функциональности приложения.
Добавьте строки ниже в наш Gemfile, и мы готовы внести проект в git.
1
2
3
4
|
source «https://rubygems.org»
gem «sinatra»
gem «httparty»
|
Драгоценный камень sinatra предназначен для фреймворка, и нам нужно, чтобы httparty отправил анонимное сообщение на входящий веб-крючок Slack. После добавления гемов запустите bundle install
из каталога проекта.
Новый файл Gemfile.lock
будет создан сейчас. Хорошо — давайте инициализируем наш проект в git и зафиксируем изменения.
мерзавец git add -A git commit -m "Начальный коммит с реквизитами гемов"
Кодируй это
Давай перейдем к делу. У нас будет только одна конечная точка API, которую Slack вызывает при вызове нашей команды slash. Откройте app.rb
и добавьте к нему строки ниже.
01
02
03
04
05
06
07
08
09
10
11
12
13
|
require ‘sinatra’
require ‘httparty’
require ‘json’
get ‘/anonymize’ do
postback params[:text], params[:channel_id]
status 200
end
def postback message, channel
slack_webhook = ENV[‘SLACK_WEBHOOK_URL’]
HTTParty.post slack_webhook, body: {«text» => message.to_s, «username» => «John Doe», «channel» => params[:channel_id]}.to_json, headers: {‘content-type’ => ‘application/json’}
end
|
Так что я думаю, что код довольно понятен, но давайте быстро рассмотрим его. Сначала мы требуем необходимые библиотеки и инициализируем нашу первую и единственную конечную точку API. Это конечная точка, которую Slack вызывает каждый раз, когда вызывается наша пользовательская команда слэша.
Вместе с сообщением мы получим список параметров, но нас интересуют только два параметра:
-
text
: сообщение, которое было введено после команды косой черты -
channel_id
: канал, с которого пользователь вызвал команду; нам нужно, чтобы опубликовать его обратно на этот канал
Метод postback
отправку сообщения с использованием URL-адреса webhook в Slack. Мы указываем текст и переписываем имя пользователя и канал, которые будут установлены при настройке webhook. В команде slash появилась новая опция, которая представляет собой быстрый и простой способ сделать это всего за две строки — мы увидим это позже.
Делая это, мы все сделали с функциональностью приложения. Добавьте следующие строки на config.ru
перед тем, как вносить изменения и развертывать наше приложение.
1
2
|
require ‘./app’
run Sinatra::Application
|
Этот файл необходим Heroku для распознавания типа приложения и начала обслуживания запросов. Давайте передадим изменения:
git add -A git commit -m "Добавить функциональность приложения"
Если у вас нет инструмента Heroku, самое время его установить. Если он уже установлен, создайте приложение Heroku и разверните наш новый блестящий бот.
Герою создать appbot-имя развернуть героку
Итак, мы успешно создали нашего бота и развернули его. Ура! Пришло время закончить Slack сторону вещей.
Настройка Slack Extension
Здесь мы используем два типа расширений — команда косой черты и входящий веб-крючок — поэтому нам нужно настроить их по отдельности. Перейдите в « Настроить приложения» и нажмите на слэш-команды и « Добавить конфигурацию» на следующей странице.
Дайте команду слеша по вашему выбору — вы можете быть настолько вредным, насколько это возможно. Я выбрал очевидное /anonbot
. После того, как вы ввели команду slash, на следующей странице заполните поле URL вновь развернутым URL Heroku.
https: // <имя-appbot> .herokuapp.com / Анонимизация
Обратите внимание, что мы указали конечную точку https
. Важно, чтобы вы проверили это, поскольку Slack рекомендует, чтобы конечными точками связи были https
. Также установите метод как GET
, и затем вы можете сохранить интеграцию.
Затем перейдите к той же конечной точке Configure Apps и на этот раз выберите Incoming WebHooks , а на странице конфигурации выберите любой канал, который вы хотите, так как в любом случае мы собираемся переопределить его в нашем сообщении. На появившейся странице Webhook URL
.
Теперь, когда у нас есть URL-адрес webhook, установите его в качестве переменной среды Heroku, чтобы мы могли начать показ. Из командной строки в каталоге проекта запустите:
Конфигурация heroku: установить SLACK_WEBHOOK_URL = https: //hooks.slack.com/services/your-webhook-url
И для радостных новостей мы закончили! Давайте проверим наш вредный новый бот. Введите команду слеш, а затем сообщение, чтобы напугать членов вашей команды.
Вот как ответ будет в канале.
Ну, никто не мог угадать это правильно!
Короткий путь
Как я уже говорил, есть простой альтернативный способ сделать это. Мы должны полностью избавиться от входящей части webhook и вместо этого ответить на первоначальный вызов, который Slack делает с текстом и response_type
как in_channel
. Вот как будет выглядеть app.rb при использовании этого метода:
1
2
3
4
|
get ‘/anonymize’ do
content_type :json
{:text => params[:text], :response_type => «in_channel»}.to_json
end
|
Эта функция была недавно представлена Slack. Указывая response_type
как in_channel
, мы отображаем ответ публично, в противном случае он является приватным. Я не стал использовать этот метод, потому что мы хотим показать, насколько просты эти два расширения.
Вывод
Так просто, правда? Цель этого урока — дать вам представление о нескольких расширениях, которые предлагает Slack, и я думаю, что он удовлетворен. Весь пример кода, используемый в этом руководстве, размещен на GitHub .
Я благодарю вас за чтение этой статьи, и я надеюсь, что она послужила вашим целям. До скорого!