Construyendo Plixiq: una plataforma multi-tenant de soporte con IA en WhatsApp

Construyendo Plixiq: una plataforma multi-tenant de soporte con IA en WhatsApp
Alejandro Sánchez Yalí
Alejandro Sánchez Yalí
·25 de junio de 2026·8 min read
case-studyplixiqai-agents

Esta es la primera entrada de una serie de casos de estudio de ingeniería sobre los productos que construyo. La idea no es vender — es abrir el capó y mostrar el porqué detrás de las decisiones técnicas: el contexto, el stack, los trade-offs, la arquitectura, y hasta una idea aproximada de costo y tiempo.

Empezamos con Plixiq, un producto que cofundé.

¿Qué es Plixiq?

Plixiq es una plataforma multi-tenant para correr agentes de soporte con IA en WhatsApp, con escalación fluida a agentes humanos. Una empresa configura un agente de IA — su personalidad, el tono de su marca, sus reglas de escalación —, conecta un número de WhatsApp, y desde ese momento el agente responde a los clientes 24/7. Cuando una conversación necesita a un humano (un cliente molesto, un reembolso, lo que sea que las reglas marquen), Plixiq la transfiere a un agente disponible y mantiene todo el intercambio en un solo lugar.

El problema que resuelve es mundano pero costoso: el soporte en WhatsApp no escala con la nómina. Los equipos o pagan personas para vigilar un buzón de chat las 24 horas, o los clientes esperan. Plixiq absorbe el 80% repetitivo con IA y enruta el 20% difícil a humanos — sin perder el contexto en la transferencia.

Está pensado para agencias y negocios que necesitan una mesa de soporte híbrida IA + humano, con cada cliente aislado como su propio tenant.

El stack, y por qué

Cada elección de abajo se hizo para optimizar las mismas dos cosas: velocidad de desarrollo para un equipo pequeño y type safety de punta a punta. Esta es la versión corta, con el razonamiento.

Backend
Python 3.12 + FastAPIAPI HTTP y webhooks

Async-first, tipado con Pydantic, ideal para el manejo de mensajes en tiempo real.

SQLModelORM

SQLAlchemy + Pydantic en uno — un solo modelo en vez de un modelo ORM y un schema aparte.

PostgreSQL (Neon)Base de datos

Escala bien; Neon agrega branching de base de datos para entornos de preview por PR.

AlembicMigraciones

Esquema versionado, compatible con async.

LiteLLMGateway de LLMs

Una sola interfaz para muchos proveedores, con fallback y reintentos incorporados.

ARQTrabajos en background

Cola sobre Redis, ligera y async-native — un Celery moderno y más pequeño.

Redis (Upstash)Caché + pub/sub + cola

Cachea la config del agente, respalda la cola de trabajos y propaga eventos en tiempo real.

FastAPI UsersAutenticación

JWT en cookie HttpOnly, con roles RBAC de fábrica.

Frontend
Next.js + ReactPanel de control

SSR, un proxy /api del mismo origen para que las cookies "funcionen solas", y optimización de imágenes.

TypeScript (strict)Todo

Type safety innegociable.

EffectRuntime async

Errores tipados y reintentos — cada servicio devuelve Effect<T, TypedError> en vez de lanzar excepciones.

Tailwind + shadcn/ui + RadixUI

Estilos utility-first sobre primitivas accesibles y sin estilo.

Server-Sent EventsTiempo real

Actualizaciones en vivo unidireccionales sin el peso operativo de WebSockets.

Infraestructura
Railway

Despliegues por Git, secretos y entornos de preview automáticos por PR.

Branching de Neon

Una rama de base de datos desechable por pull request — los previews tienen datos reales y aislados.

GitHub Actions

Lint, import-linter y tests en cada PR antes de poder mergear.

Un detalle pequeño pero revelador: la capa de LLM usa Groq por defecto (rápido y gratis) y cae a OpenAI solo cuando Groq falla. LiteLLM convierte eso en una línea de configuración en vez de una rama de código — que es exactamente para lo que está.

Arquitectura

Plixiq es un monolito modular: un solo backend desplegable, dividido internamente en diez contextos acotados (bounded contexts) independientes (identidad, mensajería, conversación, escalación, configuración de agentes, etc.). Cada contexto expone una API pública pequeña y no puede meterse en las entrañas de otro — una regla que se hace cumplir en CI con import-linter, no con buenas intenciones.

Arquitectura general de Plixiq: cliente en WhatsApp, API de Meta Cloud, backend FastAPI con un pipeline de mensajes y un gateway LiteLLM, PostgreSQL en Neon, Redis en Upstash y un panel Next.js para agentes humanos

Arquitectura general. Un mensaje de WhatsApp entra por la Cloud API de Meta, el backend FastAPI lo pasa por el pipeline de mensajes y el gateway LiteLLM, y los agentes humanos ven todo en vivo desde el panel de Next.js vía SSE.

¿Por qué un monolito y no microservicios? Con un equipo pequeño, el impuesto operativo de los microservicios (red, despliegue, tracing distribuido, consistencia de datos) aporta muy poco al inicio. El monolito modular conserva las fronteras limpias de los microservicios — para que el sistema pudiera dividirse después — manteniendo la simplicidad operativa de un solo despliegue hoy.

Cómo se procesa un mensaje

El corazón de Plixiq es el pipeline que convierte un mensaje entrante de WhatsApp en una respuesta. Es un flujo lineal con una sola bifurcación: la transferencia a un humano.

Pipeline de mensaje paso a paso: webhook de entrada, guarda de entrada, construcción del prompt, llamada al LLM, chequeo de escalación, guarda de salida, envío de respuesta, el cliente recibe — más una bifurcación de transferencia a humano

El pipeline de mensaje, paso a paso. La mayoría de los mensajes fluye directo hacia una respuesta de IA; la rama punteada es donde una conversación se entrega a un humano.

Recorriéndolo:

  1. Webhook de entrada — Meta envía el mensaje. Verificamos la firma HMAC, aplicamos rate-limit y resolvemos a qué tenant pertenece el número de WhatsApp.
  2. Guarda de entrada — un clasificador de IA filtra abuso y spam antes de gastar un token, y se obtiene-o-crea la conversación.
  3. Construir el prompt — la configuración del agente se trae de un caché en Redis (para no golpear la base de datos en cada mensaje) y se compone con el historial y el contexto de marca.
  4. Llamada al LLM — vía LiteLLM: Groq primero, OpenAI como fallback.
  5. Chequeo de escalación — palabras clave más sentimiento deciden si se necesita un humano y si está disponible dentro de su límite de concurrencia.
  6. Guarda de salida — la respuesta se valida (idioma, formato, longitud) y se persiste junto con su conteo de tokens.
  7. Enviar respuesta — de vuelta por la Cloud API de WhatsApp, se publica un evento SSE al panel y se programan los temporizadores de seguimiento/cierre automático.

Cuando se dispara la escalación, la conversación pasa a WITH_HUMAN, se asigna por round-robin a un agente disponible y — si está activado — un proxy de WhatsApp conecta al humano y al cliente directamente hasta que el agente la cierra.

Modelo de datos y multi-tenancy

El multi-tenancy es la columna vertebral: cada agente, conversación y mensaje pertenece a una Organización. Esa única regla de alcance es lo que permite que un solo despliegue sirva con seguridad a muchos clientes aislados.

Modelo de datos central: la Organización posee AgentConfig y HumanAgents; AgentConfig tiene Conversaciones; las Conversaciones tienen Mensajes; los Usuarios tienen roles y se convierten en HumanAgents

Las entidades centrales. Todo lo que está dentro de la frontera punteada pertenece a un solo tenant.

Algunas decisiones que vale la pena resaltar:

Tiempo real sin WebSockets

El panel tiene que sentirse vivo: un mensaje nuevo del cliente debe aparecer al instante para el agente humano. El instinto es ir por WebSockets, pero Plixiq usa Server-Sent Events en su lugar. El tráfico es casi por completo unidireccional (servidor → panel), y SSE te da eso sobre HTTP plano, con reconexión automática y sin infraestructura extra. El backend propaga los eventos por pub/sub de Redis; el frontend solo mantiene un EventSource abierto. Menos que operar, menos modos de falla.

Construyendo con IA

La IA aparece dos veces en este proyecto — en el producto y en el proceso.

En el producto, los LLM hacen más que responder: un modelo en Groq alimenta las respuestas del agente, un clasificador actúa como la guarda de entrada de seguridad, y el análisis de sentimiento alimenta el detector de escalación. Incluso se usan modelos locales (Ollama) para simular conversaciones de clientes durante las pruebas.

En el proceso, el código se construyó con uso intensivo de pair-programming con IA. La lección interesante no fue que la IA escribe código rápido — fue que la IA te acelera más cuando el proyecto tiene barandas fuertes. Las reglas de arquitectura forzadas en CI (import-linter, tests de arquitectura) hicieron que un asistente de IA pudiera moverse rápido sin erosionar en silencio las fronteras entre módulos. La estructura es lo que hace seguro desarrollar con IA a velocidad.

Cuánto cuesta operarlo

Los costos escalan casi por completo con el uso de LLM y el volumen de mensajes — la infraestructura en sí es barata. Estas son estimaciones aproximadas, de orden de magnitud, para un despliegue en producción; no son facturas:

EscenarioEstimado mensualNotas
Inicio / bajo volumen~$60–80Tier gratis de Groq, tiers gratis de Neon + Upstash, un servicio pequeño de Railway por lado
Medio (~10k conversaciones)~$150–250Base de datos de pago, uso del fallback de OpenAI, las tarifas por mensaje de WhatsApp empiezan a pesar
Alto (100k+ conversaciones)$500+Los costos por mensaje de LLM y WhatsApp dominan; la infra sigue siendo despreciable

El titular: una startup puede operar esto por el precio de un par de almuerzos al mes, y la curva de costo la domina un uso que solo pagas cuando ya tienes clientes.

Tiempos

Plixiq pasó de cero a un MVP casi completo en aproximadamente cuatro meses de trabajo a tiempo parcial, alcanzando ~40k líneas entre backend y frontend, diez bounded contexts y una suite de tests que vigila la arquitectura en CI. La arquitectura evolucionó deliberadamente en sitio — empezando como un monolito directo y refactorizándose en uno modular a medida que las fronteras se aclaraban — en vez de sobre-diseñarse de entrada.

Conclusiones

Si tuviera que comprimir esto en unas pocas lecciones transferibles:

En la próxima entrega de esta serie haré el mismo desarme con otro proyecto del trabajo que he construido. Si hay una decisión específica aquí en la que quieras que profundice, hablemos.

Alejandro Sánchez Yalí

Alejandro Sánchez Yalí

Software Developer and Mathematician

Mathematics × Code × AI — exploring the intersections of programming and mathematical thinking.