Webhooks
Los webhooks salientes le permiten recibir notificaciones HTTP POST en tiempo real cuando ocurren eventos en su proyecto. Pro
Descripción general
Los webhooks envían un payload JSON a cualquier endpoint HTTPS que configure cuando ocurre un evento específico en su proyecto. Cada webhook puede suscribirse a uno o más de los siguientes eventos:
| Evento | Descripción |
|---|---|
post.created | Se envía un nuevo post de feedback |
post.updated | Un post de feedback es editado |
post.deleted | Un post de feedback es eliminado |
comment.created | Se agrega un nuevo comentario a un post |
comment.updated | Un comentario es editado |
comment.deleted | Un comentario es eliminado |
post.status_changed | El estado de un post cambia (pendientes, abierto, planeado, en progreso, completado) |
message.created | Se envía un nuevo mensaje privado |
message.updated | Un mensaje privado es editado |
message.deleted | Un mensaje privado es eliminado |
beta_feedback.created | Un tester beta envía feedback sobre un programa beta |
beta_feedback.deleted | Se elimina un elemento de feedback de la beta |
waitlist_signup.created | Un visitante se une a la lista de espera |
waitlist_signup.invited | Se invita a una inscripción desde la lista de espera |
waitlist_signup.joined | Una inscripción invitada acepta y se une |
csat_survey.completed | Una encuesta de satisfacción CSAT se completa con una calificación |
Los webhooks están configurados por proyecto individual. Cada proyecto tiene su propio conjunto de endpoints de webhooks con configuraciones y secretos de firma independientes.
Configurar un webhook
- Vaya a la página de Integraciones de su proyecto
- Desplácese hasta la sección Webhooks salientes
- Haga clic en Agregar webhook
- Ingrese la URL de su endpoint (debe ser HTTPS en producción)
- Seleccione a qué eventos desea suscribirse
- Haga clic en Guardar
Después de guardar, se muestra una vez un secreto de firma. Cópie-lo inmediatamente — no se puede recuperar más tarde. Puede regenerarlo en cualquier momento desde el menú de acciones del webhook.
Verificar firmas de webhooks
Cada entrega de webhook incluye un header X-SupDesk-Signature que contiene
una firma HMAC-SHA256 del cuerpo de la solicitud. Para verificar un webhook:
- Calcule
HMAC-SHA256(secreto_de_firma, cuerpo_raw_de_la_solicitud) - Compare el resultado con el valor hexadecimal en el header
X-SupDesk-Signature(después del prefijosha256=) - Use una comparación de tiempo constante para prevenir ataques de temporización
Node.js
import { createHmac, timingSafeEqual } from "crypto";
function verifyWebhook(secret, body, signature) {
const expected = createHmac("sha256", secret)
.update(body)
.digest("hex");
const sig = signature.replace("sha256=", "");
return timingSafeEqual(Buffer.from(expected), Buffer.from(sig));
}Python
import hmac
import hashlib
def verify_webhook(secret: str, body: bytes, signature: str) -> bool:
expected = hmac.new(
secret.encode(), body, hashlib.sha256
).hexdigest()
sig = signature.removeprefix("sha256=")
return hmac.compare_digest(expected, sig)Ruby
require "openssl"
def verify_webhook(secret, body, signature)
expected = OpenSSL::HMAC.hexdigest("SHA256", secret, body)
sig = signature.sub("sha256=", "")
Rack::Utils.secure_compare(expected, sig)
endProbar un webhook
Haga clic en el botón Probar junto a un webhook para enviar un payload de
ejemplo a su endpoint. El payload de prueba tiene "event": "test" y un campo
data.message. Use una herramienta como webhook.site
para inspeccionar la solicitud entregada.
Registro de entregas
El registro de entregas muestra los últimos 50 intentos de entrega para cada webhook, incluyendo:
- Evento — qué evento fue entregado
- Estado —
successofailed - Código de respuesta — código de estado HTTP del endpoint
- Intentos — número de intentos de entrega (incluyendo reintentos)
- Hora — cuándo se intentó la entrega
Comportamiento de reintentos
Cuando una entrega de webhook falla (respuesta 5xx o timeout de red), SupDesk reintenta hasta 3 veces con backoff exponencial:
| Intento | Retraso |
|---|---|
| 1 | Inmediato |
| 2 | 1 segundo |
| 3 | 2 segundos |
Los errores de cliente (4xx) no se reintean — indican un problema permanente con la configuración del endpoint.
Requisitos de plan
Los webhooks salientes están disponibles en los planes Pro y Team.
Pro