Saltar al contenido principal
Los webhooks permiten la comunicación en tiempo real entre Matcher y sistemas externos. Esta guía cubre las notificaciones de eventos salientes y los callbacks de resolución entrantes.

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
Cuando algo sucede en Matcher, como una nueva excepción o una coincidencia completada, envía un evento a tus endpoints configurados. Los sistemas externos como JIRA o ServiceNow pueden entonces enviar callbacks para actualizar el estado de las excepciones o cerrar elementos automáticamente. Este flujo bidireccional mantiene tus herramientas sincronizadas sin intervención manual.
Matcher Webhooks Callbacks

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
EventoDisparadorUso típico
reconciliation_context.createdContexto de conciliación creadoSincronización de aprovisionamiento
reconciliation_context.updatedMetadatos o estado del contexto modificadosSeguimiento de cambios de configuración
reconciliation_context.deletedContexto eliminadoDesmontaje downstream
reconciliation_source.createdFuente creada dentro de un contextoIncorporación de fuentes
match_rule.createdRegla de coincidencia creadaAuditoría de cambios de reglas
match_rule.reorderedPrioridades de reglas reordenadasAuditoría de cambios de reglas
Descubrimiento (Fetcher)
EventoDisparadorUso típico
fetcher_connection.syncedInstantánea de conexión y esquema sincronizadaMonitoreo de descubrimiento
fetcher_connection.unreachableConexión marcada como inalcanzableAlertas de conectividad
extraction_request.createdSolicitud de extracción creadaMonitoreo de extracción
extraction_request.submittedExtracción aceptada por FetcherMonitoreo de extracción
extraction_request.completedExtracción completada con artefactoDisponibilidad de datos
extraction_request.failedExtracción fallidaAlertas de error
extraction_request.cancelledExtracción canceladaMonitoreo del pipeline
extraction_request.bridgedExtracción vinculada a un trabajo de ingestaMonitoreo del pipeline
extraction_request.bridge_failedPuente hacia la ingesta fallidoAlertas de error
Ingesta
EventoDisparadorUso típico
ingestion.completedImportación de archivo finalizadaMonitoreo del pipeline de datos
ingestion.failedImportación de archivo fallidaAlertas de error
transaction.ignoredTransacción no coincidente marcada como ignoradaRegistro de auditoría
Coincidencia
EventoDisparadorUso típico
match_run.completedTrabajo de coincidencia finalizadoMonitoreo de trabajos, reportes
match_run.failedTrabajo de coincidencia fallidoAlertas de error
match_group.confirmedGrupo de coincidencia confirmadoActualizaciones downstream
match_group.unmatchedCoincidencia confirmada revertidaSeguimiento de correcciones
transaction.matchedTransacción marcada como coincidenteRegistro de auditoría
transaction.pending_reviewCandidato no automático requiere revisiónDisparadores de cola de revisión
fee_variance.createdVariación de comisión detectadaInvestigación de comisiones
Excepciones y disputas
EventoDisparadorUso típico
exception.assignedExcepción asignada a un responsableNotificación al usuario
exception.resolvedExcepción resueltaSincronización de estado
exception.dispatchedExcepción enviada a un destino externoCreación de tickets
exception.callback_processedCallback externo procesadoSincronización de estado
exception.force_match_resolvedExcepción resuelta mediante coincidencia forzadaFlujos de aprobación
exception.adjust_entry_resolvedExcepción resuelta mediante asiento de ajusteRegistro de auditoría
exception_comment.addedComentario añadido a una excepciónSincronización de colaboración
exception_comment.deletedComentario de excepción eliminadoSincronización de colaboración
dispute.openedDisputa abierta para una excepciónSeguimiento de disputas
dispute.wonDisputa cerrada como ganadaSincronización de estado
dispute.lostDisputa cerrada como perdidaSincronización de estado
evidence.submittedEvidencia enviada a una disputaSeguimiento de disputas
Gobernanza y reportes
EventoDisparadorUso típico
audit_log.createdEntrada de registro de auditoría añadidaMonitoreo de cumplimiento
archive_metadata.createdCiclo de vida de archivado iniciadoMonitoreo de archivado
archive.uploadedObjeto de archivo cargadoMonitoreo de archivado
archive.completedArchivo verificado y completadoMonitoreo de archivado
actor.pseudonymizedMapeo de actor seudonimizadoMonitoreo de cumplimiento
export_job.createdTrabajo de exportación en colaMonitoreo de exportación
export_job.succeededTrabajo de exportación completadoDisponibilidad de descarga
export_job.failedTrabajo de exportación fallidoAlertas de error
export_job.expiredArtefacto de exportación caducadoCiclo 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.
Deshacer una coincidencia confirmada crea nuevas excepciones para ambas transacciones y genera una entrada completa en el registro de auditoría.

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
El campo 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

Referencia de API: Procesar callback
Cuando Matcher procesa un callback, actualiza el estado de la excepción y registra la resolución en la pista de auditoría. Usa el encabezado 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 como failed 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ónMétodo y rutaNotas
Emitir credencialPOST /v1/exceptions/callbacks/credentialsCrea una credencial y retorna el token en bruto una vez (201).
Listar credencialesGET /v1/exceptions/callbacks/credentialsLista los metadatos de credenciales del tenant (nunca los tokens en bruto).
Rotar credencialPOST /v1/exceptions/callbacks/credentials/{credentialId}/rotateSustituye 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 credencialDELETE /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; proporciona externalSystem como una etiqueta legible por el operador para el sistema que este token autentica.
cURL
La respuesta 201 (CredentialSecretResponse) retorna:
CampoDescripción
tokenToken bearer en bruto, expuesto una vez. Configúralo como el valor del encabezado X-Callback-Token en el sistema externo.
credentialIdID sustituto de la credencial emitida (usado para rotar/revocar).
createdAtMomento de emisión (RFC 3339, UTC).
externalSystemLa etiqueta devuelta para confirmación.
webhookUrlHintForma informativa de la URL de callback entrante para configurar externamente; el marcador {exceptionId} se completa por cada callback.
El token en bruto se muestra solo en las respuestas de emisión y rotación. Almacénalo de forma segura al recibirlo — no se puede recuperar nuevamente. Si se pierde o se filtra, rota o revoca la credencial.

Rotar una credencial

cURL
La rotación retorna un nuevo 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
La revocación es terminal: la credencial ya no puede autenticar callbacks entrantes.

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 encabezado X-Signature-256, con el formato sha256=<hex-digest>:
Cada entrega también incluye un encabezado X-Idempotency-Key para que los receptores puedan deduplicar los reintentos. Proceso de verificación:
  1. Calcula el HMAC-SHA256 del cuerpo de la solicitud sin procesar usando el secreto compartido del webhook
  2. Antepón sha256= al hex digest
  3. Compara (en tiempo constante) con el encabezado X-Signature-256
Ejemplo (Node.js):
Ejemplo (Python):

Lista de IPs permitidas

Matcher envía webhooks desde rangos de IP específicos:
Configura tu firewall para permitir estos rangos.

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
Sin reintento para:
  • Respuestas HTTP 4xx (excepto 429)
  • Certificados SSL inválidos
  • Webhook deshabilitado

Mejores prácticas


Verifica siempre la firma HMAC antes de procesar los payloads de webhooks. Esto previene solicitudes falsificadas.
Retorna una respuesta 2xx dentro de 5 segundos. Procesa el evento de forma asíncrona si es necesario.
Los eventos pueden entregarse más de una vez. Usa el ID del evento para deduplicar.
Configura alertas para las tasas de falla de webhooks. Investiga las fallas persistentes de inmediato.
Suscríbete solo a los eventos que necesitas. El filtrado reduce el ruido y la carga de procesamiento.
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.