Files
taller_automotriz/docs/whatsapp.md
T
Beldor 31bd0ad0bd
Revisión con IA / ai-review (pull_request) Successful in 47s
fix(whatsapp): pasar las credenciales de Meta al contenedor
docker-compose.yml no interpolaba ninguna WHATSAPP_*, asi que las cuatro
variables cargadas en el .env de produccion no llegaban a la app: los
envios cortaban con "falta WHATSAPP_TOKEN" y el webhook devolvia 403 al
no tener APP_SECRET con que validar la firma.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 19:07:21 -03:00

2.8 KiB

Bot de reservas por WhatsApp

Flujo: el cliente escribe al número del taller → el bot lo identifica por teléfono (verifica con el email registrado, o lo da de alta) → elige mecánico, trabajo y horario → confirma y se crea el Turno. Todo pasa dentro de la ventana de 24hs que abre el cliente, así que no hacen falta plantillas aprobadas ni tiene costo.

Piezas

Archivo Qué hace
src/lib/whatsapp-bot.ts Máquina de conversación. No sabe nada de Meta: devuelve RespuestaBot[]
src/lib/whatsapp.ts Traduce a/desde la Graph API de Meta y valida la firma del webhook
src/app/api/whatsapp/webhook/route.ts Endpoint: verificación (GET) y mensajes entrantes (POST)

Tests sin DB ni credenciales: npm run test:bot (conversación) y npm run test:envio (capa Meta).

Variables de entorno

WHATSAPP_PHONE_NUMBER_ID=   # id numérico del número, NO el teléfono
WHATSAPP_TOKEN=             # token permanente de System User
WHATSAPP_VERIFY_TOKEN=      # string inventado, el mismo acá y en el panel de Meta
WHATSAPP_APP_SECRET=        # App -> Settings -> Basic -> App Secret

Sin WHATSAPP_APP_SECRET el webhook rechaza todo con 403 (es a propósito: sin firma no se puede confiar en el payload).

Alta en Meta (una sola vez)

  1. Meta Business Suite con la cuenta de Facebook del taller.
  2. developers.facebook.com → crear App tipo Business → agregar producto WhatsApp.
  3. WhatsApp → API Setup: de ahí salen PHONE_NUMBER_ID y un token temporal (24hs). Para el token definitivo: Business Settings → System Users → crear usuario → Generate Token con permisos whatsapp_business_messaging y whatsapp_business_management.
  4. App → Settings → Basic → App Secret → WHATSAPP_APP_SECRET.
  5. Cargar las 4 variables en el .env de producción (/home/proyecto/taller_automotriz/.env, al lado del docker-compose.yml, que es de donde compose las interpola) y levantar de nuevo con docker compose up -d. Un git push no alcanza: el .env no está en el repo.
  6. WhatsApp → Configuration → Webhook:
    • Callback URL: https://taller.beldo.duckdns.org/api/whatsapp/webhook
    • Verify token: el mismo WHATSAPP_VERIFY_TOKEN
    • Suscribir el campo messages (sin esto no llega nada).
  7. Probar con el número de prueba que da Meta gratis, antes de migrar el número real.

Notas:

  • El número del taller no puede estar activo en la app de WhatsApp normal/Business: hay que borrar esa cuenta antes de migrarlo a Cloud API.
  • Business Verification se saltea mientras estemos abajo de 1000 usuarios únicos/24hs; solo hace falta la aprobación del Display Name.
  • Meta permite 3 botones como máximo. Si hay más de 3 mecánicos activos, salen los 3 primeros como botón y el resto se elige respondiendo con el número (el bot acepta las dos formas).