«Лебовски» создавался для биллинга (отсюда и название), но быстро прижился везде, где была нужна простая статистика по хелпдескам.
Все началось в декабре 2019-го. Ко мне пришли проджекты и тестировщики из биллинга: «Есть канал в Slack, куда мы кидаем обращения по проблемным платежам. Хотим вести по ним статистику: смотреть, какие типы обращений встречаются чаще, понимать, сколько времени заняло решение».
Slack не дает циферок, но многим их хочется. Поэтому есть вариант интегрироваться с Jira, затем строить графики в Redash или Grafana. Тут кажется, что нужна помощь аналитика — но для простых случаев это как гвозди микроскопом забивать. Зацепившись за слово «статистика», я подумал о таблицах: в них можно считать всякие метрики с помощью формул, а если понадобится что-то сложнее — аналитики смогут настроить выгрузку данных.
Итак, мы можем подключить бота к каналу в Slack, сделать простой интерфейс со списками и лить данные в таблицу. Можно в свою базу данных, можно в Google Таблицы. Выбирая решение для прототипа, я остановился на последних: с ними умеют работать все, особенно менеджеры (мой основной заказчик), и у продукта есть готовое API.
Так за 4 часа ожидания пересадки в аэропорту Хельсинки появился MVP бота.
Теперь, когда в канал падало сообщение, под ним появлялся бот с кнопкой «Закрыть обращение». Когда разработчик разбирался с задачей, он нажимал «Закрыть» — и мы просили его выбрать категорию обращения. Данные из выпадающего списка попадали в табличку (при необходимости — вместе с текстом оригинального сообщения), а также датой и временем, когда оно появилось в канале и когда было закрыто.
Благодаря таблицам мы стали быстро собирать фидбэк от заказчика, и вскоре бот оброс новыми фичами:
- появились реакции: время попадания запроса в канал не равно старту работ по нему, поэтому саппорт ставил эмодзи, когда на самом деле брал обращение, и этот момент в формате «дата-время» тоже попадал в таблицу;
- саппорт мог отметить, сколько времени занял непосредственно фикс проблемы, — так у бота появилась вторая кнопка «Залогировать время»;
- если задачу требовалось передать в другой отдел, то можно было указать, кому и в какой.
Бот исправно приходил под сообщения, копировал данные и отправлял их табличку. А ребята получали сводную статистику в Slack и могли в деталях анализировать какие-то сложные кейсы.
Как бот стал популярным и как я упрощал его поддержку
Так или иначе, к биллингу в гости ходят разные проекты и команды. И многим из них тоже бывает нужно анализировать частые типы обращений, сколько времени на них тратится, как они решаются. И они тоже хотят автоматизировать часть работы, найти неочевидное и в целом ориентироваться не по ощущениям, а на базе фактов.
«Лебовски» быстро заметили в других проектах. И пришли с классическим: «А напишите нам похожего». Мы уже шаблонизировали других популярных ботов в компании, чтобы не тратить ресурс разработки на типовые задачи, и пошли этим же путем тут.
- Простая функциональность для раскатки на другие команды: каждый новый Slack-канал подключается простым добавлением пары ID (к какому каналу подключиться и куда отправлять данные) на GitHub. Завести бота для нового заказчика внутри компании — буквально дописать 6 строк в один из файликов.
- Добавление категорий без участия разработки: в табличке у каждого заказчика есть лист, на котором можно дописывать классы обращений, не привлекая нас. А оно передается в бот.
- Поддержка Slack Workflows. Что любят люди, помимо таблиц? Формы. Поэтому Slack сделал нативное решение, которое их заменяет. Но т.к. формы реализованы на базе бота, а наш бот «обучен» не учитывать сообщения от других ботов и не отвечать на них (были забавные инциденты), пришлось чуть повозиться с тонкими настройками фильтра «не реагируй на других ботов».
В какой-то момент, рассказав про бота на конференции, я понял, что мы создали крутой инструмент для внутренних хелпдесков, которым долгое время пользуются уже пять отделов.
И решил, что пора его опенсорсить
Теперь вы можете поднять своего «Лебовски» на своем сервере (или в Heroku) и пользоваться им в своем рабочем Slack. Инструкции о том, как его развернуть, а также сами исходники бота лежат на нашем GitHub здесь.
Сейчас «Лебовски» работает так:
- когда пользователь пишет в канал, бот записывает текст сообщения, его автора, дату/время написания в таблицу и присваивает обращению номер, по которому его потом можно найти в таблице. После этого он оставляет под обращением сообщение с кнопками для управления обращением;
- когда саппорт ставит сообщению определенный эмодзи (какой именно — можно задать в конфиге), обращение помечается как «В работе» и дата/время установки эмодзи сохраняется в таблице (так вы можете отслеживать SLA);
- саппорт может залогировать время, потраченное на обращение, с помощью кнопки «Залогировать работу». Ворклоги сохраняются на отдельном листе в удобном формате;
- как только саппорт закончил работу над тикетом, он нажимает на «Закрыть обращение», после чего «Лебовски» спрашивает категорию и исполнителя обращения и складывает эти данные в таблицу.
С одной стороны может показаться, что этот бот делает не так уж и много, но в повседневной жизни этого достаточно, чтобы посчитать много полезных метрик, например AFRT (Average First Response Time) и ACRT (Average Case Resolution Time).
Но лучше 1 раз попробовать, чем 100 раз прочитать.
Что еще почитать про боты в Slack: 7 cмертных грехов Slack в большой компании (и как победить их автоматизацией).