Ir al contenido principal

Cómo configurar las API de llamadas de WhatsApp y los 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 llamada 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 utilizando WebRTC.

La integración funciona conectando:

  • La capa de señalización de WhatsApp gestionada por las API y webhooks de Wati

  • La capa multimedia manejada 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 tenant 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:

    • Endpoint 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: Configurar webhooks de llamadas entrantes

En la plataforma Wati, configura tu URL de webhook para:

  • Webhook de Nueva Llamada Entrante

Este webhook recibe solicitudes de llamadas entrantes y ofertas SDP de usuarios de WhatsApp.

Paso 2: Recibir 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 llamante.

Ejemplo de payload de solicitud:

{
"callId": "WHATSAPP_CALL_ID",
"sdp": "v=0... (Oferta de WhatsApp)",
"businessNumber": "1234567890"
}

Paso 3: Realizar negociación WebRTC

Tu aplicación ahora debe establecer la sesión WebRTC.

Inicializar la conexión peer

Crea una RTCPeerConnection en tu servidor, agente de voz o plataforma de terceros.

Establecer la descripción remota

Utiliza el SDP recibido del webhook como descripción remota.

Generar una respuesta SDP

Genera una respuesta SDP local desde tu conexión peer.

¡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: Aceptar la llamada

Envía la respuesta SDP generada de vuelta a Wati utilizando la API de Aceptar Llamada.

Detalles de la solicitud

Método

POST

Endpoint

<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)"
}

Realizar llamadas salientes

WhatsApp requiere que las empresas reciban permiso de los usuarios antes de iniciar llamadas salientes.

Paso 1: Gestionar permisos de llamada

Verificar el estado de permiso existente

Utiliza el siguiente endpoint para verificar si el usuario ya ha concedido permiso de llamada.

GET .../calls/permissions/{waid}

Solicitar permiso

Si no se ha concedido el permiso, solicítalo utilizando:

POST .../calls/call-permission-request/{waid}

Esperar la aprobación del permiso

Wati envía un Webhook de Permiso de Llamada después de que el usuario acepta o rechaza la solicitud.

Continúa con la llamada saliente solo después de la aprobación.

Iniciar una llamada saliente

Paso 2: Crear y enviar la oferta SDP

Generar una oferta SDP

Crea una oferta SDP utilizando tu RTCPeerConnection WebRTC.

Llamar a la API de llamada saliente

Envía la oferta SDP a Wati.

Método

POST

Endpoint

<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)"
}

Recibir el ID de llamada

Si la solicitud es exitosa, Wati devuelve un callId.

Establecer la transmisión de audio

Paso 3: Finalizar la conexión WebRTC

Monitorear el estado de la llamada

Utiliza el Webhook de Estado de Nueva Llamada Saliente para seguir actualizaciones como:

  • LLAMANDO

  • EN ESPERA

  • ACEPTADO

Recibir la respuesta SDP del usuario

Cuando el usuario responde la llamada, Wati envía el Webhook de Nueva Llamada Saliente que contiene la respuesta SDP del usuario.

Completar 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.

Terminar 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

Endpoint

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 endpoints de webhook en Wati.

Webhook de Nueva Llamada Entrante

Recibe ofertas SDP entrantes de usuarios de WhatsApp.

Webhook de Terminación de Llamada

Recibe notificaciones cuando las llamadas se desconectan.

Webhook de Nueva Llamada Saliente

Recibe respuestas SDP para llamadas salientes.

Webhook de Estado de Nueva Llamada Saliente

Recibe actualizaciones de estado de llamadas salientes como:

  • Llamando

  • En espera

  • Aceptado

Webhook de Permiso de Llamada

Recibe eventos de aprobación o rechazo de permisos de los usuarios.

Requisitos del Webhook

Tus endpoints 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 solicitudes entrantes

  • Asegurar tus endpoints de webhook

Mejores prácticas técnicas

Usar el códec Opus

Las llamadas de WhatsApp actualmente solo admiten audio.

Tu plataforma de voz debe usar el códec de audio Opus para compatibilidad.

Desactivar ICE trickle

No uses ICE Trickle durante la negociación SDP.

Wati requiere un bloque SDP completo que ya contenga todos los candidatos ICE.

Enviar payloads SDP completos

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 llamada entrante

Flujo de llamada saliente

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 planes Pro y superiores.

2. ¿Por qué no veo esta configuración en mi cuenta de Wati?

Esta configuración se habilita solo bajo solicitud. Necesitas contactar al soporte de Wati para habilitarla para tu cuenta.

Llamadas e integraciones

3. ¿Se grabarán y transcribirán las llamadas al usar Llamadas de WhatsApp en una plataforma externa o agentes de IA personalizados?

No, las llamadas no se grabarán ni transcribirán al usar Llamadas de WhatsApp en una plataforma externa o agentes de IA personalizados. 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 endpoint de webhook para recibir actualizaciones de estado de llamadas como en espera, aceptada o rechazada.

Soporte e implementación

6. ¿Quién puede ayudarme a configurar esta función si no tengo conocimientos técnicos de la implementación?

Wati ofrece soporte de implementación para clientes del Plan Business según sea necesario. Puedes contactar a tu Gerente de Éxito del Cliente (CSM) para programar una llamada.

¿Ha quedado contestada tu pregunta?