El día que dejé de pelear con Telegram y construí mi propio bot manager

Cómo una necesidad concreta de gestionar una comunidad terminó en una app self-hosted, un Docker corriendo en mi servidor, y una lección sobre por qué el software a la medida vuelve a tener sentido.


El detonante

Yo gestiono una comunidad en Telegram. No es la primera vez que alguien intenta hacerlo y termina queriendo lanzar el celular por la ventana.

Las herramientas comerciales que existen para administrar bots de Telegram tienen un patrón común: o son demasiado simples (te dejan mandar un mensaje y nada más), o son demasiado caras (suscripciones mensuales que asumen que vas a hacer marketing masivo a 50 mil personas), o son demasiado opacas (subes a una plataforma de terceros tu token de bot y rezas).

Yo no quería nada de eso. Quería algo simple:

  • Mandar mensajes a mi comunidad desde una interfaz web cómoda.
  • Adjuntar fotos, videos, documentos.
  • Construir botones inline visualmente, sin escribir JSON cada vez.
  • Guardar plantillas para no reescribir el mismo anuncio veinte veces.
  • Ver quién interactúa, etiquetarlos, segmentarlos.
  • Que todo viva en mi servidor, no en la nube de un tercero que mañana me sube el plan.

Es decir: un panel de control hecho exactamente a la medida de cómo opero yo, sin las funciones que no uso y con todas las que sí uso.

Empecé a investigar y la conclusión fue clara: lo que necesitaba no existía como producto enlatado. Existían piezas, pero ensamblarlas era un trabajo de varios días de programación. Hace tres años eso habría significado contratar a alguien por unos cuantos miles de dólares, o resignarme. Hoy ya no.

Acto 1: Lo que parecía un proyecto de semanas

La pieza clave es esta: yo trabajo con Claude Code, una herramienta de Anthropic que vive en mi terminal y programa conmigo. No es un autocompletador como GitHub Copilot. Es un colaborador que entiende el proyecto completo, lee los archivos, escribe módulos, corre pruebas, y me devuelve preguntas cuando algo de la especificación no le cuadra.

Pero aquí viene el truco que muchos pasan por alto: la calidad del resultado depende casi por completo de la calidad de las instrucciones que le das.

Antes de escribir una sola línea de código, me senté a redactar un documento llamado CLAUDE.md. Es la «biblia del proyecto»: qué se va a construir, con qué stack, qué decisiones de producto ya están tomadas, qué restricciones hay, qué NO hacer.

Ese documento terminó teniendo cosas como:

  • Stack fijado: Python 3.12 + FastAPI + SQLite + Tailwind por CDN. Sin Postgres, sin Redis, sin Celery. Auto-impuesto: nada de complejidad innecesaria.
  • Restricciones de Telegram explícitas: límites de 30 mensajes/segundo globales, 1 por chat individual, manejo de RetryAfter con backoff exponencial. Esto no es opcional; si lo ignoras, Telegram te banea el bot.
  • Modelos de base de datos completos: las seis tablas con sus campos, tipos e índices.
  • Endpoints definidos: todos, con verbos HTTP y forma del payload.
  • Plan de implementación numerado: 14 pasos, en orden, validando cada uno antes de seguir.
  • Reglas de calidad: type hints en todo el código, async consistente, configuración centralizada, nada de print.

Ese archivo tiene 17 mil caracteres. Tomó horas escribirlo. Y fue la mejor inversión del proyecto.

Acto 2: La construcción

Le pasé el CLAUDE.md a Claude Code con un prompt sencillo: léelo, dame tu plan de ataque sin código, y cuando confirme empiezas por el paso uno.

Lo que pasó después es raro de describir si nunca lo has visto en vivo. Claude Code:

  1. Resumió el alcance y me preguntó si entendía bien tres puntos ambiguos.
  2. Cuando confirmé, montó la estructura de directorios.
  3. Generó el Dockerfile, el docker-compose.yml, el requirements.txt.
  4. Escribió los modelos de SQLAlchemy y levantó la base de datos.
  5. Implementó el cliente de Telegram con el decorator de límite de tasa y los reintentos.
  6. Conectó el webhook handler para registrar usuarios automáticamente cuando escriben /start.
  7. Construyó la UI con sidebar, tema oscuro, formularios funcionales.
  8. Agregó el constructor visual de botones (los cuatro tipos que soporta Telegram: URL, callback, switch_inline, web_app), con vista previa en vivo.
  9. Implementó el envío masivo con cola en segundo plano y barra de progreso.

Cada paso terminaba con «esto está listo, pruébalo y confírmame si seguimos». Yo levantaba el contenedor, probaba, reportaba bugs, los corregíamos juntos, y avanzábamos.

¿Hubo problemas? Por supuesto. Hubo momentos donde Claude Code tomaba una decisión técnica que yo no quería (intentó usar polling en lugar de webhook una vez), y le tuve que recordar lo que decía la especificación. Hubo bugs sutiles en el manejo de archivos adjuntos. Hubo una ronda de pulido de UI donde tuvimos que rehacer el constructor de botones porque la primera versión era torpe.

Pero el tiempo total —desde «tengo este CLAUDE.md listo» hasta «tengo la app corriendo en producción en mi servidor»— fue de menos de un día de trabajo. No semanas. Un día.



Acto 3: Lo que hoy corre en mi servidor

Hoy tengo, en una Fedora Server modesta, un contenedor Docker escuchando en el puerto 8080. Adentro corre una FastAPI con webhook activo, una SQLite que persiste en un volumen, y una interfaz web a la que entro desde el navegador de mi laptop o mi celular dentro de la red local.

Cuando alguien escribe /start a mi bot, su perfil aparece automáticamente en el panel de usuarios. Los puedo etiquetar, agregarles variables personalizadas ({var1}, {var2}…), y después usar esas variables en plantillas para mandarles mensajes personalizados al por mayor.

Cuando quiero hacer un anuncio a la comunidad, abro la pantalla de envío masivo, elijo el segmento por etiquetas, escribo el mensaje, agrego los botones, veo la previsualización con cinco destinatarios reales para verificar que las variables se renderizan bien, y le doy enviar. La barra de progreso me muestra en vivo cuántos llegaron, cuántos fallaron, cuántos me bloquearon.

El historial de cada envío queda guardado. Los callbacks de los botones inline quedan registrados. Si alguien me bloquea, el sistema lo marca solo y no le vuelve a escribir.

Y todo esto vive en mi servidor. El token del bot está en mi .env. Los datos de mi comunidad están en mi disco. Si mañana Anthropic cierra, si Telegram cambia su API, si el desarrollador del proyecto desaparece —yo tengo el código fuente completo, comentado, con pruebas.

Lo que esto significa para ti si tienes un negocio

Aquí viene la parte que probablemente te interesa más si no eres desarrollador.

El mercado ecuatoriano de software empresarial está atravesando una transición que documentos como la Estrategia Nacional de IA 2025-2029 apenas empiezan a capturar: dejó de ser viable seguir comprando licencias mensuales de herramientas que cubren el 60% de tu necesidad y te obligan a forzar tu operación al otro 40%.

Las grandes empresas de Quito (donde se concentra el 48% de la recaudación tributaria nacional) ya no compran software empaquetado para flujos críticos. Lo mandan a hacer a la medida, integrado a su ERP, en su infraestructura. Las medianas en Guayaquil que viven del comercio empezaron a notarlo cuando entendieron que un buen sistema de WhatsApp y Telegram automatizado les puede cuadruplicar la conversión sin contratar más gente.

Y lo que cambió esta vez es el costo de fabricación.

Hace cinco años, una app como la que te acabo de describir habría costado entre 8 mil y 20 mil dólares hecha por una agencia local. Hoy, con la metodología correcta y herramientas como Claude Code, los costos de desarrollo cayeron entre un 60% y un 80% para proyectos de esta escala. Eso no significa que la calidad baje —al contrario, las pruebas se escriben por defecto, la documentación va incluida, el código tiene type hints y es mantenible.

Lo que significa es que cosas que antes no se justificaban —por ser «demasiado nicho», «demasiado a la medida», «demasiado caras para el problema»— ahora sí se justifican.

¿Tienes un proceso interno que haces con un Excel y diez pestañas abiertas? Eso ya se puede automatizar a un precio razonable.

¿Tu equipo de ventas pierde leads en WhatsApp porque nadie los califica fuera de hora? Un agente de IA conversacional integrado a tu CRM ya cabe en el presupuesto de una PyME mediana.

¿Tu contador te pasa cada mes una pesadilla de retenciones porque el SRI cambió las tasas otra vez? Un sistema con OCR de facturas y cálculo automático de retenciones por RUC del proveedor —lo que el mercado llama «escudo fiscal»— hoy es una semana de trabajo, no tres meses.

La parte que no vas a ver en otros artículos

Voy a ser honesto sobre algo que la mayoría de los que venden «automatización con IA» no te dicen.

El cuello de botella ya no es la programación. El cuello de botella es saber qué pedir.

El CLAUDE.md que escribí para esta app es la verdadera obra del proyecto. Define el alcance con precisión quirúrgica. Sabe lo que NO hay que hacer (que es tan importante como lo que sí). Tiene en cuenta restricciones del mundo real (los límites de tasa de Telegram). Está pensado para que el desarrollo se pueda validar paso a paso.

Si yo le hubiera dicho a Claude Code «hazme un bot manager para Telegram», el resultado habría sido un Frankenstein genérico, lleno de funciones que no necesito, sin la lógica de mi caso de uso, probablemente con bugs en producción.

Lo que hizo viable este proyecto fue traducir una necesidad real en una especificación técnica precisa. Eso no lo hace la IA todavía. Lo hacemos los humanos que entendemos tanto el problema de negocio como las capacidades técnicas.

Y si tú tienes un problema en tu empresa pero no tienes ese puente —ese traductor entre «necesito que mis vendedores dejen de copiar y pegar mensajes en WhatsApp» y «vamos a montar un sistema con esta arquitectura»— ahí es donde un buen partner técnico cambia el juego.

Cierre

La app sigue evolucionando. Esta semana le voy a agregar un módulo de respuestas automáticas con IA para las preguntas frecuentes que llegan al bot. Probablemente sean dos horas de trabajo más con Claude Code.

El proyecto entero —desde la idea hasta hoy— me costó menos que una licencia anual de las plataformas comerciales que evalué al principio. Y es 100% mío.

Si estás leyendo esto y tienes una operación que sientes que se podría automatizar pero no sabes bien cómo plantearlo, escríbeme. No vendo «transformación digital» ni «soluciones 360» ni ninguna de esas frases que ya nadie cree. Lo que hago es sentarme, entender qué problema tienes, y construir la herramienta exacta que lo resuelve. A veces es un bot de Telegram. A veces es un dashboard interno. A veces es un agente de IA que califica leads en tu WhatsApp Business. A veces es un sistema de inventario que se sincroniza con tu facturación electrónica.

La pregunta correcta hoy ya no es «¿esto se puede automatizar?» sino «¿el costo de no automatizarlo me sigue saliendo a cuenta?».

Si la respuesta empieza a ser que no, conversemos.