Integración SFTP: intercambiar archivos

Intercambiar documentos a través de SFTP: From SFTP (pull), To SFTP (push), estructura de carpetas y configuración.

No toda integración se realiza a través de una conexión API directa. Para sistemas que trabajan con intercambio de archivos, la PSB ofrece integración SFTP. La PSB recupera periódicamente archivos de su servidor SFTP (From SFTP) o deposita documentos recibidos en su servidor SFTP (To SFTP). Ambos flujos se configuran mediante SFTP-hooks.

Puede crear una conexión SFTP a través de la plataforma en Conexiones > Nueva conexión general > SFTP Connector. Las claves de conexión que genere aquí las necesitará posteriormente para la configuración del hook.

From SFTP (pull)

Con From SFTP, la PSB recupera periódicamente archivos de su servidor SFTP y los procesa como documentos. Esto resulta útil si su sistema de origen exporta archivos a una carpeta en un servidor SFTP, por ejemplo facturas en formato UBL o XML.

Estructura de carpetas

From SFTP trabaja con cinco carpetas en su servidor SFTP:

CarpetaFunciónreadDirectoryAquí coloca su sistema los archivos que la PSB debe recuperarpendingDirectoryLos archivos que la PSB está procesando se mueven aquíduplicateDirectoryArchivos que ya fueron procesados anteriormente por la PSB (detección de duplicados basada en el hash del documento)successDirectoryArchivos procesados correctamenteerrorDirectoryArchivos que no pudieron ser procesados

La PSB verifica por defecto cada 15 minutos si hay archivos nuevos en el readDirectory. Este intervalo es configurable.

Configuración del hook

Un hook From SFTP tiene la siguiente action:

sftp://gebruiker:wachtwoord@host:poort?readDirectory=/upload&pendingDirectory=/pending&duplicateDirectory=/duplicate&successDirectory=/success&errorDirectory=/error#md5-fingerprint

El hook también debe contener un publishTopic que indique cómo deben procesarse los archivos recuperados, por ejemplo SendInvoice para el envío de facturas.

Además del publishTopic principal, hacen falta los supporting topics correspondientes para que el hook mueva los archivos a la carpeta de estado correcta:

PublishTopicSupporting topics necesariosSendInvoiceInvoiceSent, InvoiceSentErrorReceiveInvoiceInvoiceReceived, InvoiceReceivedError

Los archivos con un estado intermedio *Retry (p. ej. InvoiceSentRetry) permanecen en pendingDirectory hasta que llega un estado definitivo.

{
  "action": "sftp://user:pass@sftp.bedrijf.nl:22?readDirectory=/out&pendingDirectory=/out/pending&duplicateDirectory=/out/duplicate&successDirectory=/out/success&errorDirectory=/out/error#aa:bb:cc:dd:ee:ff",
  "topics": [],
  "publishTopics": ["SendInvoice"]
}

En cada poll, la PSB verifica el readDirectory, mueve los archivos a pending, los procesa y luego los coloca en success o error. Los archivos que ya fueron procesados anteriormente se mueven al duplicateDirectory.

To SFTP (push)

Con To SFTP, la PSB coloca automáticamente los documentos recibidos en su servidor SFTP. Esto es ideal si su sistema procesa archivos desde una carpeta en lugar de a través de un webhook de API.

Configuración

Para To SFTP solo necesita un inboxDirectory:

{
  "action": "sftp://user:pass@sftp.bedrijf.nl:22?inboxDirectory=/inbox#aa:bb:cc:dd:ee:ff",
  "topics": ["InvoiceReceived"]
}

Cada documento recibido se coloca como archivo en el inboxDirectory. Por defecto, To SFTP sube por documento, no como un lote ZIP periódico. Un envío masivo periódico requiere un batch hook aparte. Opcionalmente, targetDocumentTypeId filtra por un tipo de documento concreto. No es una transformación automática.

PDF y XML en la misma carpeta SFTP (fileNameFilter)

Si el emisor no puede colocar el PDF y el XML en carpetas distintas (ambos archivos llegan a la misma carpeta SFTP), usa el parámetro de consulta fileNameFilter en los hooks SFTP. El parámetro va antes de la huella (#) en la action del hook.

Configura dos hooks From SFTP en el mismo host y la misma carpeta:

HookFiltropublishTopicSupporting topicsXML.xmlSendInvoiceInvoiceSent, InvoiceSentErrorPDF.pdfReceiveAttachmentAttachmentReceived, AttachmentReceivedError

El hook PDF puede ser read-and-delete: entonces solo hace falta un readDirectory y la PSB elimina el archivo tras procesarlo, en lugar de moverlo. También puedes usar las mismas carpetas de estado (pending, success, error, duplicate) que el hook XML.

Tras recuperar ambos archivos, un join hook une el XML y el PDF en un documento combinado (SendInvoiceJoined). Consulta Join hooks.

MD5-fingerprint

Ambos flujos SFTP utilizan un MD5-fingerprint para la verificación del servidor. El fingerprint se encuentra después del signo # en la hook-action y garantiza que la PSB solo se conecte al servidor SFTP correcto. Esto previene ataques man-in-the-middle.

Puede encontrar el MD5-fingerprint de su servidor SFTP en la configuración del servidor o conectándose a través de un cliente SFTP. El formato es una serie de pares hexadecimales separados por dos puntos, por ejemplo aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77:88:99.

La entrega SFTP y la ingesta ERP son hooks distintos

Una entrega SFTP y una ingesta ERP posterior (por ejemplo To SFTP hacia Unit4 ERP CR) son dos hooks distintos que funcionan de forma independiente — no una sola cadena con un estado compartido.

Un documento marcado como descargado en eConnect solo confirma que el hook de entrega ha recogido o colocado el archivo. Por sí solo no dice si el ERP lo ha leído después con éxito.

Para cada hook hay monitorización mediante los topics HookSentError (fallo definitivo) y HookSentRetry (reintento intermedio). Configura por hook una acción de monitorización sobre estos topics, con un mail hook o un webhook secundario.

Ejemplo práctico

Una organización que envía facturas desde su sistema ERP y desea importar facturas recibidas:

  1. Envío (From SFTP): el sistema ERP exporta facturas UBL a /sftp/outbox. La PSB las recupera cada 15 minutos y las envía a través de Peppol.
  2. Recepción (To SFTP): la PSB coloca las facturas recibidas en /sftp/inbox. El sistema ERP lee la carpeta periódicamente e importa los documentos.

Ambos flujos funcionan de forma independiente y pueden configurarse por separado.

La integración SFTP se utiliza frecuentemente en la práctica para conexiones con Unit4 ERP CR y ERP7, donde el intercambio de archivos a través de una carpeta SFTP es el método estándar para intercambiar documentos de facturación.

Puntos de atención

Asegúrese de que el usuario SFTP tenga permisos de escritura en todas las carpetas configuradas. La PSB necesita poder mover archivos entre las carpetas. Verifique también que el firewall de su servidor SFTP permita conexiones entrantes desde las direcciones IP de eConnect.

El intervalo de pull de 15 minutos es estándar. Si necesita un intervalo más corto o más largo, contacte con TechSupport.

Preguntas frecuentes
¿Para qué sirve la huella MD5 tras el carácter # en la acción del hook SFTP?

La huella corresponde al host de su servidor SFTP y garantiza que la PSB solo se conecte al servidor previsto. Así limita el riesgo de ataques man-in-the-middle. El formato son pares hexadecimales separados por dos puntos, como se describe en la documentación.

¿Cuál es la diferencia entre From SFTP y To SFTP?

Con From SFTP, la PSB recupera periódicamente archivos de sus carpetas y los procesa como documentos (por ejemplo, exportar facturas a readDirectory). Con To SFTP, la PSB coloca los documentos recibidos en su inboxDirectory para que su sistema los lea desde una carpeta en lugar de mediante un webhook.

¿Qué permisos debe tener el usuario SFTP?

El usuario debe poder escribir en todas las carpetas configuradas y mover archivos, porque la PSB mueve archivos entre read, pending, success y error, entre otras. Compruebe también que su cortafuegos permita conexiones entrantes desde las direcciones IP de eConnect.

Un documento figura como descargado en eConnect -- ¿el ERP también lo ha leído?

No. Descargado solo confirma que el hook de entrega (To SFTP) ha recogido o colocado el archivo en el servidor SFTP. La ingesta ERP posterior es un hook distinto e independiente. Configura por hook la monitorización con HookSentError y HookSentRetry.


¿Desea saber más sobre el intercambio de documentos a través de la PSB? Consulte la visión general de entrega multi-channel o lea cómo configurar webhooks para notificaciones en tiempo real.

Ver la documentación de la API

Relacionado
Artículos relacionados