Это не теоретический гайд — это реальный кейс. Мы создали Telegram-бота для курса claude-cource.ru с помощью Claude Code, не написав ни одной строчки кода вручную. Бот принимает оплату через Telegram Stars, ведёт базу пользователей, отслеживает источники трафика и уведомляет администратора о каждой покупке.
Весь процесс — от первого промпта до рабочего бота в продакшне — занял один рабочий день. В этой статье — пошаговый разбор: что говорили Claude Code, какие решения он принял, где ошибался и как мы это исправляли.
Что мы создали: обзор бота
Бот @claudecource_bot решает три задачи:
- Приём оплаты — через Telegram Stars (встроенная платёжная система Telegram)
- Учёт пользователей — SQLite-база с трекингом источника (откуда пришёл пользователь)
- Уведомления — администратор получает сообщение о каждой оплате
| Характеристика | Значение |
|---|---|
| Язык | Python 3.13 |
| Фреймворк | aiogram 3.x |
| База данных | SQLite |
| Платежи | Telegram Stars (XTR) |
| Хостинг | Yandex Cloud Functions (serverless) |
| Время разработки | ~6 часов |
| Строк кода | ~350 (сгенерировано Claude Code) |
Что умеет бот
- Команда
/start— приветствие с описанием курса и кнопкой оплаты - Команда
/myid— показывает Telegram ID пользователя - Команда
/stats— статистика для администратора (кол-во пользователей, оплат, по источникам) - Оплата — 5 000 Stars, встроенный Telegram-платёж без перехода на внешний сайт
- Deep links — отслеживание источника:
t.me/claudecource_bot?start=main,?start=freelance,?start=vibe
Подготовка: что нужно до начала
Инструменты
- Claude Code с подпиской Claude Pro ($20/мес)
- Python 3.10+ установлен
- Аккаунт Telegram
Создание бота через BotFather
- Откройте @BotFather в Telegram
- Отправьте
/newbot - Придумайте имя (например, «Мой курс») и username (должен заканчиваться на
bot) - BotFather выдаст токен — сохраните его
Подключение платежей
Для Telegram Stars не нужен отдельный платёжный провайдер — это встроенная валюта Telegram. Достаточно отправить BotFather команду /mybots → выбрать бота → Payments → подключить Telegram Stars.
Шаг 1: Описание задачи Claude Code
Открываем терминал в папке проекта и запускаем Claude Code:
mkdir course-bot && cd course-bot
claude
Первый промпт — максимально конкретный:
Создай Telegram-бота на Python с aiogram 3.x:
1. Команда /start:
- Приветственное сообщение с описанием курса
- Inline-кнопка "Купить курс — 5000 Stars"
- Deep link параметр сохраняется как источник (main, freelance, vibe, career)
2. Оплата через Telegram Stars:
- При нажатии кнопки — отправить invoice на 5000 XTR
- После успешной оплаты — сохранить в БД, отправить подтверждение, уведомить админа
3. База данных SQLite:
- Таблица users: user_id, username, first_name, source, first_seen
- Таблица payments: user_id, amount, currency, charge_id, source, paid_at
4. Команда /stats (только для админа):
- Кол-во пользователей, оплат, разбивка по источникам
Токен бота — из переменной окружения BOT_TOKEN.
ID админа — из переменной ADMIN_ID.
Claude Code прочитал задачу, создал bot.py, requirements.txt, и предложил структуру. Весь файл — ~350 строк.
Шаг 2: Что Claude Code сделал сам
Архитектура, которую он выбрал
Claude Code самостоятельно принял несколько архитектурных решений:
| Решение | Что выбрал | Почему |
|---|---|---|
| Фреймворк | aiogram 3.x | Асинхронный, самый популярный для Python |
| БД | SQLite | Не нужен сервер, файл рядом с ботом |
| Хранение секретов | os.environ |
Безопасно, не хардкодится |
| Структура | Один файл bot.py |
Для бота на 350 строк — оптимально |
| Логирование | logging модуль |
Стандартный Python |
Обработка deep links
Claude Code создал систему трекинга источников без дополнительных инструкций. Когда пользователь переходит по ссылке t.me/bot?start=freelance, бот парсит параметр freelance и сохраняет в БД как source. Это позволяет видеть, какой лендинг приводит больше всего покупок.
Платёжный flow
Пользователь нажимает "Купить" →
Бот отправляет Invoice (5000 XTR) →
Telegram показывает окно оплаты →
Пользователь подтверждает →
Telegram отправляет pre_checkout_query →
Бот подтверждает (answer_pre_checkout_query) →
Telegram отправляет successful_payment →
Бот сохраняет в БД + уведомляет админа
Claude Code правильно реализовал весь flow, включая обработку pre_checkout_query — это обязательный шаг, который многие забывают.
Шаг 3: Итерации и исправления
Первая версия работала, но потребовала 4 итерации:
Итерация 1: Форматирование сообщений
Сообщение приветствия слишком длинное. Сократи до 3 строк +
добавь эмодзи. Кнопка должна быть яркой.
Claude Code переписал текст и добавил InlineKeyboardButton с emoji.
Итерация 2: Обработка ошибок
Что будет, если оплата не пройдёт? Добавь обработку ошибок
для pre_checkout_query и successful_payment.
Claude Code добавил try/except блоки и fallback-сообщения.
Итерация 3: Статистика для админа
Команда /stats должна показывать:
- Всего пользователей
- Оплат за сегодня / за неделю / всего
- Топ-3 источника по конверсии
Claude Code написал SQL-запросы с агрегацией и форматированием.
Итерация 4: Защита от двойной оплаты
Пользователь может нажать "Купить" дважды. Добавь проверку:
если уже оплатил — показать "Вы уже купили курс" вместо invoice.
Claude Code добавил проверку SELECT * FROM payments WHERE user_id = ? перед отправкой invoice.
Итого: 4 итерации, ~30 минут. Основная работа — в первом промпте.
Хотите создать такого бота сами?
В модуле 4 курса — полный проект: Telegram-бот с оплатой, базой данных и деплоем.
Подробнее о курсеШаг 4: Тестирование
Перед деплоем протестировали локально:
BOT_TOKEN=123:ABC ADMIN_ID=12345 python bot.py
Чеклист тестирования
| Тест | Результат |
|---|---|
/start без параметра |
Приветствие + кнопка |
/start с deep link (?start=freelance) |
Источник сохранён |
| Нажатие “Купить” | Invoice отправлен |
| Повторное “Купить” после оплаты | “Вы уже купили” |
/stats от админа |
Статистика отображается |
/stats от обычного пользователя |
Игнорируется |
/myid |
Показывает ID |
Все тесты прошли. Claude Code не допустил критических ошибок — только стилистические (форматирование, длина текстов).
Шаг 5: Деплой
Для деплоя выбрали Yandex Cloud Functions — serverless-платформу, которая не требует аренды сервера.
Почему serverless
- Бесплатно при малом трафике (до 1 млн вызовов/мес)
- Не нужен сервер — не нужно настраивать VPS, следить за uptime
- Автомасштабирование — если придёт 1000 пользователей одновременно, платформа справится
Промпт для деплоя
Подготовь бота для деплоя на Yandex Cloud Functions:
- Создай handler.py с entry point для serverless
- Настрой webhook вместо polling
- requirements.txt с зависимостями
Claude Code создал handler.py, адаптировал бота под webhook-режим и написал инструкцию по деплою.
Результат
Бот работает в продакшне с февраля 2026 года. За это время: - Обработал 500+ уникальных пользователей - Принял оплаты из 4 разных источников трафика - Ни одного падения (serverless стабильность)
Сколько это стоило
| Статья расходов | Стоимость |
|---|---|
| Claude Code (Claude Pro подписка) | $20/мес (~2 300 ₽) |
| Yandex Cloud Functions | 0 ₽ (бесплатный лимит) |
| Telegram Bot API | Бесплатно |
| Telegram Stars (комиссия) | 0% для бота |
| Домен, хостинг | Не нужны |
| Итого | ~2 300 ₽ единоразово |
Для сравнения: заказ аналогичного бота у фрилансера стоит от 15 000 до 50 000 ₽. Разработка самостоятельно без AI — 2-4 недели обучения + 1-2 недели написания кода.
Уроки из этого кейса
Что сработало
- Конкретный первый промпт — чем детальнее описали задачу, тем точнее результат. 4 пункта с подпунктами — и 80% работы сделано с первого раза
- Итеративный подход — не пытались предусмотреть всё заранее. Базовая версия → тестирование → доработка
- Claude Code выбрал правильный стек — aiogram 3.x, SQLite, serverless. Мы не указывали технологии — он сам решил
Что бы сделали иначе
- Сразу добавить Plan Mode — для первого промпта стоило использовать Shift+Tab, чтобы Claude Code сначала предложил план
- Тесты — Claude Code не написал unit-тесты автоматически. Стоило попросить: «Напиши pytest-тесты для всех обработчиков»
- Мониторинг — сейчас нет алертов при ошибках. Стоило подключить Sentry через MCP
Чеклист: создание Telegram-бота с Claude Code
- Создайте бота в BotFather — /newbot, сохраните токен
- Подключите Telegram Stars — /mybots → Payments → Stars
- Установите Claude Code — если ещё нет
- Создайте папку проекта —
mkdir my-bot && cd my-bot && claude - Напишите подробный первый промпт — все команды, кнопки, БД-структура
- Протестируйте локально —
BOT_TOKEN=... python bot.py - Проведите 3-5 итераций — форматирование, ошибки, edge cases
- Добавьте защиту от двойной оплаты — проверка перед каждым invoice
- Задеплойте — Yandex Cloud Functions или Railway
- Проверьте в продакшне — тестовая оплата, deep links, /stats