Configurar Webhooks
Reciba notificaciones en tiempo real sobre mensajes entrantes, actualizaciones de estado de entrega y otros eventos en su aplicación.
conversation.created — Nueva conversación
conversation.closed — Conversación cerrada
Ocurre un evento (por ejemplo, mensaje recibido)
Si no hay 200, reintentamos con retroceso exponencial
Eventos: Seleccione qué eventos desea recibir
ID único del evento (usar para deduplicación)
Cadena de tipo de evento (p. ej., message.received)
Marca de tiempo ISO 8601 de cuando ocurrió el evento
Payload específico del evento (varía según el tipo de evento)
El array attachments solo está presente cuando el mensaje incluye archivos multimedia. Cada adjunto incluye un id único, content_type, file_size y dos URLs de descarga. Tipos admitidos: image, video, audio, document, sticker.
url: Endpoint de API estable. Requiere autenticación (API key o token de sesión). Nunca expira.
signed_url: URL pre-firmada de GCS. No requiere autenticación. Expira después de 24 horas.
Si la descarga multimedia de la plataforma falla, los datos sin procesar de la plataforma se pasan con un marcador "source": "platform" en lugar de los campos enriquecidos. Los tipos que no son archivos (ubicación, contactos, reacciones) no se ven afectados.
Cada evento que incluye un objeto de contacto también lleva un array contact_methods[] con todos los identificadores del contacto (el principal primero). Los campos phone y email de nivel superior se conservan por compatibilidad con versiones anteriores.
Las selecciones de respuesta rápida y de lista llegan como message_type "button". El texto está en "text" y un objeto "meta.button" estructurado contiene el id y el payload, lo que permite enrutar la selección sin analizar el texto.
Mostrar ejemplo con clic en botón (respuesta rápida / lista)
Identificador estable del botón tal como se definió al enviar el mensaje.
Payload devuelto por el canal (coincide con el id para respuestas rápidas).
Texto legible que el usuario vio y seleccionó.
Los mensajes salientes que incluyen archivos adjuntos contienen el mismo esquema enriquecido de adjuntos (id, url, signed_url, content_type, file_size) que los mensajes entrantes.
El campo error está a nivel de datos (no dentro de message.meta). Los objetos conversation y contact completos también se incluyen.
Los eventos de actualización de estado (delivered, read) usan un objeto conversation más simple sin bot_session_id ni campos de marca de tiempo last_*_at. El objeto contact_method no se incluye.
Los objetos de conversación de email incluyen campos adicionales: email_integration_id y email_thread_id para el contexto de hilos.
El evento reopened incluye menos campos de conversación que otros eventos de conversación (sin bot_session_id, marcas de tiempo last_*_at ni subject).
contact.updated y contact.deleted usan la misma estructura. El campo type del evento distingue entre ellos.
Obtenga el cuerpo de la solicitud sin procesar (antes de analizar JSON)
Calcule HMAC-SHA256 usando su secreto de webhook
Compare con el encabezado X-SendSeven-Signature
Use comparación de tiempo seguro para prevenir ataques de temporización
Su URL sea accesible públicamente (no localhost)
Su certificado SSL sea válido (no autofirmado)
No haya un firewall bloqueando las IPs de SendSeven
Usando JSON analizado en lugar del cuerpo sin procesar
Secreto de webhook incorrecto (copie nuevamente desde configuración)
Middleware modificando el cuerpo de la solicitud
Problemas de codificación (asegúrese de usar UTF-8)
Almacene el ID del evento y verifique duplicados antes de procesar
Haga que sus manejadores de eventos sean idempotentes
Responda con 200 lo más rápido posible (procese de forma asíncrona)
Los Webhooks son callbacks HTTP que SendSeven utiliza para enviar eventos en tiempo real a su aplicación. En lugar de consultar la REST API periódicamente, su endpoint recibe notificaciones instantáneas cuando ocurre algo importante: llega un mensaje, se cierra una conversación, se crea un contacto o cambia el estado de entrega. Cada solicitud de webhook está firmada con HMAC por seguridad y se reintenta automáticamente en caso de fallo con retroceso exponencial, garantizando que ningún evento se pierda.
Una cuenta de SendSeven con al menos un canal conectado
Un endpoint HTTPS público que pueda recibir solicitudes HTTP POST
Un certificado SSL válido (Let's Encrypt funciona perfectamente)
Conocimientos básicos de REST API y JSON
Página de Webhooks en el panel de SendSeven con el botón Agregar endpoint resaltado
Diálogo Agregar endpoint con campo de URL HTTPS y suscripciones de eventos en SendSeven
Eventos: Seleccione los eventos que desea recibir
Encabezado Authorization (opcional): Encabezado de autenticación personalizado enviado con cada entrega
A través de la API también puede configurar: retry_strategy (exponential/linear/none), max_retries (predeterminado 8, máx. 15) y timeout_seconds (predeterminado 30, rango 5–60)
Ventana emergente de Webhook creado correctamente mostrando la clave secreta con un botón Copiar
Página de detalle del webhook mostrando la URL del endpoint, eventos suscritos, historial de entregas y estado de salud en SendSeven
Automáticamente al crear un webhook desde el panel
Automáticamente al crear un webhook vía la API (POST /api/v1/webhook-endpoints)
Automáticamente cuando se actualiza la URL del webhook
Bajo demanda mediante el endpoint de verificación (POST /api/v1/webhook-endpoints/{id}/verify)
- Crear un endpoint de webhook
- Registrar el webhook en SendSeven
- Seleccionar los tipos de eventos a recibir
- Gestionar el desafío de verificación del webhook
- Verificar la firma del webhook
- Gestionar los eventos entrantes
- Probar con eventos de ejemplo
FAQ
¿A qué eventos puedo suscribirme?
Los webhooks de SendSeven admiten seis tipos de eventos principales: message.received (mensaje entrante), message.sent (mensaje saliente), conversation.closed (conversación finalizada), contact.created (nuevo contacto), contact.updated (contacto modificado) y delivery.status (cambio de estado).
¿Cómo funciona el reintento de webhooks?
Si su endpoint devuelve un código de estado distinto de 2xx o no responde en 30 segundos, SendSeven reintenta automáticamente con retroceso exponencial: inmediatamente, 5 segundos, 30 segundos, 5 minutos, 30 minutos y 24 horas. Tras 6 intentos fallidos de entrega, el webhook se desactiva automáticamente y recibirá una notificación.
¿Cómo verifico las firmas de webhook?
Cada solicitud de webhook incluye un encabezado X-SendSeven-Signature. Para verificar, calcule el HMAC-SHA256 del cuerpo de la solicitud en bruto usando su clave secreta de webhook y compárelo con el valor del encabezado. Si coinciden, la solicitud es auténtica y proviene de SendSeven.
¿Cuál es el formato del payload de webhook?
Los webhooks se envían como solicitudes POST en formato JSON con una estructura consistente: id (identificador único del evento), type (tipo de evento), timestamp (marca de tiempo Unix), objeto de datos relevante (mensaje, conversación o contacto) y contexto del canal. Los payloads suelen tener entre 1 y 5 KB para eventos estándar.
¿Puedo configurar múltiples endpoints de webhook?
Sí. Puede agregar hasta 10 endpoints de webhook por espacio de trabajo. Cada endpoint puede tener una URL diferente y suscribirse a distintos tipos de eventos, permitiéndole enrutar eventos a diferentes sistemas.
¿Cómo pruebo mi endpoint de webhook?
SendSeven proporciona un botón "Enviar evento de prueba" en el panel de webhooks que envía un payload de ejemplo a su endpoint sin afectar datos reales. Para pruebas locales, utilice herramientas de depuración de webhooks como webhook.site, RequestBin o ngrok.
¿Qué pasa si mi endpoint no está disponible temporalmente?
Los webhooks se encolan y se reintentan durante un máximo de 48 horas. Durante este tiempo puede corregir su endpoint y los eventos en cola serán entregados. Si no se resuelve en 48 horas, los eventos se descartan permanentemente y se registran en el historial de entregas de su webhook.