Documentacion Agente Secretaria GroupGarre
Documentacion completa del agente WhatsApp secretaria — arquitectura, flujos, credenciales, quirks tecnicas
Agente Secretaria WhatsApp — GroupGarre
Estado: MVP en producción (28 marzo 2026) Objetivo: Agente IA que actúa como secretaria por WhatsApp para GroupGarre. Producto vendible a autónomos/PYMEs a 59-79€/mes.
Stack Técnico
| Componente | Detalle |
|---|---|
| n8n | 217.154.106.6:5678 · https://n8n.lucasgarre.com · v2.6.3 |
| WAHA | http://100.126.176.115:3010 · sesión default · número 652237257 · API key GarreWaha2025! |
| Claude | Haiku 4.5 (claude-haiku-4-5-20251001) · API key GroupGarre |
| Google Calendar | OAuth2 n8n cred ID AT7L5CboAr5r4Vg5 · lucas@lucasgarre.com |
| SMTP | Gmail · n8n cred ID SL3nmGOFlKqnedtg · lucas@lucasgarre.com / omdkjaumjnecycww |
| Webhook | https://n8n.lucasgarre.com/webhook/whatsapp-agent |
| Workflow ID | kz7snVzkUOLDHQJJ |
| Deploy script | C:\Users\lucas\AppData\Local\Temp\build_wf4.py |
Arquitectura del Workflow
WAHA Webhook
└─► Filtro (fromMe≠true, event=message, body≠vacío)
└─► Read State (Code) → lee staticData por teléfono
└─► IF Awaiting Slot?
├─ TRUE ─► Claude Parse Slot (HTTP)
│ └─► Decode Slot (Code)
│ └─► IF Slot OK?
│ ├─ TRUE ─► Save + Ask Email State (Code)
│ │ └─► Claude Ask Email (HTTP)
│ │ └─► WAHA Ask Email
│ └─ FALSE ─► Claude Clarify (HTTP)
│ └─► WAHA Clarify
└─ FALSE ─► IF Awaiting Email?
├─ TRUE ─► Extract Email (Code)
│ └─► IF Email Valid?
│ ├─ TRUE ─► Prepare Event (Code)
│ │ └─► GCal Crear Evento
│ │ └─► Email al cliente
│ │ └─► Email a Lucas
│ │ └─► WAHA Notif Lucas
│ │ └─► WAHA Confirmar
│ └─ FALSE ─► IF Wants Change?
│ ├─ TRUE ─► Claude Gestiona Cambio
│ │ └─► WAHA Cambio
│ └─ FALSE ─► WAHA Pide Email Otra Vez
└─ FALSE ─► Claude Aria (HTTP)
└─► Check Cita (Code)
└─► IF Needs Calendar?
├─ TRUE ─► GCal Get Events
│ └─► Process Slots (Code)
│ └─► Claude Proponer Huecos (HTTP)
│ └─► WAHA Slots
└─ FALSE ─► Save History (Code)
└─► WAHA General
Máquina de Estados
Estado guardado en $getWorkflowStaticData('global').conversations[phone]:
{
"state": "idle | awaiting_slot | awaiting_email",
"slots": [...],
"selectedSlot": { "label": "lunes 30 de marzo a las 9h", "iso": "...", "isoEnd": "..." },
"history": [{ "role": "user|assistant", "content": "..." }]
}
| Estado | Qué significa | Siguiente acción |
|---|---|---|
idle |
Conversación normal | Claude Aria responde, guarda historial (últimos 8 mensajes) |
awaiting_slot |
Se propusieron huecos, esperando elección | Claude parsea el número elegido |
awaiting_email |
Hueco guardado en selectedSlot, esperando email |
Extrae email con regex, detecta intento de cambio |
Flujo Completo de Cita
- Cliente: "Quiero una reunión" → Aria detecta [[PIDE_CITA]]
- Sistema consulta Google Calendar (próximos 14 días, excluye fines de semana)
- Genera 4 huecos libres de 1h (horarios: 9h, 10:30h, 12h, 15h, 16:30h)
- Claude propone los huecos con texto amigable → WAHA al cliente
- Estado:
awaiting_slot - Cliente elige número (1-4) → Claude parsea → si válido:
- Guarda
selectedSlot→ Claude pide email → WAHA al cliente - Estado:
awaiting_email - Cliente da email → extrae con regex
- Crea evento Google Calendar
- Envía email de confirmación al cliente
- Envía email de notificación a lucas@lucasgarre.com
- Envía WhatsApp a 690121938 (personal Lucas) con: teléfono cliente, fecha, email
- Envía WhatsApp de confirmación al cliente
- Estado:
idle
Detección de Cambio de Hueco
Si el cliente está en awaiting_email y en vez del correo dice algo como "cambia", "espera", "otro", "prefiero", "puede", etc.:
Extract Email (Code)detecta la intención con keywords- Resetea estado a
idle Claude Gestiona Cambioresponde con empatía- Si el cliente vuelve a pedir cita, empieza el flujo desde cero
Keywords detectadas: cambiar, borrar, eliminar, modificar, cancel, otro, otra, diferente, espera, mejor, quiero, prefiero, puede, podr
System Prompt de Aria
Eres Aria, la secretaria virtual de GroupGarre, agencia de inteligencia artificial en Madrid.
PERSONALIDAD: Amable, profesional, eficiente. Siempre en español. Respuestas concisas (max 4 frases).
SERVICIOS: Agentes IA para atención al cliente, automatización de procesos con IA,
desarrollo de soluciones IA personalizadas, consultoría IA.
CITAS: Si el cliente quiere concertar reunión, visita o llamada, incluye [[PIDE_CITA]]
al INICIO de tu respuesta, seguido de tu mensaje.
PRECIOS: Dependen del proyecto. Un asesor les contactará.
Quirks Técnicas Importantes (n8n 2.6.3)
| Problema | Causa | Solución |
|---|---|---|
$helpers is not defined en Code nodes |
Task runner sandbox no expone $helpers |
Todos los HTTP calls en nodos HTTP Request, Code nodes son pure logic |
Boolean equals: false no funciona en IF |
Bug/quirk de n8n | Usar notEquals: true |
Spread operator ...arr falla en expresiones |
Limitación del evaluador | Usar .concat([...]) |
$json.body.event con .body. prefix |
Webhook wrappea la request en {body, headers, params, query} |
Siempre usar $json.body.payload.from, etc. |
| GCal Get Events para calendario vacío detiene el workflow | n8n para si output = 0 items | alwaysOutputData: true en el nodo GCal |
| Mensajes vacíos (fotos, reacciones) rompen Claude | WAHA envía webhook con body: "" |
3ª condición en el filtro: body notEquals "" |
Credenciales Relevantes
| Servicio | Cred ID n8n | Usuario | Contraseña/Key |
|---|---|---|---|
| Google Calendar OAuth2 | AT7L5CboAr5r4Vg5 | lucas@lucasgarre.com | OAuth |
| SMTP Gmail | SL3nmGOFlKqnedtg | lucas@lucasgarre.com | omdkjaumjnecycww |
| Anthropic API | (en HTTP headers) | — | sk-ant-api03-BfHj_... |
| WAHA | (en HTTP headers) | — | GarreWaha2025! |
Para Adaptar a Otro Cliente
Cambiar en build_wf4.py:
ARIA_SYSTEM— adaptar nombre de la empresa, servicios, tonoLUCAS_PHONE— número personal del cliente para notificacionesFROM_EMAIL/SMTP_CRED_ID— email desde el que se envían confirmacionesGCAL_CRED_ID— credencial Google Calendar del clienteWAHA_KEYy URL — si tienen su propia instancia WAHA- Crear nuevo workflow en n8n y actualizar
WF_ID