Сталкивались ли вы с тем, что уходите в долгожданный отпуск, а уведомления о задачах продолжаются сыпаться? И коллега с соседнего отдела просто не знал, что вы на законном отдыхе и просит все-таки сделать отчет.
В такие моменты понимаешь, что отпуск испорчен. Однако, крупные корпорации стараются создать такие условия, чтобы сотрудники поняли: их отдых также важен, как и продуктивность.
Но как оповестить всех, что кто-то отсутствует и именно этому человеку нельзя писать? Сообщения и уведомления - вариант на один раз, прочел и забыл. Фотография с датами отсутствия во всех рабочих профилях - вот решение. Она не будет спамить письмами на почту, но будет всегда на виду.
Команда банка рассказала NooSoft о своем видении и требованиях. Одно из них - не создавать отдельное приложение. Всё должно быть быстро, удобно и без лишних действий для пользователя. Поэтому выбор пал на создание телеграмм-бота. На текущий момент это самый актуальный мессенджер с широкими возможностями для разработки, а сотрудники банка - его активные пользователи.
В ходе переговоров были обозначены задачи, решаемые ботом:
Пользователь может выбрать любой фон для аватарки из предложенных вариантов или загрузить свой собственный. Это обеспечит создание уникального внешнего вида аватара.
Важной функцией бота должна быть возможность визуализации даты начала и окончания отпуска на аватаре. Что подчеркнет время отсутствия на рабочем месте непосредственно в профиле.
Сотрудник может добавить надпись на свой аватар, выбирая из предложенных вариантов. Это позволит внести неформальность и отразить индивидуальность пользователя.
По итогу сотрудник должен получить готовую аватарку. Процесс генерации должен быть максимально упрощен, а итоговый результат можно использовать сразу.
Команда NooSoft приступила к работе с описания логики работы бота.
Было решено разделить функционал на два сервиса:
Четкое разделение обязанностей между ботом и сервисом сборки фотографий, предотвратило большое ожидание генерации изображений и "краш самого сервиса" и поддерживало его активность для всех пользователей.
Также для корректной работы бота необходимо было создать очередь изображений, чтобы каждый пользователь мог быстро и оперативно получить свой аватар.
По итогу была выстроена следующая логика:
После того, как был определен фронт работ, команда приступила к разработке. Клиент предоставил нам большой массив с примерами аватарок.
На их основе разработчики создали два метода по обработке изображений: предоставленных сервисом изображений и пользовательских изображений. В одном из них была описана логика, предотвращающая искажение изображений, метод определяет середину изображения и создаёт кроп.
Отдельными методами была создана генерация вокруг фона специальной рамки с добавлением надписи и даты отпуска. В них была описана логика, которая основывалась на преобразовании изображения в формат RGBA и наложения друг на друга всех частей аватарки. Исключением был текст "Дата отпуска", он рисовался в заданных координатах динамически. Если выбиралось пользовательское изображение, то подложкой для даты являлся градиент.
Для эффективной коммуникации между ботом и "сборщиком фото" внедрили RabbitMQ – брокер сообщений, обеспечивающий асинхронное взаимодействие. Таким образом, входящие данные не теряются, даже если работа бота временно приостановлена. Сообщения сохраняются, а "сборщик фото" слушает очередь и начинает сборку, минимизируя время ожидания для пользователей.
Бот вылавливает данные с чата и отправляет их в очередь. В это время созданный слушатель в генераторе берет изображение с очереди, обрабатывает и отправляет в чат в виде "Фото" и "Документа" для меньшей потери качества.
RabbitMQ маршрутизирует сообщения по разным точкам назначения. По завершении генерации, сервис отправляет результат обратно в чат бота для конкретного пользователя.
В процессе разработки мы столкнулись с необходимостью увеличения скорости работы генерации аватарок и предотвращения блокировки для других пользователей во время сборки.
Поэтому было решено создать несколько независимых сервисов генерации, которые работают параллельно и распределяют нагрузку между собой.
В конечной стадии разработки команда добавила сбор статистики для анализа производительности бота. И произвела переход работы от механизма pulling (периодический опрос сервера на наличие новых сообщений) к использованию Webhooks.
Webhook - это метод, при котором сервер Телеграмма непосредственно отправляет новые данные боту по мере их поступления.
Использование Webhooks помогло дополнительно улучшить производительность и отзывчивость бота. Теперь он смог получать обновления мгновенно, когда они поступают, вместо того, чтобы регулярно проверять сервер на наличие новых данных.
Система, основанная на RabbitMQ, Webhooks и методах генерации изображений, обеспечивает эффективное управление сборкой фотографий, повышенную отзывчивость бота и минимизацию временных задержек для пользователей, создавая приятный опыт использования.
Внедрение телеграм-бота в банковскую среду оказало положительное влияние на сотрудников и атмосферу в коллективе, получив признание со стороны персонала. Клиенты поделились, как изменился рабочий процесс:
Сотрудники были приятно удивлены оперативностью и эффективностью нового инструмента. Такая методика моментально и ненавязчиво информирует коллег о том, что кто-то находится в отпуске и позволяет избегать ненамеренных обращений. Теперь сотрудники могут полностью погружаться в свой заслуженный отдых, зная, что их рабочий статус ясно отображен для окружающих.
Внедрение бота принесло элемент творчества в рабочий процесс. Сотрудники активно загружали свои фотографии и экспериментировали с созданием уникальных аватарок. Возможность выбирать из нескольких вариантов позволила выразить свою индивидуальность. Новый подход к обозначению статуса отпуска улучшил коммуникацию внутри команды и создал положительное общее настроение.
Команда NooSoft не осталась в стороне и тоже стала пользоваться ботом. Также отметив, что это простое и самое легкое решение оповестить всех, что ты пока что недоступен.
Вы тоже можете взять на заметку эту идею для себя или своей компании. Помните, что продуктивный сотрудник - это отдохнувший сотрудник!