Cómo construir una Telegram Mini App en 2026: del prototipo a 60.000 usuarios diarios
Guía completa de desarrollo de Telegram Mini App desde la experiencia de The Open Squad. Stack (Next.js, FastAPI, TON SDK), autenticación initData, pagos en Stars y USDT, despliegue y escalado.
Las Telegram Mini Apps han pasado de ser una característica experimental a una plataforma de distribución real: 200 millones de usuarios las abren cada mes, y son la forma que más rápido crece para enviar un producto dentro del messenger. Lanzamos The Open Earn a principios de 2024 y lo crecimos hasta 60.000 usuarios activos diarios y más de 500.000 tareas completadas en 18 meses. Esta guía es lo que hicimos y lo que nos diríamos a nosotros mismos el día uno.
Mini App vs bot normal: cuándo elegir cuál
Un Telegram Bot es una interfaz de chat sobre mensajes. Una Telegram Mini App es una aplicación web completa que se abre dentro de Telegram y tiene acceso a la API del messenger.
Un bot normal es suficiente cuando:
- El flujo es lineal: comandos → respuestas (bot de escrow, bot de notificaciones)
- La complejidad de UI es mínima
- La velocidad del prototipo importa
Necesitas una Mini App cuando:
- UI compleja con navegación, formularios, listas
- Interactividad en tiempo real
- Pagos vía Telegram Payments o Stars
- Catálogos de productos, perfiles de usuario, feeds
En The Open Earn ejecutamos ambos: un bot para notificaciones y onboarding, una Mini App para la interfaz principal (saldo, retiros, estadísticas).
Stack: lo que realmente usamos
El stack de producción de The Open Earn, sin palabrería de marketing:
Frontend (Mini App):
- Next.js 16 (App Router, SSR) — para un primer renderizado rápido y SEO en la landing
- React 19 + TypeScript
- @twa-dev/sdk — wrapper sobre el SDK de Telegram Web Apps (tema, viewport, eventos)
- TonConnect SDK — para conectar el wallet TON del usuario
Backend:
- Python 3.12 + FastAPI — servidor API
- aiogram 3.x — el bot
- PostgreSQL 16 — almacén principal
- Redis — caché de sesión, rate limiting, pub/sub para workers
- Celery — trabajos en segundo plano (pagos, verificación de tareas)
Infraestructura:
- Un servidor dedicado (8 GB RAM, 4 vCPU)
- nginx como reverse proxy
- PM2 para procesos Node, systemd para Python
- Let's Encrypt para SSL
Esto aguanta hasta 50–100K DAU. Solo tuvimos que actualizar al cruzar los 60K — movimos Postgres a una managed instance.
Autenticación: initData y validación del lado del servidor
El error de novato más común: confiar en Telegram.WebApp.initDataUnsafe. Se puede falsificar en DevTools.
El flujo correcto:
- La Mini App recibe
initData(raw string) desde Telegram vía el JS SDK al lanzar - Lo envía a tu backend en
Authorization: TelegramInitData ... - El backend valida la firma con HMAC-SHA256 derivado del bot token
- Con firma válida — extrae
user.idy emite un token de sesión
Validación en 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
También revisa auth_date — descarta sesiones más viejas que 24 horas (protección contra replay).
Pagos: Stars, TON, USDT
Tres formas reales de cobrar dentro del ecosistema Telegram en 2026:
1. Telegram Stars (para bienes digitales) — vía Bot API: sendInvoice con currency: "XTR". Solo compras intangibles. Telegram se queda ~30%.
2. TON directamente — vía TonConnect: el usuario conecta un wallet y firma la transacción. Las comisiones son fracciones de un centavo.
3. USDT en TON (Jetton) — igual que TON pero como stablecoin. Útil para B2B y facturación con precio fijo.
En The Open Earn pagamos las ganancias en USDT vía TonConnect — los usuarios ven un monto en dólares, no un precio TON fluctuante. Retiro mínimo: $1.
Despliegue y escalado
El layout de producción más simple para los primeros 10K DAU:
[Cloudflare] → [nginx] → [Next.js on :3000] → [FastAPI on :8000] → [Postgres]
↓
[Redis]
Lo que se rompió a 30K DAU y cómo lo arreglamos:
- Postgres connection pool se agotó — añadimos pgbouncer y separamos read/write
- Redis OOM durante picos — subimos
maxmemory, cambiamos aallkeys-lru - Latencia del webhook del bot — movimos las verificaciones pesadas a Celery
- CDN de assets estáticos — los empujamos a Cloudflare R2
La única regla que importa: medir, no adivinar. Sentry para errores, Grafana + Prometheus para métricas, desde el día uno.
Lo que haríamos diferente
Si volviéramos a empezar el día uno:
- Dividir en 2 servicios desde el inicio — API pública (Mini App) y privada (admin/workers). Fusionar es más barato que separar después.
- Lanzar feature flags desde el día uno (Unleash, GrowthBook) — habrían sido útiles para los A/B tests durante el crecimiento.
- Usar Next.js Server Actions en vez de una capa REST custom para formularios simples. Menos código.
- Saltarse las animaciones bonitas el día uno — los usuarios vienen por la función, no por el pulido. El pulido tiene sentido tras el product-market fit.
- Construir i18n desde el día uno — las traducciones a 12 idiomas multiplicaron por 4 nuestro tráfico, pero añadirlas después fue doloroso.
Lo que viene
Las Mini Apps en 2026 ya no son "el experimento de Telegram" — son un canal de distribución real. Si tu producto se solapa con la audiencia activa del messenger, vale al menos un prototipo. El stack inicial es pequeño, el riesgo es menor que el de una app móvil nativa.
Si quieres ver cómo se ve esto en producción — abre The Open Earn o salta directo al bot.