Обновлено: сентябрь 2026

Как сделать телеграм-бота для записи клиентов

Разбираем оба реальных способа — свой бот через официальный BotFather и no-code конструктор — и что нужно учесть, чтобы бот реально принимал записи, а не просто отвечал на /start.

Способ 1: свой бот через BotFather

  1. Откройте @BotFather — официального бота Telegram для создания ботов — и отправьте команду /newbot.
  2. Придумайте имя и техническое имя бота — оно обязательно заканчивается на bot, например my_salon_bot.
  3. BotFather выдаст токен API — это ключ доступа к вашему боту, храните его в секрете.
  4. Напишите логику бота на любом языке с библиотекой вроде python-telegram-bot (Python) или Telegraf (Node.js) — полный список методов есть в официальной документации Bot API. Бот должен показывать услуги, свободные окна и сохранять записи.
  5. Разверните бота на сервере или хостинге, чтобы он работал круглосуточно, а не только пока запущен у вас на компьютере.

Минимальный каркас на Python выглядит так:

from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text(
        "Привет! Свободные окна на завтра: 10:00, 14:00, 16:30"
    )

app = Application.builder().token("ВАШ_ТОКЕН").build()
app.add_handler(CommandHandler("start", start))
app.run_polling()

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

«/start ответил» — это лёгкая часть. Чтобы бот реально принимал записи, ему ещё нужны: защита от двойной записи на одно окно, напоминания клиентам, хранение расписания и истории записей. Это уже полноценная разработка, а не вечер выходного дня.

Как выглядит запись, а не «привет»

Разница между отвечающим ботом и принимающим записи — в кнопках и в том, что происходит после нажатия. Минимальная версия с выбором окна:

from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import (Application, CommandHandler,
                          CallbackQueryHandler, ContextTypes)

SLOTS = ["10:00", "14:00", "16:30"]

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    keyboard = [[InlineKeyboardButton(t, callback_data=f"slot:{t}")]
                for t in SLOTS]
    await update.message.reply_text(
        "Свободные окна на завтра:",
        reply_markup=InlineKeyboardMarkup(keyboard),
    )

async def pick(update: Update, context: ContextTypes.DEFAULT_TYPE):
    query = update.callback_query
    await query.answer()            # без этого у клиента крутится индикатор
    slot = query.data.removeprefix("slot:")
    if not book(query.from_user.id, slot):   # book() обязан быть атомарным
        await query.edit_message_text(f"{slot} уже заняли, выберите другое")
        return
    await query.edit_message_text(f"Записала на {slot}")

app = Application.builder().token("ВАШ_ТОКЕН").build()
app.add_handler(CommandHandler("start", start))
app.add_handler(CallbackQueryHandler(pick, pattern=r"^slot:"))
app.run_polling()

Здесь уже видно, где начинается настоящая работа: список окон захардкожен, а book() не написан — и именно он окажется самой сложной функцией во всём боте.

Polling или webhook

run_polling() из примера сам ходит за обновлениями и работает откуда угодно, включая ноутбук без домена. Этого достаточно, чтобы попробовать, но не чтобы принимать записи круглосуточно.

Второй режим — webhook: Telegram сам отправляет обновления на ваш адрес. Требования из документации метода setWebhook:

Сервер нужен в обоих случаях. Разница в том, кто инициирует обмен: при polling ваш процесс постоянно опрашивает Telegram, при webhook Telegram стучится к вам — меньше пустых запросов и меньше задержка, но нужен доступный извне адрес.

Способ 2: конструктор без кода

Если писать код не хочется, есть конструкторы ботов с визуальным редактором сценариев — диалог собирается из блоков («сообщение» → «кнопки» → «сохранить ответ») без единой строчки кода. Такие сервисы обычно берут абонентскую плату и подходят, если нужен не только бот для записи, а что-то более универсальное — рассылки, воронки, интеграции с другими сервисами.

Что учесть до запуска

Три места, где самописный бот ломается первыми

Двойная запись. Проверка «окно свободно?» и сама запись — это две операции, и между ними успевает пройти второй клиент: обе записи проходят успешно, а прийти к вам в 14:00 собираются двое. Флаг в памяти процесса не спасает — обновления обрабатываются параллельно, а после перезапуска флаг обнуляется. Держит только ограничение уникальности на стороне базы (одна запись на пару «мастер + время»), где ошибка вставки и означает «занято».

Напоминания. У бота нет собственного расписания: Bot API отвечает на обновления, а не будит вас в нужный час. Напоминание за день — это отдельный процесс, который просыпается по времени, выбирает завтрашние записи и рассылает сообщения. И когда он выстрелит, упрётся в лимиты Telegram: в один чат рекомендовано не чаще одного сообщения в секунду, в группу — не больше 20 сообщений в минуту, а массовая рассылка ограничена примерно 30 сообщениями в секунду.

Жизнь процесса. Бот, запущенный из терминала, умирает вместе с закрытым ноутбуком, а вместе с ним пропадает и запись, которую клиент делал в этот момент. Нужен сервер, автозапуск после перезагрузки и понимание, что произойдёт с обновлениями, пришедшими за время простоя.

Если не хочется собирать всё это самому

У Mira уже есть готовый бот для записи бьюти-мастеров: свободные окошки, напоминания клиентам, защита от двойной записи и приём предоплаты — всё внутри Telegram, без кода.

Год бесплатно по промокоду MIRA2026 — без банковской карты. Код можно ввести при регистрации или позже в кабинете, в разделе Premium.

Вопросы

Сколько стоит сделать такого бота самому?
Если заказывать у фрилансера — от 5 000 до 10 000 ₽ за простого бота, у агентства разработка обходится в 200 000–900 000 ₽ в зависимости от сложности. Готовые no-code конструкторы обычно стоят от 1 500 ₽ в месяц по подписке.
Можно ли сделать бота для записи бесплатно?
Да — можно написать бота самостоятельно (бесплатно, но нужно время и минимальные навыки программирования), воспользоваться бесплатным тарифом конструктора, или взять Mira — готовый телеграм-бот для записи клиентов к бьюти-мастерам: по промокоду MIRA2026 — год бесплатно, без карты.
Сколько времени занимает сделать такого бота самому?
Бот, отвечающий на команду, собирается за вечер — пример выше занимает 20 строк. Всё остальное из списка выше (расписание, защита от двойной записи, напоминания, отмены, жизнь процесса на сервере) — это уже разработка, и её объём ближе к неделям, чем к дням. После запуска бота нужно ещё и поддерживать: Bot API меняется, сервер требует обновлений.
Чем бот отличается от Telegram Mini App?
Бот — это диалог: сообщения, команды и кнопки под ними. Mini App — веб-страница, которую Telegram открывает внутри себя, поэтому там помещается то, что в переписку не влезает: сетка свободного времени, цены, портфолио. Одно не заменяет другое — приложение запускается из бота. Как устроен Mini App технически, разобрано в отдельной статье.