FTP/SFTP-Pull
Statt einen Webhook aufzurufen können Lieferanten Bestellungen auch in ein FTP- oder SFTP-Verzeichnis ablegen. Orderport ruft das Verzeichnis dann alle 5 Minuten ab, holt neue Dateien, verarbeitet sie und verschiebt sie in ein Archivverzeichnis. Ideal für ältere ERP-Systeme oder Lieferanten, die keine Webhooks aussenden können.
Addon erforderlich: Der FTP/SFTP-Empfang ist als optionales Addon für 89 €/Monat netto buchbar. Aktivieren Sie das Addon unter Einstellungen → Abrechnung.
Funktionsweise
- Sie konfigurieren die FTP-/SFTP-Zugangsdaten Ihres Lieferanten direkt an der Pipeline.
- Alle 5 Minuten verbindet sich Orderport von Hetzner aus zu Ihrem Lieferanten-Server.
- Alle Dateien im konfigurierten Pfad, die dem Datei-Muster entsprechen, werden gelesen.
- Jede Datei wird wie ein Webhook-Payload verarbeitet (Mapping, Transformation, Auslieferung an die konfigurierten Transports).
- Erfolgreich verarbeitete Dateien wandern in das Unterverzeichnis
.processed/auf dem Lieferanten-Server, fehlgeschlagene in.failed/.
Konfiguration
Auf der Pipeline-Bearbeitungsseite finden Sie den Bereich Eingang. Dort können Sie zwischen Webhook und FTP/SFTP-Pull wechseln.
| Feld | Beschreibung |
|---|---|
| Protokoll | SFTP (Port 22, empfohlen) oder FTP (Port 21, unverschlüsselt). |
| Host | Der Server-Hostname Ihres Lieferanten, z. B. ftp.kunde.de. |
| Port | Standard 22 für SFTP, 21 für FTP. |
| Benutzername | Der Login-Name auf dem Lieferanten-Server. |
| Passwort | Wird verschlüsselt in der Datenbank gespeichert. Beim Bearbeiten leer lassen, um das bestehende Passwort beizubehalten. |
| Pfad | Das Verzeichnis, das gepollt werden soll, z. B. /outbox. |
| Datei-Muster | Glob-Pattern wie *.xml, *.json oder order-*.edi. Standard: *.xml. |
| Polling-Intervall | In Minuten. Standard: 5. Häufiger als 5 Minuten ist möglich, aber meist nicht nötig. |
Mit der Schaltfläche Verbindung testen prüfen Sie sofort, ob Login und Pfad korrekt sind. Sie sehen die Antwortzeit in Millisekunden, sobald der Test durchläuft.
Verzeichnis-Konvention
Orderport erstellt im konfigurierten Pfad zwei Unterverzeichnisse, falls noch nicht vorhanden:
/outbox
├── order-1234.xml ← noch nicht verarbeitet
├── order-1235.xml ← noch nicht verarbeitet
├── .processed/ ← erfolgreich verarbeitet
│ └── order-1230.xml
└── .failed/ ← Verarbeitung fehlgeschlagen
└── order-1228.xml
Dateien, deren Name mit einem Punkt beginnt (z. B. .lock), werden ignoriert. So können Lieferanten Dateien sicher als .tmp hochladen und am Ende per Rename veröffentlichen, ohne dass Orderport halbfertige Files greift.
Unterstützte Formate
Der Content-Type wird aus der Dateiendung abgeleitet:
| Endung | Content-Type | Eingangsformat-Beispiele |
|---|---|---|
.xml |
application/xml |
cXML, openTrans |
.json |
application/json |
Shopware 6, Shopify, generisches JSON |
.edi / .edifact |
application/edifact |
EDIFACT |
Die Pipeline muss auf den passenden Eingangstyp konfiguriert sein.
Idempotenz & Duplikate
Orderport schützt vor Doppelverarbeitung auf zwei Ebenen:
- Eindeutiger Polling-Lauf: Es läuft niemals mehr als ein Polling-Job parallel (
withoutOverlapping). - Externe Bestell-ID: Wird in den meisten Eingangsformaten extrahiert. Wiederholte Lieferungen mit gleicher Bestell-ID werden idempotent abgewiesen.
Sicherheit
- Passwörter werden mit
Laravel Crypt(AES-256) verschlüsselt in der Datenbank abgelegt; Klartext ist nie gespeichert. - Verbindungen erfolgen ausschließlich von Orderport zu Ihrem Server (ausgehend). Sie müssen keinen eingehenden Port öffnen.
- Wenn Ihr Lieferant nur Verbindungen aus festen IP-Bereichen erlaubt: Orderport-Cluster-IPs erhalten Sie auf Anfrage.
- Empfehlung: Verwenden Sie einen dedizierten Login-User mit Zugriff nur auf das
outbox/-Verzeichnis.
Audit-Log
Folgende Ereignisse werden im Audit-Log festgehalten:
| Event | Bedeutung |
|---|---|
inbound.ftp_poll_started |
Ein Polling-Lauf wurde gestartet. |
inbound.ftp_file_processed |
Eine Datei wurde erfolgreich verarbeitet. |
inbound.ftp_file_failed |
Eine Datei konnte nicht verarbeitet werden (z. B. Parse-Fehler). |
inbound.ftp_connection_failed |
Die FTP-/SFTP-Verbindung schlug fehl. |
Wann Webhook, wann FTP-Pull?
| Anwendungsfall | Empfehlung |
|---|---|
| Lieferant kann Webhook aufrufen | JSON-Webhook bevorzugen — sofortige Verarbeitung. |
| Lieferant exportiert Dateien aus ERP | FTP/SFTP-Pull. |
| Lieferant ist Ariba/Coupa/cXML-Netzwerk | cXML über JSON-Webhook (XML-Body). |
| Sie haben eine eigene Integration | API-Zugang mit API-Key. |