Saltar al contenido principal

Webhooks

Los webhooks te permiten recibir notificaciones HTTP en tiempo real cuando ocurren eventos en SalesOS. En lugar de consultar la API periódicamente, SalesOS envía los datos directamente a tu endpoint.

¿Cómo funcionan?

1

Registra tu endpoint

Configura la URL que recibirá las notificaciones.
2

Selecciona los eventos

Elige qué eventos deseas recibir.
3

Recibe las notificaciones

SalesOS envía una solicitud POST a tu endpoint cada vez que ocurre un evento suscrito.
4

Confirma la recepción

Tu endpoint debe responder con un código 200 para confirmar que recibió la notificación.

Eventos disponibles

EventoDescripción
lead.createdNuevo lead creado
lead.updatedLead actualizado
lead.deletedLead eliminado
lead.stage_changedLead cambió de etapa
lead.assignedLead asignado a un vendedor

Registro de un webhook

POST /v1/webhooks
{
  "url": "https://tu-servidor.com/webhook/salesos",
  "events": ["lead.created", "opportunity.won"],
  "secret": "tu_secreto_de_verificación",
  "active": true
}

Formato del payload

Cada notificación de webhook tiene el siguiente formato:
{
  "id": "evt_abc123",
  "event": "lead.created",
  "timestamp": "2026-03-15T10:30:00Z",
  "data": {
    "id": "lead_xyz789",
    "name": "Juan Pérez",
    "email": "juan@empresa.com",
    "stage": "prospecting"
  }
}

Verificación de firma

Cada solicitud incluye un header X-SalesOS-Signature con una firma HMAC-SHA256 del payload. Verifica la firma para asegurar que la solicitud proviene de SalesOS:
import hmac
import hashlib

def verify_signature(payload, signature, secret):
    expected = hmac.new(
        secret.encode(),
        payload.encode(),
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, signature)

Reintentos

Si tu endpoint no responde con un código 200, SalesOS reintentará la entrega:
IntentoEspera
1Inmediato
21 minuto
35 minutos
430 minutos
52 horas
Después de 5 intentos fallidos, el webhook se desactivará automáticamente. Revisa tus logs y reactívalo manualmente.
Procesa los webhooks de forma asíncrona. Responde con 200 inmediatamente y procesa los datos en segundo plano para evitar timeouts.

Próximos pasos