Tired of outsourcing? Get hired at a top product startup from Silicon Valley 🚀
×Закрыть

DOU Labs: как в Ukad создали Slack-бота для управления проектами

В рубрике DOU Labs мы приглашаем IT-компании делиться опытом собственных интересных разработок и внутренних технологических инициатив. Вопросы и заявки на участие присылайте на editors@dou.ua.

Challenge. В потоке ежедневных задач программисты забывают вовремя заполнять данные по time-reporting. Нужен простой способ напоминать членам команды о ежедневном отчете, который бы позволял рассылать уведомления только тем, кто забыл залогировать время.

Solution. Мы разработали бота на основе Microsoft Bot Framework, который ежедневно в 11:00 проверяет, что time report внесен в систему учета. В противном случае он уведомляет сотрудника об этом личным сообщением в корпоративный Slack. О разработке бота и расскажем в статье.

Реализация

Ukad slack-бот построен на Microsoft Bot Framework. Этот фреймворк подходит для различных платформ, не требуя отдельной реализации функционала для каждой. Microsoft Bot Frameworks соединяет все подходы, позволяя разработчику с помощью одного бота контролировать разные платформы, подключив Facebook, Skype, Slack и так далее. Всем этим способен управлять только один инстанс бота, и это одна из главных задач. Помимо канала, который поддерживает Microsoft Bot Frameworks мы можем реализовать свои собственные, создавая поддержку любого канала в рамках MBF или подключив бот на сайте.

Ukad slack-бот реализует Slack API. Мы помогаем сотрудникам отслеживать рабочие часы, напоминая вводить данные о времени в тайм-трекер, если он не заполнен. Сейчас мы также подключили оповещения о графике отпусков и оповещения для админов. Теперь тимлиды могут планировать проекты, учитывая информацию об отсутствии/присутствии в офисе нужных сотрудников, а админы вовремя реагировать на новые таски.

Бот создан, чтобы упростить жизнь сотрудников, позволив несколькими кликами мыши получить нужную информацию. В будущем мы хотим добавить больше фич, связанных с управлением проектами, например, информирование о деплое и аптайме проектов. Чаще всего уведомления о состоянии проекта автоматически приходят на мейл, но бот-уведомления в Slack в реальном времени намного надежнее и удобнее.

Как это работает

У бота есть 2 режима.

1. User initiated dialog.

Из набора слов, которые пользователь пишет боту, используя NLP (natural language processing), бот вычленяет намерение, intent. Например, вопрос о погоде. Бот должен распознать «weather» как intent, «сегодня» — как сегодняшнее число.

Бот понимает, чего хочет пользователь, запускает нужный диалог и может валидировать данные. Например, мы хотим получить от пользователя уточнение в виде текста (например, погода в каком городе) или дать пользователю возможность ответить на список вопросов (диалог может представлять собой form fill или quiz).

2. Bot initiated dialog.

Наша система оповещений работает по такой модели: на API бота подается сообщение и адресат от нашего сервиса, бот отправляет это сообщение по адресу. В зависимости от настроек в запросе это может быть единичное сообщение или запуск какого-то диалога.

Что под капотом

MS Bot Framework имеет 2 реализации: С# и Node.js. В данном кейсе был выбран Node.js из-за его гибкости. Диалоги внутри бота — это готовые функции. Если вы хотите менять саму топологию диалогов и архитектуру бота в C#, вам потребуется использовать reflection. В Node.js это делается гораздо проще. Крайне выгодной получается архитектура «1 бот — много сценариев», когда мы конструируем какой-то универсальный бот и при старте из API задаем его структуру.

Бот должен быть подключен к каналу взаимодействия с пользователем (FB, Slack, Skype, Web application и т. д.). Для этого в MS Bot Framework есть интерфейс IConnector. Мы могли бы воспользоваться реализацией Microsoft и подключить Azure Connector, который может агрегировать сообщения от всех подключенных каналов и присылать на API вашего бота. Но мы пошли путем самурая и реализовали свой Slack Сonnector. Это нам дало больше функций, чем у реализации Slack API от MS. Также Azure Connector не бесплатный и тарифицируется по количеству сообщений, а наш бот — нет.

После подключения каналов необходимо разместить бот. Мы должны откуда-то принимать сообщения и куда-то отправлять.

Классическая схема — когда у нас есть API в интернете, куда нам присылают сообщения, а по другому адресу мы уже отправляем ответы. В Azure есть специальный контейнер для Bot Framework, где мы можем разместить приложение и получить endpoint, однако можно сделать то же самое у себя на сервере. Наша реализация состоит из Slack RTM client. Это сокет, по которому мы получаем сообщения, а отправляем их через Slack Web API.

После этого нужно определиться, хранить ли состояние диалогов и, если да, то как долго. Диалоги можно хранить в памяти, а можно в БД. Есть стандартные реализации для Cosmos DB и оперативной памяти. Однако лучше всего написать свою реализацию интерфейса IBotStorage для вашей любимой БД (существует всего три метода). Мы сделали под NoSQL.

Дальше остается только наполнять приложение логикой, для чего Bot Framework предоставляет огромное количество инструментов. Мы создали API, через который наши внутренние сервисы рассылают уведомления сотрудникам. Реализуется Bot initiated dialog сценарий, который описан выше. Также созданы intent диалоги, которые реализуют User initiated dialog сценарий и вызываются в зависимости от ввода пользователя.

Основной Stack технологий: Node.js, MS Bot Framework, Typescript, NeDB, Slack SDK, DialogFlow.

Вывод

Бот — это довольно гибкая система, которая может быть как монолитной, имея в себе всю бизнес-логику, так и быть легким клиентом, черпая структуру из API, генерируемого с помощью CMS. При этом это довольно дешевая технология, не требующая участия большой команды разработчиков при условии монолитной архитектуры или готовой CMS. Единый поток ввода/вывода делает систему не требовательной к ресурсам. Бот помогает сделать интерфейс дружелюбнее, выполняет промо-задачи, перенимает задачи консультантов, делая рабочий процесс более удобным.

LinkedIn

10 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

А еще можно перейтти на ccpm и больше не учитывать потраченное время.

Как по мне, это просто ремайндер. Можно с тем же успехом просто поставить напоминалку в том же слаке, которая будет в канал отправлять всем сообщение о заполнении тайм репорта, а те, кто уже это сделали — просто проигнорируют его. Это не то, над чем нужно действительно долго думать и автоматизировать. Бот для управления проектами — слишком громко сказано, где же здесь управление?

Как по мне, это просто ремайндер. Можно с тем же успехом просто поставить напоминалку в том же слаке, которая будет в канал отправлять всем сообщение о заполнении тайм репорта, а те, кто уже это сделали — просто проигнорируют его.

Вы будильник тоже заводите для всего дома, а те кому не надо вставать просыпаться не будут? Тем более частые сообщения не по делу просто отвлекают и в скором времени перестанут работать.

Это не то, над чем нужно действительно долго думать и автоматизировать

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

Бот для управления проектами — слишком громко сказано, где же здесь управление?

Не переживайте, такой бот помощник менеджера, он не заберет у Вас работу :)

В потоке ежедневных задач программисты забывают вовремя заполнять данные по time-reporting. Нужен простой способ напоминать членам команды о ежедневном отчете, который бы позволял рассылать уведомления только тем, кто забыл залогировать время.

За технические подробности спасибо, интересно, но вот на счет решаемой проблемы...

Почему не написать бота который будет рассчитывать потраченное время в зависимости от времени проведенного в In Progress, In testing? Почему вместо того чтобы не пинать и отвлекать людей, провести анализ работы команды, автоматически учитывать время митингов, обедов, других активностей и не перекладывать работу по генерации отчетов для клиентов, менеджеров, боссов на разработчиков у которых и так поток ежедневных задач?

Имхо, но показатель работы программиста это важность и количество реализованных бизнес фич, а не то, сколько часов он потратил. И все же много чего зависит от культуры на проекте, если ваш ПМ, тимлид рас..дяй то напиши хоть десят ботов, бардака от этого меньше не будет.

Скажите, а зачем ваш бот имитирует стиль нимфетки раннепубертантного возраста? Эти смайлики-эмодзи после каждых пары слов — оно для кого вообще сделано, ну в смысле кто целевая аудитория?

Картинки bot initiated dialog пробулированы, а картинки user initiated dialog — нет.

картинки разные.
А насчет второго, там личные данные сотрудников: имена, фамилии, явки, пароли. Делать скрин в котором 80% замазано ну такое.

0 11 * * * /home/scripts/check_time_report_and_send_notification

Ну, так ты слона не продашьконтору не пропиаришь

Типичный пример когда проблему решают не с того конца.

В потоке ежедневных задач программисты забывают вовремя заполнять данные по time-reporting. Нужен простой способ напоминать членам команды о ежедневном отчете, который бы позволял рассылать уведомления только тем, кто забыл залогировать время.

Может проблема в том что вы заставляете программистов каждый день заполнять грёбаный отчёт? Я думал все уже в курсе что такого рода дотошный менеджмент на пользу не идёт.

В общем, ещё не читал, но уже осуждаю.

Подписаться на комментарии