31bd0ad0bd
Revisión con IA / ai-review (pull_request) Successful in 47s
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>
2.8 KiB
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)
- Meta Business Suite con la cuenta de Facebook del taller.
- developers.facebook.com → crear App tipo Business → agregar producto WhatsApp.
- WhatsApp → API Setup: de ahí salen
PHONE_NUMBER_IDy un token temporal (24hs). Para el token definitivo: Business Settings → System Users → crear usuario → Generate Token con permisoswhatsapp_business_messagingywhatsapp_business_management. - App → Settings → Basic → App Secret →
WHATSAPP_APP_SECRET. - Cargar las 4 variables en el
.envde producción (/home/proyecto/taller_automotriz/.env, al lado deldocker-compose.yml, que es de donde compose las interpola) y levantar de nuevo condocker compose up -d. Ungit pushno alcanza: el.envno está en el repo. - 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).
- Callback URL:
- 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).