Как создать Telegram Mini App в 2026: путь от прототипа до 60 000 пользователей в день
Полный гайд по разработке Telegram Mini App из опыта The Open Squad. Стек (Next.js, FastAPI, TON SDK), авторизация через initData, платежи в Stars и USDT, деплой и масштабирование.
Telegram Mini Apps выросли из экспериментальной фичи в полноценную платформу: 200 миллионов пользователей открывают их каждый месяц, и это самый быстрорастущий способ дистрибуции продукта в мессенджере. Мы запустили The Open Earn в начале 2024 года и за полтора года довели его до 60 000 ежедневных пользователей и 500 000+ выполненных заданий. Этот гайд — про то, как мы это сделали и что бы посоветовали себе на старте.
Mini App vs обычный бот: когда что выбирать
Telegram Bot — это диалоговый интерфейс через сообщения. Telegram Mini App — это полноценное web-приложение, которое открывается в окне Telegram и имеет доступ к API мессенджера.
Обычный бот подходит, когда:
- Сценарий линейный: команды → ответы (гарант-бот, бот-уведомления)
- Минимальная UI-сложность
- Важна скорость прототипа
Mini App нужен, когда:
- Сложный UI с навигацией, формами, списками
- Нужна интерактивность в реальном времени
- Платежи через Telegram Payments или Stars
- Каталог товаров, профиль пользователя, лента
В The Open Earn у нас и то, и другое: бот для уведомлений и онбординга, Mini App для основного интерфейса с балансом, выводом и статистикой.
Стек: что мы используем
Прозрачно перечислим продакшн-стек The Open Earn:
Frontend (Mini App):
- Next.js 16 (App Router, SSR) — для скорости первого рендера и SEO лендинга
- React 19 + TypeScript
- @twa-dev/sdk — обёртка над Telegram Web Apps SDK (тема, viewport, события)
- TonConnect SDK — для подключения TON-кошелька
Backend:
- Python 3.12 + FastAPI — API-сервер
- aiogram 3.x — бот
- PostgreSQL 16 — основное хранилище
- Redis — кэш сессий, rate-limiting, pub/sub для воркеров
- Celery — фоновые задачи (выплаты, проверки заданий)
Инфраструктура:
- Один dedicated-сервер (8 GB RAM, 4 vCPU)
- nginx как реверс-прокси
- PM2 для Node-процессов, systemd для Python
- Let's Encrypt для SSL
Этого достаточно до 50–100K DAU. Дороже стало только когда подросли до 60K — пришлось вынести Postgres на отдельный managed instance.
Авторизация: initData и серверная валидация
Главная ошибка новичков — доверять данным из Telegram.WebApp.initDataUnsafe. Их можно подделать в DevTools.
Правильный процесс:
- Mini App при старте получает
initData(raw string) от Telegram через JS SDK - Шлёт его на ваш бэкенд в заголовке
Authorization: TelegramInitData ... - Бэкенд валидирует подпись через HMAC-SHA256 от bot token
- При валидной подписи — извлекает
user.id, выдаёт сессионный токен
Псевдокод валидации на Python:
import hmac, hashlib
from urllib.parse import parse_qs
def validate_init_data(init_data: str, bot_token: str) -> dict:
parsed = parse_qs(init_data)
received_hash = parsed.pop("hash")[0]
data_check = "\n".join(f"{k}={v[0]}" for k, v in sorted(parsed.items()))
secret = hmac.new(b"WebAppData", bot_token.encode(), hashlib.sha256).digest()
expected = hmac.new(secret, data_check.encode(), hashlib.sha256).hexdigest()
if not hmac.compare_digest(expected, received_hash):
raise ValueError("Invalid signature")
return parsed
Также проверяйте auth_date — отбрасывайте сессии старше суток (защита от replay-атак).
Платежи: Stars, TON, USDT
В Telegram-экосистеме сейчас три способа принимать деньги:
1. Telegram Stars (для цифровых товаров) — через Bot API: sendInvoice с currency: "XTR". Только для intangible-покупок. Telegram удерживает комиссию ~30%.
2. TON напрямую — через TonConnect: пользователь подключает кошелёк, подписывает транзакцию. Комиссия — десятые цента.
3. USDT в TON-сети (Jetton) — то же что TON, но в стейблкоине. Удобно для B2B и расчётов с фиксированной ценой.
В The Open Earn мы выводим заработок в USDT через TonConnect — пользователь видит сумму в долларах, а не в плавающей цене TON. Минимум — $1.
Деплой и масштабирование
Простейшая прод-схема для старта (до 10K DAU):
[Cloudflare] → [nginx] → [Next.js на :3000] → [FastAPI на :8000] → [Postgres]
↓
[Redis]
Что сломалось у нас на 30K DAU и как чинили:
- Postgres connection pool заканчивался — добавили pgbouncer и развели read/write
- Redis OOM при пиках — увеличили
maxmemory, поставилиallkeys-lru - Latency бота на webhook — убрали тяжёлые проверки в фон через Celery
- CDN для статики — вынесли в Cloudflare R2
Главное правило: измерять, а не угадывать. Sentry для ошибок и Grafana + Prometheus для метрик с первого дня.
Что бы мы сделали иначе
Если бы делали Mini App заново, в день 1 мы бы:
- Сразу разделили монолит на 2 сервиса — публичный API и приватный (админка/воркеры). Объединить дешевле, чем разделить потом.
- Поставили feature-flags (Unleash, GrowthBook) — пригодилось бы для A/B-тестов на этапе роста.
- Использовали Server Actions Next.js вместо своего REST-слоя для простых форм. Меньше кода.
- Не тратили время на красивые анимации в день 1 — пользователи приходят за функцией. Полировка имеет смысл после product-market fit.
- Сразу заложили i18n-инфраструктуру — переводы на 12 языков добавили нам 4× трафика, но добавлять их в работающий продукт — боль.
Что дальше
Mini Apps в 2026 — это уже не «эксперимент Telegram», а серьёзный канал дистрибуции. Если у вас есть продукт, который пересекается с активной аудиторией мессенджера, — стоит как минимум попробовать. Стартовый стек минимальный, риск ниже, чем у нативного мобильного приложения.
Если хотите посмотреть, как Mini App работает в продакшне — откройте The Open Earn или сразу бот.