Automatisierung für Technische Nutzer¶
Diese Seite ist für Personen gedacht, die mit HTTP, JSON, APIs, Expressions und strukturierter Konfiguration arbeiten. Ziel ist ein mentales Modell, mit dem du im CLYE AI nicht nur einfache Regeln, sondern auch komplexere Automationen zuverlässig bauen kannst.
Mentales Modell¶
Eine Automation besteht technisch aus fünf Bausteinen:
- Trigger: Wann startet sie?
- Trigger-Daten: Welche Daten stehen dem Lauf zur Verfügung?
- Condition: Soll dieser Lauf wirklich weitergehen?
- Action Tool: Welches Tool wird aufgerufen?
- Action Args: Mit welchen Parametern wird das Tool aufgerufen?
Praktisch ist das:
- WHEN: Trigger
- IF: JavaScript-Expression
- THEN: Tool-Aufruf mit vorbereiteten Parametern
Ausführungsmodell¶
Technisch läuft eine Automation in dieser Reihenfolge:
- Der Trigger erzeugt einen Laufkontext.
- Der Lauf stellt Trigger-Daten als
eventbzw.event.databereit. - Die Condition wird als JavaScript-Ausdruck ausgewertet.
- Wenn die Condition
trueergibt, werden die Action-Parameter vorbereitet. - In
actionArgswerden{{ ... }}-Ausdrücke ausgewertet. - Danach wird das konfigurierte Tool ausgeführt.
- QoS-Regeln bestimmen, ob bei Fehlern wiederholt, parallelisiert oder gestoppt wird.
Wichtig:
- Eine fehlerhafte Condition stoppt den Lauf nicht mit einem harten Crash, sondern führt dazu, dass die Automation für diesen Lauf als nicht passend behandelt wird.
- Ein Tool-Fehler ist etwas anderes als eine nicht passende Condition.
- Für
chat/send_messagewerden auch Rückgaben wiesuccess: falseals echter Fehler gewertet.
Trigger-Arten¶
Der CLYE AI unterstützt vier Trigger-Arten:
- Event
- Zeit
- HTTP
- Tool
Event¶
Event-Trigger sind der Standard, wenn du auf interne Änderungen reagieren willst.
Typische Filter:
typeobjectId
Zusätzlich kann bei Event-Triggern eine Condition feiner auf event.data prüfen.
Beispiel:
Zeit¶
Zeit-Trigger eignen sich für Routinen und periodische Jobs.
Relevante Muster:
intervaldailyweekdaysweeklymonthly
Die Zeitzone ist konfigurierbar und standardmäßig auf Europe/Berlin gesetzt.
HTTP¶
HTTP-Trigger machen eine Automation von außen aufrufbar. Nach dem Speichern bekommt die Automation eine eigene URL mit nicht erratbarem Token.
Unterstützte Methoden:
GETPOSTPUTDELETE
Der Request wird als event.data bereitgestellt:
event.data.methodevent.data.bodyevent.data.queryevent.data.headersevent.data.url
Tool¶
Tool-Trigger machen eine Automation selbst zu einem aufrufbaren Baustein. Das ist sinnvoll, wenn:
- andere Automationen sie wiederverwenden sollen
- ein Assistent sie als Tool aufrufen soll
- du größere Abläufe modularisieren willst
Technisch heißt das: Statt auf ein externes Ereignis zu warten, wird die Automation selbst als Tool exponiert.
Das event-Objekt verstehen¶
Für Conditions und viele Expression-Auswertungen ist event das zentrale Objekt.
Welche event.type-Werte du im Event-Trigger typischerweise auswählen kannst, welche systemseitigen Typen es gibt und wie externe Typen als external.<type> auftauchen, steht gesammelt unter Event-Typen für Automationen.
Wenn ein echter Event-Trigger vorliegt, enthält event typischerweise mehr als nur data, zum Beispiel:
event.idevent.typeevent.timestampevent.dataevent.metadataevent.userIdevent.objectIdevent.causedByevent.spaceIdsevent.sequenceevent.actorId
Wenn kein voller Event-Datensatz vorliegt, ist mindestens event.data relevant.
Conditions: JavaScript statt Regelsprache¶
Conditions sind JavaScript-Ausdrücke, die zu true oder false ausgewertet werden.
Typische Muster:
Wichtige Praxisregel:
- Verwende defensive Checks wie
!= null,typeof ... == "string"oderArray.isArray(...), wenn Daten optional sein können.
Action Args: statische Werte plus {{ ... }}¶
Die Parameter eines Action Tools können statisch sein oder Expressions enthalten. In Strings werden {{ ... }}-Blöcke ausgewertet.
Beispiele:
params:
title: "Täglicher Bericht"
source: "{{ event.data.query.source }}"
summary: "{{ 'Kunde ' + (event.data.body.customerId ?? 'unbekannt') }}"
Das ist wichtig:
- Die Condition selbst ist ein reiner JavaScript-Ausdruck.
- In
actionArgswerden Werte feldweise vorbereitet. - String-Felder können
{{ ... }}enthalten. - Auch verschachtelte Objekte wie
metadatakönnen solche Ausdrücke enthalten.
Action Tools richtig auswählen¶
Technisch ruft eine Automation ein Tool auf. In der Oberfläche wählst du es aus der Tool-Liste des Spaces aus.
Praktisch sind Tool-IDs üblicherweise im Format:
<toolbox-id>/<tool-name><mcp-server-id>/<tool-name>
Beispiele:
chat/send_message- ein Tool aus einem angebundenen MCP-Server
Die Oberfläche hilft beim Auswählen und validiert die Eingaben auf Basis des Input-Schemas des jeweiligen Tools.
chat/send_message als Universalbaustein¶
Für viele technische Integrationen ist chat/send_message das flexibelste Start-Tool.
Typische Einsatzfälle:
- HTTP-Request an einen Assistenten weiterreichen
- Event-Daten automatisch zusammenfassen lassen
- Vorprüfung, Klassifikation oder Antwortentwurf auslösen
- Follow-up-Fragen in bestehende Chats einspeisen
Wichtige Parameter:
chatId: in bestehenden Chat schreibenspaceId: neuen Chat im Space startenmessage: Text oder Nachrichtenobjektmetadata: Zusatzdatenintention: menschenlesbare Beschreibung des Schritts
Faustregel:
- Nutze
spaceId, wenn jeder Trigger einen neuen Vorgang erzeugen soll. - Nutze
chatId, wenn du denselben Vorgang fortschreiben willst.
Kosten und Effizienz¶
chat/send_message ist fachlich oft sehr stark, aber auch der Schritt, der typischerweise echte LLM-Kosten und zusätzliche Laufzeit verursacht.
Darum gilt als technische Best Practice:
- zuerst mit Condition, Code oder vorgeschalteten Tools prüfen, ob der Fall überhaupt relevant ist
- zuerst einfache Regeln, Filter, Deduplizierung und Datentransformation ausführen
- erst dann
chat/send_messageaufrufen, wenn wirklich Zusammenfassung, Klassifikation, Formulierung oder ein anderer KI-Schritt gebraucht wird
Beispiel:
- Eine Automation prüft regelmäßig E-Mails oder ein externes System.
- Code oder Filter entscheiden zuerst, ob es überhaupt neue und interessante Fälle gibt.
- Nur diese Treffer werden dann per
chat/send_messagean einen Assistenten gegeben.
HTTP-Trigger als Integrations-API¶
Ein HTTP-Trigger kann wie ein kleiner interner Endpoint behandelt werden. Das ist besonders nützlich, wenn du kein vollständiges eigenes Backend bauen willst, aber strukturierte Requests in Automationen einspeisen möchtest.
Einfache Schutzschicht¶
Die Trigger-URL enthält bereits einen geheimen Token. Für zusätzliche Absicherung kannst du die Condition als Shared-Secret-Prüfung verwenden.
Beispiele:
event.data.method == "POST" && String(event.data.headers["content-type"] ?? "").includes("application/json")
Typisches Muster¶
- Externes System ruft die HTTP-Trigger-URL auf.
- Condition prüft Methode, Auth und Pflichtfelder.
chat/send_messageoder ein anderes Tool verarbeitet den Request.- Das Ergebnis wird als Tool-Ergebnis im Automationslauf sichtbar.
Eigene Events als Entkopplung¶
Ein sehr gutes technisches Muster ist, Erkennung und Reaktion über eigene Events zu trennen.
Das bedeutet:
- Eine Automation erkennt etwas technisch oder fachlich.
- Sie dispatcht daraus ein oder mehrere klar benannte Events.
- Andere Automationen reagieren auf genau diese Events.
Beispiel:
- Eine Automation prüft regelmäßig, welche Dateien sich geändert haben.
- Für jede Änderung erzeugt sie ein Event wie
file.changed. - Andere Automationen reagieren darauf, z. B. mit Indexierung, Benachrichtigung oder
chat/send_message.
Warum das oft besser ist:
- retrybar: Die Schritte sind sauber getrennt und können unabhängig erneut laufen.
- einfacher: Jede Automation hat nur eine klarere Verantwortung.
- flexibler: Ein Eingang kann auf mehrere Ziel-Events gemappt werden.
- erweiterbar: Mehrere Folgeautomationen können auf dasselbe Event reagieren.
Gerade wenn aus einem technischen Polling oder Vergleich mehrere fachliche Fälle entstehen können, ist dieses Muster meist sauberer als eine große monolithische Automation.
Event-Policy und Entdoppelung¶
Für Event-Trigger gibt es neben type und objectId noch die Event Policy.
Wichtig ist vor allem:
default: jedes passende Event kann einen Lauf auslösenlatestPerObject: bei mehreren Events pro Objekt wird nur das neueste verarbeitet
Das ist besonders nützlich bei:
- Reindexing
- mehrfachen Statusupdates in kurzer Folge
- idempotenten Folgeschritten pro Objekt
QoS: Retries, Parallelität, Fehlverhalten¶
Für technisch robuste Automationen ist der QoS-Bereich wichtig.
Relevante Felder:
qos.maxRetriesqos.stopOnFailureqos.maxParallelRuns
Praktische Bedeutung:
maxRetries: 0: keine WiederholungmaxRetries > 0: fehlgeschlagene Läufe werden erneut versuchtstopOnFailure: true: nach einem endgültigen Fehler stoppt die KettemaxParallelRuns: 1: strikt sequentiellmaxParallelRuns > 1: parallele Abarbeitung möglich
Faustregeln:
- Für API-Aufrufe mit Seiteneffekten lieber konservativ starten.
- Für reine Lese- oder Analysejobs kann mehr Parallelität sinnvoll sein.
- Wenn Doppelausführung problematisch ist, zuerst Idempotenz und Event-Policy klären.
YAML als Code pflegen¶
Automationen können nicht nur in der UI, sondern auch als Dateien gedacht werden. Im technischen Dateimodell liegt eine Automation als YAML-Datei unter /automations/<name>.yml.
Beispiel:
title: Ticket an Assistenten weitergeben
description: Nimmt HTTP-Requests entgegen und schickt sie an einen Assistenten.
reactions:
inbound-ticket:
on:
http: true
condition: event.data.method == "POST" && event.data.headers.authorization == "Bearer MEIN_SHARED_SECRET" && event.data.body != null && typeof event.data.body.message == "string"
run:
call: chat/send_message
params:
spaceId: "11111111-1111-4111-8111-111111111111"
intention: "Ticket an Assistenten senden"
message: "{{ 'Neues Ticket: ' + (event.data.body.message ?? '') }}"
metadata:
source: "http-trigger"
ticketId: "{{ event.data.body.ticketId }}"
Wichtige Kurzschreibweisen:
run.callwird zuactionToolrun.paramswird zuactionArgson.http: trueaktiviert einen HTTP-Triggeron.tool: trueaktiviert einen Tool-Trigger
Das ist besonders nützlich, wenn du:
- Automationen versionieren willst
- Änderungen im Team reviewen willst
- mehrere ähnliche Automationen reproduzierbar erzeugen willst
Gute technische Muster¶
1. Klein anfangen, dann generalisieren¶
Zuerst einen klaren Trigger und ein einfaches Tool wählen, danach erst Expressions und Wiederverwendung ausbauen.
Wenn ein Ablauf wächst, ist ein eigener Event-Schritt oft der beste nächste Schnitt.
2. Condition für Routing, nicht für komplette Business-Logik¶
Die Condition sollte Läufe grob zulassen oder ablehnen. Komplexe Nutzlastaufbereitung gehört eher in actionArgs oder in das aufgerufene Tool.
Wenn die Vorlogik größer wird, ist ein Code-Schritt meist besser als ein früher LLM-Aufruf. Das spart Kosten und macht das Verhalten stabiler.
3. Nachrichten explizit bauen¶
Wenn du chat/send_message nutzt, formuliere im message-Feld bewusst, welche Daten wichtig sind. Externe Rohdaten ungefiltert an einen Assistenten weiterzugeben ist selten die beste Variante.
4. Metadaten mitschreiben¶
Zusätzliche Felder in metadata helfen bei Nachvollziehbarkeit und späteren Folgeautomationen.
5. Idempotenz mitdenken¶
Wenn derselbe externe Request mehrfach auftreten kann, sollte entweder:
- die Event-Policy passend gesetzt sein
- ein bestehender
chatId-Pfad verwendet werden - oder das Zielsystem Mehrfachläufe tolerieren
6. Technische Erkennung von fachlicher Reaktion trennen¶
Wenn eine Automation zunächst nur erkennt, dass etwas passiert ist, sollte sie oft lieber ein eigenes Event dispatchen statt sofort alle Folgeschritte selbst zu erledigen.
Das ist besonders sinnvoll bei:
- Dateiänderungen
- Polling von externen Systemen
- Delta-Abgleichen
- Mapping von einem Eingang auf mehrere unterschiedliche Reaktionen
Wo die Grenzen liegen¶
Automationen sind sehr flexibel, aber kein Ersatz für eine komplette Integrationsplattform.
Ein eigenes vorgeschaltetes Backend ist oft sinnvoll, wenn du:
- komplexe Authentifizierung brauchst
- HMAC-Signaturen oder aufwendige Request-Validierung brauchst
- mehrere externe Systeme zusammenführen willst
- lange Transformationsketten außerhalb eines Tool-Aufrufs brauchst
In solchen Fällen ist der CLYE AI oft der Orchestrierungs- oder LLM-Schritt, nicht zwingend der einzige Integrationspunkt.
Empfohlene Arbeitsweise¶
- Trigger-Daten zuerst verstehen.
- Condition defensiv formulieren.
- Mit einem kleinen Tool-Aufruf starten.
- QoS bewusst setzen.
- Erst danach Ketten, Wiederverwendung und YAML-Pflege ausbauen.
Kurz gesagt¶
Mit dem CLYE AI kannst du technisch anspruchsvolle Automationen bauen, wenn du Trigger, event.data, JavaScript-Conditions, Code-Schritte, eigene Events, templated actionArgs und Tool-Aufrufe sauber zusammendenkst. Für viele Integrationen ist die Kombination aus Vorprüfung per Condition oder Code, Dispatch eigener Fach-Events und chat/send_message nur bei echtem KI-Bedarf der sauberste Einstieg.