Resumen
Esta guía explica cómo integrar las llamadas de WhatsApp con tu propio agente de voz o plataforma de terceros. Cubre flujos de llamadas entrantes y salientes, autenticación de API, configuración de WebRTC, configuración de webhooks, permisos de llamadas y mejores prácticas para mantener una integración de voz estable.
Instrucciones
La API de llamadas de WhatsApp de Wati permite a las empresas conectar las llamadas de WhatsApp con su propia infraestructura de voz mediante WebRTC.
La integración funciona conectando:
La capa de señalización de WhatsApp administrada por las API y webhooks de Wati
La capa multimedia gestionada por tu propio agente de voz o plataforma de terceros
Esta guía está destinada a desarrolladores que crean integraciones de voz personalizadas.
Arquitectura central y autenticación
La integración utiliza el intercambio del Protocolo de Descripción de Sesión (SDP) entre Wati y tu infraestructura WebRTC.
URL base de la API
<https://live-mt-server.wati.io/{tenant_id}/api/v1/openapi/whatsapp/calls>Reemplaza {tenant_id} con tu ID de inquilino de Wati.
Autenticación
Cada solicitud de API debe incluir un Token de Portador en la cabecera de la solicitud.
Authorization: Bearer {YOUR_ACCESS_TOKEN}Encuentra tus credenciales de API
Inicia sesión en tu cuenta de Wati.
Navega a Conectores → Documentación de API en el menú.
Copia tu:
Punto final de la API
Token de portador
Nota: Si cambias tu contraseña de Wati, tu Token de Portador existente se invalidará. Debes actualizar tu integración con el nuevo token.
Manejo de llamadas entrantes
Paso 1: Configura los webhooks de llamadas entrantes
En la plataforma Wati, configura tu URL de webhook para:
Webhook de llamada entrante nueva
Este webhook recibe solicitudes de llamadas entrantes y ofertas SDP de usuarios de WhatsApp.
Paso 2: Recibe el webhook entrante
Cuando un usuario llama a tu número de WhatsApp, Wati envía una solicitud POST que contiene la oferta SDP del llamador.
Ejemplo de carga útil de solicitud:
{
"callId": "WHATSAPP_CALL_ID",
"sdp": "v=0... (Oferta de WhatsApp)",
"businessNumber": "1234567890"
}Paso 3: Realiza la negociación WebRTC
Tu aplicación debe ahora establecer la sesión WebRTC.
Inicializa la conexión de pares
Crea un RTCPeerConnection en tu servidor, agente de voz o plataforma de terceros.
Establece la descripción remota
Utiliza el SDP recibido del webhook como la descripción remota.
Genera una respuesta SDP
Genera una respuesta SDP local desde tu conexión de pares.
¡Importante! Asegúrate de que las huellas digitales SDP estén en mayúsculas para la compatibilidad con WhatsApp.
Ejemplo:
a=fingerprint:SHA-256
Paso 4: Acepta la llamada
Envía la respuesta SDP generada de vuelta a Wati usando la API de Aceptar Llamada.
Detalles de la solicitud
Método
POST
Punto final
<https://live-mt-server.wati.io/{tenant_id}/api/v1/openapi/whatsapp/calls/{callId}/accept>Cabeceras
Authorization: Bearer {YOUR_ACCESS_TOKEN}Cuerpo de la solicitud
{
"Sdp": "v=0... (Tu respuesta)"
}
Realizando llamadas salientes
WhatsApp requiere que las empresas obtengan permiso de los usuarios antes de iniciar llamadas salientes.
Paso 1: Gestiona los permisos de llamada
Comprueba el estado de permiso existente
Utiliza el siguiente punto final para comprobar si el usuario ya ha concedido permiso de llamada.
GET .../calls/permissions/{waid}Solicita permiso
Si no se ha concedido permiso, solicítalo usando:
POST .../calls/call-permission-request/{waid}Espera la aprobación del permiso
Wati envía un Webhook de Permiso de Llamada después de que el usuario acepte o rechace la solicitud.
Solo procede con la llamada saliente después de la aprobación.
Iniciando una llamada saliente
Paso 2: Crea y envía la oferta SDP
Genera una oferta SDP
Crea una oferta SDP utilizando tu RTCPeerConnection de WebRTC.
Llama a la API de llamadas salientes
Envía la oferta SDP a Wati.
Método
POST
Punto final
<https://live-mt-server.wati.io/{tenant_id}/api/v1/openapi/whatsapp/calls/outbound-call/{waid}>Cabeceras
Authorization: Bearer {YOUR_ACCESS_TOKEN}Cuerpo de la solicitud
{
"Sdp": "v=0... (Tu oferta)"
}Recibe el ID de llamada
Si la solicitud es exitosa, Wati devuelve un callId.
Estableciendo la transmisión de audio
Paso 3: Finaliza la conexión WebRTC
Monitoriza el estado de la llamada
Utiliza el Webhook de estado de llamada saliente nueva para rastrear actualizaciones como:
LLAMANDO
SONANDO
ACEPTADO
Recibe la respuesta SDP del usuario
Cuando el usuario responde la llamada, Wati envía el Webhook de llamada saliente nueva que contiene la respuesta SDP del usuario.
Completa la conexión
Establece la respuesta SDP recibida como la descripción remota en tu RTCPeerConnection.
Esto establece la transmisión de audio entre el usuario y tu plataforma de voz.
Terminando llamadas
Cuando el usuario cuelga
Wati envía un Webhook de Terminación de Llamada para notificar a tu aplicación que la llamada ha finalizado.
Cuando la empresa cuelga
Utiliza la API de Terminación de Llamada.
Detalles de la solicitud
Punto final
POST <https://live-mt-server.wati.io/{tenant_id}/api/v1/openapi/whatsapp/calls/{callId}/terminate>Cabeceras
Authorization: Bearer {YOUR_ACCESS_TOKEN}
¿Dónde puedes publicar las URL de tus webhooks?
URL de webhooks requeridas
Configura los siguientes puntos finales de webhook en Wati.
Webhook de llamada entrante nueva
Recibe ofertas SDP entrantes de usuarios de WhatsApp.
Webhook de terminación de llamada
Recibe notificaciones cuando se desconectan las llamadas.
Webhook de llamada saliente nueva
Recibe respuestas SDP para llamadas salientes.
Webhook de estado de llamada saliente nueva
Recibe actualizaciones de estado de llamadas salientes como:
Llamando
Sonando
Aceptado
Webhook de permiso de llamada
Recibe eventos de aprobación o rechazo de permisos de los usuarios.
Requisitos del webhook
Tus puntos finales de webhook deben:
Ser accesibles públicamente
Devolver una respuesta HTTP
200 OKResponder en un plazo de 30 segundos
Configurar la verificación de clave API del webhook
Puedes configurar una clave API dedicada en la interfaz de configuración de Wati para la verificación de webhooks.
Wati incluye esta clave en la cabecera Authorization de cada solicitud de webhook.
Ejemplo:
Authorization: Bearer {ApiKey}Puedes usar esta clave para:
Verificar la autenticidad del webhook
Validar las solicitudes entrantes
Proteger tus puntos finales de webhook
Mejores prácticas técnicas
Usa el códec Opus
Las llamadas de WhatsApp actualmente admiten solo audio.
Tu plataforma de voz debe usar el códec de audio Opus para compatibilidad.
Desactiva ICE trickle
No uses ICE Trickle durante la negociación SDP.
Wati requiere un bloque SDP completo que ya contenga todos los candidatos ICE.
Envía cargas útiles SDP completas
Asegúrate de que tu SDP incluya:
Candidatos ICE
Huellas digitales
Información multimedia
antes de enviar solicitudes a las API de Wati.
Descripción general del flujo de llamadas
Flujo de llamadas entrantes
Flujo de llamadas salientes
Flujo de permiso de llamada
Preguntas frecuentes (FAQs)
Disponibilidad y acceso
1. ¿Está esta función disponible en todos los planes de Wati?
No, esta función solo está disponible para los planes Pro y superiores.
2. ¿Por qué no veo esta configuración en mi cuenta de Wati?
Esta configuración se habilita solo bajo petición. Necesitas ponerte en contacto con el soporte de Wati para habilitarla para tu cuenta.
Llamadas e integraciones
3. ¿Se grabarán y transcribirán las llamadas cuando se utilice WhatsApp Calling en una plataforma externa o BYOA?
No, las llamadas no se grabarán ni transcribirán cuando se utilice WhatsApp Calling en una plataforma externa o Bring Your Own Access (BYOA). Las llamadas se realizan a través de tu propio servidor, donde Wati no tiene control.
4. ¿Puedo gestionar llamadas tanto en Wati como en una plataforma integrada externamente?
No, todas las llamadas entrantes se dirigirán a tu plataforma integrada externamente en lugar de a Wati.
5. ¿Por qué las llamadas salientes realizadas a través de Wati no pueden detectar si una llamada fue aceptada o rechazada?
Las llamadas salientes realizadas a través de Wati no pueden detectar si una llamada fue aceptada o rechazada porque configurarás tu propio punto final de webhook para recibir actualizaciones de estado de llamada como sonando, aceptada o rechazada.
Soporte e implementación
6. ¿Quién puede ayudarme a configurar esta función si no tengo conocimientos técnicos sobre la implementación?
Wati proporciona soporte de implementación para clientes del Plan de Negocios según sea necesario. Puedes ponerte en contacto con tu Gerente de Éxito del Cliente (CSM) para programar una llamada.





