Как я сделал чат-бот в Телеграме с нуля за ~6 часов

Рассказываю, как сделать свой чат-бот на Python с базой данных в Google-календаре, с редакторами и статистикой. И как развернуть это всё «облаке». Да, конечно же, с помощью ChatGPT.

Как я сделал чат-бот в Телеграме с нуля за ~6 часов

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 расскажет и объяснит это всё лучше моего :)

А бот я всё-таки запрогал!
А бот я всё-таки запрогал!

Ссылки

И вот что мне ещё пригодилось в работе:

  • Бесплатные уроки от OpenAI по промпт-инжинирингу (помогают почувствовать себя «мидлом»): ChatGPT Prompt Engineering for Developers, Reasoning with o1
  • Скрипт, который собирает воедино весь код в папке проекта и выдает содержимое в текстовый файл вместе со структурой. Идеально, чтобы показывать ЧатуГПТ контекст задачи в новых диалогах.
  • Amvera Cloud — единственное облако, которое я попробовал в работе. За 170 рублей в месяц меня всё устроило :)

Если хотите сделать что-то подобное — пишите, подскажу что и как!

7
Начать дискуссию