Пишем бота для Slack за 1,5 минуты: опыт команды Tproger

Slack — отличный способ коммуникации внутри команды, на него уже перешли многие редакции рунета, а теперь настал и наш черед. Он позволяет как удобно вести деловую переписку, так и обсуждать, кто как танцевал с бубном прошлой ночью.

В общем, не мессенджер, а чудо. А одно из его главных преимуществ — интеграция. Всего в пару кликов вы можете, например, добавить бота, который будет пересылать в соответствующий чат изменения в Jira или Git и при этом экономить вам кучу времени.

История о том, как наши редакторы знают C++ лучше, чем русский

Именно такую интеграцию мы решили написать для своего сайта. Мы уже сделали плагин, который в случае нахождения ошибки позволяет выделить мышью в статье нужный фрагмент текста и отправить его нам на проверку простым нажатием Ctrl+Enter. Теперь нам захотелось, чтобы уведомления приходили не только на почту авторам, но и в наш #content чат в «Слаке» — это бы значительно ускорило скорость реагирования.

Программерский алкоголизм — не баг, а фича

Первым делом, мы попили пива зашли на сайт Slack Api и попили пива узнали, что боты делятся на 3 типа:

  1. Входящие хуки, позволяющие присылать сообщения в публичный чат.
  2. Исходящие хуки, позволяющие отправлять HTTP-запросы специальными командами из чата.
  3. Настоящие боты, позволяющие делать и первое, и второе, а также читать чаты в реал-тайме.  

Так как нам нужно отправлять уведомления в #content, но при этом мощь третьего способа нам ни к чему, то решено было остановиться на первом способе: входящих хуках.

Загадочная история Хукка Баттона

Входящий хук — это, по сути, самый обычный HTTP-запрос, содержащий данные в формате JSON, но отправленный на специальный адрес, имеющий примерно такой вид:

https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

В качестве данных вам нужно передать простой список параметров: форматирование текста, аватарка, имя бота, канал, куда нужно отправить сообщение и так далее. В общем, все просто и с минимумом глупых ограничений — мечта любого программиста.

Пример:

В результате мы получим следующее сообщение:

Как видим, в качестве аватарки нам нужно использовать одну из сотен доступных Emoji: тяжело представить, для какой ситуации может понадобится что-то кастомное. А если немного поиграть с параметрами, то можно вставить в текст ссылку на другой чат или жирное выделение:

Честно говоря, ничего загадочного тут даже нет — всё как надо.

Властелин tproger: возвращение jQuery

Теперь пришло время наконец-то заняться непосредственно интеграцией. Мы решили, что лучше всего будет забыть о бэкэнде с PHP и реализовать это на «фронте», на любимом JavaScript.

В общем, здесь всё настолько просто, насколько это вообще может быть. Просто напишем AJAX-запрос, передающий заранее заготовленные данные…

… и получим потрясающий результат:

— который сэкономит нам кучу времени и сил.

А если вы тоже работаете в Slack и напишете бота для автоматизации рутины — то и вам тоже. 😉

Тарас Сереванн, эксперт в области IT магии