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

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

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

У участников этого коммьюнити была проблема, на которую они чаще всего жаловались. Это способ записи на еженедельную тренировку. Дело в том, что на каждое коммьюнити компания выделяла определенный бюджет. И конкретно в большом теннисе его хватало на 2 тренировки в неделю максимальной вместимости по 8 чел в группе. При этом желающих в зависимости от сезона было больше чем могла вместить группа.

Запись на занятия происходила через выкладку в 12:00 в определенный день google docs документа с общим доступом. Соответственно, в 12:00 начиналась бойня за то, кто раньше успеет вписать себя. Кто-то перезаписывался поверх другого человека, кто-то в этот момент был на встрече и не смог вовремя зайти и записаться. В общем, это был хаос. А кроме того, некоторые постоянные участники наловчились записываться быстрее всех, что приводило к тому, что люди, которые хотели хоть раз попробовать, ни разу не могли записаться (да-да, я был среди тех жуликов). "Несправедливо как-то. Кто-то уже 3 раза подряд ходит, а я не могу и раза записаться", — говорили они.

Мы с лидом коммьюнити пытались как-то пофиксить малой кровью это дело. Я написал формулу в excel, которая рандомно и с учетом тех, кто уже был на прошлой тренировке, давала итоговый список. Но это было неудобно лиду каждый раз копировать в telegram группу, кто в итоге идет на тренировку. Кроме того, у этого способа появился один неприятный side-effect. Люди записывались на тренировку на всякий случай. Когда их выбирала функция в excel и админ отправлял список в telegram группу — они пропускали это сообщение, так как у многих она была на mute.

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

Кроме хобби активностей компания еще организовывала хакатоны, где каждый может собрать команду или в одиночку сделать что-то полезное (но не бизнесовое) для компании и сотрудников (и, конечно, получить ачивки). Я несколько раз уже участвовал в них, и мне в голову пришла идея, как закрыть боль моих любимчиков - теннисистов. Если коммьюнити ведут в telegram - то почему бы и не записываться там же с автоматизацией всех описанных проблем? Идея есть - ищу ребят которые мне помогут, потому что сутки на реализацию выглядят маловато... Нашлись еще 3 энтузиастов. Засучили рукава, взяли по энергетику. И за сутки написали бота.

Смысла расписывать технически как он работает особо нет, так как никакого рокет саенса в сервисе нет. Лучше опишу как он работает с картинками:

  • Бот добавляется в чат с участниками коммьюнити.

  • Админ настраивает событие с параметрами опроса (если событие регулярное - то можно размножить его на пару месяц вперед).

    enter image description here
    Создание нового мероприятия через админку бота
  • Голосовалка в настроенное время приходит в чат, и желающие участвовать голосуют.

    enter image description here
    Первая голосовалка, которая отправляется ботом в группу
    enter image description here
    Результаты первой голосовалки
  • Опционально в настроенное время приходит голосовалка подтверждения с теганьем тех, кто отметился в прошлом голосовании (вдруг у кого-то изменились планы).

    enter image description here
    Второая голосовалка, которая отправляется ботом в группу
  • В настроенное время приходит итоговый список с теганьем тех, кто будет участвовать в мероприятии. Он строится следующим образом: пересечение двух первых списков + рандомизация с учётом тех, кто участвовал в прошлой тренировке (чтобы не было такого, что кому-то часто не везёт). Кроме того, публикуется список запасных участников на случай, если кто-то откажется.

    Пример: желающих 20 человек. Тренировка на 8 человек. В первой голосовалке они отметились, потом во второй голосовалке отметились 18 из 20. Итоговый список будет состоять из 8 участников (в приоритете те, кто не был на прошлой тренировке) и 10 запасных.

    enter image description here
    Итоговый список участвующих с заменами
  • Если человек попал в основной список, но понимает, что не может прийти — он пишет боту о том, что хочет отказаться, и тогда автоматически в основной список попадает человек по очереди из списка запасных.

    enter image description here
    Прошу заменить меня
    enter image description here
    Бот заменяет на первого человека из резерва
  • Если было много замен, то сложно отследить, кто в итоге идёт на мероприятие. Для этого есть команда, доступная админу коммьюнити — вывести итоговый список.

    Итоговый список после всех замен
    Итоговый список после всех замен

Где это может быть полезно?

  • Фитнес-центры, в которых есть ограничение на количество мест (например, cycle). К примеру, как я записываюсь сейчас. В 00 минут определённого часа открывается запись, и начинается race condition (авторизацию можно допилить — код открыт, у нас использовался отдельный бот, который удалял из группы не сотрудников).

    enter image description here
    Запись в моем фитнесе через приложение
  • Групповые занятия в теннисных школах или подобных заведениях.

  • Мероприятия, на которых надо знать, сколько из записавшихся придёт на один из уроков, чтобы посчитать количество оборудования/фасилитаторов или чего-то такого. Например, у нас был кейс, когда на обучение во внутреннем портале записалось 20 человек, а на уроках было от 4 до 12 человек. И куратору надо было знать, сколько человек будет на каждом из уроков.

  • Остальные use case можете придумать сами))

Таким образом, с помощью этого бота мы решаем проблему справедливого распределения мест. Поскольку бот является open-source и готов для деплоя в облако, организаторам (например, фитнес-центрам) это обеспечит гибкость и отсутствие дополнительных затрат, а также повысит лояльность пользователей. Для людей же это будет просто, удобно и приятно.

Теперь о второй части заголовка. Полгода назад я сменил работу. Несмотря на то, что у компании был офис в Москве, вся моя команда была распределённой, и коллег я видел только в Zoom (чаще всего с выключенными камерами). Иногда я ездил в офис, чтобы пообщаться, но когда ты работаешь в обособленной команде, сложно подходить к каждому в офисе и говорить: "Привет, я такой-то, давай пообщаемся". У вас нет общих точек соприкосновения. В итоге я приходил в офис и лишь пару раз с кем-то перекидывался парой слов. Грустно и не вкусно!

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

И тут я вспомнил, что хожу уже 3 года в один и тот же фитнес. Особенно часто в последние пол года пытаясь залечить сердечную травму (реально помогает). Посещаю я в основном групповые тренировки (да-да, вы тоже про эту картинку подумали?)

enter image description here
На поперечный шпагат я так и не сел))

Я знаю там пару человек, но помимо фитнеса мы нигде не общаемся. С несколькими обменялись контактами, поговорили о том, кто где работает. И всё. А благодаря моей рыбьей памяти я забыл половину имён, как только их услышал. И тут возник вопрос: а можно ли превратить людей, которые вместе ходят на одни и те же тренировки уже несколько лет, в комьюнити? Чтобы было не просто "привет-пока", а можно было бы посмотреть, как кого зовут, и видеть сториз людей, чтобы можно было о чём-то поговорить и хоть как-то косвенно узнать друг друга. Я знаю пример из моего прошлого фитнеса, когда из тех, кто постоянно ходил на тренировки, сформировалась команда, которая пробежала "Гонку героев". И вот теперь они друзья, ходят по барам и тусят вместе. Бинго! Это то, что мне было нужно! А если это нужно пользователю, значит, нужно и организаторам.

P.S. Уже четвёртую неделю заменяют хорошего тренера. И заменяющие не знают почему. Вот бы была группа, где можно было бы спросить у тренера лично...

Cсылка на тестирование бота https://t.me/+u5ZceP9JSChjZTYy
Ссылка на исходный код https://github.com/lashnag/community_bot (не серчайте за качество кода - делалось в режиме хакатона)

Комментарии (6)


  1. Ukrainskiy
    24.10.2024 09:22

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


    1. lexus1990 Автор
      24.10.2024 09:22

      А еще он в странных брекитах))