Combinar adjuntos con documentos mediante join hooks: expresiones target y when, TTL y delay.
A veces las partes de un documento provienen de diferentes fuentes. Piensa en una factura XML que llega vía Peppol y un adjunto PDF entregado por separado, o múltiples adjuntos que pertenecen a la misma factura. Con un join hook, el PSB combina automáticamente estos eventos separados en un único documento.
Un join hook escucha en múltiples topics simultáneamente y reconoce qué eventos pertenecen entre sí. El hook distingue dos tipos de eventos:
Mediante expresiones determinas qué evento es el documento principal (target) y cómo se emparejan los adjuntos (when). En cuanto el PSB encuentra una coincidencia, fusiona los adjuntos con el documento principal y publica un nuevo topic.
El flujo es el siguiente:
SalesInvoiceReceived y AttachmentReceived)target para identificar el documento principalwhen para encontrar una coincidenciaSalesInvoiceJoined)La potencia de los join hooks reside en las expresiones. Escribes dos expresiones: una para identificar el documento principal y otra para emparejar los adjuntos.
La expresión target determina si un evento es el documento principal. Un patrón comúnmente utilizado es la coincidencia por topic:
topic=="SalesInvoiceReceived"
La expresión when vincula un evento matching con el evento target correcto. Aquí comparas campos entre el evento de origen (source) y el evento target (target):
target.id == source.id && target.sender == source.sender
En este ejemplo, los eventos se emparejan si tienen el mismo ID de documento y el mismo remitente.
Nota: todas las expresiones deben estar URL-encoded en la URL de acción. La expresión
topic=="SalesInvoiceReceived"se convierte entopic%3D%3D%22SalesInvoiceReceived%22. No olvides esto, ya que el PSB analiza las expresiones desde la query string.
Registra un hook a través de la API con una acción join://AddAttachment:
{
"id": "1",
"name": "join hook",
"action": "join://AddAttachment?target=topic%3D%3D%22SalesInvoiceReceived%22&when=target.id%20%3D%3D%20source.id%20%26%26%20target.sender%20%3D%3D%20source.sender&ttl=00:15:00&delay=00:30:00",
"topics": [
"AttachmentReceived",
"SalesInvoiceReceived"
],
"publishTopics": [
"SalesInvoiceJoined"
],
"isActive": true
}
La acción sigue el formato:
join://AddAttachment?target={target-expression}&when={when-expression}&ttl={ttl}&delay={delay}
targetwhenttl1.00:00:00 (1 día)*JoinedErrordelayEl array topics del hook debe contener todos los topics en los que el join hook debe escuchar. Esto incluye topics tanto para el documento principal como para los adjuntos.
El campo publishTopics determina en qué topic se publica el documento fusionado. Puedes configurar un webhook o e-mail hook normal en este topic para recibir el resultado.
El ttl (Time to Live) determina cuánto tiempo espera el PSB para encontrar una coincidencia. Si después del período TTL falta el documento principal o el adjunto, el PSB publica un topic de error (*JoinedError). Esto te permite detectar cuándo un conjunto está incompleto.
Establece el TTL en un valor que se ajuste a tu tiempo de respuesta esperado. Si los adjuntos suelen llegar dentro de una hora, un TTL de 01:00:00 es suficiente.
Consejo: configura un webhook o e-mail hook en el topic
*JoinedError. Así recibes una señal cuando falta un adjunto o una factura, lo que te permite actuar a tiempo.
Sin un delay, la fusión comienza en cuanto se encuentran el evento target y un evento matching. Si esperas múltiples adjuntos para el mismo documento, establece un delay. El PSB espera el tiempo especificado después de detectar el evento target y luego fusiona todos los adjuntos emparejados durante ese período de una sola vez.
Supongamos que esperas tres adjuntos PDF para una factura y llegan en un período de 20 minutos. Un delay de 00:30:00 proporciona suficiente margen para recopilar todos los adjuntos.
Una organización recibe facturas vía Peppol (topic SalesInvoiceReceived) y adjuntos PDF acompañantes a través de un canal separado (topic AttachmentReceived). Los adjuntos se emparejan por ID de documento y remitente. Después de la fusión, el documento completo se publica en SalesInvoiceJoined, tras lo cual un webhook lo reenvía al sistema ERP.
La PSB lee las expresiones desde la cadena de consulta de la URL join://AddAttachment. Los caracteres especiales como =, ", espacios y && alteran el análisis si no se codifican, por ejemplo topic%3D%3D%22SalesInvoiceReceived%22 en lugar de la notación sin procesar.
El ttl (Time to Live) es el tiempo máximo de espera para una combinación válida de eventos target y matching. Si ese tiempo expira sin coincidencia, la PSB publica un topic *JoinedError, lo que permite señalar que un conjunto está incompleto e intervenir a tiempo.
Utilice delay cuando espere que varios adjuntos lleguen en un intervalo corto: tras detectar el evento target, la PSB espera a que finalice el delay y luego fusiona todos los adjuntos asociados durante ese periodo en una sola operación. Sin delay, la fusión comienza en cuanto se encuentra un evento matching.
¿Necesitas ayuda para configurar las expresiones correctas? Contacta con TechSupport en [email protected]. Consulta la especificación completa de la API en psb.econnect.eu para todas las opciones de configuración.
Ver la documentación de la API