Публикация Школы траблшутеров

Внедри Телеграм-бот – успешнее отпуск пройдёт!

Время чтения: 6 мин
8 января 2024 г. Просмотров: 186

Программирование, Разработка | Олег Брагинский, Виталий Лажинцев, Сергей Кондратенко

Основатель «Школы траблшутеров» Олег Брагинский со слушателями школы Виталием Лажинцевым и Сергеем Кондратенко делятся кейсом разработки автоматического коммуникатора для внутреннего использования по заказу одного из топовых банков России.

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

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

Сообщения и уведомления – вариант на раз: прочёл и забыл. Кто-то настраивает автоответчик в электронной почте: не спасает – велик соблазн решить вопрос по-быстрому, в мессенджере.

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

Постановка задачи

Команда банка рассказала о видении и требованиях:

  • всё должно быть быстро, удобно
  • без лишних действий для пользователя
  • без конструирования отдельного приложения.

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

Во время переговоров были обозначены задачи:

  1. Выбор или загрузка фона – создание обрамления аватарки из предложенных вариантов или задействование собственного: обеспечиваем создание уникального внешнего вида.
  2. Установка даты отпуска – визуализация периода отсутствия на иконке профиля: подчёркиваем время недоступности на рабочем месте.
  3. Добавление надписи – выбирая из заготовленных вариантов, вносим неформальность: отражаем индивидуальность коллег.
  4. Предоставление готового продукта – сотрудник получает применимую аватарку: максимально упрощаем процесс, результат можно использовать сразу.

Сначала логика – потом разработка

Решили разделить функционал на два блока:

  1. Бот, ведущий коммуникацию.
  2. Генератор изображений.

Разнесение обязанностей болталки и сборщика фотографий предотвратило задержку генерации изображений и опасность недоступности сервиса. Для корректной работы организовали очередь картинок, чтобы отпускники оперативно получали желанное:

Выстроили логику:

  1. Бот общается с пользователями и узнает параметры желаемой картинки.
  2. «Слушатель» вылавливает присланные фото и отправляет их в очередь.
  3. Генератор последовательно создаёт аватары и отправляет обратно боту.

Теперь можно и покодить!

После определения фронта работ клиент предоставил большой массив с примерами подложек:

На их основе программисты создали два метода обработки изображений: как предоставленных сервисом, так и пользовательских. Учли логику, предотвращающую искажение: метод определяет середину картинки, создаёт увеличение/уменьшение рисунка, использует разумную обрезку.

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

Исключением стал текст «Дата отпуска»: рисовался в заданных координатах динамически. Если выбиралось пользовательское изображение, фоном временного слота становился градиент:

Для коммуникации между ботом и «сборщиком фото» внедрили RabbitMQ – брокер сообщений, обеспечивающий асинхронное взаимодействие. Таким образом, входные данные не теряются, даже если работа нашего конструктора была приостановлена по любой из множества причин.

Сообщения сохраняются, «сборщик фото» слушает очередь и начинает объединение, минимизируя время ожидания. Алгоритм вылавливает данные из чата и отправляет в очередь. Слушатель берёт изображение, обрабатывает и возвращает в виде «Фото» и «Документа» с малой потерей качества.

RabbitMQ маршрутизирует текстовые послания, по завершении генерации отправляет результат в чат-бот пользователя. В процессе разработки столкнулись с необходимостью серьёзного ускорения генерации аватарок и предотвращения блокировки для других абонентов во время сборки.

Решили создать несколько независимых сервисов генерации, работающих параллельно с автоматическим перераспределением нагрузки:

Добавили сбор статистики для анализа производительности и перешли от механизма Pulling – периодический опрос сервера на наличие сообщений к использованию метода Webhooks, когда сервер Телеграмма отправляет свежие данные боту по мере поступления.

Модификация улучшила производительность и отзывчивость «интеллектуального» помощника. Теперь он мог получать обновления мгновенно, вместо бесконечного поиска новых данных.

Обратная связь от сотрудников

Внедрение бота в банковскую среду оказало позитивное влияние на атмосферу в коллективе, получив признание со стороны персонала. Коллеги поделились тем, как изменились рабочие процессы и регламентные процедуры:

  1. Снизился стресс.

Сотрудники были удивлены оперативностью инструмента, ненавязчиво информирующего товарищей по работе о том, что кто-то находится в отпуске, помогая избегать ненамеренных обращений.

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

  1. Улучшилось настроение.

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

Подход с обозначением статуса отпуска улучшил коммуникацию внутри команды и создал положительное настроение. Команда программистов тоже стала пользоваться ботом, отметив, что простое и лёгкое решение наглядно показывает недоступность человека.