Telegram-бот для бронирования билетов на регулярные офлайн-мероприятия

Telegram-бот для бронирования билетов на регулярные офлайн-мероприятия

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

🎯 Цели и задачи

  • Нужно интегрировать Telegram-бота и групповой чат с участниками клуба, чтобы уведомления о каждой регистрации и отмене автоматически поступали в чат.

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

  • В боте необходимо разработать функционал бронирования мест на мероприятие. Максимальное количество мест в одной брони — 4.

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

  • После успешного бронирования бот должен отправлять в групповой чат сообщение с информацией о броне и количеством оставшихся мест.

  • Важно настроить ограничение, чтобы бот разрешал бронировать места только в определённые даты: за день до мероприятия и в день мероприятия, и только до заранее установленного времени. Эти даты определены заказчиком на год вперёд.

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

  • Бот должен учитывать заранее установленное количество доступных мест. Это число определяется за несколько дней до встречи: администратор вводит количество уже занятых мест (участниками с абонементами) и список этих участников, который постоянно меняется. В боте требуется команда для внесения информации о свободных местах и участниках с абонементами.

  • За несколько часов до начала офлайн-мероприятия бот должен отправить в групповой чат сводную информацию обо всех бронированиях и оставшихся местах (если они есть).

  • Если пользователь пытается отменить бронирование после 13:00 в день мероприятия, бот должен уведомить его, что такой отказ является платным (в соответствии с правилами клуба, которые пользователь принимает при регистрации).

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

  • Если в период активного бронирования все места заканчиваются, бот должен предложить пользователю подписаться на индивидуальные уведомления на случай, если кто-то откажется от своей брони. Если места действительно освобождаются, бот отправляет подписавшимся уведомление о доступности мест и возможности снова забронировать.

🧩 Процесс работы

1. Создаём Telegram-бота через BotFather: оформляем его, настраиваем внешний вид и добавляем необходимые команды. Разработка будет вестись на платформе Salebot, так как она предоставляет весь необходимый функционал для проекта.

Бот готов
Бот готов
Команды для быстрого доступа к бронированию и отмене
Команды для быстрого доступа к бронированию и отмене

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

Начальное сообщение при запуске бота или вводе команды /start, если пользователь ещё не прошёл регистрацию. Этот блок также срабатывает при вводе команд /book или /cancel — бот без регистрации дальше не пропустит
Начальное сообщение при запуске бота или вводе команды /start, если пользователь ещё не прошёл регистрацию. Этот блок также срабатывает при вводе команд /book или /cancel — бот без регистрации дальше не пропустит
Для регистрации нужно написать «Я принимаю все правила» и ввести корректный номер телефона. После этого пользователь получает доступ к чату и бронированию мест
Для регистрации нужно написать «Я принимаю все правила» и ввести корректный номер телефона. После этого пользователь получает доступ к чату и бронированию мест
Если пользователь уже зарегистрирован и пишет /start, бот сразу отправляет ссылку на чат, правила и кнопки для бронирования и отмены
Если пользователь уже зарегистрирован и пишет /start, бот сразу отправляет ссылку на чат, правила и кнопки для бронирования и отмены

3. Далее реализуем функционал бронирования мест. Бот должен допускать бронирования только в заранее определённые даты по вторникам (расписание на год вперёд) и в понедельник перед этими датами. Время приёма заявок — с понедельника 9:00 до вторника (день мероприятия) 17:00. Одновременно внедряем проверку доступности мест и проверку, есть ли уже бронирование на указанную фамилию.

Если участник пытается забронировать или отменить бронь вне разрешённого времени, бот уведомляет его о том, что действие пока недоступно
Если участник пытается забронировать или отменить бронь вне разрешённого времени, бот уведомляет его о том, что действие пока недоступно
Если цепочка бронирования запущена в доступное время, бот автоматически подтягивает дату мероприятия, количество свободных мест и предлагает выбрать от 1 до 4 мест. Забронировать больше мест на одну фамилию нельзя
Если цепочка бронирования запущена в доступное время, бот автоматически подтягивает дату мероприятия, количество свободных мест и предлагает выбрать от 1 до 4 мест. Забронировать больше мест на одну фамилию нельзя
Добавлены динамические кнопки в зависимости от количества свободных мест: если свободны три места — три кнопки, два места — две кнопки и т.д. Забронировать больше мест, чем есть, невозможно
Добавлены динамические кнопки в зависимости от количества свободных мест: если свободны три места — три кнопки, два места — две кнопки и т.д. Забронировать больше мест, чем есть, невозможно
Если пользователь находится на этапах бронирования и не совершает действий в течение 3 минут, сообщение обновляется, и бронирование нужно начать заново. Это обеспечивает корректную работу бота
Если пользователь находится на этапах бронирования и не совершает действий в течение 3 минут, сообщение обновляется, и бронирование нужно начать заново. Это обеспечивает корректную работу бота
Пользователь выбрал, например, 3 места. Предыдущее сообщение удаляется, чтобы не мешало, а после ввода Фамилии и Имени оно также будет удалено, и бот отправит новое сообщение для продолжения бронирования
Пользователь выбрал, например, 3 места. Предыдущее сообщение удаляется, чтобы не мешало, а после ввода Фамилии и Имени оно также будет удалено, и бот отправит новое сообщение для продолжения бронирования
После ввода Фамилии и Имени бот предлагает финально свериться и подтвердить бронь. Если пользователь нажимает «Нет, внесу изменения», цепочка бронирования запускается заново
После ввода Фамилии и Имени бот предлагает финально свериться и подтвердить бронь. Если пользователь нажимает «Нет, внесу изменения», цепочка бронирования запускается заново
Если пользователь нажимает «Да, все так, бронирую», бронирование подтверждается
Если пользователь нажимает «Да, все так, бронирую», бронирование подтверждается
После подтверждения бронирования приходит уведомление в общий чат со всеми участниками. При нажатии кнопки «Бронировать» запускается соответствующая цепочка в боте
После подтверждения бронирования приходит уведомление в общий чат со всеми участниками. При нажатии кнопки «Бронировать» запускается соответствующая цепочка в боте
На одно и то же ФИО сделать несколько броней нельзя
На одно и то же ФИО сделать несколько броней нельзя
Когда пользователь нажимает «Да, все так, бронирую», бот сверяет выбранное количество мест с актуальным остатком, так как за время бронирования кто-то мог занять места. Если свободных мест стало меньше, бот уведомляет об этом
Когда пользователь нажимает «Да, все так, бронирую», бот сверяет выбранное количество мест с актуальным остатком, так как за время бронирования кто-то мог занять места. Если свободных мест стало меньше, бот уведомляет об этом
Если мест не осталось и пользователь запускает бронирование, бот предлагает подписаться на уведомления. При подписке бот сообщает, что пришлёт сообщение, если места освободятся. Когда места освобождаются, бот отправляет уведомление пользователю
Если мест не осталось и пользователь запускает бронирование, бот предлагает подписаться на уведомления. При подписке бот сообщает, что пришлёт сообщение, если места освободятся. Когда места освобождаются, бот отправляет уведомление пользователю

4. Теперь переходим к настройке цепочки отмены бронирования. Необходимо сделать проверку временных диапазонов, наличие существующих бронирований и возможность их изменения или отмены. Если пользователь отменяет бронь после 13:00 во вторник, бот отправляет уведомление, что за эту отмену нужно оплатить.

Если у пользователя есть бронирования и он запускает цепочку по отмене или изменению брони, бот автоматически подтягивает все его бронирования, и пользователю остаётся только выбрать нужное и нажать на кнопку
Если у пользователя есть бронирования и он запускает цепочку по отмене или изменению брони, бот автоматически подтягивает все его бронирования, и пользователю остаётся только выбрать нужное и нажать на кнопку
Если у пользователя ещё нет бронирований и он запускает цепочку отмены, бот отправляет соответствующее уведомление о том, что бронирований нет
Если у пользователя ещё нет бронирований и он запускает цепочку отмены, бот отправляет соответствующее уведомление о том, что бронирований нет
Пользователь выбрал бронь на Иванова Ивана. Бот просит указать, сколько мест отменить (от 1 до 3) и не позволит отменить больше, чем есть. Если не хочет сейчас, можно нажать «Не сейчас», и бот ответит «Хорошо 👌». Предыдущее сообщение удаляется
Пользователь выбрал бронь на Иванова Ивана. Бот просит указать, сколько мест отменить (от 1 до 3) и не позволит отменить больше, чем есть. Если не хочет сейчас, можно нажать «Не сейчас», и бот ответит «Хорошо 👌». Предыдущее сообщение удаляется
Если пользователь «завис» на этапе отмены или изменения бронирования более 3 минут, бот отправляет сообщение, что прошло больше 3 минут и нужно начать заново. Это необходимо для корректной работы бота
Если пользователь «завис» на этапе отмены или изменения бронирования более 3 минут, бот отправляет сообщение, что прошло больше 3 минут и нужно начать заново. Это необходимо для корректной работы бота
Пользователь выбрал бронь на «Иванов Иван» и указал, что хочет отменить одно место. Бот убрал одно место, и теперь бронь составляет 2 места
Пользователь выбрал бронь на «Иванов Иван» и указал, что хочет отменить одно место. Бот убрал одно место, и теперь бронь составляет 2 места
В общий групповой чат приходит уведомление о том, что освободилось одно место и сколько всего мест осталось свободных
В общий групповой чат приходит уведомление о том, что освободилось одно место и сколько всего мест осталось свободных
Если пользователь отменяет все места, бронирование удаляется полностью, и в групповой чат отправляется уведомление об освободившихся местах
Если пользователь отменяет все места, бронирование удаляется полностью, и в групповой чат отправляется уведомление об освободившихся местах
Бот отправляет такое дополнительное сообщение, если пользователь отменяет или изменяет бронь после 13:00 во вторник (день мероприятия)
Бот отправляет такое дополнительное сообщение, если пользователь отменяет или изменяет бронь после 13:00 во вторник (день мероприятия)

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

Администратор ввёл команду, указав количество занятых мест и ФИО участников с абонементами
Администратор ввёл команду, указав количество занятых мест и ФИО участников с абонементами

6. Теперь нужно настроить автоматическую отправку сообщения в общий групповой чат со всеми бронированиями на мероприятие. Сообщение должно отправляться автоматически в день мероприятия в 17:00.

Бот будет автоматически отправлять такое сообщение в чат с участниками в 17:00 в день встречи, и так для каждой встречи
Бот будет автоматически отправлять такое сообщение в чат с участниками в 17:00 в день встречи, и так для каждой встречи

💡Что в результате

В результате был создан полностью автоматизированный Telegram-бот для бронирования билетов на регулярные офлайн-мероприятия клуба. Бот обеспечивает обязательную регистрацию участников через номер телефона, проверяет корректность ввода и гарантирует доступ к бронированию и групповому чату только зарегистрированным пользователям. Он автоматически проверяет наличие мест, не допускает дублирования бронирований на одно и то же ФИО и позволяет бронировать до 4 мест за раз. Пользователи могут изменять или отменять бронирования, при этом бот учитывает временные ограничения и предупреждает о платных отказах после 13:00 в день мероприятия. Реализована также подписка на уведомления о свободных местах, если все билеты уже забронированы.

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

Заказчик и его команда довольны :)
Заказчик и его команда довольны :)

По любым вопросам, в том числе по созданию ботов, можно писать мне в Telegram

Начать дискуссию