Gestalten · C5 · 7 Stufen

Vorverarbeitung: HTTP, Funktionen und MCP

Workflows über AuxData hinaus: externe Systeme abfragen, Code ausführen und Tools anbinden. Wir bauen eine automatische E-Mail-Kategorisierung.

Was du in diesem Tutorial baust

Workflow-Schritte können Vor- und Nachverarbeitung nutzen: einen HTTP-Service, eine Funktion (JavaScript/ScriptEngine) oder ein MCP-Tool. Als Demo bauen wir die E-Mail-Kategorisierung: eine Funktion holt E-Mails über MS Graph, ein Service kategorisiert sie, ein Intervall-Service automatisiert das Ganze. Mit Code-Blöcken als belastbare Muster, nicht als ungeprüfte Copy-Paste-Snippets.

Voraussetzung: C4. Die Mechanismen selbst vertiefen Track E (E3 MCP, E4 Funktionen). Primärquelle für die ScriptEngine ist das Programmierhandbuch; C5 zeigt die Nutzung im Workflow.

Quellen und Stand

Geprüft gegen das AuxData-Administratorhandbuch v2.4.1 (Stand 07.09.2026), Kapitel 9, 9.1, 9.2, 9.3, 9.4, 9.5, 9.7 und 9.9, Abschnitt „Anhang E“; ergänzend das AuxData-Programmierhandbuch (ScriptEngine) v2.4.1 (Stand 07.09.2026), Abschnitt „Programmierhandbuch für die AuxData.ai ScriptEngine“.

Stufe 1 von 7

Drei Wege nach außen

Wenn der Workflow externe Systeme braucht.

1Die drei Mechanismen

Ein Workflow-Schritt kann Vor- und Nachverarbeitung nutzen, um externe Systeme einzubinden. (AH 9)

HTTP-Service
ein vordefinierter REST-Aufruf (z. B. CRM- oder Preis-API).
Funktion
ein JavaScript-Skript (ScriptEngine) mit Modulen für HTTP, SQL, Mail, MS Graph, Wissensdatenbank …
MCP-Server
eine angebundene externe Tool-Sammlung; AuxData ist MCP-Client.

Alle drei werden auf Organisationsebene gepflegt (Org-Admin oder höher) und stehen damit den Agenten der Organisation als Bausteine zur Verfügung. Die konkrete Nutzung passiert im Workflow-Schritt oder über aktivierten Tool-Use. (AH 9.6)

Demo: Wir bauen die E-Mail-Kategorisierung (Funktion + MS Graph + Intervall) und binden die Demo-CRM-MCP an.

2Der vierte Weg: Webhooks

Seit v2.4.1 führt ein vierter Weg nach außen — genauer: von außen herein. Inbound-Webhooks lassen ein externes System (Paperless-ngx, GitHub, ein Monitoring-Werkzeug) eine AuxData-Funktion auslösen, indem es einen HTTP-POST schickt.

Die Verwaltung liegt unter Einstellungen → Webhooks und ist Organisations-Administratoren vorbehalten. Ein Webhook besteht aus fünf Angaben:

Name
Beschreibt den Zweck, etwa „Paperless Dokument-Ingestion“.
Function
Die JavaScript-Funktion der Organisation, die beim Aufruf läuft. Sie bekommt automatisch body, headers, query und method.
Ausführungs-User
In wessen Kontext die Funktion läuft. Dieser Benutzer braucht alle Rechte, die das Skript anfasst — etwa Zugriff auf die Ziel-Wissensdatenbank.
Modus
Asynchron (empfohlen) antwortet sofort mit HTTP 200 und arbeitet im Hintergrund. Synchron wartet auf das Ergebnis und gibt es als Antwort-Body zurück.
Aktiv
Erst einschalten, dann die URL weitergeben.
Die URL ist das Passwort. Der Aufruf geht an POST {baseUrl}/hooks/{token}; das Token sind 64 Zeichen aus 32 Zufallsbytes. Eine weitere Authentifizierung gibt es nicht — wer die vollständige URL kennt, löst den Webhook aus. Also nur über HTTPS weitergeben, nicht in Tickets oder Screenshots, und löschen, sobald er nicht mehr gebraucht wird. Deaktivierte Webhooks antworten mit HTTP 404, ohne zu verraten, dass es sie gibt. (AH 9.4)

Damit kehrt sich die Richtung um: HTTP-Service, Funktion und MCP rufen von AuxData aus nach draußen, der Webhook lässt draußen bei AuxData anklopfen. Für wiederkehrende Abholvorgänge ist ein Intervallplan meist die einfachere Wahl; der Webhook lohnt sich, wenn das externe System den Zeitpunkt bestimmt.

✎ Bauaufgabe: Für welche deiner Aufgaben brauchst du HTTP, eine Funktion oder MCP?

✓ Das hast du jetzt erledigt

Stufe 2 von 7

HTTP-Service bauen

Ein REST-Aufruf als Baustein.

1Reiter „Anfrage"

URL, Methode, Header und ein Request-Body mit Platzhaltern ${parameter}. (AH 9.1)

StammdatenAnfrageParameterUmgebungsvariablen
Anfrage
URL
https://crm.example.com/v1/customer
Methode
GETPOSTPUTDELETE
Header
Authorization: Bearer ${env.CRM_TOKEN}
Request-Body
{ "id": "${customerId}" }
Echter HTTP-Service-Editor (Demo-Instanz), Reiter Anfrage: Endpunkt mit URL, Methode GET und Content-Type sowie Body-Editor
C5-S01 · HTTP-Service-Editor an der Demo-Instanz (Reiter „Anfrage": URL, Methode, Body)
Auth-Verkettung (Token-Service): Ein HTTP-Service kann einen anderen als Token-Quelle referenzieren; die Plattform holt das Token automatisch (Response-Pfad in Punkt-Notation, z. B. access_token) und setzt per Default Authorization: Bearer <token> — solange dein Haupt-Request den Platzhalter nicht selbst verwendet. So bindest du OAuth2 / Microsoft Graph an, ohne ein Secret fest einzutragen. (AH 9.1)
Pagination (alle Seiten automatisch): Liefert eine API ihre Daten seitenweise, holt der HTTP-Service auf Wunsch alle Seiten in einem Lauf — fünf Stile: Seiten-Nummer, Offset, Cursor-Token, Next-URL und Link-Header (RFC 5988); der Items-Pfad (Punkt-Notation, z. B. value bei MS Graph) bündelt die Treffer. (AH 9.1)
🧠 Für Profis: Auth-Token automatisch holen — Bearer-Default & kein Caching
Braucht ein HTTP-Service vorab ein Zugriffstoken, holt ein separater Auth-Request es. Bearer-Default-Logik: Nutzt der Haupt-Request den Platzhalter ${token-variable} nirgends, ergänzt die Plattform automatisch Authorization: Bearer <token>. Sobald du den Platzhalter selbst einsetzt oder bereits einen Authorization-Header hast, entfällt der Auto-Header. Kein Caching: Jeder Aufruf löst genau einen Token-Fetch aus; bei paginierten Services wird das Token einmal vor der Seiten-Schleife geholt und wiederverwendet — bei hochfrequenten Aufrufen das Rate-Limit des Token-Endpunkts beachten. (AH, HTTP-Service)

2Umgebungsvariablen & Test

Secrets (API-Keys, Tokens) liegen im separaten Schlüssel-Wert-Speicher und werden in HTTP-/MCP-Templates über ${env.NAME} eingesetzt. Die Vertraulich-Markierung maskiert solche Werte nur in der Tabelle — gespeichert werden sie im Klartext (in der Datenbank; über die REST-API und die Browser-DevTools für Aufrufende einsehbar). Für hochkritische Geheimnisse gehört daher ein separater Secret-Manager davor. Die Testseite führt einen Probe-Aufruf aus und zeigt Request, Response und Status. (AH 9.1; Programmierhandbuch · Vertrauliche Werte)

Syntax-Unterschied: In HTTP- und MCP-Templates nutzt du ${env.NAME}. In ScriptEngine-Funktionen stehen Umgebungsvariablen als globale Namen bereit, z. B. api_token oder db_password. (AH 9.1; PH)
Sicherheit: API-Keys gehören in Umgebungsvariablen, nicht in den Request-Body. (AH 9.7)
✎ Bauaufgabe: Welche Methode nimmst du für einen reinen Kunden-Lookup?

✓ Das hast du jetzt erledigt

Stufe 3 von 7

Funktion (ScriptEngine)

Eigener Code in der Sandbox.

1JavaScript in der Sandbox

Funktionen sind JavaScript (ECMAScript 5.1) und laufen über Otto in einer Sandbox — ohne Datei- oder Netzwerkzugriff außerhalb der eingebauten Module. (AH 9.2; Programmierhandbuch)

function preisAbfrage(produkt) {
    getModule("http");
    getModule("log");

    if (!produkt) {
        log_error("Produkt fehlt");
        return "FEHLER: Produkt fehlt";
    }

    try {
        var header = new Object();
        header["Authorization"] = "Bearer " + api_token; // Umgebungsvariable
        var url = "https://api.example.com/preis?produkt=" + http_queryEscape(produkt);
        log_info("Preisabfrage gestartet");
        return http_get(url, header);
    } catch (error) {
        log_error("Preisabfrage fehlgeschlagen: " + error);
        return "FEHLER: Preisabfrage fehlgeschlagen";
    }
}

2Eingebaute Module

http
http_get, http_post, http_put, http_delete, http_queryEscape.
graphapi
MS Graph: Ressourcen abrufen, E-Mails senden, neue E-Mails holen, verschieben, löschen.
aiservice
andere AI-Services synchron/asynchron aufrufen, z. B. aiservice_run.
knowledgedb
Text/Binary speichern und per find / findByKeyword suchen.
sql
sql_execute, sql_query — direkter Datenbankzugriff nur für Admins.
log
log_info, log_warn, log_error, log_debug.
HTTP-Aufrufe werden gegen eine URL-Whitelist geprüft; SQL-Zugriff nur für Admins. Die Testseite zeigt Ergebnis, Logs und Laufzeit. (AH 9.2)
✎ Bauaufgabe: Welches Modul bräuchtest du für einen direkten Datenbankzugriff — und wer darf das?

✓ Das hast du jetzt erledigt

Stufe 4 von 7

Funktion im Workflow

E-Mails holen und kategorisieren lassen.

1Die Funktion als Vorverarbeitung

Sie holt neue E-Mails über MS Graph und lässt sie von einem AI-Service einstufen. Das Beispiel ist ein verdichtetes Muster: Graph-Konfiguration, IDs, Rechte und Ordnernamen müssen gegen deine Instanz und das Programmierhandbuch geprüft werden. (AH Anhang E S3; PH graphapi/aiservice)

function emailCategorization(agentId, categorizationServiceId, maxEmails) {
    getModule("graphapi");
    getModule("aiservice");
    getModule("log");

    if (!agentId || !categorizationServiceId) {
        log_error("agentId oder serviceId fehlt");
        return "FEHLER: Konfiguration unvollständig";
    }

    var graphConfig = new Object(); // aus Funktions-/Org-Umgebungsvariablen befüllen
    var mails = graphapi_getNewFromInbox(graphConfig, maxEmails || 10);
    var verarbeitet = 0;

    for (var i = 0; i < mails.length; i++) {
        var params = new Object();
        params["subject"] = mails[i].Subject || mails[i].subject;
        params["content"] = mails[i].Body || mails[i].body;

        var result = aiservice_run(agentId, categorizationServiceId, params);
        if (result && result.MultiResults && result.MultiResults.Results.length > 0) {
            log_info("Kategorie: " + result.MultiResults.Results[0].Result);
            verarbeitet++;
        }
    }

    return "Verarbeitete E-Mails: " + verarbeitet;
}
Wichtig: aiservice_run(...) ruft einen anderen AI-Service auf — Funktionen und Services greifen ineinander. Den Kategorisierungs-Service hast du wie in C3 als Schablone definiert. (AH Anhang E)
Ohne getModule: Läuft die Funktion als Workflow-Schritt, stellt die Plattform die Ergebnisse aller vorherigen Schritte als globale Variable aiserviceresults bereit (Array<string>, chronologisch; außerhalb eines Workflows null). (Programmierhandbuch)
✎ Bauaufgabe: Mit welcher Zeile ruft die Funktion den Kategorisierungs-Service auf?

✓ Das hast du jetzt erledigt

Stufe 5 von 7

MCP-Tool einbinden

Externe Werkzeuge als Client nutzen.

1AuxData als MCP-Client

MCP (Model Context Protocol) gibt LLMs Zugriff auf standardisierte Tools, Prompts und Resources. AuxData ist MCP-Client. (AH 9.3)

Nur der Workflow-Blick: C5 zeigt, wo ein MCP-Server in AuxData eingetragen und als Tool genutzt wird. Protokoll, Transport, Tool-Schemata und MCP-Design werden später in einem eigenen MCP-Modul vertieft.
VerbindungFähigkeitenUmgebungsvariablen
Verbindung
Name
CRM MCP
URI
https://mcp.example.com
Endpoint
/mcp
Authorization
Bearer ${env.MCP_TOKEN}
Geladene Toolsper „Neu laden"
customer_lookupticket_create
Echter MCP-Server-Editor (Demo-Instanz), Reiter Verbindung: Name, URI und Endpoint sowie Server-Status-Bereich
C5-S02 · MCP-Server-Editor an der Demo-Instanz (Reiter „Verbindung": Name, URI, Endpoint)

2Nutzung

Ein konfigurierter MCP-Server ist im Workflow-Schritt unter Vor-/Nachverarbeitung als Tool wählbar. Alternativ nutzen Tool-Use-fähige Modelle die Tools autonom, wenn der Admin das aktiviert. Die „CRM MCP" ist hier bewusst Demo, nicht Quelle für einen echten Endpunkt. (AH 9.3)

✎ Bauaufgabe: Wofür würde der Helpdesk-Assistent customer_lookup und ticket_create nutzen?

✓ Das hast du jetzt erledigt

Stufe 6 von 7

E-Mail-Kategorisierung zusammenbauen

Vom Postfach bis zur Teams-Meldung.

1Der automatisierte Ablauf

Intervall
E-Mails holen
Kategorisieren
Ordner
Teams
E-Mail-Kategorisierung als Intervall-Service · Muster GmbH

2Kategorien & Ordner

Ein Kategorisierungs-Service ordnet jede E-Mail einer Kategorie zu (Dringend, Wichtig, Projekt, HR, IT, Vertrieb, Finanzen, Allgemein) und bestimmt die Priorität. Eine Zuordnung steuert das Verschieben: (AH Anhang E S4–5)

var folderMapping = {
    "Dringend":  "Inbox/Dringend",
    "Wichtig":   "Inbox/Wichtig",
    "IT":        "Inbox/IT-Support",
    "Allgemein": "Inbox/Allgemein"
};
// Als Intervall-Service alle checkInterval Sekunden ausführen

Wichtige Treffer melden wir zusätzlich in einen Teams-Kanal; der Intervall-Service stößt den Ablauf alle checkInterval Sekunden an. Organisations-Intervallpläne zeigen Plan-ID, Anwender, Agent, Service, nächste Ausführung, Intervall und Aktiv-Status. (Admin-HB · Monitoring; AH Anhang E S6–8)

Betrieb nicht vergessen: Intervallpläne können nach Offboarding weiter Tokens verbrauchen oder Daten versenden. Deshalb regelmäßig prüfen, pausieren oder übernehmen. (Admin-HB · Monitoring)
✎ Bauaufgabe: Welche Kategorien und Zielordner braucht euer Support-Postfach?

✓ Das hast du jetzt erledigt

Stufe 7 von 7

Sicherheit & Best Practices

Damit die Brücke nach außen sicher bleibt.

1Sicherheitsgrenzen

URL-Whitelist
HTTP- und MCP-Aufrufe nur an freigegebene Ziele.
MCP nur HTTPS
valides Zertifikat und 15-Sekunden-Timeout pro Tool-Aufruf.
SQL nur Admins
direkter Datenbankzugriff ist eingeschränkt.
Otto-Sandbox
kein Datei-/Netz-IO außerhalb der Module.

2Best Practices

Merke: Secrets in Umgebungsvariablen, nie im Body/Skript. Template-Syntax: ${env.NAME}; ScriptEngine: direkte globale Variable wie api_token. Versionsgebunden arbeiten (ändert sich eine Fremd-API, neuen Service anlegen). In Funktionen konsequent loggen, Eingaben validieren und Fehlerpfade behandeln — aber niemals Passwörter oder Tokens loggen. (AH 9.7; PH)

Automatisierung steht!

Die E-Mail-Kategorisierung läuft als Intervall-Service, HTTP- und MCP-Anbindung sind eingerichtet — und das alles sicher. Mach das Quiz und geh dann weiter zu C6 — Feedback nutzen und Services verbessern.

✎ Bauaufgabe: An welchen Stellen deiner Funktion baust du Logging und Fehlerbehandlung ein?

✓ Das hast du jetzt erledigt

Kurz-Quiz

Sitzt die Vorverarbeitung?

7 Szenariofragen aus den Stufen 1–7. Kein Zertifikat — zur Selbstkontrolle. Beliebig oft wiederholbar.

Frage 1 von 7
Lade Frage…