Привет, Хабр! Это Илья Фошин, я возглавляю команду данных «МосТрансПроекта». Однажды во время сильного дождя мы задумались: почему бы нам не разработать простой и удобный сервис проката корпоративных зонтиков для сотрудников? Мы поделились идеей с ИТ-директором и руководством Института и, получив их одобрение и поддержку, приступили к работе. С этого момента началась жизнь бота «МТП Шеринг», о котором расскажем в этой статье. Заодно поделимся нашим опытом по созданию корпоративных ботов.
Кажется, дождь начинается
«У нас есть корпоративная столовая и корпоративный кофе, но сейчас бы нам больше пригодились корпоративные зонтики», — произнес кто-то из нас в конце рабочего дня, задумчиво смотря на внезапный, льющий как из ведра дождь. Так мысль, высказанная вслух, превратилась в идею, а идея — в запуск сервиса, помогающего коллегам пережить капризы непогоды. Примерно в то же самое время мы хотели научиться создавать и настраивать умные боты для автоматизации процессов. О части разработанных сервисов уже рассказывали на Хабре (например, про «Информатум» и систему ЕСАБ), но кейс с зонтиками стал первой пробой пера для большей части нашей команды. Поэтому трек разработки с самого начала строился таким образом, чтобы попробовать разные варианты архитектуры и найти простое, но эффективное и легко масштабируемое решение для дальнейших проектов. Одновременно с этим нужно было отработать потенциальные сбои, ошибки и инфраструктурные проблемы.
Для понимания стоявших перед нами задач сразу расскажем, как работает прокат зонтиков (его мы запустили осенью 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-коды. В самом начале рассматривались варианты с краткосрочной арендой других предметов, например, павербанков, от которых довольно быстро отказались из-за их низкой популярности. Кстати, именно поэтому рабочее название «Зонтшеринг» в ходе работы сменилось на «МТП Шеринг»: мы полагаем, что со временем в нем появятся новые услуги.
Над проектам работали: Фошин Илья, Ростислав Осленко, Георгий Гаврилин
А какие боты и для чего используете в своей компании вы? Делитесь в комментариях.
Комментарии (12)
pnmv
16.06.2025 23:25"аренда"/"шеринг"/"приложение"(о боже, еще одно? "ну мааам!"(с))
надеюсь, зонтики предоставлялись бесплатно? или, кап-кап-кап, в счёт зарплаты, как из ведра?
alexandertortsev
16.06.2025 23:25Это уже пятый или шестой зонтшеринг, о котором я слышу два года подряд. И никто не взлетает. И сторителлинг примерно один и тот же, под копирку. Факап тоже будет очень похож
dyadyaSerezha
16.06.2025 23:25Предлагаю пойти дальше, гораздо дальше. Захотел чашку кофе - отсканируй QR-код аренды чашки. Вернул - отсканируй код возврата чашки. Хочешь и с блюдце? Отсканируй другой QR-код для аренды блюдца. Занимаешь кабинку в туалете - отсканируй QR! Не более 5 минут. А то мало ли. Ну и так далее - вилки, ложки, ножницы, кнопки, скрепки... много чего можно добавить в парадигму "взять в аренду". Чтобы всё, как положено, было, а не как у этих, понимаешь.
avost
16.06.2025 23:25А реальная цена вопроса - попросить АХО купить +10 зонтиков от забывчивых граждан и любителей сувениров и периодически подкладывать в общий пул.
vindy
А что мешает пропустить всю эту клоунаду с кодами и ботами, просто взять зонт и позже вернуть?
johnfound
И я хотел этого спросить, но потом осознал, что они своим людям не верят. И считают, что если кто-то украдет зонт, это сделает их лохи – деньги потеряли.
Don_foshinio Автор
На первый взгляд может показаться, что запуск зонтшеринга усложнил простую задачу. Но на самом деле это не так. Зонты очень часто забывают, и бот помогает напомнить сотрудникам вернуть вещи на место, чтобы коллеги не промокли под дождем. Мы заботимся об их здоровье!
johnfound
Это запросто решается огромным запасом. Люди рано или поздно вернут, возможно 3..4 одновременно, если буфер достаточно большой, то хватит. Надо было по ТРИЗ рассчитать какой запас зонтов позволит достигнуть равновесие.
dyadyaSerezha
Пипец - несколько программистов, тестировщиков, аналитиков, UX-специалистов и прочих (следует из текста, где везде "мы") несколько недель (ведь недель же?) делали это приложение. Если бы пустить их зарплату за это время на покупку зонтиков, то можно было бы купить по несколько зонтиков каждому (!) сотруднику института. То есть, вместо того, чтобы просто купить 20-30 зонтов и поставить их в фойе, была проведена гигантская работа и потрачены в сотни раз большие деньги, и всё для чего - для того, чтобы сделать тривиальное действие максимально сложным. Дорогая редакция, я фигею, я просто фигею.
randomsimplenumber
Хобби - проект за счёт конторы, хорошо же.