Proyecto Agente Secretaria GroupGarre

Agente IA secretaria WhatsApp para GroupGarre — MVP completado y en producción

project Modificado: 15/4/2026 project_agente_secretaria.md

Agente IA secretaria completamente funcional para WhatsApp, construido para GroupGarre como demo real.

Why: Primer producto vendible de GroupGarre: autónomos/PYMEs que pierden clientes por no atender el teléfono. 59-79€/mes por cliente.

Estado: MVP en producción (marzo 2026)

Stack técnico:

  • n8n (workflow): ID kz7snVzkUOLDHQJJ, n8n 2.6.3 en srv-principal (217.154.106.6:5678)
  • WAHA (WhatsApp API): puerto 3010, sesión "default", número 652237257, API key GarreWaha2025!
  • Claude Haiku 4.5: API key GroupGarre (5$ iniciales)
  • Google Calendar OAuth2: credencial n8n ID AT7L5CboAr5r4Vg5, lucas@lucasgarre.com
  • SMTP Gmail: credencial n8n ID SL3nmGOFlKqnedtg, lucas@lucasgarre.com / omdkjaumjnecycww
  • Webhook URL: https://n8n.lucasgarre.com/webhook/whatsapp-agent

Flujo completo:

  1. Cliente escribe → Aria responde (Claude Haiku, memoria por conversación)
  2. Si quiere cita → [[PIDE_CITA]] → consulta Google Calendar → propone 4 huecos libres (estado: awaiting_slot)
  3. Cliente elige número → pide email (estado: awaiting_email, guarda slot seleccionado)
  4. Cliente da email → crea evento GCal + email confirmación al cliente + email/WhatsApp a Lucas (690121938)
  5. Si cliente quiere cambiar hueco mientras espera email → detecta intento de cambio → responde con empatía → resetea a idle

Máquina de estados (staticData n8n por teléfono):

  • idle: conversación normal, historial últimos 8 mensajes
  • awaiting_slot: esperando que elija número de hueco
  • awaiting_email: hueco guardado en conv.selectedSlot, esperando email

Quirks técnicos importantes:

  • n8n 2.6.3 task runner NO expone $helpers → todos los HTTP calls en nodos HTTP Request, Code nodes son pure logic
  • Filtro: usar notEquals: true para boolean, NO equals: false (bug de n8n)
  • Spread operator ...arr NO funciona en expresiones n8n → usar .concat()
  • $json.body.event y $json.body.payload.fromMe (con .body. prefix, el webhook wrappea todo)
  • alwaysOutputData: true en GCal Get Events para calendarios vacíos
  • Mensajes vacíos (fotos sin texto, reacciones) filtrados en la condición 3 del filtro

Notificaciones a Lucas:

  • Email a lucas@lucasgarre.com con datos del cliente cuando se agenda
  • WhatsApp al 690121938 (personal) con resumen de la cita

Script de deploy: C:\Users\lucas\AppData\Local\Temp\build_wf4.py

How to apply: Cuando Lucas quiera adaptar para otro cliente, cambiar: ARIA_SYSTEM prompt, número WAHA, email de notificación, y credenciales Google Calendar del cliente.