Configurar WhatsApp Business
Esta guía acompaña la pantalla de configuración de WhatsApp (Ajustes → Integraciones → WhatsApp → Configurar). Los pasos van numerados igual que las ayudas que ves bajo cada campo. Cuenta con 1-3 días, porque Meta revisa a mano la verificación de la empresa y las plantillas; si quieres empezar ya, Telegram no necesita nada de esto.
1. Qué pide la pantalla
En “Configuración Básica”, un “Nombre de la Integración” y el “Entorno”. En “Credenciales”, cuatro datos de Meta: el “ID del número de teléfono” (paso 4), el “Token de acceso” (paso 5), el “Secreto de la aplicación” (paso 6) y el “Token de verificación del webhook”, que inventas tú (paso 7).
Al guardar con “Guardar Configuración” aparece “Probar Conexión”. Después, cada usuario activa WhatsApp en sus preferencias de notificación: el enlace “Ir a preferencias de notificación” lleva allí.
2. Pasos 1 a 3: cuenta de Meta Business, verificación y app
Paso 1. Entra en business.facebook.com con tu cuenta de Facebook y crea un portafolio comercial (nombre de la empresa, tu nombre y un email de empresa).
Paso 2. En “Configuración del negocio → Centro de seguridad → Verificación del negocio”, sube el CIF/NIF y un justificante de dirección. Meta tarda 2-4 días; sin verificar solo puedes enviar en modo de prueba.
Paso 3. En developers.facebook.com → “Mis apps” → “Crear app”, elige el caso de uso “Conectar con clientes por WhatsApp”, ponle nombre y asóciala a tu portafolio.
3. Pasos 4 a 6: número, token y secreto de la app
Paso 4. En “Configuración de la API”, en el desplegable “Desde”, pulsa “Añadir número de teléfono” y verifícalo por SMS o llamada. El número no puede tener ya WhatsApp instalado. Debajo aparece el ID del número: cópialo en “ID del número de teléfono”.
Paso 5. El token de “Configuración de la API” caduca en 24 h. En “Configuración del negocio → Usuarios del sistema” crea un usuario del sistema administrador, asígnale la app y la cuenta de WhatsApp, pulsa “Generar token” con caducidad “Nunca” y los permisos whatsapp_business_messaging, whatsapp_business_management y business_management. Cópialo (empieza por EAA…) en “Token de acceso”: solo se muestra una vez.
Paso 6. En la app de Meta, “Configuración → Básica”, pulsa “Mostrar” junto a la clave secreta y cópiala en “Secreto de la aplicación”.
4. Pasos 7 y 8: token de verificación y guardar
Paso 7. Inventa una cadena larga y aleatoria (32 caracteres o más) y escríbela en “Token de verificación del webhook”. La usarás otra vez en el paso 9 y tiene que coincidir.
Paso 8. Pulsa “Guardar Configuración” y luego “Probar Conexión”. Si el token y el número son correctos, la integración pasa a activa.
5. Paso 9: el webhook de estado (recomendado)
Sirve para que goPrevina sepa si cada mensaje se entregó o se leyó. En la app de Meta, “WhatsApp → Configuración → Webhooks → Editar”. En “Callback URL” escribe https://<dominio-de-tu-API>/api/v1/whatsapp/webhook y en “Verify token” el mismo valor del paso 7. Pulsa “Verificar y guardar” y, en “Campos del webhook”, suscríbete a messages.
6. Paso 10: plantillas de mensajes para copiar y pegar
WhatsApp solo deja enviar plantillas aprobadas por Meta. Créalas en WhatsApp Manager → “Plantillas de mensajes” → “Crear plantilla”, con el nombre exacto y la categoría indicada, y pega el cuerpo tal cual (los parámetros {{1}}, {{2}}… van en el orden de la lista). Meta suele aprobar las de tipo UTILITY en 24-48 h.
prl_user_invitation — Categoría: UTILITY — Parámetros: recipientName, tenantName, activationUrl
Cuerpo para copiar: Hola {{1}}, te han invitado a {{2}} en goPrevina. Activa tu cuenta aquí: {{3}}
prl_password_reset — Categoría: AUTHENTICATION — Parámetros: recipientName, resetUrl
Cuerpo para copiar: Hola {{1}}, has solicitado restablecer tu contraseña. Usa este enlace: {{2}}
prl_critical_alert — Categoría: UTILITY — Parámetros: alertTitle, alertMessage
Cuerpo para copiar: ALERTA CRÍTICA: {{1}}. {{2}}
prl_document_expiring — Categoría: UTILITY — Parámetros: documentName, expiryDate, daysRemaining
Cuerpo para copiar: El documento «{{1}}» caduca el {{2}} (quedan {{3}} días). Revísalo en goPrevina.
prl_document_expired — Categoría: UTILITY — Parámetros: documentName, expiryDate
Cuerpo para copiar: El documento «{{1}}» ha caducado el {{2}}. Actualízalo en goPrevina.
prl_incident_reported — Categoría: UTILITY — Parámetros: incidentNumber, title, location
Cuerpo para copiar: Nuevo incidente {{1}}: «{{2}}» en {{3}}. Consúltalo en goPrevina.
prl_incident_assigned — Categoría: UTILITY — Parámetros: incidentNumber, title, assignedBy
Cuerpo para copiar: Se te ha asignado el incidente {{1}}: «{{2}}» (por {{3}}). Ábrelo en goPrevina.
prl_inspection_scheduled — Categoría: UTILITY — Parámetros: inspectionTitle, scheduledDate, location
Cuerpo para copiar: Inspección programada: «{{1}}» el {{2}} en {{3}}.
prl_inspection_reminder — Categoría: UTILITY — Parámetros: inspectionTitle, dueDate
Cuerpo para copiar: Recordatorio: la inspección «{{1}}» vence el {{2}}.
prl_training_reminder — Categoría: UTILITY — Parámetros: courseName, sessionDate, location
Cuerpo para copiar: Recordatorio de formación: «{{1}}» el {{2}} en {{3}}.
prl_medical_appointment — Categoría: UTILITY — Parámetros: appointmentDate, appointmentTime, location
Cuerpo para copiar: Tienes cita de vigilancia de la salud el {{1}} a las {{2}} en {{3}}.
prl_meeting_invitation — Categoría: UTILITY — Parámetros: meetingTitle, meetingDate, organizer
Cuerpo para copiar: Reunión: «{{1}}» el {{2}}, organiza {{3}}.
prl_notification — Categoría: UTILITY — Parámetros: title, message
Cuerpo para copiar: {{1}}: {{2}}
prl_generic — Categoría: UTILITY — Parámetros: dynamic
Cuerpo para copiar: {{1}}