Разработка · 7 мин чтения

Разработка бота для записи на услугу в Telegram: как устроен сценарий

Разработка бота для записи на услугу в Telegram начинается не с кода, а со сценария диалога - цепочки шагов, которая проведёт клиента от «хочу записаться» до подтверждённой брони в календаре. Я собирал такие боты для барбершопов, автосервиса и пары частных мастеров маникюра, и почти всегда самая долгая часть работы - не программирование, а прорисовка веток разговора. Когда сценарий продуман, код пишется за вечер. Когда нет - бот отвечает невпопад, теряет клиента на середине записи и создаёт двойные брони. Ниже разбираю этот сценарий изнутри: через какие состояния проходит пользователь, где лежат записи, как не словить конфликт слотов и куда прикрутить оплату с напоминаниями.

Сценарий записи в telegram-боте: скелет диалога

Любая онлайн-запись сводится к короткому опросу. Бот последовательно собирает ответы на шесть-семь вопросов, а в конце показывает карточку брони и просит подтвердить. Минимальный набор шагов выглядит так:

  1. выбор услуги (стрижка, окрашивание, консультация);
  2. выбор мастера - или пропуск, если специалист один;
  3. выбор дня из ближайших свободных;
  4. выбор конкретного времени (слота);
  5. имя клиента;
  6. телефон для связи;
  7. подтверждение записи.

Главная ошибка новичков - делать один длинный текстовый диалог, где человек вводит всё руками. На практике 90% шагов лучше закрыть инлайн-кнопками: клиент тапает по услуге, по дате, по времени, и вручную пишет только имя с телефоном. Так меньше опечаток, меньше веток «а что если он написал не то», и запись занимает 20-30 секунд вместо минуты переписки.

Важный нюанс - навигация назад. Клиент выбрал день, увидел время и передумал насчёт даты. Если кнопки «Назад» нет, он бросает диалог и уходит. Поэтому в каждом экране, кроме первого, я держу кнопку возврата к предыдущему шагу и кнопку «Отмена» на весь сценарий.

Состояния пользователя: FSM в aiogram-боте

Технически сценарий записи - это конечный автомат (FSM, finite state machine). Пользователь в каждый момент находится ровно в одном состоянии, и бот знает, какого ответа ждёт. В aiogram под это есть встроенный механизм - StatesGroup. Каждый шаг диалога описывается отдельным состоянием:

from aiogram.fsm.state import State, StatesGroup

class Booking(StatesGroup):
    service = State()   # выбор услуги
    master  = State()   # выбор мастера
    day     = State()   # выбор дня
    slot    = State()   # выбор времени
    name    = State()   # имя клиента
    phone   = State()   # телефон
    confirm = State()   # подтверждение

@router.callback_query(F.data.startswith("svc:"))
async def choose_service(cb, state):
    await state.update_data(service=cb.data.split(":")[1])
    await state.set_state(Booking.day)
    await cb.message.edit_text("Выбери день:", reply_markup=days_kb())

Данные накапливаются в хранилище состояния (state.update_data), а на шаге подтверждения я собираю их в одну карточку и записываю в базу. Для промышленного бота FSM-хранилище стоит держать в Redis, а не в памяти процесса: иначе при рестарте сервера все, кто был в середине записи, теряют прогресс.

Таблица помогает не запутаться, что происходит в каждом состоянии:

Состояние Что показывает бот Что ждёт от клиента
service список услуг кнопками тап по услуге
day 7-14 ближайших дат тап по дате
slot свободное время на дату тап по времени
name «Как вас зовут?» текст
phone кнопку «Отправить контакт» контакт или текст
confirm карточку брони «Подтвердить» / «Отмена»

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Где хранить записи и как избежать двойной брони

База записей - сердце бота. Здесь три рабочих варианта, и выбор зависит от того, кто потом смотрит на эти записи.

  • PostgreSQL / SQLite - если бот самодостаточный и мастер работает прямо из Telegram. Быстро, надёжно, полный контроль.
  • Google Sheets - если заказчику важно видеть записи в привычной таблице и вручную их править. Подключается через API за пару часов, но плохо держит нагрузку выше нескольких записей в минуту.
  • Внешняя CRM или YClients - если у салона уже есть учётная система, и бот только добавляет ей канал заявок.

Отдельная головная боль - двойная бронь. Два клиента почти одновременно открывают один и тот же слот на 15:00, оба видят его свободным и оба жмут «Подтвердить». Без защиты в базе окажутся две записи на одно время. Лечится это блокировкой на уровне БД: слот резервируется в транзакции с проверкой, что он ещё свободен, и уникальным индексом на пару (мастер, время). Второй клиент в этот момент получает честное «время только что заняли, выберите другое» вместо испорченного дня у мастера.

Чтобы не собирать клавиатуры дат, генерацию слотов и проверку пересечений с нуля каждый раз, я держу под рукой набор заготовок - часть из них выложена в готовых скриптах для telegram-ботов и Tilda, откуда удобно брать календарную клавиатуру и логику свободных окон. Это экономит день-два на типовом проекте.

Напоминания, оплата и онлайн-запись через telegram с интеграциями

Запись создана - дальше начинается то, ради чего бот и затевают: снижение неявок и предоплата.

Напоминания. Клиент записался на послезавтра и забыл. Планировщик (APScheduler в связке с aiogram) шлёт сообщение за 24 часа и ещё раз за 2 часа до визита, с кнопками «Приду» и «Перенести». По моим замерам на боте для автосервиса такие напоминания срезали неявки примерно с 22% до 7% - окупились быстрее, чем сам бот.

Предоплата. Если услуга дорогая или клиенты часто «сливаются», перед подтверждением брони встраивается оплата. Telegram умеет принимать платежи нативно - через провайдера вроде эквайринга T‑Bank выставляется инвойс прямо в чате, и слот бронируется только после успешной оплаты. Это отсекает случайные записи лучше любых напоминаний.

Что не тащить в бот записи. Отдельно предупреждаю заказчиков: интеграции доставки типа СДЭК к записи на услугу отношения не имеют - это история для интернет-магазинов, где едет физический товар. В боте для мастера они только раздувают бюджет. Здесь по делу максимум связка с онлайн-кассой для чека после оплаты.

Интеграция Когда нужна Когда лишняя
Эквайринг (T‑Bank) дорогие услуги, частые неявки дешёвые записи, лояльная база
Google Calendar мастер живёт в календаре всё ведётся в самом боте
CRM / YClients уже есть учётка клиентов один мастер, простой график
СДЭК / доставка - всегда (это про товары)

Сборка бота записи без кода: n8n и готовые блоки

Не каждой задаче нужен полноценный aiogram-проект. Если поток заявок небольшой, а логика простая - одна услуга, один мастер, запись в таблицу - сценарий собирается визуально в n8n. Там есть нода Telegram Trigger, ветвление по ответам и запись в Google Sheets или базу без единой строки кода. Такой прототип я поднимаю за день и отдаю заказчику потрогать.

Граница проходит примерно здесь: пока веток немного и нет предоплаты - n8n тянет и обходится дешевле. Как только появляются несколько мастеров, динамические слоты, блокировки от двойной брони и платежи - визуальный сценарий превращается в клубок, и переписать всё на aiogram выходит быстрее, чем чинить. Поэтому на старте честно спрашиваю у клиента про объём записей: 10 в день и 200 в день - это два разных бота.

Сроки и бюджет разработки

По срокам ориентиры такие. Простой бот на одну услугу с записью в таблицу и напоминаниями - 3-5 рабочих дней. Бот с выбором мастера, динамическими слотами, защитой от двойной брони и админкой для управления расписанием - 2-3 недели. Добавили предоплату через эквайринг и связку с CRM - плюс неделя на интеграции и тесты платежей.

Моя базовая цена на Telegram-бот - от 30 000 ₽; конкретная сумма зависит от числа веток сценария и интеграций. Если сверху нужна автоматизация напоминаний и рассылок на n8n - это от 25 000 ₽ отдельным блоком, а связка с эквайрингом и учётной системой обычно уходит от 40 000 ₽ за интеграцию. Для сравнения: на рынке студии за похожий бот записи просят в диапазоне 60 000-150 000 ₽ - это рыночный ориентир, не мой прайс, и в эту вилку часто зашита ежемесячная абонплата за «конструктор». Я собираю бота как отдельный продукт, который дальше живёт на вашем сервере.

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

Автоматизация в мессенджере

Telegram-бот / Mini App

от 30 000 ₽

Подробнее →

Частые вопросы

Сколько времени занимает разработка бота для записи на услугу в Telegram?

Простой вариант на одну услугу с напоминаниями - 3-5 рабочих дней. Бот с несколькими мастерами, динамическими слотами и защитой от двойной брони - 2-3 недели. Предоплата и интеграция с CRM добавляют около недели на настройку и тестирование платежей.

На чём лучше делать бота - aiogram или n8n?

n8n подходит для простого сценария с одной услугой и записью в таблицу: собирается за день, дешевле на старте. Как только появляются несколько мастеров, слоты, блокировки и оплата - надёжнее писать на aiogram, иначе визуальный сценарий становится неуправляемым.

Как бот не допустит двойную запись на одно время?

Слот резервируется в транзакции базы данных с уникальным индексом на пару «мастер + время». Если два клиента жмут «Подтвердить» почти одновременно, запись проходит только у первого, а второй сразу получает предложение выбрать другое окно.

Можно ли принимать оплату прямо в боте?

Да. Telegram поддерживает нативные платежи: через эквайринг вроде T‑Bank клиенту выставляется инвойс в чате, и слот бронируется только после успешной оплаты. Это заметно снижает число случайных записей и неявок по дорогим услугам.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Самозанятый Калинкин Н. А. · работаю с физлицами и юрлицами

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно