Files
Agente-Marketing/prisa-yachts/whatsapp_automation_spec.md

14 KiB

WhatsApp Automation — Prisa Yachts LLC

Evolution API + n8n | Zero Additional Cost

Versión: 1.0 | 2026-05-04


ARQUITECTURA GENERAL

Cliente envía WhatsApp
        ↓
  Evolution API
  (Docker en tu servidor)
        ↓
  Webhook → n8n.crewinghunters.com
        ↓
  n8n procesa mensaje
        ↓
  Evolution API → responde al cliente

Costo adicional: $0 — todo corre en infraestructura existente. Número: Tu número personal/negocio actual (solo hay que escanearlo con QR una vez).


PASO 1: INSTALAR EVOLUTION API

Opción A — Docker Compose (recomendado)

En tu servidor, crear el archivo /opt/evolution-api/docker-compose.yml:

version: "3.7"

services:
  evolution-api:
    image: atendai/evolution-api:latest
    container_name: evolution-api
    restart: always
    ports:
      - "8080:8080"
    environment:
      - SERVER_URL=https://wa.crewinghunters.com   # subdominio que apuntes a este servidor
      - AUTHENTICATION_TYPE=apikey
      - AUTHENTICATION_API_KEY=PRISA_WA_SECRET_KEY_AQUI
      - AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES=true
      - QRCODE_LIMIT=30
      - WEBHOOK_GLOBAL_ENABLED=true
      - WEBHOOK_GLOBAL_URL=https://n8n.crewinghunters.com/webhook/prisa-whatsapp
      - WEBHOOK_EVENTS_MESSAGES_UPSERT=true
      - WEBHOOK_EVENTS_MESSAGES_UPDATE=true
      - WEBHOOK_EVENTS_CONNECTION_UPDATE=true
      - DATABASE_ENABLED=false
      - CACHE_REDIS_ENABLED=false
    volumes:
      - evolution_instances:/evolution/instances

volumes:
  evolution_instances:
cd /opt/evolution-api
docker-compose up -d

Conectar tu número (una sola vez)

# 1. Crear instancia
curl -X POST https://wa.crewinghunters.com/instance/create \
  -H "apikey: PRISA_WA_SECRET_KEY_AQUI" \
  -H "Content-Type: application/json" \
  -d '{"instanceName": "prisa-yachts", "qrcode": true}'

# 2. Obtener QR
curl https://wa.crewinghunters.com/instance/connect/prisa-yachts \
  -H "apikey: PRISA_WA_SECRET_KEY_AQUI"
# → responde con imagen QR en base64 o URL

# 3. Escanear QR desde WhatsApp en tu teléfono
#    WhatsApp → Dispositivos Vinculados → Vincular dispositivo → Escanear QR

Una vez escaneado, el número queda conectado. Si el servidor se reinicia, Evolution API reconecta solo usando la sesión guardada.


PASO 2: CONFIGURAR NGINX (si usas reverse proxy)

server {
    listen 80;
    server_name wa.crewinghunters.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name wa.crewinghunters.com;

    # SSL (certbot o tu certificado)
    ssl_certificate /etc/letsencrypt/live/wa.crewinghunters.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/wa.crewinghunters.com/privkey.pem;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

PASO 3: WORKFLOWS EN n8n

Variables de entorno (agregar en n8n)

PRISA_WA_API_URL=https://wa.crewinghunters.com
PRISA_WA_API_KEY=PRISA_WA_SECRET_KEY_AQUI
PRISA_WA_INSTANCE=prisa-yachts
PRISA_OWNER_PHONE=1XXXXXXXXXX   # número del dueño en formato internacional sin +

WA-WF1: AUTO-RESPUESTA INTELIGENTE

Trigger: Webhook POST en /webhook/prisa-whatsapp

Lógica completa:

[Webhook: recibe mensaje de Evolution API]
  → [Code: extraer remoteJid, message.conversation, pushName]
  → [Code: normalizar mensaje — trim, toLowerCase]
  → [Switch — detectar intención:]

      COTIZACIÓN ("quote", "cotiz", "precio", "cost", "how much", "cuánto")
        → [HTTP: Evolution API → enviar mensaje texto]
        → [Wait 2s]
        → [HTTP: Evolution API → enviar brochure PDF]

      TECA ("teak", "teca", "wood", "madera", "deck")
        → [HTTP: Evolution API → enviar respuesta teca + brochure teca]

      ELÉCTRICO ("electric", "eléctric", "wiring", "cable", "battery", "batería", "panel")
        → [HTTP: Evolution API → enviar respuesta eléctrico + brochure eléctrico]

      UBICACIÓN ("where", "dónde", "location", "area", "stuart", "jacksonville")
        → [HTTP: Evolution API → enviar área de servicio]

      EMERGENCIA ("emergency", "urgente", "urgent", "fire", "fuego", "smoke", "humo")
        → [HTTP: Evolution API → enviar número directo]
        → [Gmail: notificar al dueño inmediatamente]

      HOLA / SALUDO (primeras palabras: "hi", "hello", "hola", "buenos", "good")
        → [HTTP: Evolution API → enviar bienvenida]

      DEFAULT (cualquier otro mensaje)
        → [HTTP: Evolution API → enviar menú de opciones]
        → [Gmail: notificar al dueño — lead sin clasificar]

MENSAJES EXACTOS

BIENVENIDA (trigger: saludo genérico o primer contacto):

Hi! 👋 Thanks for reaching out to *Prisa Yachts LLC*.

I'm Alberto, marine electrical technician based out of Stuart, FL — serving Stuart to Jacksonville.

What can I help you with today?

1️⃣ Request a quote
2️⃣ Teak restoration & detailing
3️⃣ Marine electrical (ABYC certified work)
4️⃣ Our service area
5️⃣ Emergency / urgent issue

Just reply with the number or describe your situation.

COTIZACIÓN RECIBIDA (trigger: "quote", "cotización", "precio", etc.):

Great — I'd love to give you a quote! 🛥️

To get you an accurate estimate, I need a few quick details:

• *What service?* (electrical, teak, detailing, batteries, washdown, or full service)
• *Boat type and length?* (e.g., 38ft sailboat, 45ft twinscrew)
• *Your marina/location?*
• *Best time to call?*

Reply here or call me directly. I'll also send you our services overview right now.

(seguido del brochure PDF general)


SERVICIOS DE TECA (trigger: "teak", "teca", "deck", "wood"):

Teak restoration is one of our specialties. 🌿

We handle everything from quick maintenance cycles to full recoveries — and we do an honest assessment before quoting so you know if recovery or replacement makes more sense.

*Our teak services:*
• Two-part clean + sand + oil + seal
• Before/after documentation
• Gelcoat polishing & oxidation removal
• Caulking inspection and reseam

Send me a photo of your deck and I can give you a rough idea before we even schedule a visit.

Sending you our teak & detailing brochure now 👇

(seguido del brochure PDF teca)


SERVICIOS ELÉCTRICOS (trigger: "electric", "wiring", "battery", "panel"):

Marine electrical is our core specialty — all work done to ABYC E-11 standards. ⚡

*What we do:*
• Full rewiring (tinned wire, proper gauge, labeled circuits)
• Lithium battery bank design & installation
• Shore power systems & inverter/charger
• Solar & alternator upgrades
• NMEA 2000 / 0183 integration
• Bilge pump, washdown, anchor windlass

We work Stuart to Jacksonville. No job too small.

Sending you our electrical services brochure now 👇

(seguido del brochure PDF eléctrico)


ÁREA DE SERVICIO (trigger: "where", "location", "area"):

📍 *Service Area — Prisa Yachts LLC*

We're based out of *Stuart, FL* and cover the full east coast of Florida:

• Stuart / Treasure Coast ✅
• Fort Pierce ✅
• Vero Beach ✅
• Sebastian / Brevard ✅
• Titusville / Space Coast ✅
• Daytona Beach ✅
• Jacksonville ✅

Travel fees may apply for jobs north of Daytona. Free 20-min phone consult for any location before committing.

Want to schedule a consult?

EMERGENCIA (trigger: "emergency", "urgent", "fire", "smoke"):

⚠️ *URGENT — Prisa Yachts LLC*

For an active emergency (fire, flooding, electrical failure), call me directly right now:

📞 *[PHONE_NUMBER]*

If it's an electrical emergency:
• Turn off shore power at the dock pedestal
• Turn off your main breaker
• If there's smoke, get everyone off the boat

I'm responding to your message now.

(+ email automático al dueño: "URGENT: WhatsApp emergency message from [nombre] at [número]")


MENÚ DEFAULT (cualquier mensaje no clasificado):

Thanks for reaching out to *Prisa Yachts LLC*! 🛥️

I want to make sure I get you to the right place. What are you looking for?

1️⃣ *Quote* — I need a price for a job
2️⃣ *Teak & Detailing* — restoration, polishing, gelcoat
3️⃣ *Marine Electrical* — wiring, batteries, solar, panels
4️⃣ *Service Area* — where do you work?
5️⃣ *Emergency* — I need help now

Reply with a number or describe your situation and I'll get back to you shortly.

— Alberto | Prisa Yachts LLC | Stuart to Jacksonville

WA-WF2: NOTIFICACIÓN DE LEAD AL DUEÑO

Trigger: Todos los mensajes entrantes (paralelo a WA-WF1)

Flujo:

[Webhook: recibe mensaje]
  → [Code: formatear — nombre, número, texto, hora ET]
  → [Code: ¿es número propio? → IF sí → NoOp (ignorar mensajes del dueño)]
  → [Gmail: enviar a alro65@gmail.com]

Formato del email:

Asunto: [Prisa Yachts WA] Nuevo mensaje — Juan Pérez

Nuevo mensaje de WhatsApp recibido:

Nombre: Juan Pérez
Número: +1 (772) 555-0123
Hora: 2026-05-04 10:32 AM ET

Mensaje:
"Hi I need a quote for my 42ft Hatteras rewiring. I'm in Fort Pierce."

---
Respuesta automática enviada: COTIZACIÓN
Brochure enviado: prisa_yachts_general.pdf

Responder: https://wa.me/17725550123

WA-WF3: FOLLOW-UP AUTOMÁTICO (24 HORAS)

Trigger: Cron — cada hora, revisar leads sin respuesta humana

Lógica:

[Schedule Trigger: cada hora]
  → [Google Sheets: leer tab WALeads]
  → [Code: filtrar — status="auto_replied" AND created_at > 24h ago AND no_human_reply=true]
  → [IF hay leads pendientes]
      → [HTTP: Evolution API → enviar follow-up]
      → [Google Sheets: update status="followed_up"]
      → [Gmail: notificar al dueño]

Mensaje follow-up (24h después):

Hi [nombre]! Just wanted to follow up on your message yesterday about [tema]. 

Have you had a chance to think about it? I'm happy to answer any questions before you decide.

📞 Or call me directly: [PHONE_NUMBER]

— Alberto | Prisa Yachts LLC

WA-WF4: LOG DE CONVERSACIONES (Google Sheets)

Cada mensaje recibido appenda una fila al tab WALeads:

Col Header Ejemplo
A timestamp 2026-05-04 10:32:00
B phone +17725550123
C name Juan Pérez
D message Hi I need a quote...
E intent quote / teak / electrical / emergency / default
F auto_response_sent yes
G brochure_sent general / teak / electrical / none
H status auto_replied / followed_up / converted / closed
I notes (notas manuales del dueño)

PASO 4: API CALLS EXACTAS A EVOLUTION API

Enviar mensaje de texto:

POST https://wa.crewinghunters.com/message/sendText/prisa-yachts
Headers: apikey: PRISA_WA_SECRET_KEY_AQUI
Body: {
  "number": "17725550123",   ← sin +, sin espacios
  "text": "Hola mensaje aquí"
}

Enviar documento/brochure PDF:

POST https://wa.crewinghunters.com/message/sendMedia/prisa-yachts
Headers: apikey: PRISA_WA_SECRET_KEY_AQUI
Body: {
  "number": "17725550123",
  "mediatype": "document",
  "mimetype": "application/pdf",
  "media": "https://drive.google.com/uc?export=download&id={FILE_ID}",
  "fileName": "PrisaYachts_Services.pdf",
  "caption": "Here's our services overview 👆"
}

Enviar imagen:

POST https://wa.crewinghunters.com/message/sendMedia/prisa-yachts
Body: {
  "number": "17725550123",
  "mediatype": "image",
  "mimetype": "image/jpeg",
  "media": "https://...",
  "caption": "Before & After — Teak Restoration"
}

FLUJO DE IMPLEMENTACIÓN (orden)

Semana 1: Setup

  1. Instalar Evolution API con Docker en tu servidor
  2. Configurar DNS: wa.crewinghunters.com → IP del servidor
  3. Configurar Nginx + SSL (certbot)
  4. Escanear QR y conectar número
  5. Verificar que el webhook llega a n8n (test con mensaje de prueba)

Semana 2: Workflows básicos

  1. Construir WA-WF2 (notificación al dueño) — mínimo viable, sin riesgo
  2. Construir WA-WF4 (log en Google Sheets) — solo lectura/escritura
  3. Probar con mensaje real de tu propio teléfono

Semana 3: Respuesta automática

  1. Construir WA-WF1 (auto-respuesta) — empezar solo con el menú DEFAULT
  2. Agregar lógica de cotización
  3. Subir brochures a Google Drive, obtener FILE_IDs
  4. Conectar envío de PDFs
  5. Agregar resto de intenciones (teca, eléctrico, emergencia)

Semana 4: Follow-up

  1. Construir WA-WF3 (follow-up 24h)
  2. Probar flujo completo end-to-end

PREGUNTAS A RESOLVER ANTES DEL PRIMER DEPLOY

  1. ¿Cuál es la IP o hostname de tu servidor?
  2. ¿Ya tienes Docker instalado en el servidor?
  3. ¿Usas Nginx o Caddy como reverse proxy?
  4. ¿Cuál es tu número de WhatsApp (formato +1XXXXXXXXXX)?
  5. ¿Tienes los brochures PDF listos o hay que crearlos primero?

NOTAS IMPORTANTES

Riesgo de ban: WhatsApp tolera la automatización con números conectados via QR siempre que:

  • Los mensajes sean respuestas a conversaciones iniciadas por el cliente (no bulk messaging)
  • No envíes mensajes masivos no solicitados
  • El comportamiento sea similar al humano (con delays entre mensajes) Esta arquitectura cumple todo eso — solo responde a mensajes entrantes.

Sesión persistente: Evolution API guarda la sesión en el volumen Docker. Si reinicias el servidor, reconecta solo en <30 segundos sin necesidad de escanear el QR de nuevo.

Backup del QR: Después de conectar el número, hacer backup del volumen: docker run --rm -v evolution_instances:/data alpine tar czf - /data > evolution_backup.tar.gz