Quantcast
Channel: Найцікавіше на DOU
Viewing all articles
Browse latest Browse all 8115

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

$
0
0

В рубрике 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. Единый поток ввода/вывода делает систему не требовательной к ресурсам. Бот помогает сделать интерфейс дружелюбнее, выполняет промо-задачи, перенимает задачи консультантов, делая рабочий процесс более удобным.


Viewing all articles
Browse latest Browse all 8115

Trending Articles