# 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 ```bash cp .env.example .env ``` Edita `.env`: ```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: ```bash 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ímites - `luisa_flujo.md` — estados, preguntas por estado, condiciones de avance - `luisa_casos.md` — casos edge, fallbacks, ejemplos de conversación ### 4. Arrancar ```bash 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_proceso` antes de actuar - Genera y envía el mensaje de APERTURA de Luisa - Ignora leads en `completado`, `no_viable`, `perdido` - Marca como `perdido` leads en `en_proceso` sin 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