Das Problem: Rechnungen per E-Mail
Wer kennt das Problem nicht. Lexoffice bietet zwar die Möglichkeit einer E-Mail-Adresse für den Belegempfang. Dazu richtet man in der Regel bei sich eine E-Mail an, die dann per Regel oder serverseitig alles an die lexoffice E-Mail weiterleitet. Bei vielen Unternehmen kann man für den Rechnungsversand eine gesonderte E-Mail angeben. Bei manchen jedoch auch nicht und genau hier fängt das Problem an. Ich muss diese dann manuell an die lexoffice E-Mail weiterleiten oder hochladen. Ein weiteres Problem ist, dass lexoffice auch Bilder als Beleg erfasst. Dies verursacht manuellen Aufwand und es besteht die Möglichkeit, dass E-Mails mit Rechnungen untergehen.
Die Lösung: Automatisierung mit Power Automate
Wir zeigen Dir, wie Du ganz einfach einen Power Automate Cloud Flow erstellst, mit dem Deine Rechnungen im PDF-Form automatisch hochgeladen werden und dies in Outlook als Ereldigt gekennzeichnet wird. Da wir die lexoffice API dazu ansprechen müssen, ist leider Power Automate Premium erforderlich. Die kanpp 14 € / Monat / Benutzer rentieren sich aber ganz schnell.
Los geht's. Erstelle einen Cloud Flow in Power Automate (https://make.powerautomate.com). Gebe dem Flow einen sprechenden Namen wie z.B. "Eingehende Rechnungen per E-Mail an lexoffice übergeben" und wähle als Trigger "When a new email arrives (V3)".

Öffne anschließend die Optionen des Triggers und füge mindestens folgende Optionen hinzu:

Durch den "Subject Filter" und "Only with Attachments" Filter werden nur E-Mails durch den Flow verarbeitet, die potenziell Rechnungen enthalten. Sie müssen also Rechnung im Betreff enthalten und Anhänge haben.
Im nächsten Schritt erstellen wir eine "For each"-Schleife um die Anhänge durchzugehen.

Als nächstes fügen wir eine "Condition" ein um pro Anhang zu prüfen, ob es sich um eine PDF handelt, indem wir pürfen, ob der Dateiname mit .pdf endet.

Im "True"-Zweig passiert nun die Magie und zwar in nur drei Schritten. Als erster brauchen wir ein Composer um das Zeichen " im nächsten Step im Payload nutzen zu können. Hört sich kompliziert an, ist es aber eigentlich nicht und man muss es nur einmal wissen. Im nächsten Screen sind alle drei Steps abgebildet, die einzelnen Einstellungen folgen dann in den nächsten Bildern.

Das Compose stellt uns ein Anführungszeichen im Payload des HTTP-Requests zur Verfügung, welches wir benötigen, um das Multipart-Form-Data zu erstellen, welches wie an die lexoffice API übermitteln wollen.

Im HTTP-Request passiert die eigentliche Magie. Wir geben die URI des API-Endpunktes an. Als Methode kommt POST zum Einsatz und dann müssen wir ein paar Header setzen. Der Header Authorization muss euren API Token enthalten, den ihr über lexoffice generieren könnt. Geht mit diesem API Token sehr umsichtig um, da er sehr mächtig sein kann. Folgt insbsondere auch den Anweisungen von lexoffice zur Nutzung des API Tokens.

Den Payload kopiert ihr euch am besten und fügt ihn bei euch ein.
{
"$content-type": "multipart/form-data",
"$multipart": [
{
"headers": {
"Content-Disposition": "form-data; name=@{outputs('Compose')}type@{outputs('Compose')}"
},
"body": "voucher"
},
{
"headers": {
"Content-Disposition": "form-data; name=@{outputs('Compose')}file@{outputs('Compose')}; filename=@{outputs('Compose')}@{item()?['name']}@{outputs('Compose')}"
},
"body": {
"$content-type": "application/pdf",
"$content": @{item()?['contentBytes']}
}
}
]
}
Im letzten Schritt setzen wir noch ein grünen Haken für "Ereldigt" in der Mail, so dass wir erkennen können, dass die Mail automatisch verarbeitet wurde.

Anmerkungen und Aussichten
Der Flow ist bewusst sehr einfach gehalten. Man könnte ihn erweitern, z.B. um weitere Prüfungen und Fehlerbehandlungen. Außerdem könnte man mit den KI-Funktionen prüfen lassen, ob eine PDF eine Rechnung ist oder nicht. Er funktioniert aber auch so schon effektiv und spart Zeit, weil es einfach ganz alleine funktioniert. Das Besondere ist eigentlich der Payload, den wir nutzen müssen, um das geüwnschte Ergebnis zu liefern, denn Multipart-Form-Data bedarf der speziellen JSON-Notierung, um das gewünschte Ergebnis zu erhalten. Dies braucht häufig Recherche, da es nicht einfach in Dokumentationen zu finden ist. Somit hoffen wir, dass der Artikel dem ein oder anderen helfen mag.