Files
reformix-hackaton/mvp/Whatsapp-bot
2026-06-02 23:11:46 -04:00
..
2026-06-02 23:07:34 -04:00
2026-06-02 23:07:34 -04:00
2026-05-31 22:02:58 -04:00
2026-05-31 22:02:58 -04:00
2026-06-01 23:24:43 -04:00
2026-05-31 22:02:58 -04:00

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ímites
  • luisa_flujo.md — estados, preguntas por estado, condiciones de avance
  • luisa_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_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