← Blog
Desarrollo5 min de lecturaPor:

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:

  1. La Mini App recibe initData (raw string) desde Telegram vía el JS SDK al lanzar
  2. Lo envía a tu backend en Authorization: TelegramInitData ...
  3. El backend valida la firma con HMAC-SHA256 derivado del bot token
  4. Con firma válida — extrae user.id y 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 a allkeys-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:

  1. 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.
  2. Lanzar feature flags desde el día uno (Unleash, GrowthBook) — habrían sido útiles para los A/B tests durante el crecimiento.
  3. Usar Next.js Server Actions en vez de una capa REST custom para formularios simples. Menos código.
  4. 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.
  5. 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.