Телеграмм-бот для Топового банка

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

/users_files/NooSoft/ЗАЧЕМ МНЕ ЭТИ ВАШИ РАБОТЫ.jpg

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

Но как оповестить всех, что кто-то отсутствует и именно этому человеку нельзя писать? Сообщения и уведомления -  вариант на один раз, прочел и забыл. Фотография с датами отсутствия во всех рабочих профилях - вот решение. Она не будет спамить письмами на почту, но будет всегда на виду.

/users_files/NooSoft/Картинка аватарки в мессенджерах.png

Какая задача была поставлена перед NooSoft?

Команда банка рассказала NooSoft о своем видении и требованиях. Одно из них - не создавать отдельное приложение. Всё должно быть быстро, удобно и без лишних действий для пользователя. Поэтому выбор пал на создание телеграмм-бота. На текущий момент это самый актуальный мессенджер с широкими возможностями для разработки, а сотрудники банка - его активные пользователи.

В ходе переговоров были обозначены задачи, решаемые ботом:

  1. Выбор или загрузка фона.

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

  1. Установка даты отпуска.

Важной функцией бота должна быть возможность визуализации даты начала и окончания отпуска на аватаре. Что подчеркнет время отсутствия на рабочем месте непосредственно в профиле.

  1. Добавление надписи.

Сотрудник может добавить надпись на свой аватар, выбирая из предложенных вариантов. Это позволит внести неформальность и отразить индивидуальность пользователя.

  1. Генерация готовой аватарки.

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

Разработка Телеграмм-бота

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

Команда NooSoft приступила к работе с описания логики работы бота.

Было решено разделить функционал на два сервиса:

  1. Бот общения с пользователем.
  2. Генератор изображений.

Четкое разделение обязанностей между ботом и сервисом сборки фотографий, предотвратило большое ожидание генерации изображений и "краш самого сервиса" и поддерживало его активность для всех пользователей.

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

По итогу была выстроена следующая логика:

/users_files/NooSoft/Схема логики.png
  • Бот общается с пользователями и узнает параметры желаемой аватарки.
  • “Слушатель” вылавливает все присланные фото и отправляет их в очередь.
  • Генератор на основе сформированной очереди создает аватар и отправляет его обратно в бот.

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

После того, как был определен фронт работ, команда приступила к разработке. Клиент предоставил нам большой массив с примерами аватарок.

/users_files/NooSoft/Картинка с примерами фонов.png

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

Отдельными методами была создана генерация вокруг фона специальной рамки с добавлением надписи и даты отпуска. В них была описана логика, которая основывалась на преобразовании изображения в формат RGBA и наложения друг на друга всех частей аватарки. Исключением был текст "Дата отпуска", он рисовался в заданных координатах динамически. Если выбиралось пользовательское изображение, то подложкой для даты являлся градиент. 

/users_files/NooSoft/Сама аватарка.png

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

Бот вылавливает данные с чата и отправляет их в очередь. В это время созданный слушатель в генераторе берет изображение с очереди, обрабатывает и отправляет в чат в виде "Фото" и "Документа" для меньшей потери качества.

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

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

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

/users_files/NooSoft/Схема новой логики.png

В конечной стадии разработки команда добавила сбор статистики для анализа производительности бота. И произвела переход работы от механизма pulling (периодический опрос сервера на наличие новых сообщений) к использованию Webhooks.

Webhook - это метод, при котором сервер Телеграмма непосредственно отправляет новые данные боту по мере их поступления.

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

Система, основанная на RabbitMQ, Webhooks и методах генерации изображений, обеспечивает эффективное управление сборкой фотографий, повышенную отзывчивость бота и минимизацию временных задержек для пользователей, создавая приятный опыт использования.

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

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

  • Снизился рабочий стресс.

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

  • Улучшилось общее настроение.

Внедрение бота принесло элемент творчества в рабочий процесс. Сотрудники активно загружали свои фотографии и экспериментировали с созданием уникальных аватарок. Возможность выбирать из нескольких вариантов позволила выразить свою индивидуальность. Новый подход к обозначению статуса отпуска улучшил коммуникацию внутри команды и создал положительное общее настроение.

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

Вы тоже можете взять на заметку эту идею для себя или своей компании. Помните, что продуктивный сотрудник - это отдохнувший сотрудник!

/users_files/NooSoft/Скриншот 11-12-2023 155533.jpg