Разработка Телеграм бота для записи клиентов

Задача

Разработать Telegram-бота, который помогает клиентам записаться на оказание услуг (перечень работ). Бот получает свободные даты из Google таблицы, позволяет клиенту выбрать удобное время, указать нужный перечень работ и записывает данные в ту же Google таблицу.

Функциональные требования

  • Бот приветствует пользователя и предлагает ознакомиться с перечнем доступных услуг.
  • Бот запрашивает у клиента дату и предлагает выбрать доступные (свободные) слоты, которые динамически загружаются из Google таблицы.
  • После выбора даты, клиент вводит перечень требуемых работ (может быть полем ввода или выбором из списка).
  • По окончании действий бот записывает выбранную информацию (дата, время, список работ) в указанную Google таблицу.
  • Предусмотреть подтверждение записи для клиента.

Технические требования

  • Язык разработки: Python (чистый, без фреймворков-асинхронных библиотек).
  • Библиотеки: python-telegram-bot (или аналогичная) для работы с Telegram API, gspread (или google-api-python-client) для взаимодействия с Google таблицами.
  • Интеграция Google Sheets: должна происходить через сервисный аккаунт Google и read/write доступ к ячейкам таблицы, определённым для хранения временных слотов и записей.
  • Безопасность: данные авторизации (ключи, конфиги) не должны быть зашиты в коде - сохранить в .env файле или переменных окружения.

Примерный алгоритм работы

  1. Пользователь запускает бота командой /start.
  2. Бот приветствует пользователя и выводит кнопку «Записаться» (или текстовое меню).
  3. Пользователь выбирает услуги из предложенного списка.
  4. Бот подгружает из Google таблицы список свободных дат (не занятые временные слоты).
  5. Пользователь выбирает дату и время.
  6. После подтверждения брони, бот заносит новую запись в соответствующую ячейку Google таблицы (медиакал) и помечает слот как занятый.

Приёмка работы

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