3.5 KiB
3.5 KiB
Reformix Luisa Bot 🤖
Agente de WhatsApp Luisa para Reformix — cualifica leads de reforma de forma conversacional, recoge 5 datos clave y cierra el flujo según el flag viable/no_viable.
Stack
- NestJS — framework principal
- Baileys — conexión con WhatsApp (sin API oficial)
- PostgreSQL — base de datos via TypeORM
- Claude 4.5 via OpenRouter — LLM con soporte de texto, audio e imagen
Estructura del proyecto
/src
/whatsapp ← Módulo Baileys: conexión, QR, recepción y envío
/leads ← Módulo de leads: CRUD y lógica de estados
/conversacion ← Módulo de historial de mensajes por lead
/scheduler ← Cron cada 5 min: dispara apertura a leads nuevos
/claude ← Construye el contexto y llama a Claude 4.5
/media ← Procesa audio e imagen antes de pasar a Claude
/prompts
luisa_core.md ← Identidad y personalidad de Luisa ← RELLENAR
luisa_flujo.md ← Flujo de cualificación paso a paso ← RELLENAR
luisa_casos.md ← Casos edge y ejemplos ← RELLENAR
Configuración rápida
1. Variables de entorno
cp .env.example .env
Edita .env:
OPENROUTER_API_KEY=sk-or-...
MODEL=anthropic/claude-sonnet-4-5
DATABASE_URL=postgresql://user:password@localhost:5432/reformix_luisa
2. Base de datos
El proyecto usa synchronize: true en modo desarrollo, TypeORM creará las tablas automáticamente al arrancar.
En producción, desactiva synchronize y usa migrations:
npm run migration:generate
npm run migration:run
3. Prompts de Luisa
Rellena los 3 archivos en /prompts antes de arrancar:
luisa_core.md— identidad, tono, límitesluisa_flujo.md— estados, preguntas por estado, condiciones de avanceluisa_casos.md— casos edge, fallbacks, ejemplos de conversación
4. Arrancar
npm install
npm run start:dev
Escanea el QR que aparece en la terminal con WhatsApp.
Luisa queda conectada y lista.
Flujo de mensajes
Mensaje entrante (texto / audio / imagen)
↓
Identificar lead por teléfono (crear si no existe)
↓
Si audio → Claude 4.5 transcripción
Si imagen → Claude 4.5 Vision (prompt según estado)
Si texto → directo
↓
Guardar mensaje usuario en DB
↓
Construir contexto: estado, datos del lead, historial, prompts MD
↓
Llamar Claude 4.5 via OpenRouter
↓
Extraer entidades del turno → actualizar lead en DB
↓
Evaluar flag viable → cambiar estado si aplica
↓
Guardar respuesta de Claude en DB
↓
Enviar respuesta por Baileys
Scheduler (cron cada 5 min)
- Busca leads con
estado_actual = 'nuevo' - Marca como
en_procesoantes de actuar - Genera y envía el mensaje de APERTURA de Luisa
- Ignora leads en
completado,no_viable,perdido - Marca como
perdidoleads enen_procesosin actividad > 48h
Estados del lead
| Estado | Descripción |
|---|---|
nuevo |
Lead creado, aún no contactado |
en_proceso |
Luisa le ha enviado el primer mensaje |
recopilando_datos |
Conversación activa |
completado |
Todos los datos recogidos, viable=true |
no_viable |
Lead descartado, viable=false |
perdido |
Sin actividad > 48h |
Qué NO hace este servicio
- No genera el presupuesto (lo hace otro worker)
- No renderiza el PDF
- No envía la URL (la inserta el worker en
url_presupuesto) - No tiene panel del reformista
Desarrollado para Reformix © 2025