Как я сделал чат-бот в Телеграме с нуля за ~6 часов
Рассказываю, как сделать свой чат-бот на Python с базой данных в Google-календаре, с редакторами и статистикой. И как развернуть это всё «облаке». Да, конечно же, с помощью ChatGPT.
1. Формулируем задачу
Всем доброго дня! Начну издалека. Мы с друзьями уже 8 лет ходим-водим небольшие походы под Томском. Называемся «Томская Прогулка». У нас есть группа ВКонтакте на 13000+ человек и канал в Телеге на 800+. Делаем стабильно 1-2 похода в неделю. Об этом проекте обязательно как-нибудь расскажу (как запустить такой в своём городе) — уж больно душевный проект.
В «Прогулке» мы никогда не планируем вдолгую — максимум на 2 недели вперёд. Придумали куда сходить → сделали анонс → собрали народ → прогулялись.
В последнее время в личку группы стали часто прилетать сообщения на тему «А когда следующий поход?». Поэтому я, на правах главреда «Прогулки», задумал сделать чат-бот, который бы выдавал список ближайших мероприятий. Только анонс — без записи на само мероприятие. Не хотелось долго возиться с кодом.
2. Пишем промпт самостоятельно
В работе с ChatGPT (и не только с ним) я использую суперсекретную технику, которой товарищи-инфобизнесмены делятся (наверное) за большие деньжищи. А именно: описываю задачу своими словами и прошу ChatGPT выдать мне всё в виде подробного структурированного промпта.
Да, почему ChatGPT, а не новомодный DeepSeek? Всё потому что лучше держит контекст, не галлюцинирует на больших участках кода (по крайней мере пока), и не лежат сервера. Считаю, это лучшее вложение 20$, хотя тут уж на вкус и цвет. Возможно, я просто не умею готовить DeepSeek.
Итак, вооружившись платным ЧатомГПТ, я написал:
Я хочу создать чат-бот в Телеграм, который позволит смотреть мероприятия «Томской Прогулки». Назовём его "Календарь «Томской Прогулки»". Организаторы «Томской Прогулки» обычно вписывают свои мероприятия «хаотично» в отдельный календарик в Google Calendar.
По идее, я хочу сделать следующее:
- Организаторы «Прогулки» также вносят свои планы в этот самый выделенный календарь в Гугле. Т.е. календарь выступает своего рода как база данных.
- Любые пользователи могут запустить чат-бот, чтобы посмотреть о предстоящих событиях в удобной и наглядной форме.
- Организаторы «Прогулки», по идее, также должны иметь возможность вносить свои мероприятия через Гугл Календарь. При этом только администратор приложения может вносить организаторов в роль «Редактора» с правом вносить свои мероприятия.
Для работы этого приложения скорее всего понадобится хостинг или облако. Я бы хотел использовать дешевые, но качественные, российские сервисы (какие — пока не знаю).
Прочитав всё это, я хочу попросить тебя написать промпт (техническое задание) для GPT, которое структурно опишет все требования и пожелания к такому приложению. А также попросит GPT реализовывать его последовательно, шаг за шагом, подробно объясняя все этапы. В идеале, разработчик, который потом будет видеть ответы GPT, должен иметь возможность что-то запускать по итогам реализации каждого этапа.
Ключевая идея — в пошаговости. Нельзя в одном ответе получить готовый код. Ну, вот вообще никак. Плюс для создания промпта желательно использовать более «умную» модель: на февраль 2025 года это модели o1 и o3-mini-high.
3. Получаем «правильный» промпт от нейросети
Вот такое ТЗ мне выдала нейросеть с 1-й итерации:
# Техническое задание для "Календаря «Томской Прогулки»"
---
## Постановка задачи
Создать бот в Telegram для просмотра и управления мероприятиями «Томской Прогулки», используя в качестве «базы данных» календарь Google Calendar. Рабочее название проекта — "Календарь «Томской Прогулки»".
### 1. Общие требования
1. **Основная функциональность**:
- Пользователи бота могут просматривать список ближайших мероприятий «Томской Прогулки» (данные берутся из Google Calendar).
- Организаторы (с правом «Редактора») могут добавлять и редактировать события непосредственно в Google Calendar.
- Только администратор приложения назначает и снимает права «Редактора».
2. **Использование Google Calendar**:
- Google Calendar выступает в роли базы данных.
- Требуется безопасная аутентификация и авторизация для записи/чтения календаря (OAuth 2.0 или сервисные аккаунты, в зависимости от архитектуры).
- Нужно учесть, что в календаре уже могут быть «хаотичные» и разрозненные события. Мы хотим их структурировать для удобного отображения в боте.
3. **Телеграм бот**:
- Интерфейс с помощью удобного UX-UI позволяет:
- Обычным пользователям просматривать ближайшие события с датами и временем.
- Организаторам (редакторам) добавлять новые или редактировать существующие мероприятия.
- При желании можно реализовать кнопки для просмотра описания мероприятия, перехода на страницу Google Maps (по локации), и т.д.
4. **Роли и права**:
- **Администратор**: полный контроль над приложением, может назначать редакторов (организаторов), просматривать и редактировать все события.
- **Редактор (организатор)**: может создавать, редактировать и удалять свои мероприятия в Google Calendar.
- **Обычный пользователь**: может только просматривать список событий.
5. **Хостинг / сервер**:
- Необходимо предусмотреть недорогой, но надёжный российский хостинг или облако (нужно предложить конкретный провайдер услуг).
- Приложение должно быть развернуто в среде, поддерживающей необходимый стек (Python).
- Учесть требования Telegram Bot API (HTTPS, валидный сертификат и т.д.).
6. **Технологический стек (предварительно)**:
- Python (FastAPI)
- Google Calendar API (чтение и запись).
- Telegram Web Apps (Mini Apps).
- Хранилище конфигурации и секретов (например, файлы окружения .env).
7. **Дополнительные пожелания**:
- При возможности реализовать удобную визуализацию дат (календарь, список ближайших событий и т.д.).
- Сдел��ть обработку ошибок и валидацию форм для редакторов (например, чтобы случайно не добавить пустое событие или задать неправильную дату).
- Предусмотреть логику для обновления кеша событий в боте, чтобы не обращаться к Google Calendar API слишком часто (если это целесообразно).
### 2. Требования к формату ответов GPT
1. **Пошаговая реализация**: GPT должен разбить задачу на этапы (шаги). На каждом этапе необходимо:
- Объяснить цель и содержание этапа.
- Предложить и описать решения (код, структуры данных, схемы API).
- При необходимости приводить полный и подробный код Python.
- Давать инструкции по запуску или тестированию (при наличии кода).
2. **Детальные пояснения**: после описания решений GPT должен объяснять, почему тот или иной подход выбран, рассуждать о плюсах и минусах альтернатив.
3. **Интерактивность**:
- После каждого этапа GPT должен остановиться и уточнить, готов ли разработчик перейти к следующему шагу (или внести изменения).
- В случае запроса на доработку – переходим к уточнению деталей и исправлению решения.
4. **Итоговая цель** – получить готовый код Telegram бота с интеграцией Google Calendar, который можно задеплоить на российском хостинге.
### 3. Последовательность этапов (примерная)
1. **Выбор стека и настройка окружения**.
- Обсуждение и выбор языка Python, фреймворка, библиотек для Telegram и Google Calendar API.
- Подготовка инструкций по установке зависимостей.
2. **Создание базовой структуры приложения**.
- Инициализация проекта, настройка роутинга (если нужно), подключение к Telegram Bot API.
- Проверка, что мини-приложение отвечает на базовые команды.
3. **Интеграция с Google Calendar**.
- Настройка Google API, получение ключей/токенов.
- Первый тест запроса на чтение событий из календаря, вывод результатов в консоль или лог.
4. **Реализация просмотра списка мероприятий**.
- Интерфейс в Telegram для вывода предстоящих событий.
- Базовая фильтрация (сегодня, завтра, ближайшая неделя).
5. **Роли и аутентификация**.
- Механизм определения роли пользователя (администратор/редактор/обычный).
- Настройка хранения списка редакторов (в базе, в конфиге или ином методе).
- Команды / настройки для назначения и отмены прав редактора.
6. **Добавление и редактирование событий в календаре**.
- Интерфейс для редактора: ввод названия, описания, даты/времени, локации, ссылок.
- Логика записи в Google Calendar.
7. **Обработка ошибок и валидация**.
- Проверка корректности дат, полей, предупреждения при ошибках Google API.
8. **Деплой на российский хостинг**.
- Инструкции по настройке сервера, установки HTTPS-сертификата и т.д.
- Проверка, что всё работает в продакшене.
9. **Дополнительные улучшения** (по мере необходимости).
- Кеширование, красивый UI/UX, кнопки быстрого перехода, и т.д.
### 4. Дополнительные указания
- Все ключи и приватные данные должны быть защищены (использование переменных окружения, безопасного хранилища и т.п.).
- При наличии вопросов о возможных особенностях Google Calendar API (квоты, ограничения) — GPT может уточнить детали и предложить решения.
- Шаги могут корректироваться и дополняться по ходу реализации.
---
## Инструкция
**Используя вышеописанное ТЗ, тебе нужно**:
1. **Разбить реализацию на шаги** (как указано в пункте «3. Последовательность этапов» или более детально, если требуется).
2. **На каждом шаге**:
- Детально описать задачи и цели данного шага.
- Пояснить, как реализовать ключевые моменты (подробный код, команды для терминала, пути к файлам и т.д.).
- Объяснить логику выбора решений и возможные альтернативы.
- Предложить инструкции по тестированию и проверке работоспособности.
- Спросить, нужно ли уточнить детали или можно двигаться дальше.
3. **По завершении каждого шага** ты должен ждать подтверждения от пользователя (разработчика) или получение запроса на изменения.
4. **В финале** ты должен предоставить:
- Полностью собранный код.
- Краткую инструкцию по деплою и запуску бота на выбранном российском хостинге.
**Твой формат ответа**:
- Разделы, перечисленные выше, можно представлять в любом удобном формате (markdown или обычный текст), но с чёткой структурой.
- Каждое сообщение GPT должно придерживаться описанной структуры и запрашивать подтверждения/комментарии перед переходом к следующему шагу.
Вы конечно же знаете, что решётки/звёздочки — это всё markdown-разметка. Её мы конечно же оставляем: и чатуГПТ польза, и мы не запутаемся.
4. Копируем код, читаем инструкции и тестируем-тестируем-тестируем...
Далее я должен бы рассказать какой код был написан, как это всё тестировалось и выкладывалось в прод... Но, положа руку на сердце, это всё ненужные мелочи. ЧатГПТ или любая другая GPT расскажет и объяснит это всё лучше моего :)
Скрипт, который собирает воедино весь код в папке проекта и выдает содержимое в текстовый файл вместе со структурой. Идеально, чтобы показывать ЧатуГПТ контекст задачи в новых диалогах.
Amvera Cloud — единственное облако, которое я попробовал в работе. За 170 рублей в месяц меня всё устроило :)
Если хотите сделать что-то подобное — пишите, подскажу что и как!