Zum Hauptinhalt springen
Integrationen & API

E-Mail-Anhänge mit Microsoft Power Automate importieren

Erstelle einen Workflow für ein freigegebenes Postfach, der PDF-Anhänge mit Power Automate und der REST API zu fynk hochlädt.

Zuletzt aktualisiert Vor 7 Tagen

Mit Microsoft Power Automate und der fynk REST API machst du ein freigegebenes Microsoft-365-Postfach zum Eingang für PDF-Dokumente. Jeder passende Anhang erzeugt ein eigenes Dokument in fynk, mit den Teams und Tags, die du wählst.

Das ist eine individuelle Automatisierung, die du in deiner Microsoft-Umgebung einrichtest und pflegst. Das Beispiel importiert PDF-Anhänge. Es importiert nicht den E-Mail-Text, ordnet E-Mail-Informationen nicht automatisch Metadaten zu und startet keinen Signaturprozess.

Kann ich stattdessen Zapier, Make oder n8n nutzen?

Ja. Derselbe API-basierte Ansatz lässt sich auch in Zapier, Make oder n8n umsetzen: Bei einer eingehenden E-Mail auslösen, jeden PDF-Anhang abrufen, einen Upload-Slot anfordern, die Datei mit den zurückgegebenen Formularfeldern hochladen und das Dokument in fynk erstellen.

Nutze für diese Anfragen die HTTP- oder Webhook-Aktionen der Plattform. Du brauchst nicht für jeden Schritt eine eigene fynk-Aktion. Die unten gezeigten Power-Automate-Ausdrücke und das Multipart-JSON sind spezifisch für Power Automate. Baue die Feldzuordnungen und den Datei-Upload in deiner gewählten Plattform nach.

  • Zapier: Nutze Webhooks by Zapier. Für den Storage-Upload verwendest du die POST-Aktion, die Dateien unterstützt, mit dem Anhang und den zurückgegebenen Formularfeldern. Die Aktion Custom Request kann keine Dateiobjekte senden. Sie eignet sich aber für die JSON-API-Anfragen. Prüfe die Payload-Limits für Webhooks und die Verfügbarkeit in deinem Tarif.
  • Make: Nutze die HTTP-App mit JSON für die fynk-API-Anfragen und multipart/form-data für den Storage-Upload. Ordne jedes zurückgegebene Formularfeld sowie Dateiname und Dateidaten des Anhangs zu.
  • n8n: Nutze den HTTP Request Node. Wähle für den Upload Form-Data, füge die zurückgegebenen Felder als Formularparameter hinzu und den Anhang als n8n-Parameter vom Typ Binary File mit dem Namen file.

Dein E-Mail-Connector muss Zugriff auf den Inhalt der Anhänge bieten. Wende dieselben API-Berechtigungen, Team-Zuweisung, Duplikatvermeidung und Fehlerbehandlung an, die in dieser Anleitung beschrieben sind. Diese Alternativen werden durch die dokumentierten HTTP- und Datei-Upload-Funktionen der Plattformen unterstützt. Dieser Artikel ist eine Anleitung für Power Automate, kein durchgehend getestetes Rezept für alle drei Plattformen.

Bevor du startest

  • Ein fynk-Konto mit Business oder Pro und API-Zugriff sowie ein Eigentümer, der das API-Token erstellt.
  • Eine Microsoft-Power-Automate-Lizenz, die die Premium-HTTP-Aktion erlaubt, und die Berechtigung, die nötigen Connectors in deinem Tenant zu nutzen.
  • Ein freigegebenes Exchange-Online-Postfach und ein Microsoft-365-Verbindungskonto mit Vollzugriff darauf. Bitte deinen Microsoft-365-Administrator, den Zugriff einzurichten und zu bestätigen, dass das Konto das Postfach öffnen kann.
  • Mindestens eine Partei, die in fynk unter Kontoeinstellungen → Meine Parteien eingerichtet ist, und das Team, das importierte Dokumente erhalten soll.

Der Flow stellt für jedes PDF drei Anfragen: einen Upload-Slot anfordern, die Datei auf die zurückgegebene Storage-URL hochladen und dann das fynk-Dokument erstellen.

1. API-Token erstellen

Gehe zu Kontoeinstellungen → API-Integrationen → fynk API → Konfigurieren. Wähle unter API-Tokens die Option Token erstellen. Gib dem Token einen aussagekräftigen Namen und die Rolle Document Manager. Wenn du über die API einen Tag anlegen willst, füge für diesen Einrichtungsschritt Tag Manager hinzu. Kopiere das Token und bewahre es sicher auf. Es wird nur einmal angezeigt.

Infos zu Ablauf, Berechtigungen und API-Versionen des Tokens findest du unter REST API: Erste Schritte. Gleiche die API-Referenz mit deiner konfigurierten API-Version ab, bevor du den Flow in Betrieb nimmst.

Verwende für Anfragen an die fynk API diese Header. Ersetze den Token-Platzhalter durch deinen sicher gespeicherten Token-Wert:

Authorization: Bearer <your-API-token>
Accept: application/json
Content-Type: application/json

Nutze nach Möglichkeit einen Secret Store wie Azure Key Vault. Aktiviere Secure Inputs und Secure Outputs bei Aktionen, die das Token, temporäre Upload-Zugangsdaten oder Dokumentinhalte verarbeiten. Diese Einstellungen verbergen Daten im Ausführungsverlauf. Sie verhindern nicht, dass nachfolgende Aktionen sie nutzen. Schütze, wo möglich, auch die Ausgabe des E-Mail-Triggers. Beschränke, wer den Flow bearbeiten darf.

2. UUIDs von Tag und Team finden

Diese Einrichtungsanfragen kannst du mit einem API-Client oder einem temporären, manuell ausgelösten Flow mit HTTP-Aktionen und den Headern von oben ausführen.

  • Vorhandene Tags finden: GET https://app.fynk.com/v1/api/tags?per_page=100.
  • Teams finden: GET https://app.fynk.com/v1/api/teams?per_page=100.

Kopiere die UUIDs des Tags und des Teams, die du verwenden willst. Folge der Paginierung, wenn die Ergebnisse mehr als eine Seite umfassen. Gibt eine Einrichtungsanfrage einen Berechtigungsfehler zurück, prüfe in der API-Referenz, welche Token-Rollen der Endpunkt braucht.

Um einen neuen Tag anzulegen, sende POST https://app.fynk.com/v1/api/tags mit:

{
  "name": "From Email",
  "color": "#615fff"
}

Merke dir die zurückgegebene UUID. Baue das Anlegen des Tags nicht in den wiederkehrenden Import-Flow ein. Entferne den temporären Einrichtungs-Flow, wenn du fertig bist, und entferne Tag Manager vom Token, wenn du es nicht mehr brauchst. Tags sind optional. Lass tag_uuids in der finalen Anfrage weg, wenn du keinen willst.

3. Freigegebenes Postfach überwachen

Erstelle einen automatisierten Cloud-Flow mit dem Office-365-Outlook-Trigger When a new email arrives in a shared mailbox (V2).

  • Original Mailbox Address: die Adresse deines freigegebenen Postfachs.
  • Folder: Wähle den Posteingang über die Ordnerauswahl. Sein Name kann lokalisiert sein.
  • Include Attachments: Yes.
  • Only with Attachments: Yes.

Füge Apply to each mit der Ausgabe Attachments des Triggers hinzu. Benenne die Schleife in EachAttachment um, bevor du Ausdrücke hinzufügst.

Füge innerhalb der Schleife eine UND-Bedingung mit beiden Prüfungen hinzu:

  • items('EachAttachment')?['isInline'] ist gleich dem booleschen Ausdruck false (nicht dem Text „false“).
  • toLower(items('EachAttachment')?['name']) endet mit .pdf.

Füge alle drei HTTP-Aktionen unten der Reihe nach im Zweig If yes hinzu. Lass If no leer. So werden Inline-Bilder und Nicht-PDF-Anhänge übersprungen. Ein PDF-Dateiname allein garantiert aber nicht, dass der Inhalt ein gültiges PDF ist.

4. Upload-Slot anfordern

Füge eine HTTP-Aktion mit dem Namen Get upload URL hinzu. Die Ausdrücke unten beziehen sich auf ihren internen Namen Get_upload_URL. Passe die Ausdrücke an, wenn dein Designer einen anderen Namen vergibt.

  • Method: POST
  • URI: https://app.fynk.com/v1/api/file-uploads/document-pdf
  • Headers: die fynk-API-Header aus Schritt 1.
  • Body: {}

Die Antwort liefert data.url, data.fields und data.uuid. Verwende die zurückgegebenen Werte für diesen Anhang, statt sie als Konstanten zu speichern: Die Upload-Zugangsdaten sind temporär.

5. PDF hochladen

Füge eine HTTP-Aktion mit dem Namen Upload PDF hinzu. Setze die Methode auf POST und verwende diese URI:

@{body('Get_upload_URL')?['data']?['url']}

Lass die HTTP-Header leer. Sende vor allem nicht dein fynk-Bearer-Token an die Storage-URL und setze die Multipart-Boundary nicht manuell. Verwende diesen Body:

{
  "$content-type": "multipart/form-data",
  "$multipart": [
    {
      "headers": {
        "Content-Disposition": "form-data; name=\"key\""
      },
      "body": "@{body('Get_upload_URL')?['data']?['fields']?['key']}"
    },
    {
      "headers": {
        "Content-Disposition": "form-data; name=\"acl\""
      },
      "body": "@{body('Get_upload_URL')?['data']?['fields']?['acl']}"
    },
    {
      "headers": {
        "Content-Disposition": "form-data; name=\"Content-Type\""
      },
      "body": "@{body('Get_upload_URL')?['data']?['fields']?['Content-Type']}"
    },
    {
      "headers": {
        "Content-Disposition": "form-data; name=\"X-Amz-Security-Token\""
      },
      "body": "@{body('Get_upload_URL')?['data']?['fields']?['X-Amz-Security-Token']}"
    },
    {
      "headers": {
        "Content-Disposition": "form-data; name=\"X-Amz-Algorithm\""
      },
      "body": "@{body('Get_upload_URL')?['data']?['fields']?['X-Amz-Algorithm']}"
    },
    {
      "headers": {
        "Content-Disposition": "form-data; name=\"X-Amz-Credential\""
      },
      "body": "@{body('Get_upload_URL')?['data']?['fields']?['X-Amz-Credential']}"
    },
    {
      "headers": {
        "Content-Disposition": "form-data; name=\"X-Amz-Date\""
      },
      "body": "@{body('Get_upload_URL')?['data']?['fields']?['X-Amz-Date']}"
    },
    {
      "headers": {
        "Content-Disposition": "form-data; name=\"policy\""
      },
      "body": "@{body('Get_upload_URL')?['data']?['fields']?['policy']}"
    },
    {
      "headers": {
        "Content-Disposition": "form-data; name=\"X-Amz-Signature\""
      },
      "body": "@{body('Get_upload_URL')?['data']?['fields']?['X-Amz-Signature']}"
    },
    {
      "headers": {
        "Content-Disposition": "form-data; name=\"file\"; filename=\"@{items('EachAttachment')?['name']}\""
      },
      "body": "@base64ToBinary(items('EachAttachment')?['contentBytes'])"
    }
  ]
}

Sende jedes Formularfeld, das die Antwort auf die Upload-Slot-Anfrage zurückgibt, mit exakt diesem Namen und Wert. Das Beispiel enthält X-Amz-Security-Token. Verwendet deine API-Antwort andere Felder, passe die Multipart-Einträge entsprechend an. Der Datei-Teil muss der letzte bleiben.

Der Datei-Body muss binär sein. Im JSON oben ist @base64ToBinary(...) ein vollständiger Ausdruck. Ändere ihn nicht in eine String-Interpolation mit @{...}. Wenn du ihn über den Expression-Tab des Designers eingibst, gib base64ToBinary(items('EachAttachment')?['contentBytes']) ohne das führende @ ein.

6. Dokument in fynk erstellen

Füge eine HTTP-Aktion mit dem Namen Create document hinzu, die nur nach erfolgreichem Upload ausgeführt wird.

  • Method: POST
  • URI: https://app.fynk.com/v1/api/documents/create-from-pdf
  • Headers: die fynk-API-Header aus Schritt 1.

Verwende diesen Body und ersetze die Platzhalter für Tag und Team durch echte UUIDs:

{
  "file_upload_uuid": "@{body('Get_upload_URL')?['data']?['uuid']}",
  "file_name": "@{items('EachAttachment')?['name']}",
  "initial_stage": "draft",
  "tag_uuids": [
    "<tag-uuid>"
  ],
  "team_uuids": [
    "<team-uuid>"
  ]
}

Füge bei Bedarf weitere Team-UUIDs zum Array hinzu. Gib die gewünschten Teams explizit an. Konten, die eine Team-Zuweisung verlangen, können Anfragen ohne Teams ablehnen.

Verwende draft für Dokumente, an denen noch gearbeitet werden muss. Für bereits abgeschlossene Verträge verwendest du stattdessen done. Diese Einstellung startet keine Unterzeichnung und fügt dem hochgeladenen PDF keine Signaturen hinzu.

7. Den kompletten Flow testen

  1. Sende ein kleines, nicht vertrauliches PDF an das freigegebene Postfach.
  2. Prüfe, ob alle drei HTTP-Aktionen erfolgreich sind. Im Beispiel des Kunden lieferte der Upload-Slot 200 und der Storage-Upload 204.
  3. Öffne das erstellte Dokument in fynk. Prüfe Inhalt, Dateiname, Phase, Tag und Team-Zugriff.
  4. Sende eine E-Mail mit zwei PDFs und einem Inline-Bild. Prüfe, ob zwei Dokumente erstellt werden und das Bild übersprungen wird.
  5. Teste einen Nicht-PDF-Anhang und einen fehlgeschlagenen Import. Prüfe dann, ob dein Wiederherstellungsprozess funktioniert, ohne erfolgreiche Dokumente zu duplizieren.

Bevor du es als produktiven Eingang nutzt

  • Duplikate vermeiden: Füge einen dauerhaften Verarbeitungsdatensatz hinzu, der über Postfach, Nachrichten-ID und Anhang-ID identifiziert wird. Speichere nach erfolgreichem Import die UUID des erstellten fynk-Dokuments. Der einfache Flow oben hat keine Deduplizierung. Ein Timeout nach der Erstellung kann trotzdem bedeuten, dass ein Dokument erstellt wurde. Gleiche das Ergebnis ab, bevor du erneut sendest.
  • Fehler pro Anhang behandeln: Füge einen Fehlerbehandlungs-Scope mit „Configure run after“ für fehlgeschlagene oder abgelaufene Aktionen hinzu und benachrichtige den Flow-Eigentümer. Erfasse erfolgreiche und fehlgeschlagene Anhänge getrennt, damit ein einzelner Fehler keinen kompletten Neuimport erfordert.
  • Wiederholungen planen: Beachte die Retry-After-Antwort von fynk bei Rate-Limits. Wiederhole die Dokumenterstellung nicht blind, und fordere einen neuen Upload-Slot an, wenn dessen temporäre Zugangsdaten abgelaufen sind.
  • Anhang-Limits prüfen: Teste realistische Dateigrößen und Mengen gegen die Limits des Microsoft-Connectors und der fynk API. Passwortgeschützte oder verschlüsselte Dateien müssen separat getestet werden. Dieses Beispiel hat keinen Schritt zur Passwortbehandlung.
  • Verantwortliche Person festlegen: Überwache den Ablauf des Tokens und den Zustand der Postfachverbindung. Archiviere oder verschiebe E-Mails erst, wenn bestätigt ist, dass alle vorgesehenen Anhänge importiert wurden.

Für stark genutzte Postfächer empfiehlt die Connector-Dokumentation von Microsoft, den Inhalt der Anhänge separat abzurufen, um Trigger-Timeouts zu reduzieren. Setze in dieser Variante Include Attachments auf No und verwende Get Attachment (V2) innerhalb der Schleife mit Nachrichten-ID, Anhang-ID und Adresse des freigegebenen Postfachs. Ersetze den Inhaltsausdruck des Uploads durch den Inhalt, den diese Aktion zurückgibt. Das Beispiel oben geht davon aus, dass der Inhalt der Anhänge im Trigger enthalten ist.

Fehlerbehebung

  • „Root folder not found“: Prüfe den Vollzugriff für das Konto der Outlook-Verbindung, warte, bis die Berechtigungen übernommen sind, verbinde dich dann neu und wähle den Postfachordner erneut aus.
  • 401 oder 403 von fynk: Prüfe Bearer-Token, Ablauf, API-Zugriff und Rollen.
  • 422 mit Hinweis auf Team-UUIDs: Gib gültige Team-UUIDs in team_uuids an und prüfe die Antwort auf weitere Validierungsfehler.
  • Ungültiges PDF oder 409 bei der Erstellung: Prüfe, ob der Upload erfolgreich war, die Quelle ein gültiges PDF ist und der Multipart-Datei-Body den binären Ausdruck verwendet.
  • Storage-Upload abgelehnt: Prüfe, ob alle zurückgegebenen Formularfelder vorhanden, unverändert und nicht abgelaufen sind. Fordere bei Bedarf einen neuen Slot an.
  • Ausdrucks- oder Eingabe-Validierungsfehler: Prüfe Aktionsnamen, Schleifennamen und JSON-Syntax. Namen wie Get_upload_URL_2 brauchen passende Ausdrücke.
  • Eingaben oder Ausgaben im Ausführungsverlauf verborgen: Das ist bei aktivierter sicherer Protokollierung zu erwarten. Verwende nicht vertrauliche Testdateien und prüfe Statuscodes und Fehlermeldungen, ohne Tokens oder Upload-Zugangsdaten offenzulegen.

Weiterführende Ressourcen

War dies hilfreich?

Brauchen Sie noch Hilfe? Team fragen