Externer User Task
Überblick
Der Externe User Task ermöglicht es, Aufgaben an Personen außerhalb von Pantarey zu vergeben – ohne dass diese einen Benutzeraccount benötigen. Externe Personen erhalten einen sicheren Link und können darüber Freigaben erteilen, Dokumente prüfen, Formulare ausfüllen oder individuell gestaltete Seiten nutzen.
So lassen sich Freigabe- und Abstimmungsprozesse mit Kunden, Lieferanten oder Partnern direkt in den eigenen Workflow integrieren – vollständig automatisiert und nachvollziehbar.
Warum das hilfreich ist
Externe Personen werden direkt in den Prozess eingebunden, ohne Pantarey-Konto und ohne manuellen Aufwand. Das beschleunigt Abstimmungen und eliminiert Medienbrüche.
Wann wird der Externe User Task eingesetzt?
| Anwendungsfall | Beschreibung |
|---|---|
| Freigaben durch Externe | Ein Kunde oder Vorgesetzter genehmigt einen Auftrag per Klick. |
| PDF-Prüfung | Eine Rechnung oder ein Vertrag wird zur Prüfung bereitgestellt. |
| Formulare für Externe | Daten werden von externen Personen erfasst (z. B. Kontaktdaten, Rückmeldungen). |
| Kundeninteraktion | Individuelle Seiten für Bestellbestätigungen, Statusabfragen oder Feedback. |
Konfiguration im Prozess-Designer
Der Externe User Task wird im Prozess-Designer als Aktivität eingefügt. Im Properties-Panel stehen folgende Einstellungen zur Verfügung:
- Empfänger: E-Mail-Adresse der externen Person (kann dynamisch aus Prozessdaten befüllt werden).
- Benachrichtigungskanal: Auswahl des Versandwegs (siehe unten).
- HTML-Vorlagen: Drei individuell gestaltbare Seiten (Aufgabenseite, Erfolgsseite, Bereits-erledigt-Seite).
- Input-Parameter: Daten, die in den Vorlagen als Platzhalter zur Verfügung stehen.
Ein Assistent (Wizard) führt Schritt für Schritt durch die Konfiguration.
Benachrichtigungskanäle
Die externe Person wird über einen der folgenden Kanäle benachrichtigt:
| Kanal | Beschreibung |
|---|---|
| E-Mail (intern) | Versand über die interne Pantarey-E-Mail-Infrastruktur. |
| SMTP | Versand über einen eigenen Mailserver (SMTP-Konfiguration erforderlich). |
| Office 365 | Versand über Microsoft Graph (Microsoft 365-Integration erforderlich). |
| Microsoft Teams | Benachrichtigung über eine Teams-Nachricht mit Link zur Aufgabe. |
Dynamische Werte in den Versandfeldern
Alle Eingabefelder der Benachrichtigungskonfiguration – Empfänger, Absender, Betreff, E-Mail-Text, Teams-Nachricht sowie sämtliche Credentials (SMTP, Office 365, Teams) – können dynamisch aus Prozessdaten befüllt werden.
Hierfür wird die Pantarey-Platzhalter-Syntax mit runden Klammern verwendet:
$(pfad.zum.feld)
Nicht mit Handlebars verwechseln
In den Versandfeldern greift nicht Handlebars ({{…}}), sondern ausschließlich die $(…)-Syntax. Handlebars wird nur in den HTML-Vorlagen (Aufgaben-, Erfolgs-, Bereits-erledigt-Seite) sowie in Betreff und E-Mail-Text ausgewertet.
Datenzugriff
Die Auflösung erfolgt gegen den kombinierten Scope aus Input-Parameter-Root und dem Business-Payload unter data:
- Felder, die direkt auf der Wurzel des Input-Parameters liegen, sind per Kurzform erreichbar:
$(recipient). - Felder aus dem Business-Payload werden über ihren Pfad angesprochen:
$(kunde.email). - Bei Namenskollisionen gewinnt die Wurzel des Input-Parameters.
Empfohlenes Muster
Der Business-Payload bleibt unter data, Meta-Felder (Empfänger, Absender, Credentials) werden explizit auf der Wurzel abgelegt:
{
"data": $,
"recipient": kunde.email,
"senderAddress": "noreply@firma.de"
}
Im Properties-Panel des Externen User Tasks wird dann eingetragen:
| Feld | Wert |
|---|---|
| Empfänger | $(recipient) |
| Absender | $(senderAddress) |
| Betreff | Freigabe für $(kunde.name) |
Weitere Anwendungsfälle
- Tenant-spezifische SMTP-Credentials pro Prozessinstanz:
$(smtpHost),$(smtpUser),$(smtpPass). - Empfänger aus einer Liste im Business-Payload:
$(kunde.email)(Kurzform für$(data.kunde.email), sofernkundenicht auch auf der Wurzel existiert). - Mehrstufige Freigaben mit unterschiedlichen Absendern je Stufe – der Wert wird im
inputParameterder jeweiligen Aktivität gesetzt.
Mehrere Empfänger (CC/BCC)
Für die Kanäle SMTP und Office 365 stehen im Dialog „Versandweg ändern" neben dem Empfänger-Feld zusätzlich die optionalen Felder CC und BCC zur Verfügung. Damit lassen sich weitere Adressaten in Kopie oder Blindkopie einbinden, ohne dass mehrere Aktivitäten hintereinander geschaltet werden müssen.
Nur SMTP und Office 365
Beim internen Pantarey-Kanal sind CC und BCC nicht möglich. Die Felder werden im Dialog nicht angeboten und beim Versand nicht berücksichtigt. Microsoft Teams versendet ohnehin keine E-Mail, sondern eine Chat-Nachricht.
Was in den Feldern eingetragen werden darf
Alle drei Felder (Empfänger, CC, BCC) unterstützen die gleichen Eingabeformen:
-
Einzelne Adresse
text max@firma.de -
Mehrere Adressen, getrennt mit Komma oder Semikolon
text max@firma.de, chef@firma.de; archiv@firma.de -
Platzhalter (aufgelöst aus dem Input-Parameter, siehe Datenzugriff)
text $(email) -
Mehrere Platzhalter kombiniert
text $(chef), $(vertreter) -
Platzhalter und feste Adressen gemischt
text $(email), archiv@firma.de
Platzhalter auf Listen-Felder
Zeigt ein Platzhalter auf ein Array im Input-Parameter, wird das Array vollständig übernommen. Damit kann eine Empfängerliste komplett aus dem Prozess-Payload gesteuert werden.
Beispiel — inputParameter (JSONata):
{
"data": $,
"hauptempfaenger": auftrag.verantwortlicher.email,
"cc_liste": auftrag.beteiligte.email
}
Ergebnis im Input-Parameter:
{
"hauptempfaenger": "max@firma.de",
"cc_liste": ["chef@firma.de", "archiv@firma.de"]
}
Einträge im Dialog:
| Feld | Wert |
|---|---|
| Empfänger | $(hauptempfaenger) |
| CC | $(cc_liste) |
| BCC | $(cc_liste), compliance@firma.de |
Hinweise zum Verhalten
- CC und BCC dürfen leer bleiben – das ist kein Fehler. Nur das Empfänger-Feld muss nach der Auflösung mindestens eine gültige Adresse enthalten.
- Innerhalb eines Feldes werden doppelte Adressen automatisch entfernt.
- Zwischen den Feldern wird nicht dedupliziert: Steht eine Person sowohl im Empfänger- als auch im CC-Feld, erhält sie die E-Mail zweimal.
- Platzhalter-Pfade sind groß-/kleinschreibungsempfindlich.
$(email)und$(Email)sind unterschiedliche Pfade. - E-Mail-Adressen werden intern auf Kleinschreibung normalisiert.
Typische Fehlermeldungen
Der Task bricht mit einer Fehlermeldung ab, wenn die Empfängerfelder nicht sauber aufgelöst werden können. Die Meldungen kommen in englischer Sprache aus dem System und lauten z. B.:
Field "To" contains an unresolved placeholder ("$(chefmail)"). Please check the placeholder path and the input parameter data.
Der Platzhalter-Pfad existiert im Input-Parameter nicht. Typischer Fall: Tippfehler im Pfad oder Feld heißt im Payload anders.
Field "To" contains "undefined" — the placeholder path exists but has no value. Please check the input parameter data.
Der Pfad existiert, der Wert ist aber null oder undefined. Häufig, wenn ein Feld im Vorprozess nicht gesetzt wurde.
Field "BCC" contains "max mustermann" — this is not a valid email address (missing @).
Ein Token ist keine gültige E-Mail-Adresse. Häufig, wenn statt einer Adresse ein Name oder eine Zahl im Payload steht.
External User Task "Freigabe einholen": no To recipient after placeholder resolution — please check the recipient field and the input parameter data.
Das Empfänger-Feld ist nach der Auflösung leer. Tritt z. B. auf, wenn $(email) ausschließlich auf einen leeren String oder ein leeres Array zeigt.
Enthält ein aufgelöster Wert geschweifte Klammern ({ oder }), wird der Versand ebenfalls abgebrochen. Das ist ein Hinweis darauf, dass statt einer Adresse versehentlich ein ganzes Objekt in den Platzhalter geschrieben wurde – typischerweise ein Pfad wie $(kunde) statt $(kunde.email).
Die drei HTML-Vorlagen
Jeder Externe User Task verfügt über drei individuell gestaltbare HTML-Seiten:
Aufgabenseite (Page Template)
Die Hauptseite, die der externen Person angezeigt wird. Hier werden Informationen dargestellt, Dokumente eingebettet und Aktionen (z. B. Genehmigen/Ablehnen) bereitgestellt.
Erfolgsseite (Success Template)
Wird angezeigt, nachdem die Aufgabe erfolgreich abgeschlossen wurde – z. B. nach dem Klick auf „Genehmigen". Typischerweise enthält sie eine Bestätigung oder Danksagung.
Bereits-erledigt-Seite (Completed Template)
Wird angezeigt, wenn die externe Person den Link erneut öffnet und die Aufgabe bereits abgeschlossen ist. Damit wird verhindert, dass eine Aufgabe doppelt bearbeitet wird.
Platzhalter und Template-Syntax
Die HTML-Vorlagen unterstützen drei Arten von Platzhaltern, die beim Rendern der Seite automatisch ersetzt werden:
| Ebene | Syntax | Zweck |
|---|---|---|
| Handlebars-Variablen | {{variablenname}} |
Dynamische Daten aus dem Input-Parameter |
| System-Platzhalter | %%PLATZHALTER%% |
Vom System bereitgestellte Werte (URLs, Dateien) |
| Action-Buttons | data-action="..." |
Aktionen, die an den Prozess zurückgemeldet werden |
Handlebars-Variablen
Die Vorlagen verwenden Handlebars als Template-Engine. Alle Variablen aus dem Input-Parameter der Aktivität stehen in den Vorlagen zur Verfügung.
Einfache Variablen
<p>Sehr geehrte/r {{kundenname}},</p>
<p>Ihre Bestellung Nr. {{bestellnummer}} ist eingegangen.</p>
Verschachtelte Objekte (Dot-Notation)
Werte aus verschachtelten Objekten werden mit Punktnotation angesprochen:
<p>Rechnungsempfänger: {{rechnung.empfaenger.name}}</p>
<p>Betrag: {{rechnung.betrag}}</p>
HTML-Ausgabe ohne Escaping (Triple-Stache)
Standardmäßig werden Sonderzeichen escaped. Mit dreifachen geschweiften Klammern wird der Wert als HTML ausgegeben:
<div>{{{formatierterText}}}</div>
Bedingte Anzeige
{{#ifEquals status "dringend"}}
<div style="color: red; font-weight: bold;">⚠️ Dringende Freigabe erforderlich!</div>
{{/ifEquals}}
{{#greaterThan betrag 5000}}
<p>Hinweis: Beträge über 5.000 € benötigen die Freigabe der Geschäftsleitung.</p>
{{/greaterThan}}
Verfügbare Handlebars-Helper
Alle verfügbaren Helper für Datum, Zahlen, Bedingungen, Text, QR-Code und mehr sind in der Handlebars-Helper-Referenz dokumentiert.
Kurzbeispiel – QR-Code für Überweisungsdaten:
<img src="{{{qrCode (buildString "BCD\n001\n1\nSCT\n" bic "\n" empfaengerName "\n" iban "\nEUR" betrag "\n\n\nRechnung " rechnungsnummer)}}}" width="200" />
System-Platzhalter
System-Platzhalter werden mit doppelten Prozentzeichen (%%...%%) gekennzeichnet und vom System automatisch ersetzt. Sie sind unabhängig von Handlebars.
%%EXTERNAL_URL%% — Link zur Aufgabenseite
Enthält die eindeutige URL zur externen Aufgabenseite. Wird typischerweise in der Benachrichtigungs-E-Mail verwendet:
<a href="%%EXTERNAL_URL%%" style="display: inline-block; background: #ec7404; color: white; padding: 12px 24px; border-radius: 8px; text-decoration: none;">
Zur Aufgabe
</a>
%%FILE:variablenname%% — Sichere Datei-URL
Erzeugt eine sichere Proxy-URL zu einer Datei, die im Input-Parameter referenziert ist. Damit können Dokumente eingebettet oder zum Download bereitgestellt werden.
PDF im iFrame anzeigen:
<iframe src="%%FILE:rechnungPdf%%" width="100%" height="600px" style="border: none;"></iframe>
Bild einbetten:
<img src="%%FILE:produktbild%%" alt="Produktfoto" style="max-width: 400px;" />
Download-Link:
<a href="%%FILE:vertragsdokument%%">Vertrag herunterladen</a>
Dot-Notation wird unterstützt, um auf verschachtelte Dateiobjekte zuzugreifen:
<iframe src="%%FILE:auftrag.anlage_pdf%%" width="100%" height="500px"></iframe>
Voraussetzung für %%FILE%%
Die referenzierte Variable muss im Input-Parameter ein Dateiobjekt mit referenceId und contentType enthalten. Dies ist typischerweise das Ergebnis eines Datei-Uploads oder einer PDF-Generierung im vorherigen Prozessschritt.
Action-Buttons
Buttons mit dem HTML-Attribut data-action werden automatisch in Formulare umgewandelt, die die gewählte Aktion an den Prozess zurückmelden. Die Action-ID (z. B. approve, reject) wird als Ergebnis an den weiteren Prozessverlauf weitergegeben und kann z. B. in einem Gateway als Entscheidungsgrundlage eingesetzt werden.
<button data-action="approve" style="background: #22c55e; color: white; padding: 12px 24px; border: none; border-radius: 8px; cursor: pointer; font-size: 16px;">
✅ Genehmigen
</button>
<button data-action="reject" style="background: #ef4444; color: white; padding: 12px 24px; border: none; border-radius: 8px; cursor: pointer; font-size: 16px;">
❌ Ablehnen
</button>
Die Action-IDs sind frei wählbar und können beliebig benannt werden (z. B. approve, reject, request_info, escalate).
Vollständiges Beispiel — Freigabe mit PDF-Ansicht
Das folgende Beispiel zeigt eine komplette Aufgabenseite, die alle drei Platzhalter-Ebenen kombiniert: Handlebars-Variablen für dynamische Daten, %%FILE%% für die PDF-Einbettung und data-action-Buttons für die Rückmeldung an den Prozess.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Freigabe angefordert</title>
</head>
<body style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; background: #f8fafc;">
<div style="background: white; border-radius: 12px; padding: 32px; box-shadow: 0 1px 3px rgba(0,0,0,0.1);">
<h1 style="color: #1e293b; margin-bottom: 8px;">Freigabe angefordert</h1>
<p style="color: #64748b;">Erstellt am {{currentDate "de-DE" "Europe/Berlin"}}</p>
<div style="background: #f1f5f9; border-radius: 8px; padding: 16px; margin: 24px 0;">
<p><strong>Antragsteller:</strong> {{antragsteller}}</p>
<p><strong>Bestellnummer:</strong> {{bestellnummer}}</p>
<p><strong>Betrag:</strong> {{currency_eur betrag}}</p>
</div>
{{#greaterThan betrag 5000}}
<div style="background: #fef3c7; border-left: 4px solid #f59e0b; padding: 12px 16px; border-radius: 4px; margin: 16px 0;">
⚠️ Beträge über 5.000 € benötigen die Freigabe der Geschäftsleitung.
</div>
{{/greaterThan}}
<h2 style="color: #334155; margin-top: 32px;">Dokument</h2>
<iframe src="%%FILE:rechnungPdf%%" width="100%" height="500px"
style="border: 1px solid #e2e8f0; border-radius: 8px;">
</iframe>
<div style="display: flex; gap: 12px; margin-top: 32px; justify-content: center;">
<button data-action="approve"
style="background: #22c55e; color: white; padding: 14px 32px; border: none; border-radius: 8px; cursor: pointer; font-size: 16px; font-weight: 600;">
✅ Genehmigen
</button>
<button data-action="reject"
style="background: #ef4444; color: white; padding: 14px 32px; border: none; border-radius: 8px; cursor: pointer; font-size: 16px; font-weight: 600;">
❌ Ablehnen
</button>
</div>
</div>
</body>
</html>
Praxisbeispiel: Ein Lieferant soll eine Bestellung über 7.500 € freigeben. Die Aufgabenseite zeigt den Betrag, einen automatischen Warnhinweis (da > 5.000 €) sowie die eingebettete Rechnung als PDF. Per Klick auf „Genehmigen" oder „Ablehnen" wird das Ergebnis direkt an den Prozess zurückgemeldet.
Tipps und Hinweise
Nur Inline-CSS verwenden
Externe Stylesheets werden nicht geladen. Alle Styles müssen direkt im HTML-Element als style-Attribut angegeben werden.
- Die maximale Größe pro Vorlage beträgt 50 KB.
- Die Vorlagen werden sicher in einer Sandbox dargestellt.
%%FILE:...%%-Variablen setzen voraus, dass die referenzierte Variable im Input-Parameter ein Dateiobjekt enthält (z. B. das Ergebnis einer PDF-Generierung).- Die Panda-KI im Editor kann beim Erstellen und Gestalten von Templates unterstützen.
- Action-IDs in
data-actionkönnen im nachfolgenden Gateway ausgewertet werden, um den Prozessfluss zu steuern (z. B. genehmigt → weiter, abgelehnt → Benachrichtigung). - Vorlagen können direkt im Prozess-Designer bearbeitet und in der Vorschau geprüft werden.