Демо-проект
Бот записи к мастеру
Бот-администратор вымышленного салона «Лаванда»: клиент прямо в чате выбирает услугу, мастера, дату и свободное время, оставляет имя и телефон и получает подтверждение. Администратор сразу видит новую запись в Telegram. Занятое время не показывается, а в «Моих записях» запись можно посмотреть и отменить.
- Python
- aiogram 3
- SQLite
- Автотесты (pytest)
Что умеет бот
- Сценарий записи по шагам: услуга → мастер → дата (ближайшие 7 дней) → свободное время → имя → телефон → подтверждение.
- Занятые слоты не показываются; два клиента не могут занять одно время — это защищено на уровне базы, а не только кнопок.
- «Мои записи» и отмена записи: отменённое время сразу освобождается.
- Уведомление администратору о новой записи и об отмене. Если уведомление не дошло, запись клиента всё равно сохраняется.
- Защита от типичных сбоев: повторный
/startпосреди записи, двойные нажатия, устаревшие кнопки, неверный телефон и имя. - Все записи хранятся в SQLite: один файл, ничего дополнительно ставить не нужно. Тексты, услуги и мастеров легко заменить под вашего клиента.
Бот в Telegram не запущен. Это демонстрация кода и сценария: ниже скриншоты из прогона. Живой бот под вашего мастера или салон настраиваем по запросу. Демо сделано на Telegram; для клиентов делаем такие боты в MAX.
Сценарий по шагам
Навигация идёт кнопками под сообщением и правит одно и то же сообщение, поэтому чат не засоряется. На каждом шаге есть «Отмена» (и команда /cancel), на шагах 2–4 — «Назад».
- /startПриветствие салона «Лаванда» и кнопки «Записаться» и «Мои записи».
- Выбор услуги«Шаг 1 из 5»: четыре услуги салона.
- Выбор мастераТолько мастера, которые делают выбранную услугу.
- Выбор датыБлижайшие 7 дней; показаны только рабочие дни мастера, где есть свободное время.
- Выбор времениЗанятые слоты скрыты; на сегодня — только время не раньше чем через час.
- ИмяКлиент пишет, как к нему обращаться.
- ТелефонТекстом или кнопкой «Поделиться контактом». Неверный номер бот не принимает и просит повторить.
- ПодтверждениеБот показывает итог: услуга, мастер, дата, время, имя, телефон. Клиент нажимает «Подтвердить».
- «Вы записаны!»Клиент получает итог записи; администратору уходит уведомление «Новая запись».
- «Мои записи» и отменаКлиент открывает список, выбирает запись, подтверждает отмену. Время освобождается, администратор получает уведомление об отмене.
16 скриншотов
Нажмите на скриншот, чтобы увеличить; стрелками на клавиатуре или кнопками можно листать.
Скриншоты сняты в эмуляторе чата из реального прогона кода бота. Это не снимки приложения Telegram: тексты и кнопки взяты из ответов настоящих обработчиков, оформление «под Telegram» нарисовано вёрсткой. Дата в прогоне зафиксирована: четверг, 15 октября 2026, 12:00. Клиентка «Анна» и телефон +7 900 000-00-00 — тестовые данные.
Запись
1. /start
Приветствие салона и пометка «Демо-проект»2. Шаг 1
Выбор услуги3. Шаг 2
Выбор мастера: только те, кто делает эту услугу4. Шаг 3
Выбор даты на ближайшие 7 дней5. Шаг 4
Свободное время, занятое не показывается6. Шаг 5
Бот спрашивает имя7. Телефон
Текстом или кнопкой «Поделиться контактом»8. Проверка
Итог записи перед подтверждением9. Готово
«Вы записаны!»10. Администратору
Уведомление о новой записи
Занятое время и ошибки ввода
11. Другой клиент
Занятое 11:00 уже не показывается12. Неверный телефон
Бот просит ввести номер ещё раз
Мои записи и отмена
13. Мои записи
Список предстоящих записей14. Отмена
Подтверждение отмены15. Отмена
Запись отменена, время свободно16. Администратору
Уведомление об отмене
Как сделано и что упрощено
- Python 3.11+, aiogram 3 (long polling: домену и SSL не нужны, хватит небольшого VPS), SQLite.
- 29 автотестов прогоняют весь сценарий без реального Telegram: запись целиком, кнопка контакта, скрытие занятых слотов, гонка за слот, «Мои записи» и отмена, неверный ввод, недоступность администратора.
- В демо упрощено: один слот — один час, график мастеров зашит в код, напоминаний клиентам нет, состояние диалога хранится в памяти (сами записи после перезапуска сохраняются).
- В боевой версии перед сбором телефона нужна ссылка на политику обработки персональных данных (152-ФЗ); в демо её нет.
Код проекта лежит в закрытом репозитории компании.