# Есть ли жизнь в Слаке: заполняем мессенджер ботами для повышения эффективности коммуникаций
**Картинка: что-то про робота в позе "чего изволите", с именной табличкой Арсений**
Большая часть сотрудников Skyeng работает удаленно, поэтому Слак для нас - не просто чатик, а важнейший инструмент коммуникаций, экономяший нам много денег (о чем мы уже рассказывали на Хабре). Но любой инструмент требует настройки - и мы прикладываем усилия к тому, чтобы помочь Слаку помогать нам. Поскольку Слак для многих из нас - по сути виртуальный офис, мы хотим сделать этот офис удобным и эффективным: соблюдать тишину в воркспейсе, расставить кофемашины на всех этажах, следить за наличием канцелярки в переговорках, предоставлять удобный инструмент для бронирования этих переговорок. Сегодняшняя статья - о наших простых Slack-ботах, чистящих каналы от мусора, избавляющих разработчиков от рутины и гарантирующих своевременную доставку экстренных алярмов.
-- тут кат --
Боты и Слак - неразлучные друзья, в любом корпоративном воркспейсе уж парочка роботов будет всегда (хотя бы приветствующий). У нас их тоже множество, и вряд ли возможно их всех собрать и классифицировать: часто команды пилят бота для решения каких-то своих технических задач и особо не афишируют. Например, у QA есть бот, отслеживающий загрузку тестовых сред и позволяющий бронировать нужный сервер на нужное время; у безопасности есть бот, выявляющий принадлежащие сотрудникам гугл-доки, открытые для редактирования всему миру; у учителей есть бот, присылающий еженедельный дайджест с историей оценок учеников, их прогрессом и рекомендациями на ближайщие уроки; и т.д.
Но есть и некоторое количество "универсальных" ботов, влияющих на общую эффективность работы или готовых к расширению за пределы своей родной команды. Такие боты могут пригодиться в любой компании.
### Примеры наших ботов
**_Что такое бот Прокопий?_**
**Арсений**
Старожил нашего корпоративного Слака, большой друг всех разработчиков, бот Арсений каждое утро радует всех набором дайджестов - разработчиков, аналитиков, бизнес. Он же отслеживает зависшие на разных этапах задачи и пинает всех причастных, следит за заполнением логов и эстимейтов, распределяет время на баги/рефакторинг/таски, обнаруживает задачи, на которые ушло слишком много времени и делает массу прочей нужной и полезной работы. Это такой многофункциональный и расширяемый статистический бот, постоянно дополняемый новыми модулями по запросам команд (и самими командами).
**Infrabot**
У нас есть канал #infra, куда пользователи скидывают некритичные проблемы, связанные с инфраструктурой. Команде хотелось сделать некую систему аналитики, отслеживающую и структурирующую эти проблемы, чтобы выявить повторяющиеся, найти глобальные решения и в итоге уменьшить количество обращений.
Был написан бот, принимающий сообщения и просящий выбрать для них категорию и систему. Например, "упал сервер, сервис - Amazon". Все эти сообщения отправляются в гугл-таблицу, где из них строятся красивые графики, показывающие, где что ломается чаще всего и над чем стоит системно поработать. Кроме того, бот автоматически превращает обращения в тикеты в Jira.

Бот оказался популярным, сейчас допиливаются его версии для других команд.
**Jake**
Перед тем, как делать тех-ревью, команды проводят голосование по задачам - что из готового берем сегодня. Раньше это делалось руками: тимлид собирал тикеты из джиры, категоризировал и выкладывал в Слак, все это занимало примерно час, было дорого, муторно и скучно. Сейчас бот сам собирает готовые задачи, по запросу присылает их список, запускает голосование, сам собирает голоса и выдает результат. На этой, казалось бы, простой штуке мы сэкономили кучу денег за счет времени тимлида.
**Intcom Approvals**
Все пользователи Слака знают, что по мере роста компании канал #general норовит все больше погружаться в пучину хаоса. Каждый день там появляются сообщения от людей, которые не знают про FAQ (или которым лень его читать) из серии "@all подскажите, как сделать вот это!!!11". В тредик сразу же прибегает десяток сотрудников, просящих соблюдать правила и не шуметь в общем канале, и еще десяток добрых душ, дающих ссылку на внутренний документ и объясняющих, как пользоваться поиском. Это ужасно, но и жестко ограничивать права публикации в канале не хочется - так ведь можно не узнать о том, что кто-то проставляется вечером!
У нас в #general и других защищенных каналах живет специальный бот, следящий за уровнем шума. Написать в #general может кто угодно, только его сообщение не будет опубликовано: его увидит бот и постучится в личку с вопросом "ты точно уверен, что хочешь это здесь написать?" Если да - сообщение отправится на модерацию и опубликуется после одобрения; в личку придет уведомление.
**Yellbot**
Иногда надо просить людей быть потише и не писать в #general, а иногда, наоборот, надо взять в руки рупор и кричать, пока нужные товарищи не услышат ("Хватит воровать еду из холодильника! Дада, мы знаем, кто это делает!"). Yellbot - про вторую историю. Он будет долбить в человека или в группу до тех пор, пока ему не отпишутся, что прочитали сообщение.
**Teacher Vacation Bot**
Преподаватели уходят в отпуска и не всегда вовремя из них возвращаются. Терять их мы не хотим, поэтому бот отслеживает эти данные и периодически пингует руководителей группы, чтобы те написали/позвонили пропавшим.
**TA Bot**
Еще один служебный учительский бот, каждый день собирающий информацию о несостоявшихся уроках и новых учениках и рассылающий ее преподавателям.
**Opsgenie Connector**
Канал #dev-disaster - место, куда пишут о том, что все упало. Если все упало совсем-совсем (главная не открывается, платформа лежит, все пропало, шеф), сообщения сюда отправляются со значком :alarm:. Проблема в том, что сисадмины иногда спят, и одними страшными значками их не разбудить. Увидев такое сообщение, бот сразу же начинает звонить дежурному админу на телефон и зачитывает ему текст алярма. Если до дежурного дозвониться с трех попыток не удалось, срабатывает эскалация по его руководству вплоть до IT-директора.
### API Слака
У Слака есть несколько API, для ботов мы используем три из них:
- [Web-API](https://api.slack.com/web) - классическая API, позволяющая с помощью HTTP-методов делать в Слаке то же самое, что и руками-кнопками из клиента.
- [Events API](https://api.slack.com/events-api) - API, отправляющая JSON-события через HTTP куда-нибудь на наш сервер. Например, если кто-то что-то написал в наблюдаемом канале или нам в личку, на наш URL прилетит событие; бот сможет отреагировать на него через Web-API.
- [Real-time API, RTM](https://api.slack.com/rtm) - эта API на web-sockets представляет собой что-то вроде смеси двух предыдущих: с ее помощью можно и получать пинки, и реагировать в реальном времени - идеальный микс для чат-ботов. Список поддерживаемых методов не совпадает с таковым у Events API; отправлять RTM может только простые текстовые сообщения, поэтому обойтись только им возможно не всегда.
### На чем пишут ботов?
Мы - на Javascript и PHP. Но можно писать на чем угодно - в [репозитарии Slack](https://api.slack.com/community) представлены библиотеки, плагины и приложения на языках от C до Zephir.
### Кто это все делает?
Раньше ботов писали сами разработчики, и эти боты выполняли какие-то внутрикомандные задачи. В этом был некоторый смысл: потратить час на бота, чтобы он уже на следующей неделе сэкономил по часу для всех участников канала = профит.
Сейчас количество подобных мелких необязательных, но полезных задач разрослось, поэтому появилась отдельная команда Shared Team, она же Simple Tasks. Это такой инкубатор джунов, на который валятся все простенькие задачи, не связанные непосредственно с "боевыми" продуктами: лендинги, js-игры, скрипты, а также разнообразные боты (не только для Слака). Из-за обилия запросов именно на ботов сейчас ими постоянно занимаются два разработчика из этой команды.
**Что еще почитать**
Как мы экономим деньги со Слаком: https://habr.com/ru/company/skyeng/blog/328252/
Статья от Слака про основные три API: https://medium.com/slack-developer-blog/getting-started-with-slacks-apis-f930c73fc889
Туториал "Slack-бот на Python за 10 минут": https://github.com/slackapi/python-slackclient/tree/master/tutorial
Коллекция API-туториалов от Слака: https://api.slack.com/tutorials