Descripción general
Matcher admite comunicación bidireccional mediante webhooks, manteniendo tus herramientas operativas sincronizadas con cada evento de conciliación en tiempo real. Esto reduce la intervención manual, ayuda a mantener el cumplimiento de SLAs y garantiza una trazabilidad de auditoría continua en todos los sistemas conectados.
- Webhooks salientes: Matcher notifica a los sistemas externos cuando ocurren eventos
- Callbacks entrantes: los sistemas externos notifican a Matcher cuando se toman acciones
Eventos salientes
Matcher emite eventos cuando ocurren acciones significativas en el proceso de conciliación.
Eventos disponibles
El catálogo de eventos de Matcher se define de forma centralizada (46 eventos en la v4.1.0). Los eventos más comúnmente consumidos se agrupan por dominio a continuación. Configuración| Evento | Disparador | Uso típico |
|---|---|---|
reconciliation_context.created | Contexto de conciliación creado | Sincronización de aprovisionamiento |
reconciliation_context.updated | Metadatos o estado del contexto modificados | Seguimiento de cambios de configuración |
reconciliation_context.deleted | Contexto eliminado | Desmontaje downstream |
reconciliation_source.created | Fuente creada dentro de un contexto | Incorporación de fuentes |
match_rule.created | Regla de coincidencia creada | Auditoría de cambios de reglas |
match_rule.reordered | Prioridades de reglas reordenadas | Auditoría de cambios de reglas |
| Evento | Disparador | Uso típico |
|---|---|---|
fetcher_connection.synced | Instantánea de conexión y esquema sincronizada | Monitoreo de descubrimiento |
fetcher_connection.unreachable | Conexión marcada como inalcanzable | Alertas de conectividad |
extraction_request.created | Solicitud de extracción creada | Monitoreo de extracción |
extraction_request.submitted | Extracción aceptada por Fetcher | Monitoreo de extracción |
extraction_request.completed | Extracción completada con artefacto | Disponibilidad de datos |
extraction_request.failed | Extracción fallida | Alertas de error |
extraction_request.cancelled | Extracción cancelada | Monitoreo del pipeline |
extraction_request.bridged | Extracción vinculada a un trabajo de ingesta | Monitoreo del pipeline |
extraction_request.bridge_failed | Puente hacia la ingesta fallido | Alertas de error |
| Evento | Disparador | Uso típico |
|---|---|---|
ingestion.completed | Importación de archivo finalizada | Monitoreo del pipeline de datos |
ingestion.failed | Importación de archivo fallida | Alertas de error |
transaction.ignored | Transacción no coincidente marcada como ignorada | Registro de auditoría |
| Evento | Disparador | Uso típico |
|---|---|---|
match_run.completed | Trabajo de coincidencia finalizado | Monitoreo de trabajos, reportes |
match_run.failed | Trabajo de coincidencia fallido | Alertas de error |
match_group.confirmed | Grupo de coincidencia confirmado | Actualizaciones downstream |
match_group.unmatched | Coincidencia confirmada revertida | Seguimiento de correcciones |
transaction.matched | Transacción marcada como coincidente | Registro de auditoría |
transaction.pending_review | Candidato no automático requiere revisión | Disparadores de cola de revisión |
fee_variance.created | Variación de comisión detectada | Investigación de comisiones |
| Evento | Disparador | Uso típico |
|---|---|---|
exception.assigned | Excepción asignada a un responsable | Notificación al usuario |
exception.resolved | Excepción resuelta | Sincronización de estado |
exception.dispatched | Excepción enviada a un destino externo | Creación de tickets |
exception.callback_processed | Callback externo procesado | Sincronización de estado |
exception.force_match_resolved | Excepción resuelta mediante coincidencia forzada | Flujos de aprobación |
exception.adjust_entry_resolved | Excepción resuelta mediante asiento de ajuste | Registro de auditoría |
exception_comment.added | Comentario añadido a una excepción | Sincronización de colaboración |
exception_comment.deleted | Comentario de excepción eliminado | Sincronización de colaboración |
dispute.opened | Disputa abierta para una excepción | Seguimiento de disputas |
dispute.won | Disputa cerrada como ganada | Sincronización de estado |
dispute.lost | Disputa cerrada como perdida | Sincronización de estado |
evidence.submitted | Evidencia enviada a una disputa | Seguimiento de disputas |
| Evento | Disparador | Uso típico |
|---|---|---|
audit_log.created | Entrada de registro de auditoría añadida | Monitoreo de cumplimiento |
archive_metadata.created | Ciclo de vida de archivado iniciado | Monitoreo de archivado |
archive.uploaded | Objeto de archivo cargado | Monitoreo de archivado |
archive.completed | Archivo verificado y completado | Monitoreo de archivado |
actor.pseudonymized | Mapeo de actor seudonimizado | Monitoreo de cumplimiento |
export_job.created | Trabajo de exportación en cola | Monitoreo de exportación |
export_job.succeeded | Trabajo de exportación completado | Disponibilidad de descarga |
export_job.failed | Trabajo de exportación fallido | Alertas de error |
export_job.expired | Artefacto de exportación caducado | Ciclo de vida de exportación |
Estructura del payload de eventos
Todos los eventos siguen una estructura consistente:Payloads de eventos
Ingestioncompleted
Se dispara cuando un lote de transacciones se importa exitosamente.Matchconfirmed
Se dispara cuando una coincidencia es aprobada (automática o manual).Exceptionresolved
Se dispara cuando una excepción es resuelta.Matchforcematched
Se dispara cuando un usuario fuerza manualmente una coincidencia entre transacciones.Los eventos de coincidencia forzada se usan comúnmente para activar flujos de aprobación cuando la variación excede los umbrales de la empresa.
Matchunmatched
Se dispara cuando una coincidencia previamente confirmada es revertida.Matchruncompleted
Se dispara cuando una ejecución de coincidencias automática o manual finaliza.Callbacks entrantes
Los sistemas externos envían callbacks a Matcher para actualizar el estado de las excepciones después del procesamiento. El endpoint de callback acepta actualizaciones de estado, notas de resolución y cambios de asignación desde cualquier sistema externo.
Procesar un callback
cURL
externalSystem identifica el sistema externo que procesó la excepción. Los valores comunes incluyen "JIRA", "SERVICENOW" o "WEBHOOK", pero los callbacks pueden reportar cualquier identificador de sistema.
Respuesta
X-Idempotency-Key para prevenir el procesamiento duplicado.
Reintento automático de callbacks fallidos
Si un callback previo para la misma clave de idempotencia falló durante el procesamiento, Matcher intenta automáticamente readquirir el bloqueo de idempotencia y reprocesar el callback. Esto significa que no necesitas generar una nueva clave de idempotencia al reintentar un callback fallido: simplemente reenvía la misma solicitud y Matcher gestiona la recuperación. El comportamiento de reintento se aplica solo a los callbacks que se marcaron comofailed internamente. Los callbacks que se completaron correctamente se siguen deduplicando como se espera.
Credenciales de callback
Los callbacks entrantes se autentican con un token bearer opaco que el sistema externo envía en el encabezado
X-Callback-Token. Estas credenciales de callback se emiten, listan, rotan y revocan a través de una superficie CRUD dedicada bajo /v1/exceptions/callbacks/credentials. Cada credencial está vinculada al tenant del llamante, y solo el hash SHA-256 del token se almacena del lado del servidor — el token en bruto se retorna exactamente una vez al momento de emitir/rotar.
| Acción | Método y ruta | Notas |
|---|---|---|
| Emitir credencial | POST /v1/exceptions/callbacks/credentials | Crea una credencial y retorna el token en bruto una vez (201). |
| Listar credenciales | GET /v1/exceptions/callbacks/credentials | Lista los metadatos de credenciales del tenant (nunca los tokens en bruto). |
| Rotar credencial | POST /v1/exceptions/callbacks/credentials/{credentialId}/rotate | Sustituye atómicamente una credencial activa por una recién emitida (misma etiqueta) y retorna el nuevo token en bruto una vez; la anterior se revoca en la misma transacción. |
| Revocar credencial | DELETE /v1/exceptions/callbacks/credentials/{credentialId} | Revoca de forma terminal una credencial (204); auditada en modo append-only. |
Emitir una credencial
El cuerpo de la solicitud es opcional; proporcionaexternalSystem como una etiqueta legible por el operador para el sistema que este token autentica.
cURL
201 (CredentialSecretResponse) retorna:
| Campo | Descripción |
|---|---|
token | Token bearer en bruto, expuesto una vez. Configúralo como el valor del encabezado X-Callback-Token en el sistema externo. |
credentialId | ID sustituto de la credencial emitida (usado para rotar/revocar). |
createdAt | Momento de emisión (RFC 3339, UTC). |
externalSystem | La etiqueta devuelta para confirmación. |
webhookUrlHint | Forma informativa de la URL de callback entrante para configurar externamente; el marcador {exceptionId} se completa por cada callback. |
Rotar una credencial
cURL
CredentialSecretResponse (nuevo token en bruto) y revoca la credencial anterior de forma atómica, de modo que los llamantes externos no experimentan ninguna interrupción al intercambiar el token.
Revocar una credencial
cURL
Seguridad de webhooks
Verificación de firma
Cuando se configura un secreto compartido de webhook, Matcher firma cada entrega con un HMAC-SHA256 sobre el cuerpo de la solicitud sin procesar y lo envía en el encabezadoX-Signature-256, con el formato sha256=<hex-digest>:
X-Idempotency-Key para que los receptores puedan deduplicar los reintentos.
Proceso de verificación:
- Calcula el HMAC-SHA256 del cuerpo de la solicitud sin procesar usando el secreto compartido del webhook
- Antepón
sha256=al hex digest - Compara (en tiempo constante) con el encabezado
X-Signature-256
Lista de IPs permitidas
Matcher envía webhooks desde rangos de IP específicos:Requisitos de TLS
- Mínimo TLS 1.2
- Se requiere certificado SSL válido
- Certificados autofirmados no soportados en producción
Lógica de reintentos
Las entregas de webhooks fallidas se reintentan con retroceso exponencial.
Política de reintentos por defecto
Una entrega fallida se reintenta hasta 3 veces por defecto. Los retrasos siguen un retroceso exponencial desde una base de 1 segundo, con jitter añadido para distribuir los reintentos — así el espaciado exacto varía de un intento a otro en lugar de seguir una escala fija.Condiciones de reintento
Los reintentos ocurren para:- Respuestas HTTP 5xx
- Timeouts de conexión
- Fallos de resolución DNS
- Respuestas HTTP 4xx (excepto 429)
- Certificados SSL inválidos
- Webhook deshabilitado
Mejores prácticas
Verifica las firmas de webhooks
Verifica las firmas de webhooks
Verifica siempre la firma HMAC antes de procesar los payloads de webhooks. Esto previene solicitudes falsificadas.
Responde rápidamente
Responde rápidamente
Retorna una respuesta 2xx dentro de 5 segundos. Procesa el evento de forma asíncrona si es necesario.
Maneja duplicados de forma idempotente
Maneja duplicados de forma idempotente
Los eventos pueden entregarse más de una vez. Usa el ID del evento para deduplicar.
Monitorea la salud de las entregas
Monitorea la salud de las entregas
Configura alertas para las tasas de falla de webhooks. Investiga las fallas persistentes de inmediato.
Usa filtros de eventos
Usa filtros de eventos
Suscríbete solo a los eventos que necesitas. El filtrado reduce el ruido y la carga de procesamiento.
Prueba antes de producción
Prueba antes de producción
Usa el endpoint de prueba para verificar que tu manejador de webhooks funciona correctamente antes de habilitarlo en producción.
Próximos pasos
Enrutamiento de excepciones
Configura cómo las excepciones activan eventos de webhook.
Fuentes externas
Configura fuentes de datos que pueden enviar mediante webhooks.

