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