Ir al contenido principal

Cómo configurar las API de llamadas de WhatsApp y las webhooks en Wati

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 ConectoresDocumentació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 OK

  • Responder 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.

¿Ha quedado contestada tu pregunta?