Привет, Хабр! Это Илья Фошин, я возглавляю команду данных «МосТрансПроекта». Однажды во время сильного дождя мы задумались: почему бы нам не разработать простой и удобный сервис проката корпоративных зонтиков для сотрудников? Мы поделились идеей с ИТ-директором и руководством Института и, получив их одобрение и поддержку, приступили к работе. С этого момента началась жизнь бота «МТП Шеринг», о котором расскажем в этой статье. Заодно поделимся нашим опытом по созданию корпоративных ботов.
Кажется, дождь начинается
«У нас есть корпоративная столовая и корпоративный кофе, но сейчас бы нам больше пригодились корпоративные зонтики», — произнес кто-то из нас в конце рабочего дня, задумчиво смотря на внезапный, льющий как из ведра дождь. Так мысль, высказанная вслух, превратилась в идею, а идея — в запуск сервиса, помогающего коллегам пережить капризы непогоды. Примерно в то же самое время мы хотели научиться создавать и настраивать умные боты для автоматизации процессов. О части разработанных сервисов уже рассказывали на Хабре (например, про «Информатум» и систему ЕСАБ), но кейс с зонтиками стал первой пробой пера для большей части нашей команды. Поэтому трек разработки с самого начала строился таким образом, чтобы попробовать разные варианты архитектуры и найти простое, но эффективное и легко масштабируемое решение для дальнейших проектов. Одновременно с этим нужно было отработать потенциальные сбои, ошибки и инфраструктурные проблемы.
Для понимания стоявших перед нами задач сразу расскажем, как работает прокат зонтиков (его мы запустили осенью 2024 года). Схема максимально простая. Стойка с 10 зонтами расположена на втором этаже Института. Сотрудник подходит к стойке, сканирует QR-код, запуская чат-бот для шеринга. Дальше нужно взять зонт, отсканировав с помощью мини-приложения QR-код (с этого момента начинается аренда), попользоваться им и вернуть на точку проката, отсканировав отдельный QR-код для завершения аренды. Казалось бы, ничего сложного в создании такого сервиса нет. Но нюансы все-таки были.
Как из ведра
По ходу создания сервиса мы столкнулись с рядом интересных задач. Путь от создания концепции и первых зарисовок CJM до полноценного сервиса составил около полутора месяцев. Скажу сразу, что сейчас с учетом накопившегося опыта мы бы потратили на это в разы меньше времени.
Разместить стойку с зонтиками мы решили недалеко от главного входа – в самом оживленном и людном месте нашего Института. Первоначально мы думали сделать несколько точек (как минимум по одной на этаже), но от этой идеи отказались, потому что зонтики могли разбираться сотрудниками неравномерно, быстро заканчиваться в одних местах и мало использоваться в других. Заставлять коллег бегать по зданию и искать точку со свободным зонтиком, чтобы сходить пообедать или доехать до дома, нам показалось, как минимум, негуманным.
10 зонтов, казалось бы, немного, учитывая, что в нашем Институте работает более 500 человек. Но этого вполне достаточно, чтобы даже в случае неожиданного дождя всегда можно было взять 1-2 зонта в аренду. Бывали случаи, когда все зонты разбирали, но это скорее исключение, чем правило. Если ситуация будет повторяться, попросим службу административно-хозяйственного отдела (АХО) закупить для нас дополнительные зонтики. Коллеги из АХО, кстати, очень сильно помогли нам при создании сервиса, подбирая, закупая и размещая зонты. А отдел внутренних коммуникаций организовал небольшую PR-компанию — ведь важно не только создать нового чат-бота, но и рассказать о нем потенциальным пользователям.
Теперь – про учет и систему регистрации. По ID в боте мы понимаем, какой человек взял какой зонтик. Закрепление зонта за конкретным человеком мотивирует более бережно относиться к вещи и не забывать вовремя возвращать ее на место. Когда приближается срок окончания аренды (24 часа для будних дней и ближайший понедельник для пятницы), бот присылает пользователю сообщение.

Случаи, когда пользователи не возвращали зонтики в положенный срок, уже бывали. Обычно это происходило из-за того, что сотрудники не сканировали QR-код при завершении аренды, хотя физически зонт уже находился на стойке. Чат-бот просто не видел этого в своих логах. Тогда к делу подключались администраторы, которые связывались с коллегами и объясняли им, что нужно сделать для удаления своего профиля из списка должников.
Наверняка кто-то спросит, зачем для завершения аренды нужен отдельный QR-код. Мы хотели, чтобы пользователь сначала возвращал зонтик на точку проката, а только затем отсканировал код возврата. Это помогает избежать потенциальных ошибок. Ведь при использовании единого кода, расположенного на самом зонтике, взявший его сотрудник теоретически мог закончить аренду в любом месте. Например, сделать это дома при получении напоминания от бота (то есть, по сути, обмануть систему), а на следующий день забыть принести зонт обратно. Зонтик в этом случае отображается в системе как доступный, но фактически он «застревал» у последнего пользователя. Наше же решение помогает справляться с подобными ситуациями и в целом улучшает осознанность при использовании сервиса. Но все равно, сколько инструкций не пиши, некоторые пользователи либо просто кладут зонтик и ничего не делают, либо пытаются отсканировать QR-код самого зонтика. И потом пишут в обратную связь, что ничего не работает. Мы продолжаем разъяснять алгоритм работы сервиса среди сотрудников и надеемся, что рано или поздно всем все станет ясно.
Санкций или наказаний за просроченную аренду не предусмотрено, кроме, пожалуй, единственного ограничения — взять новый зонтик не получится, пока на место не возвращен старый. Но в большинстве случаев сотрудники сознательно и ответственно подходят к использованию арендованных зонтиков. Обычно они возвращаются на место в рабочем состоянии, чистыми и высушенными и не требуют какого-то дополнительного ухода. А удачно подобранная тумба для хранения позволяет влаге с мокрых зонтов быстро стекать и испаряться.
Капля за каплей
Архитектура проекта получилась довольно простой: сам бот, работающий со встроенным в него мини-приложением, REST API, к которому они обращаются, и база данных.

За основу сканера QR-кодов мы взяли Mini App с гитхаб (https://github.com/MBoretto/easy-qr-scan-bot), разработанный на Vue.js. В качестве REST API используется FastAPI (т.к. он асинхронный и создает документацию автоматически), а всю работу с базой данных, которая реализована с помощью PostgreSQL, выполняет API.

Для удобства пользователей практически весь функционал, с которым они взаимодействуют, перенесен в Mini App. Из него было удалено все, кроме сканера QR-кодов, и добавлена отправка запросов к RestAPI, позволяющая получать или возвращать зонтик. Мини-приложение оказалось настолько удобным, что форма обратной связи также была реализована в нем.

В самом боте были оставлены только три функции:
-
Запуск сканера QR-кода
-
Открытие формы обратной связи
-
Отправление сообщения об ошибке
Когда пользователь сообщает об ошибке, его контактная информация приходит администраторам, которые помогают решить возникшую проблему.


Хочу отметить несколько интересных решений, которые мы применили в проекте. Например, для того, чтобы пользователям отправлялись сообщения о необходимости вернуть зонтик, был использован WebSocket. Бот «слушал» его и, когда API давал соответствующую команду, отправлял уведомления возврате. QR-коды для старта проката, расположенные на самих зонтиках, предназначены для сканирования только в нашем сервисе. Если пользователь попытается отсканировать его с помощью другого приложения, то будет автоматически перенаправлен в шеринг-бота. Так мы всегда знаем, кто из сотрудников воспользовался сервисом и какой именно зонтик он взял со стойки, потому что его ID фиксируется в базе данных.
Сухая статистика
На момент написания статьи сервис проката проработал 87 дней, 42 дня осенью 2024 года и 67 дней весной\летом 2025 года. Зонтиками за это время воспользовались 118 раз. Мы не стали приводить среднее значение, потому что уровень спроса зависит от множества факторов: шли ли в эти дни дожди, насколько они были сильными, какой прогноз давала метеослужба накануне и так далее. Например, в первые 10 дней работы этой весной зонтики взяли более 30 раз — это пиковые показатели с момента запуска.
Сейчас в боте зарегистрировано 74 пользователя. Это означает, что каждый восьмой сотрудник Института хотя бы раз спасался от непогоды с помощью с нашего сервиса. Средняя оценка по форме обратной связи составляет 5 из 5 баллов. За все время мы получили лишь одну четверку и оперативно отработали проблему, возникшую у одного из сотрудников. Мы можем уверенно сказать, что создали удобное, простое и востребованное среди коллег решение. Зонтшеринг органично вписался в нашу корпоративную культуру. Им пользуются как рядовые сотрудники, так и руководители. В связи с этим мы и решили поделиться историей создания бота «МТП Шеринг» с широкой аудиторией Хабра.

Сейчас мы планируем дальнейшее развитие сервиса, анализируем потребности коллег и адаптируем бота под их запросы. Уже думаем над идеей подключить к шерингу книги из корпоративной библиотеки, на которые надо будет наклеить QR-коды. В самом начале рассматривались варианты с краткосрочной арендой других предметов, например, павербанков, от которых довольно быстро отказались из-за их низкой популярности. Кстати, именно поэтому рабочее название «Зонтшеринг» в ходе работы сменилось на «МТП Шеринг»: мы полагаем, что со временем в нем появятся новые услуги.
Над проектам работали: Фошин Илья, Ростислав Осленко, Георгий Гаврилин
А какие боты и для чего используете в своей компании вы? Делитесь в комментариях.
ссылка на оригинал статьи https://habr.com/ru/articles/918842/
Добавить комментарий