Программирование, Разработка | Олег Брагинский, Виталий Лажинцев, Сергей Кондратенко
Основатель «Школы траблшутеров» Олег Брагинский со слушателями школы Виталием Лажинцевым и Сергеем Кондратенко делятся кейсом разработки автоматического коммуникатора для внутреннего использования по заказу одного из топовых банков России.
Отлучаясь на выздоровление, отдых или командировку, сталкиваемся с тем, что уведомления о задачах безжалостно продолжают сыпаться. Коллеги из других подразделений не ведают, что ответственный сотрудник вынужденно прервал рабочую деятельность, и просят-таки сдать отчёт.
В подобные моменты понимаешь – что-то явно пошло не так. Однако корпорации стараются создать условия, чтобы сотрудники были уверены: восстановление сил важно так же, как и продуктивность. Но как оповестить всех, что кто-то отсутствует, и именно этому человеку не следует писать?
Сообщения и уведомления – вариант на раз: прочёл и забыл. Кто-то настраивает автоответчик в электронной почте: не спасает – велик соблазн решить вопрос по-быстрому, в мессенджере.
Пришли к тому, что фотография с датами отсутствия в профилях приложений – рабочий вариант. Такой подход не завалит спамом в ответ на запросы по email, но будет всегда на виду.
Постановка задачи
Команда банка рассказала о видении и требованиях:
- всё должно быть быстро, удобно
- без лишних действий для пользователя
- без конструирования отдельного приложения.
Выбор пал на создание телеграм-бота. На текущий момент – актуальный мессенджер с широкими возможностями для разработки, а сотрудники банка – его активные пользователи.
Во время переговоров были обозначены задачи:
- Выбор или загрузка фона – создание обрамления аватарки из предложенных вариантов или задействование собственного: обеспечиваем создание уникального внешнего вида.
- Установка даты отпуска – визуализация периода отсутствия на иконке профиля: подчёркиваем время недоступности на рабочем месте.
- Добавление надписи – выбирая из заготовленных вариантов, вносим неформальность: отражаем индивидуальность коллег.
- Предоставление готового продукта – сотрудник получает применимую аватарку: максимально упрощаем процесс, результат можно использовать сразу.
Сначала логика – потом разработка
Решили разделить функционал на два блока:
- Бот, ведущий коммуникацию.
- Генератор изображений.
Разнесение обязанностей болталки и сборщика фотографий предотвратило задержку генерации изображений и опасность недоступности сервиса. Для корректной работы организовали очередь картинок, чтобы отпускники оперативно получали желанное:
Выстроили логику:
- Бот общается с пользователями и узнает параметры желаемой картинки.
- «Слушатель» вылавливает присланные фото и отправляет их в очередь.
- Генератор последовательно создаёт аватары и отправляет обратно боту.
Теперь можно и покодить!
После определения фронта работ клиент предоставил большой массив с примерами подложек:
На их основе программисты создали два метода обработки изображений: как предоставленных сервисом, так и пользовательских. Учли логику, предотвращающую искажение: метод определяет середину картинки, создаёт увеличение/уменьшение рисунка, использует разумную обрезку.
Вокруг сформированного облика человека запрограммировали размещение сгенерированной надписи и обозначенного периода отсутствия. Основывались на преобразовании графических объектов в формат RGBA с последующим наложением частей.
Исключением стал текст «Дата отпуска»: рисовался в заданных координатах динамически. Если выбиралось пользовательское изображение, фоном временного слота становился градиент:
Для коммуникации между ботом и «сборщиком фото» внедрили RabbitMQ – брокер сообщений, обеспечивающий асинхронное взаимодействие. Таким образом, входные данные не теряются, даже если работа нашего конструктора была приостановлена по любой из множества причин.
Сообщения сохраняются, «сборщик фото» слушает очередь и начинает объединение, минимизируя время ожидания. Алгоритм вылавливает данные из чата и отправляет в очередь. Слушатель берёт изображение, обрабатывает и возвращает в виде «Фото» и «Документа» с малой потерей качества.
RabbitMQ маршрутизирует текстовые послания, по завершении генерации отправляет результат в чат-бот пользователя. В процессе разработки столкнулись с необходимостью серьёзного ускорения генерации аватарок и предотвращения блокировки для других абонентов во время сборки.
Решили создать несколько независимых сервисов генерации, работающих параллельно с автоматическим перераспределением нагрузки:
Добавили сбор статистики для анализа производительности и перешли от механизма Pulling – периодический опрос сервера на наличие сообщений к использованию метода Webhooks, когда сервер Телеграмма отправляет свежие данные боту по мере поступления.
Модификация улучшила производительность и отзывчивость «интеллектуального» помощника. Теперь он мог получать обновления мгновенно, вместо бесконечного поиска новых данных.
Обратная связь от сотрудников
Внедрение бота в банковскую среду оказало позитивное влияние на атмосферу в коллективе, получив признание со стороны персонала. Коллеги поделились тем, как изменились рабочие процессы и регламентные процедуры:
- Снизился стресс.
Сотрудники были удивлены оперативностью инструмента, ненавязчиво информирующего товарищей по работе о том, что кто-то находится в отпуске, помогая избегать ненамеренных обращений.
Теперь можно спокойно погружаться в заслуженный отдых или отсутствовать по иным причинам, твёрдо зная, что статус отсутствия ясно и добросовестно отображён для окружающих.
- Улучшилось настроение.
Решение привнесло элемент творчества: банковские служащие активно загружали фотографии, экспериментируя с созданием уникальных образов. Возможность выбирать из нескольких вариантов позволила выражать индивидуальность, рвущуюся наружу.
Подход с обозначением статуса отпуска улучшил коммуникацию внутри команды и создал положительное настроение. Команда программистов тоже стала пользоваться ботом, отметив, что простое и лёгкое решение наглядно показывает недоступность человека.