Dateianhänge sind in Automatisierungen kein normales Datenfeld
Dateianhänge kippen Automatisierungen, ohne einen Fehler zu erzeugen: Größenlimits, Base64, Signaturbilder, die als Anhang zählen, Downloadlinks statt Dateien und Namenskollisionen im Zielordner. Was dabei schiefgeht und wie wir Anhänge stattdessen durch ein Szenario schleusen.
Dateianhänge sind in Automatisierungen kein normales Datenfeld
Bei einem Logistikkunden zieht eine Automatisierung seit anderthalb Jahren Lieferscheine aus einem Sammelpostfach, legt das PDF im Dokumentensystem ab und meldet die Sendungsnummer an die Auftragsverwaltung. Im Frühjahr fehlten innerhalb einer Woche vierzehn Lieferscheine im Archiv. Im Ausführungslog stand kein Fehler, die Mails waren als verarbeitet markiert, und aufgefallen ist die Lücke vier Wochen später beim Abgleich mit den Frachtrechnungen.
Der Spediteur hatte seinen Scanner ersetzt. Aus 400 KB großen PDFs wurden 28 MB Farbscans. Ab dieser Größe lief der Upload ins Dokumentensystem in einen Timeout, und was zurückkam, war keine Fehlermeldung, sondern eine leere Antwort.
Ein Anhang wandert durch jedes Modul, ein Textfeld nicht
Eine Rechnungsnummer kostet im Szenario nichts. Ein Anhang ist eine Datei, die zwischen den Modulen mitgeschleppt wird, und die meisten Plattformen kodieren sie für den Transport als Base64. Das vergrößert die Datenmenge um rund ein Drittel. Aus einem 28 MB Scan werden knapp 38 MB, die während der gesamten Ausführung im Arbeitsspeicher liegen.
Die Grenzen dafür stehen an drei verschiedenen Stellen und selten in derselben Dokumentation: was die Plattform pro Ausführung an Daten hält, was ein Webhook als Payload annimmt, und was das Zielsystem beim Upload akzeptiert. Beim Versand kommt das Postfach dazu, das bei den meisten Anbietern um 25 MB pro Nachricht inklusive Kodierung dichtmacht. Gebaut und getestet wird dagegen mit der einen Beispieldatei, die beim Entwickeln gerade im Downloadordner lag, und die hat 200 KB.
Wo es in der Praxis kippt
Die Dateigröße ist der offensichtliche Fall. Die anderen sind unauffälliger.
Fast jedes Szenario greift auf den ersten Anhang zu. Schickt ein Absender zwei Lieferscheine in einer Mail, verschwindet der zweite ohne Spur.
Signaturen zählen als Anhänge. Firmenlogo, Social-Media-Icon, die eingebettete Grafik aus der Fußzeile: technisch sind das Dateien mit einer Content-ID, und eine Automatisierung, die den ersten Anhang nimmt, legt regelmäßig ein 4 KB großes PNG im Rechnungsordner ab.
Immer öfter ist der Anhang gar keine Datei. Größere Absender stellen Belege in ein Portal und schicken einen Downloadlink mit Ablaufdatum. Die Mail hat null Anhänge und ist trotzdem ein Vorgang, der bearbeitet werden muss.
Weitergeleitete Mails sind ein eigener Fall. Je nach Programm hängt der Beleg dann nicht mehr an der Nachricht, sondern steckt in der eingebetteten Originalmail, und die Automatisierung sieht eine Datei namens Nachricht.eml, mit der sie nichts anfangen kann.
Dann sind da die Dateinamen. Schrägstriche aus dem Rechnungsdatum, Namen jenseits der Zeichengrenze des Zielsystems, vor allem aber identische Namen: wenn jeder Absender seine Datei Rechnung.pdf nennt und die Automatisierung sie ohne eigenes Präfix in denselben Ordner schreibt, überschreibt sie sich selbst. Im Archiv liegt dann eine Datei, wo zwölf liegen sollten.
Und es gibt Dateien, die formal sauber ankommen und trotzdem nichts liefern. Der Scan ohne Textebene, aus dem die Feldextraktion leere Werte zieht. Das ZIP-Archiv mit vier Lieferscheinen darin, das im Dokumentensystem als ein Dokument landet.
Warum das monatelang niemandem auffällt
Keine dieser Situationen erzeugt einen roten Ausführungsstatus. Eine Mail ohne Anhang ist ein gültiger Zustand, ein 4 KB großes PNG eine gültige Datei, ein überschriebenes Dokument ein erfolgreicher Upload. Die Automatisierung meldet grün, und niemand vergleicht am Monatsende, ob so viele Dokumente im Archiv liegen wie Vorgänge im Postfach ankamen.
Fehler fallen auf, weil etwas rot wird. Diese Fälle werden nie rot. Gefunden werden sie von einem Menschen, der aus einem anderen Grund zwei Zahlen nebeneinanderlegt.
Was wir stattdessen bauen
Die Datei verlässt das Szenario im ersten Schritt. Sie wandert in einen Speicher, S3, Sharepoint oder wo die Dokumente ohnehin liegen, und ab da transportiert der Workflow nur noch Pfad oder ID. Damit fallen Speichergrenzen und Base64 aus der Rechnung, und ein Wiederholungsversuch muss die Datei nicht erneut durch fünf Module schieben.
Größe und Dateityp stehen in den Metadaten der Mail, bevor der Download beginnt. Alles über einer bewusst gesetzten Grenze bekommt einen eigenen Zweig mit Meldung an einen Menschen, statt mitten im Upload zu scheitern. Für die Auswahl der richtigen Datei verwenden wir einen Positiv-Filter auf application/pdf statt einer Liste von Ausschlussregeln, und Anhänge mit Content-ID fliegen raus, weil das die eingebetteten Signaturbilder sind.
Den Dateinamen vergibt die Automatisierung selbst: Datum, Message-ID und der bereinigte Originalname. Der Name ist damit eindeutig, und man sieht der Datei später noch an, aus welcher Mail sie stammt.
Der Fall ohne Anhang braucht einen eigenen Pfad. Bei dem Logistikkunden prüft der inzwischen, ob im Text ein Downloadlink steht, und legt sonst eine Aufgabe für die Disposition an, statt die Mail still als erledigt zu markieren.
Dazu kommt eine Zählung, die den Fehler sichtbar macht, wenn er trotzdem passiert. Einmal am Tag legt ein kleiner Ablauf zwei Zahlen nebeneinander: wie viele Mails als verarbeitet markiert wurden und wie viele Dokumente im Zielordner dazugekommen sind. Weichen sie voneinander ab, geht eine Nachricht raus. Das ist unelegant und hätte die vierzehn Lieferscheine am zweiten Tag gefunden statt nach vier Wochen.
Getestet wird mit den Extremen, die real vorkommen: ein 30 MB Scan, eine Mail mit zwölf Anhängen, eine Mail, die außer einem Signaturlogo nichts enthält, zwei Dateien mit identischem Namen. Das dauert einen Nachmittag.
Der Umbau hat bei dem Kunden gut einen Tag gedauert. Die vierzehn fehlenden Lieferscheine haben deutlich mehr gekostet, weil zwei davon in einer Reklamation gebraucht wurden und niemand mehr belegen konnte, wann welche Palette angekommen ist.