на главную Dmitrii Lu
Case Study · 02 / 2026

Telegram AI-бот «ИИ-Генерашка»

Telegram-сервис, где пользователь описывает идею текстом — и получает картинку или видео уровня студийной генерации. Собирает под одним капотом Flux, Kling, LivePortrait и Real-ESRGAN, считает кредиты, принимает карты, USDT и Telegram Stars, и всё это — с внутренней админкой и реферальной программой. Продукт на Python + aiogram + Postgres, написанный в связке с Claude Code.

сгенерировано ботом — text-to-video · Kling · 5 сек · «вид от первого лица из тёмной кабины космического корабля»
Продукт
ИИ-Генерашка · @generashkaaobot · Telegram
Роль
Full-Stack AI Developer — архитектура, промпт-инжиниринг, интеграции, биллинг, развёртывание
Разработка
2026 · разработка в связке с Claude Code
Стек
Python 3.12 · aiogram 3 · Postgres · Redis · aiohttp webhook · Docker · fal.ai · Replicate · OpenAI · ЮKassa · CryptoBot · Telegram Stars
  1. 6 режимов генерации — видео, картинка, оживление, реставрация, апскейл, колоризация
  2. 3 способа оплаты в одном окне — карта, криптовалюта, Telegram Stars
  3. ~60с среднее время генерации видео 5 сек через Kling
  4. 24/7 режим работы · webhook + очередь задач, без простоя
1

Задача

Построить массовый AI-сервис в Telegram, где любой пользователь без аккаунтов на OpenAI, fal.ai и Replicate, без иностранной карты и сложных настроек может одним нажатием сгенерировать изображение или видео — и заплатить за это привычным способом. Ключевое ограничение: российский рынок — карты Mastercard и Visa в большинстве зарубежных провайдеров не работают.

  • Доступность. Отсутствие порога входа: никаких отдельных регистраций на зарубежных сервисах и иностранных карт.
  • Много моделей в одном интерфейсе. Flux для картинок, Kling для видео, LivePortrait для анимации лиц, Real-ESRGAN для апскейла — каждая со своими API, лимитами и форматами.
  • Деньги. Платежи ЮKassa (рубли), CryptoBot (USDT) и Telegram Stars под одним окном — с одной и той же корзиной.
  • Масштаб. Десятки одновременных задач на внешних API, без блокировки бота и без потери запросов.
2

Архитектура — единый backend

Бот — тонкий Telegram-клиент поверх слоёв оплат, AI-провайдеров и кредитной системы. Вся логика централизована: aiogram принимает апдейт, FSM ведёт пользователя по сценарию, credits-сервис резервирует баланс, AI-клиент запускает задачу у нужного провайдера, на результат подвязан коллбэк — и только после успешного ответа списывается баланс.

  • aiogram 3 + aiohttp webhook — production-ready приём апдейтов без long-polling.
  • FSM на Redis — состояния пользователей (выбор типа генерации → длительность → промпт → подтверждение).
  • Postgres — пользователи, балансы, транзакции, генерации, рефералы, аудит.
  • Thin clients для AI — отдельные модули под fal.ai, Replicate, OpenAI, OpenRouter. Общая база, единый retry-механизм.
  • Payments-уровень — ЮKassa, CryptoBot, Telegram Stars через один контракт «купить N кредитов».
  • Docker Compose — бот, Postgres, Redis в одном стеке; перенос окружения — одна команда.
                     ┌─────────────────────────────────────┐
                     │        Telegram Bot API             │
                     └────────────────┬────────────────────┘
                                      │ webhook
                                      ▼
┌──────────────────────────────────────────────────────────────────┐
│  aiogram 3  ·  aiohttp server  ·  Dispatcher + Routers      │
│                                                                  │
│   ┌────────────────┐   ┌───────────────┐   ┌──────────────────┐  │
│   │ FSM · Redis    │   │ Credits svc  │   │  Moderation     │  │
│   └────────────────┘   └──────┬────────┘   └──────────────────┘  │
│                               │ reserve/commit                   │
│                               ▼                                  │
│                       ┌───────────────┐                          │
│                       │  Postgres     │◄──── audit log                 │
│                       └───────────────┘                          │
└────────────────┬─────────────────────────────────┬───────────────┘
                 │                                 │
                 ▼                                 ▼
       ┌──────────────────┐             ┌──────────────────────┐
       │  AI providers    │             │  Payments           │
       ├──────────────────┤             ├──────────────────────┤
       │ fal.ai   · Flux  │             │ ЮKassa · cards       │
       │ fal.ai   · Kling │             │ CryptoBot · USDT     │
       │ Replicate · LP   │             │ Telegram Stars       │
       │ Replicate · ESR  │             └──────────────────────┘
       │ OpenAI · prompt  │
       └──────────────────┘

архитектура бота — тонкий telegram-слой, единое ядро кредитов, внешние провайдеры через изолированные клиенты

3

Сценарий пользователя

Пользователь проходит от «Меню» до готового файла за 4 тапа. FSM ведёт по воронке, на каждом шаге показывая только релевантные кнопки и стоимость в кредитах. Никаких «введите команду» — только inline-клавиатура.

4

Генерация видео — fal.ai / Kling

Пользователь вводит текстовое описание сцены, бот показывает превью запроса со стоимостью в кредитах и запускает задачу на Kling через fal.ai. Длинные промпты на русском перед отправкой прогоняются через prompt-translator — модели лучше понимают английский.

  • Text-to-Video → Kling · 5 или 10 сек
  • Image-to-Video → оживление статичного кадра
  • Prompt translator → RU → EN до отправки
  • Reserve → generate → commit — кредиты списываются только после успеха
  • Retry + timeout — при падении провайдера задача возвращается в очередь, кредиты остаются у пользователя

На выходе бот присылает mp4 в чат, сохраняет промпт и результат в истории (чтобы пользователь мог потом пересмотреть) и предлагает «главное меню» одной кнопкой.

Экран подтверждения генерации видео: промпт, длительность, стоимость 50 кредитов
подтверждение генерации — длительность, полный промпт, стоимость
5

Генерация изображений — fal.ai / Flux

Flux работает как «premium-уровень» — тот же промпт, но на выходе фотореалистичное изображение за 8 кредитов. Пользователь может исправить промпт до отправки, отменить задачу или сгенерировать ещё раз с той же подводкой.

  • Модель — Flux (fal.ai), режим Premium
  • Стоимость — 8 кредитов за кадр
  • Редактор промпта — можно переписать перед генерацией
  • Результат — изображение сохраняется в историю пользователя
Сгенерированное ботом изображение — вид из иллюминатора космического корабля на галактику, Flux
реальный результат генерации ботом — тот же промпт, Flux · 1024×576
6

AI-стек под капотом

Каждый провайдер изолирован в отдельном клиенте с общим базовым контрактом. Это позволяет переключать провайдера без правок в хендлерах — и тестировать новые модели параллельно с продом.

Картинки и видео · fal.ai
  • Flux — text-to-image, фотореализм
  • Kling — text-to-video и image-to-video, 5/10 сек
Работа с лицом и кадром · Replicate
  • LivePortrait — оживление фото (закрывает глаза, улыбается, говорит)
  • Expression Editor — точечная правка выражения лица
  • CodeFormer — реставрация лиц на старых фото
  • Real-ESRGAN — апскейл разрешения × 2 / × 4
  • DDColor — колоризация чёрно-белых фото
LLM-обвязка
  • OpenAI — модерация ввода и prompt-translator RU→EN
  • OpenRouter — резервный роутер к другим моделям
Инфраструктура
  • Postgres — транзакционное ядро
  • Redis — FSM-хранилище, кэш лимитов
  • Docker Compose — воспроизводимое окружение
  • aiohttp — webhook-сервер для Telegram API
7

Платёжный слой — три рельса

Внутренняя валюта бота — кредиты, пакеты от 50 до 3000. Чем больше пакет — тем выше скидка, до 10%. На этапе подтверждения заказа пользователь выбирает один из трёх рельсов: банковская карта через ЮKassa (вместе с SberPay, ЮMoney и СБП), криптовалюта через CryptoBot или Telegram Stars. Каждый поток обрабатывает отдельный клиент, но баланс пополняется атомарно — одной транзакцией в Postgres.

  • ЮKassa — банковская карта, SberPay, ЮMoney, СБП через приложение банка. Чеки и возвраты. Основной канал для РФ.
  • CryptoBot — USDT, TON, BTC, ETH, USDC, SOL, TRX, DOGE, LTC, BNB и другие монеты. Для аудитории без карты или вне РФ.
  • Telegram Stars — нативная валюта Telegram, минимальное трение в мобильном приложении на iOS / Android.
Экран покупки кредитов — 7 пакетов от 50 до 3000 кредитов со скидками до 10%
7 пакетов · скидки 3–10% · баланс пользователя
Выбор способа оплаты: Карта / CryptoBot / Telegram Stars
3 способа оплаты в одном окне · пользовательское соглашение
   user taps «Купить 500 кр»
          │
          ▼
   ┌─────────────────┐
   │  FSM → payment  │   ← сохраняем pkg_id, способ оплаты
   └────────┬────────┘
            │
            ▼
   ┌──────────────────────────┐      ┌────────────────────┐
   │  payment provider client │ ───► │  ЮKassa / Crypto / │
   │  (one of 3 adapters)     │      │  Stars API         │
   └────────┬─────────────────┘      └──────────┬─────────┘
            │                                   │ webhook · status
            ▼                                   ▼
   ┌──────────────────────────────────────────────────────┐
   │  credits_service.apply(pkg_id, user_id, provider_tx) │
   │  ── atomic UPDATE users SET balance = balance + N    │
   │  ── INSERT transactions (audit)                      │
   │  ── ON CONFLICT(provider_tx) DO NOTHING  (idempotent)│
   └──────────────────────────────────────────────────────┘
            │
            ▼
     Telegram notification → «баланс пополнен»

единый контракт: 3 разных провайдера — одна функция применения баланса · идемпотентность по provider_tx

8

Реферальная программа

Рост органический — каждый пользователь получает персональную ссылку t.me/…?start=ref_<id>. Бонус в 10 кредитов зачисляется не за простую регистрацию, а только когда приглашённый друг делает покупку от 100 кредитов в течение 8 часов — это защищает систему от фермы-ботов и поощряет «качественный» трафик.

  • Бонус — 10 кредитов за покупающего друга
  • Условие — покупка от 100 кр в течение 8 часов после регистрации
  • Защита — строгая идемпотентность, нельзя пригласить самого себя
  • Напоминания — отдельная задача из админки: письмо рефералам, так и не совершившим покупку
Экран реферальной программы — персональная ссылка со скрытым ID, счётчик приглашённых
персональная ссылка · ID скрыт в целях приватности · счётчик приглашённых
9

Админ-панель

Внутренняя консоль владельца бота вызывается командой /admin. Вся аналитика и управление — в одном меню, без отдельной веб-админки. Это держит стек узким и позволяет администрировать бота прямо из Telegram с телефона.

  • Общая / детальная статистика — MAU, генерации, конверсия
  • Касса — сводка по оплатам и способам
  • Баланс сервисов — остатки на fal.ai / Replicate / OpenAI
  • Список пользователей + поиск
  • Рассылка — массовое уведомление
  • Напоминания рефералам — отдельный таск
  • Аудит действий — каждое списание баланса логируется
Админ-панель бота — статистика, касса, баланс сервисов, рассылка, напоминания, аудит
/admin · 10 разделов · управление ботом не выходя из Telegram
10

Deep dive — кредиты, транзакции, целостность

Риск в таком боте — не «неправильный промпт», а поломанный баланс. Два сценария, которые я заранее закрыл архитектурно: провайдер упал посреди генерации, и webhook оплаты прилетел дважды. Ниже — как это решено.

· reserve → commit

Двухфазное списание баланса

Перед запуском задачи кредиты резервируются — вычитаются из доступного баланса, но остаются в отдельной «холдовой» колонке. Если провайдер вернул успех — commit, если упал или превысил timeout — release, кредиты возвращаются. Пользователь никогда не теряет деньги из-за падения внешнего API.

· idempotency

Идемпотентность платежей

Каждый provider_tx (id транзакции у ЮKassa/CryptoBot/Stars) записывается в таблицу с UNIQUE-констрейнтом. Двойной webhook — ON CONFLICT DO NOTHING, баланс пополняется один раз. То же правило — для рефералов: связка (referrer_id, referee_id) уникальна.

· audit log

Полный аудит

Каждое изменение баланса пишется отдельной строкой в ledger: user_id, delta, reason, provider_tx, created_at. Сумма всех delta всегда равна текущему балансу — инвариант проверяется фоновой задачей. Любой спор с пользователем разбирается за секунды.

· rate limit + moderation

Входной фильтр

Перед запуском задачи промпт проходит модерацию OpenAI. Параллельно — per-user rate-limit на Redis: не больше N генераций в минуту. Это защищает бюджет на внешние API от случайного и намеренного слива.

-- credits core
CREATE TABLE users (
  user_id       BIGINT PRIMARY KEY,
  balance       NUMERIC(12, 2) NOT NULL DEFAULT 0,
  balance_held  NUMERIC(12, 2) NOT NULL DEFAULT 0,
  created_at    TIMESTAMPTZ DEFAULT now()
);

CREATE TABLE ledger (
  id            BIGSERIAL PRIMARY KEY,
  user_id       BIGINT REFERENCES users,
  delta         NUMERIC(12, 2) NOT NULL,
  reason        TEXT NOT NULL,          -- reserve | commit | release | topup | refund
  provider_tx   TEXT UNIQUE,            -- идемпотентность платежей
  created_at    TIMESTAMPTZ DEFAULT now()
);

-- реферальные связи, один referee — один referrer
CREATE TABLE referrals (
  referrer_id   BIGINT REFERENCES users,
  referee_id    BIGINT REFERENCES users UNIQUE,
  bonus_paid    BOOLEAN NOT NULL DEFAULT FALSE,
  created_at    TIMESTAMPTZ DEFAULT now()
);

ядро данных · идемпотентность и holds встроены на уровне схемы

11

Результат

  • AI-сервис доступен любому в Telegram. Без регистраций на зарубежных сервисах, без иностранной карты — только Telegram и привычный способ оплаты.
  • 6 режимов генерации под одним меню. Flux, Kling, LivePortrait, Real-ESRGAN, CodeFormer, DDColor — пользователь не видит сложности, видит кнопки.
  • 3 платёжных рельса. Карты, крипта, Stars — разные аудитории, одна корзина, один баланс.
  • Архитектура, выдерживающая падения. Двухфазные списания, идемпотентные вебхуки, полный аудит — ни одной потерянной копейки даже при сбоях провайдеров.
  • Админ-панель в самом Telegram. Статистика, касса, рассылки и аудит — без отдельного веб-интерфейса.

Нужен похожий AI-продукт?

Если у вас есть идея AI-сервиса для Telegram или веба — от MVP до продакшна с биллингом, платежами и админкой — напишите.

все работы