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

482 lines
14 KiB
Markdown

# 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`:
```yaml
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:
```
```bash
cd /opt/evolution-api
docker-compose up -d
```
### Conectar tu número (una sola vez)
```bash
# 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)
```nginx
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)
```env
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
6. [ ] Construir WA-WF2 (notificación al dueño) — mínimo viable, sin riesgo
7. [ ] Construir WA-WF4 (log en Google Sheets) — solo lectura/escritura
8. [ ] Probar con mensaje real de tu propio teléfono
### Semana 3: Respuesta automática
9. [ ] Construir WA-WF1 (auto-respuesta) — empezar solo con el menú DEFAULT
10. [ ] Agregar lógica de cotización
11. [ ] Subir brochures a Google Drive, obtener FILE_IDs
12. [ ] Conectar envío de PDFs
13. [ ] Agregar resto de intenciones (teca, eléctrico, emergencia)
### Semana 4: Follow-up
14. [ ] Construir WA-WF3 (follow-up 24h)
15. [ ] 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`