Ни для кого не секрет, что хорошее ПО отличается от остального не функционалом, а качеством работы заявленных функций. Ведь никому не нужно богатое на функционал ПО, если оно попросту не работает. Но как вовремя успеть рассказать разработчикам о том, что с проектом что-то не так?

Сегодня мы немного поговорим о проблемах коммуникации отделов внутри компании, а заодно на примере Test IT мы рассмотрим то, что помогло нам постичь дзен: беспристрастный, с сердцем из камня и душой из алгоритма – бот на Bot Framework. Добро пожаловать под кат!





Издавна считалось, что на войне главный инструмент – связь. Без связи невозможно координировать свои войска, узнавать новости с полей, оказывать поддержку и следить за действиями противника. А что есть разработка, если не локальная война нескольких отделов за продукт?

И если в давние времена для распространения новостей использовали посыльного, гонца, а позже – телефонную связь, то на пороге 2020 года было бы странно использовать такие технологии, особенно когда ваша армия, работающая над продуктом, может быть распределе��а далеко за пределами одного офиса. Вот наш QA Engineer и задался похожим вопросом.

Конечно, можно писать подробности о проваленном тесте в рабочий чат. Но это потребует времени, которое тратить на однотипные уведомления не хочется. Можно добавить команду на портал Test IT и заставлять их проверять статусы автотестов. И это также частично решит проблему, но необходимость постоянно быть на портале будет сильно отвлекать команду разработки. Нам нужно что-то проще, без необходимости лишний раз тратить время на рассылку уведомлений.

Следуя по такой логике, мы и пришли к вебхукам. Они позволят автоматизировать отправку уведомлений и критических логов от системы на любой утюг, подключенный к интернету.
Итак, с каналом связи разобрались. Самое время подумать о том, куда вебхуки должны направлять свои уведомления. В идеале это должна быть платформа, объединяющая в себе несколько мессенджеров и электронную почту для любителей классики. И, как вы могли догадаться по названию статьи, выбор платформы пал на Bot Framework.

Такая комбинация полностью отвечает требованиям к срочным уведомлениям, позволит расширить возможности бота без вмешательства в тест-кейсы и платформу. А сам бот станет нашим помощником в разработке, который неустанно будет читать рабочий чат и уведомлять нас о любых интересующих событиях в TMS Test IT.

В сегодняшней статье мы рассмотрим пример использования бота в Telegram для рассылки уведомлений командам разработки и тестирования от платформы Test IT.

Создаем проект и бота


Переходим на портал и создаём новый проект:

image

Проект включает в себя тест-кейсы, автотесты, чек-листы, вебхуки и многое другое.

Далее создадим тест-план. Пусть он будет иметь такое же незамысловатое название, как и имя проекта:

image

Далее можно добавлять новые тест-кейсы, но мы перейдём непосредственно к созданию нашего умного помощника. Портал не закрывайте, к нему мы ещё вернёмся для настройки вебхуков.
Разработка будет вестись на .Net Framework (ну куда же без него) с использованием Azure. Собственно, начнём мы именно с Azure.

Переходим на портал и ищем Web App Bot:

image

Нажимаем «Создать», заполняем обязательные поля и разворачиваем. В рамках статьи мы изначально развернём шаблон Echo Bot и в дальнейшем будем отталкиваться именно от него
Когда бот успешно развернулся – самое время подвязаться к своим каналам связи с ботом. На выбор разработчика представлен весьма большой список мессенджеров и вариантов коммуникации, но для наших целей хватит и Telegram.

Для этого напишем пару добрых команд боту @BotFather и создадим нового бота. Благо, с нами он общается весьма дружелюбно, помогая создать себе подобного. Bot Father создан в Telegram для управления другими ботами. Да-да, не зря его зовут отцом ботов!

Под конец регистрации Bot Father должен выдать нам уникальный ключ нашего чада. С радостью копируем его, ��лагодарим отца этого странного семейства и возвращаемся на портал Azure.

Теперь нам необходимо загрузить исходный код бота, чтобы мы могли работать с ним непосредственно в нашей IDE:

image

Тут же можем получить и эмулятор для локальной отладки. Если ваш бот будет иметь логику чуть сложнее, чем вывод «Hello world» – лучше обзавестись средствами для отладки и тестирования вашего нового члена команды.

Непосредственно на портале нам осталось только открыть нашего нового бота, перейти во вкладку «Каналы», добавить канал Telegram и отдать ему ключ, любезно оставленный отцом ботов. Также, дабы предотвратить падение бота при долгом отсутствии активности, желательно перейти к службе приложений (имя аналогично названию нашего бота на портале) -> конфигурация -> общие параметры и в графе «Всегда включено» выбрать статус «Включен». В противном случае ваш бот может уснуть, а на его запуск требуется драгоценное время конечных пользователей.

image

Также, раз мы ещё на портале Azure, развернём небольшую БД для этого бота. Пригодится, чтобы хранить список индексов групп и их секретные ключи. Подробнее о разворачивании БД можно почитать тут.

Итак, если при обращении к нашему боту в Telegram он возвращает наше сообщение – значит мы всё сделали верно и вкладку с Azure можно отложить до лучших времён. Теперь можно заняться проработкой логики работы нашего помощника.

Вправляем мозги боту



image

Для тех, кто имел опыт работы с ASP.NET Core, далее ничего нового не будет. Остальным же оставим краткий мануал о том, что делать далее:

  • Научить приложение работать с Entity Framework и подвязать БД. Необходимо для того, чтобы бот мог хранить связи ChatID, статус игнорирования чата и «secretKeyBot» входящих сущностей в базе данных. Это позволит использовать бота не только в рамках данного проекта и компании в целом, но и свободно добавлять его в группы всем желающим;
  • Добавить модель данных и контроллер API. В нашем приложении должна быть какая-то внешняя точка входа, через которую можно обратиться к боту и передать тело запроса. Модель данных и есть представление тела запроса, а контроллер должен отработать при внешнем вызове;
  • Написать круды и сервис команд. Если с крудами всё ясно, то сервис команд – наша бизнес-логика по обработке сообщений чата. Изначально мы хотели получить возможность заглушить уведомления от бота в каком-либо конкретном чате. Один из вариантов сделать это – непосредственно командой в чате, которую бот должен обработать и запомнить только для этого чата.
  • Протестировать бота в локальной среде при помощи эмулятора. Особо матёрые ребята могут выгрузить бота сразу на Azure и смотреть за его поведением через чат в Telegram, но в этом случае бот не вернёт вам подробное описание ошибок. Да и точки останова (излюбленный инструмент дебагинга) не расставишь. К слову, небольшая особенность Bot Framework в том, что он очень не любит возвращать детальное описание ошибки. Так что разрабатываем осторожно и коммитимся почаще!
  • Опубликовать на Azure. Среди папок проекта можно отыскать одну с незамысловатым названием «PostDeployScripts». Она содержит в себе один важный для нас файл с расширением .PublishSettings. Данные о подключении к хранилищу бота на Azure лежат именно там. А для тех, кто использует Visual Studio, этот файл и есть священный ключ для публикации проекта: импортируйте его при публикации, и IDE подтянет все необходимые данные из него.


Добавляем вебхук


Собственно, бот создан. Самое время прокинуть вебхук с портала TestIT. Радуемся, что не закрыли вкладку в браузере, и переходим туда:

image

Заходим в настройки проекта, вкладка «Вебхуки» и добавляем новый:

image

Теперь попробуем изменить статус тест-плана и посмотрим, как бот отреагирует.

image

Собственно, на этом мы и закончили небольшой пример по созданию бота-помощника. Нашего бота можно посмотреть на GitHub.

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

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