Configurar webhooks en la PSB: topics, seguridad HMAC SHA256 e IP-whitelisting.
Los webhooks son la forma principal de recibir notificaciones en tiempo real de la PSB. Con cada evento relevante (una factura recibida, un cambio de estado, una confirmación de entrega), la PSB envía una solicitud HTTP POST a su endpoint con los detalles del evento.
Usted registra un webhook (un "hook") en la PSB con una URL y un topic. La PSB envía entonces todos los eventos de ese topic a su URL. Cada evento contiene los datos relevantes como payload JSON.
No hay interfaz disponible: actualmente no es posible configurar un hook a través de la interfaz de usuario de la plataforma. Los hooks se configuran a través de la API o del soporte de eConnect. Una interfaz de autoservicio para hooks está en la hoja de ruta (prevista para el T4 2026).
Registre un hook a través de la API:
POST /api/v1/hook
Los principales elementos de configuración:
InvoiceReceived)Nota: evite eliminar y recrear hooks rápidamente para el mismo partyId y topic. Debido a condiciones de carrera en el procesamiento de tareas, esto puede resultar temporalmente en ningún hook activo, lo que causa que los eventos no se entreguen. Espere brevemente después de eliminar un hook antes de crear uno nuevo, o utilice una actualización en lugar de eliminar + crear.
InvoiceReceivedInvoiceSentInvoiceSentErrorInvoiceSentRetryInvoiceResponseReceivedMessageLevelStatusReceivedMessageLevelStatusSentOrderReceivedMLS (Message Level Status) es el sucesor del antiguo MLR y proporciona a la parte remitente información sobre la recepción y el procesamiento de un documento. MLS no está habilitado por defecto y debe configurarse por party a través de la capability reviews en la configuración SMP. Una vez habilitado, la PSB gestiona el MLS de forma automática: como Service Provider receptor, la PSB envía un mensaje MLS de vuelta al remitente tras la recepción y entrega.
Cuando usted envía documentos a través de la PSB, recibe la respuesta MLS de la parte receptora como evento webhook en el topic MessageLevelStatusReceived. El payload contiene entre otros:
documentIdrefToDocumentIddetails.statusCodeAP (accepted), RE (rejected), AB (acknowledged)details.descriptionPara recibir mensajes MLS, el hook de Peppol debe contener el campo mlsType. Los valores posibles son ALWAYS_SEND (siempre enviar MLS de vuelta) y FAILURE_ONLY (solo en caso de rechazo).
Consejo: puede recuperar el documento MLS completo a través de
GET /api/v1-beta/{partyId}/generic/{documentId}/download, pero el payload del webhook generalmente contiene información suficiente.
La PSB protege todas las entregas de webhooks con firmas HMAC SHA256. En cada solicitud, la PSB envía el header:
X-EConnect-Signature: sha256={handtekening}
Para verificar la firma:
X-EConnect-Signature.Compruebe también el campo sentOn en el payload. Si esta marca temporal tiene más de 5 minutos de antigüedad, rechace la solicitud. Esto previene replay attacks en las que una solicitud interceptada se reproduce posteriormente.
Además de la verificación HMAC, la PSB ofrece capas de seguridad adicionales:
104.40.188.59 y 104.47.148.207)Si tiene múltiples hooks configurados, la PSB determina qué hook utilizar según:
A continuación se indican los problemas más comunes con los webhooks y cómo resolverlos.
sha256=sentOn tiene más de 5 minutos de antigüedadHookSentError (véase más abajo); recuperar eventos perdidos a través del endpoint de lotesX-EConnect-Delivery (UUID único) para deduplicaciónEl PSB envía eventos webhook (p. ej. InvoiceReceived al recibir una factura electrónica) al endpoint configurado. Si ese endpoint es inaccesible — por un tiempo de espera, un error SSL o un error DNS como No such host is known — el PSB reintenta con retroceso exponencial durante 5 días (tiempo de espera 100 seg. por intento). Cada intento genera un evento HookSentRetry; tras 5 días sin respuesta 2xx, se emite HookSentError como estado final y el PSB deja de reintentar.
Consecuencia: una factura electrónica recibida no se entregará al cliente mientras el endpoint sea inaccesible, sin que el cliente lo note directamente. Acciones recomendadas:
HookSentError para que un fallo de entrega definitivo se señalice activamente en lugar de pasar desapercibido. Considerar también HookSentRetry para detección temprana.Tome el cuerpo JSON sin procesar de la solicitud, calcule el hash HMAC SHA256 con el secreto que indicó al crear el hook y compárelo con el valor del header X-EConnect-Signature (después del prefijo sha256=). Si coinciden, sabe que la solicitud proviene de la PSB y no fue modificada en tránsito.
Verifique que sentOn no tenga más de 5 minutos de antigüedad. Si la marca de tiempo es demasiado antigua, rechace la solicitud. Esto previene ataques de repetición, donde una solicitud interceptada previamente se reenvía más tarde, incluso si la firma es técnicamente válida.
Implemente un procesamiento idempotente en su lado, ya que la PSB puede entregar un evento más de una vez en casos excepcionales. Además, devuelva rápidamente un código de estado HTTP 2xx: cualquier otra respuesta se considera un error y desencadena un reintento. Para un procesamiento pesado, confirme primero la recepción y luego procese a través de una cola.
¿Prefiere recuperar los documentos en masa? Consulte el batch hook.
Ver los endpoints webhook