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-Administrator-Handbuch (Stand Juni 2026), Kapitel 7 (HTTP-Services, Funktionen, MCP), das Programmierhandbuch (ScriptEngine) und das Schritt-Tutorial 19 (E-Mail-Kategorisierung).

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 7)

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 7.4)

Demo: Wir bauen die E-Mail-Kategorisierung (Funktion + MS Graph + Intervall) und binden die Demo-CRM-MCP an.
✎ 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 7.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 7.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 7.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 7.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 7.1; PH)
Sicherheit: API-Keys gehören in Umgebungsvariablen, nicht in den Request-Body. (AH 7.5)
✎ 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 7.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 7.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. (Tut 19 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. (Tut 19)
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 7.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 7.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: (Tut 19 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; Tut 19 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 7.5; 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…