PurplyBot
Plataforma SaaS conversacional multi-tenant con IA, handoff humano en tiempo real y arquitectura extensible por adapters.
No es solo "una app con IA" — es una plataforma operable y defendible técnicamente.
Problema
Negocios pierden leads por respuestas lentas. No hay continuidad entre canales y falta trazabilidad de conversaciones.
Solución
IA 24/7 con RAG + handoff humano inteligente. Widget embebible, dashboard operativo y soporte WhatsApp. Todo multi-tenant con control por planes.
Arquitectura
3 aplicaciones desacopladas que se comunican por REST + WebSocket.
Backend
API REST, WebSocket realtime, orquestación IA con RAG, function calling y persistencia Supabase.
Dashboard
Panel operativo para agentes con chats en tiempo real, RBAC, knowledge base y configuración de integraciones.
Widget
Chat embebible en sitios de terceros vía loader.js + iframe. Streaming de respuestas y transición a humano.
Diagrama Interactivo
Navega, haz zoom y arrastra los nodos para explorar cómo se conectan los componentes del sistema.
Flujo End-to-End
Desde que un visitante envía un mensaje hasta que recibe respuesta de la IA o un agente humano.
Carga del Widget
El sitio cliente carga loader.js que inserta un iframe con la configuración del tenant.
Conexión WebSocket
El widget se conecta al namespace /widget con sessionId y datos del visitante.
RAG + IA Streaming
El backend busca contexto relevante (embeddings), lo inyecta a Gemini junto con el historial y responde en streaming en tiempo real.
Function Calling
Si Gemini detecta que necesita una herramienta (ej. calendario), emite un function call → Factory enruta al Adapter activo → resultado se inyecta de vuelta.
Handoff Humano
Trigger explícito o por heurística de frustración. Se valida horario, cambia status a human, notifica dashboard con push y un agente toma el chat.
Patrones de Diseño
Decisiones arquitectónicas que hacen la plataforma extensible y mantenible.
Factory + Adapter
Agregar integraciones (Calendar, WhatsApp) sin tocar el core de IA. Contrato común para APIs heterogéneas.
Event-Driven / Pub-Sub
Realtime desacoplado con Socket.io: namespaces /widget y /dashboard, rooms por tenant y chat.
Middleware Chain
Auth, CORS, rate-limit y tenant context aplicados transversalmente antes de cada request.
Graceful Degradation
Si falla push, calendar o un subsistema externo, la conversación continúa. Reintentos con backoff en errores 429/503.
Escalabilidad y Seguridad
Decisiones de operación que permiten crecer sin reescribir.
Escalabilidad
- → Multi-tenancy por tenant_id en datos y auth contextual
- → Rate limiting: 100 req / 15 min por IP
- → Rooms por tenant y chat para fanout selectivo
- → Hard limits por plan en conversaciones
Seguridad
- → Helmet + CORS con patrones permitidos
- → Bearer token auth + RBAC por rol
- → Verificación de webhook (HMAC + timingSafeEqual)
- → Cron de autocierre de chats inactivos cada 5 min
¿Quieres verlo en acción?
El widget está corriendo en vivo en este mismo portafolio.