> ## Documentation Index
> Fetch the complete documentation index at: https://docs.enneo.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Regelbasierte Logik

> Funktionsweise, Umsetzung und Beispiel

<Tabs>
  <Tab title="Spezifikationen">
    ### Spezifikationen

    Grundlegende Einstellungen

    <Tip>
      **KI-Agenten** bieten eine innovative Möglichkeit, Kundenanfragen **effizient** zu bearbeiten und Standardprozesse zu automatisieren.

      Dank der **flexiblen Konfiguration** lassen sich Agenten **passgenau** auf **individuelle** Anforderungen abstimmen. Die Erstellung erfolgt in wenigen, klar strukturierten Schritten, die unter den **oben aufgeführten Tabs** beschrieben ist.
    </Tip>

    ### 1. Spezifikationen festlegen

    Hier wird der Grundstein für den KI-Agenten gelegt. Dazu gehören:

    * **Name:** Der Name des Agenten sollte den Aufgabenbereich widerspiegeln, z. B. „Abschlags-Agent“.

    * **Beschreibung:** Eine kurze Beschreibung hilft, den Zweck des Agenten auf einen Blick zu erfassen.

    * **Thema:** Das Thema ergibt sich aus den vorhandenen Skill-Tags. So könnte ein Abschlags-Agent dem Skill-Tag "Zahlungsverkehr" zugewiesen werden. Die Zuweisung sorgt für eine klare organisatorische Zuordnung und erleichtert bspw. den Zugriff über den Vorlagenkatalog.

    * **Kanäle:** Bestimmen, über welche Kommunikationswege der KI-Agent agieren soll – E-Mail, Chat, Brief, Telefon, etc. Ein Agent kann problemlos mehreren Kanälen zugewiesen werden.

    ### 2. Avatar wählen

    Der Avatar verleiht dem KI-Agenten eine visuelle Identität und unterstreicht seinen individuellen Charakter. Dabei stehen verschiedene Optionen zur Verfügung:

    * **Stil:** Soll der Avatar eher professionell, freundlich oder neutral wirken?

    * **Farbakzente:** Zusätzlich können Farben ausgewählt werden, die bspw. zur Markenidentität passen.

    * **Wiedererkennungswert:** Ein einheitlicher Avatar über alle Kanäle hinweg stärkt das visuelle Erscheinungsbild des KI-Agenten.

    ### 3. Intelligenz konfigurieren

    Hier entscheidet sich, wie der KI-Agent Aufgaben löst:

    * **Smarte Argumentationslogik:** Regeln in natürlicher Sprache ohne Programmierung – ideal für Standardprozesse.

    * **Regelbasierte Logik:** Codebasierte Workflows für komplexere Abläufe.

    ### 4. Persönlichkeit anpassen

    Die Persönlichkeit des KI-Agenten definiert, wie er kommuniziert – nicht nur inhaltlich, sondern auch im Ton. Über intuitive Regler lässt sich der Kommunikationsstil feinjustieren:

    * **Informell bis formell:** Soll der KI-Agent locker oder geschäftlich auftreten?

    * **Sprechstil:** Von knappen Antworten bis hin zu ausführlichen Erklärungen.

    * **Konzise bis umfassend:** Bestimmt die Detailtiefe der Rückmeldungen.

    Diese Anpassungen sorgen dafür, dass der KI-Agent perfekt zur Unternehmenssprache passt und das Kundenerlebnis positiv unterstützt.

    <Info>
      **Alle Spezifikationen – Name, Thema, Intelligenz, Persönlichkeit und Kanäle – lassen sich jederzeit flexibel anpassen. So bleibt der KI-Agent dynamisch und stets an aktuelle Anforderungen angepasst.**
    </Info>
  </Tab>

  <Tab title="Erkennung">
    ### Erkennung

    Methoden und Konfiguration

    <Tip>
      Im Bereich **Erkennung** wird festgelegt, wann ein KI-Agent einem Ticket zugewiesen wird. Dies kann basierend auf Stichworten, Ticketdaten oder KI-Analyse erfolgen.
    </Tip>

    ### Authentifizierung

    Ist diese Option aktiviert, werden Anfragen von nicht authentifizierten Kunden vom KI-Agenten ignoriert. Diese Einstellung eignet sich besonders für Prozesse, die sensible Daten betreffen oder eine Verifizierung des Kunden voraussetzen.

    ### Erkennungsmethoden

    Für die Zuweisung von KI-Agenten stehen verschiedene Methoden zur Auswahl:

    <AccordionGroup>
      <Accordion title="KI-Erkennung">
        Die KI-gestützte Erkennung basiert auf maschinellem Lernen. Anweisungen helfen dem KI-Agenten dabei, Muster in Kundenanfragen zu identifizieren. Eine klare und präzise Anweisung verbessert die Erkennungsgenauigkeit des KI-Agenten.

        &#x20;

        *Beispiel*

        Anweisung an den KI-Agenten für Kundenanliegen zum Thema "SEPA Widerruf":

        <img src="https://mintcdn.com/enneo/nMX1InWEYKbUNXv_/images/de/ai_agent_recognition_ai.jpg?fit=max&auto=format&n=nMX1InWEYKbUNXv_&q=85&s=4a28bcbc20330cf9d4ae38411c227c75" alt="" width="1249" height="216" data-path="images/de/ai_agent_recognition_ai.jpg" />
      </Accordion>

      <Accordion title="Bedingungserkennung">
        Die Zuweisung des KI-Agenten erfolgt anhand von Ticket-, Kunden- und/oder Vertragsattributen. Bedingungen können beliebig verknüpft werden.

        Operatoren und erwartete Werte

        | Operator                | Erwarteter Datentyp               | Wirkung                                                                     |
        | ----------------------- | --------------------------------- | --------------------------------------------------------------------------- |
        | `=`                     | `string`, `number` oder `boolean` | Prüft, ob der Datenpunkt exakt dem angegebenen Wert entspricht.             |
        | `!=`                    | `string`, `number` oder `boolean` | Prüft, ob der Datenpunkt vom angegebenen Wert abweicht.                     |
        | `contains`              | `string`                          | Prüft, ob der Datenpunkt den angegebenen Text enthält.                      |
        | `not contains`          | `string`                          | Prüft, ob der Datenpunkt den angegebenen Text nicht enthält.                |
        | `in`                    | `array`                           | Prüft, ob der Datenpunkt in der angegebenen Werteliste enthalten ist.       |
        | `not in`                | `array`                           | Prüft, ob der Datenpunkt nicht in der angegebenen Werteliste enthalten ist. |
        | `>` / `>=` / `<` / `<=` | `number`                          | Vergleicht den Datenpunkt numerisch mit dem angegebenen Wert.               |
        | `is null`               | `null` oder kein Wert             | Prüft, ob kein Wert vorhanden ist.                                          |
        | `is not null`           | `null` oder kein Wert             | Prüft, ob ein Wert vorhanden ist.                                           |
        | `contains RegEx`        | `string`                          | Prüft, ob der Datenpunkt einem regulären Ausdruck entspricht.               |

        *Beispiel*

        Verknüpfung von Bedingungen für Kundenanliegen zu Marketingzwecken:

        <img src="https://mintcdn.com/enneo/nMX1InWEYKbUNXv_/images/de/Skill_configuration_conditiondetection.png?fit=max&auto=format&n=nMX1InWEYKbUNXv_&q=85&s=bccf8f2732550f22a29d1f53f7d35222" alt="" width="1764" height="624" data-path="images/de/Skill_configuration_conditiondetection.png" />
      </Accordion>

      <Accordion title="KI- und Bedingungserkennung">
        KI-Agenten werden dann zugewiesen, wenn beide Methoden zutreffen.

        &#x20;

        *Beispiel*

        Hier wird der KI-Agent zugewiesen, wenn die KI-Trainingsdaten zutreffen, UND in der Nachricht des Kunden kein Bezug auf Kündigung oder Umzug genommen wird:

        <img src="https://mintcdn.com/enneo/nMX1InWEYKbUNXv_/images/de/Skill_configuration_AI_and_condition_detection.png?fit=max&auto=format&n=nMX1InWEYKbUNXv_&q=85&s=cbaa50141679679938cc1506ad5e605d" alt="" width="1289" height="594" data-path="images/de/Skill_configuration_AI_and_condition_detection.png" />
      </Accordion>

      <Accordion title="KI- oder Bedingungserkennung">
        KI-Agenten werden basierend auf einer der beiden Methoden zugewiesen.

        &#x20;

        *Beispiel*

        Hier wird der KI-Agent zugewiesen, wenn die KI-Trainingsdaten zutreffen, ODER in der Nachricht des Kunden kein Bezug auf Kündigung oder Umzug genommen wird. Die Zuweisung würde hier vermutlich für sehr viele Fälle greifen:

        <img src="https://mintcdn.com/enneo/nMX1InWEYKbUNXv_/images/de/Skill_configuration_AI_or_condition_detection.png?fit=max&auto=format&n=nMX1InWEYKbUNXv_&q=85&s=d6ae044ad77400b48c30378196d58767" alt="" width="1285" height="594" data-path="images/de/Skill_configuration_AI_or_condition_detection.png" />
      </Accordion>

      <Accordion title="Nur manuelle Erkennung">
        KI-Agenten werden ausschließlich manuell durch einen Bearbeiter zugewiesen.
      </Accordion>
    </AccordionGroup>
  </Tab>

  <Tab title="Eingabeparameter">
    ### Eingabeparameter

    #### Zweck und Konfiguration

    <Tip>
      Regelbasierte KI-Agenten nutzen definierte **Eingabeparameter**, um Informationen aus **Kundenanfragen** oder anderen **Datenquellen** zu extrahieren und weiterzuverarbeiten. Diese Parameter steuern, **welche Daten erfasst, analysiert, angezeigt und für die Verarbeitung verwendet werden**.
    </Tip>

    ### Parameterverwaltung

    #### 1. Eingabeparameter und ihre Quellen

    Eingabeparameter können aus verschiedenen Quellen entnommen werden:

    * **Ticketdaten**: Informationen aus dem ursprünglichen Ticket
    * **Kundendaten**: Stammdaten des Kunden
    * **Vertragsdaten**: Informationen zum Vertrag des Kunden
    * **Extraktion durch KI**: Automatische KI-Analyse der Kundenanfrage zur Erkennung relevanter Informationen
    * **Manuelle Festlegung**: Ein fester Wert, der von einem Nutzer definiert wird

    #### 2. Parameterwerte und Pflichtfelder

    Jeder Parameter benötigt einen Wert, der je nach Quelle automatisch übernommen, durch KI extrahiert oder manuell eingetragen wird. Pflichtfelder stellen sicher, dass bestimmte Informationen vorhanden sind, bevor der KI-Agent eine Verarbeitung ausführen kann.

    #### 3. Parameterattribute

    Die folgenden Felder sind bei der Konfiguration eines Parameters verfügbar:

    | **Feld**                            | **Beschreibung**                                                                            |
    | ----------------------------------- | ------------------------------------------------------------------------------------------- |
    | **Referenz zu Quelle Key**          | Technischer Schlüssel zur Identifikation im Datenobjekt, z. B. `channel`                    |
    | **Variablenname in Business-Logik** | Interner Bezeichner zur Weiterverarbeitung in Logik und Aktionen                            |
    | **Bezeichnung für User**            | Anzeigename im UI, sofern der Parameter für Anwender sichtbar ist                           |
    | **Format**                          | Datentyp, z. B. `String`, `Boolean`, `Number`, `Date` oder `Enum`                           |
    | **Optionen**                        | Auswahlwerte für Parameter vom Typ `Enum`                                                   |
    | **Interne Beschreibung**            | Erläuterung zur Funktion oder Verwendung; bei KI-Extraktion dient sie als Erkennungshinweis |
    | **Erforderlich**                    | Legt fest, ob der Parameter zwingend gesetzt sein muss                                      |
    | **Sichtbarkeit für Anwender**       | Steuerung der UI-Darstellung: `Sichtbar`, `Versteckt`, `Schreibgeschützt`                   |
    | **Anzeigeoptionen**                 | Zusätzliche Darstellungseinstellungen für sichtbare String-Parameter                        |

    #### 4. Sichtbarkeit und Bearbeitungseinschränkungen

    * **Sichtbar**: Der Parameter ist für Bearbeiter einsehbar und kann, sofern nicht anderweitig eingeschränkt, bearbeitet werden.
    * **Versteckt**: Der Parameter wird im Hintergrund verarbeitet, aber nicht angezeigt.
    * **Schreibgeschützt**: Der Wert ist sichtbar, kann jedoch nicht verändert werden.

    #### 5. Anzeigeoptionen für sichtbare Textparameter

    Für Parameter mit dem Format **String** und der Sichtbarkeit **Sichtbar** können zusätzliche Anzeigeoptionen konfiguriert werden:

    * **Mehrzeilig**: Der Parameter wird als mehrzeiliges Eingabefeld dargestellt.
    * **Zeilen**: Definiert die Höhe des mehrzeiligen Eingabefelds.
    * **Automatisch absenden**: Legt fest, ob eine Eingabe automatisch übernommen/abgesendet wird.

    Diese Anzeigeoptionen sind nur für sichtbare String-Parameter verfügbar. Für versteckte, schreibgeschützte oder anders formatierte Parameter werden sie nicht angezeigt.

    #### 6. Erforderlichkeit eines Parameters

    * **Ja**: Der Parameter muss zwingend angegeben sein, damit die Verarbeitung mithilfe oder durch den KI-Agenten erfolgen kann.
    * **Nein**: Der Parameter ist optional und kann leer bleiben.

    Parameter können jederzeit wieder entfernt werden.

    ### Beispiel Bankdaten

    Um Kundenanliegen zu Bankdatenanpassungen bearbeiten zu können, benötigt der Bankdaten-Agent eine **Kombination** aus bestimmten **Informationen und Prüfungen**. Die relevanten Informationen bezieht er über die Eingabeparameter, während die Prüfungen in der Business-Logik definiert sind.

    Es werden somit für diesen KI-Agent folgende Eingabeparameter konfiguriert:

    * **`contractId`** *(Quelle: Vertragsdaten)* → Die Vertragsnummer des Kunden, um die Änderung dem richtigen Vertrag zuzuordnen.
    * **`newIBAN`** *(Quelle: Extraktion aus der Kundenanfrage mit KI)* → Die neue Bankverbindung, die der Kunde hinterlegen möchte.
    * **`oldIBAN`** *(Quelle: Vertragsdaten)* → Die bisher hinterlegte IBAN, um sie mit der neuen zu vergleichen.
    * **`accountHolder`** *(Quelle: Extraktion aus der Kundenanfrage mit KI)* → Der Name des Kontoinhabers, um die Identität zu prüfen. Falls kein Name genannt wird, bleibt der Wert leer.
    * **`date`** *(Quelle: Extraktion aus der Kundenanfrage mit KI)* → Falls angegeben, das Datum, ab wann die neue Bankverbindung gültig sein soll.

    ### Zusammenfassung

    Die vordefinierte Konfiguration von Eingabeparametern ermöglicht es regelbasierten KI-Agenten, Kundenanliegen effizient zu verarbeiten. In Kombination mit der Business-Logik werden Daten strukturiert erfasst, geprüft, im UI passend dargestellt und automatisch verarbeitet. Dadurch erfolgt die Bearbeitung präzise und mit minimalem manuellem Aufwand.
  </Tab>

  <Tab title="Business-Logik">
    ### Business-Logik

    Funktionsweise und Beispiel

    <Tip>
      Die **Business-Logik** definiert, wie ein KI-Agent Eingabeparameter verarbeitet und darauf basierend Entscheidungen trifft. Sie sorgt dafür, dass Kundenanfragen strukturiert geprüft, verarbeitet und korrekt ausgeführt werden.
    </Tip>

    ### Funktionsweise

    Nachdem die relevanten **Eingabeparameter** erfasst wurden, übernimmt die **Business-Logik** die **Verarbeitung**. Dazu gehören:

    * Prüfungen auf Vollständigkeit und Plausibilität

    * Validierung der Daten anhand vordefinierter Regeln

    * Ermittlung zusätzlicher Werte, falls erforderlich

    * Auslösung von Aktionen basierend auf den Ergebnissen der Prüfungen

    ### Technische Umsetzung

    Die Business-Logik kann implementiert werden in:

    * PHP (8.2)

    * Python (3.11)

    * JavaScript (Node 20)

    Die Implementierung folgt einer strukturierten Verarbeitungspipeline:

    &#x20;

    **1. Initialisierung und Eingabevalidierung**

    * Eingabeparameter werden aus dem Kontext übernommen und in ein standardisiertes Format überführt.

    * Pflichtfelder werden geprüft, fehlende Werte ggf. durch Defaults ersetzt.

    * Typumwandlungen (z. B. `bool`, `int`, `float`) erfolgen, um eine konsistente Verarbeitung zu gewährleisten.

    **2. Regelbasierte Verarbeitung**

    * Die Business-Logik validiert die Eingaben anhand definierter Regeln (z. B. Formatprüfungen, Plausibilitätschecks).

    * Falls erforderlich, werden externe API-Aufrufe oder Datenbankabfragen durchgeführt, um zusätzliche Informationen zu ergänzen.

    * Berechnungen und Entscheidungsprozesse laufen basierend auf den Parametern ab (z. B. Verzweigungen bei abweichenden Eingaben).

    **3. Aktionen und Ergebnisausgabe**

    * Die Business-Logik steuert den weiteren Ablauf, indem sie:

      * Automatische Änderungen im System vornimmt

      * Externe APIs aufruft (z. B. zur Datenspeicherung)

      * Rückfragen oder Bestätigungen erzeugt

    * Die Rückgabe erfolgt standardisiert als **Antwortobjekt**, das je nach Kontext eine **Bestätigung, Fehlerhinweise oder Interaktionsoptionen** enthalten kann.

    Die Business-Logik liefert Ergebnisse, die via **Ausgabebehandlung** weiterverarbeitet werden. Dort wird festgelegt, wie der KI-Agent auf bestimmte Szenarien reagiert – sei es durch Bestätigungen, Rückfragen oder Interaktionsmöglichkeiten.

    ### Beispiel: Business-Logik zur Verarbeitung einer IBAN-Änderung

    Ein KI-Agent verarbeitet Anfragen zur Änderung einer Bankverbindung. Die Business-Logik stellt sicher, dass die Änderung korrekt durchgeführt wird und alle relevanten Prüfungen erfolgen.

    &#x20;

    **1. Eingaben validieren**

    Zunächst werden die Eingaben standardisiert und geprüft:

    * Leerzeichen in der IBAN entfernen

    * Falls kein Kontoinhaber angegeben ist, wird er aus den Vertragsdaten ergänzt

    ```php theme={null}
    $this->input->newIBAN = str_replace(' ', '', $this->input->newIBAN);
    $this->input->oldIBAN = $this->input->oldIBAN ?? '';
    $this->input->oldIBAN = str_replace(' ', '', $this->input->oldIBAN);

    // Falls kein Kontoinhaber angegeben ist, aus Vertragsdaten übernehmen
    if (!($this->input->accountHolder ?? null)) {
    $this->input->accountHolder = sprintf(
        '%s %s',
        $this->contractData->firstname,
        $this->contractData->lastname
    );
    }
    ```

    **2. Eingaben validieren**

    Die Business-Logik überprüft, ob die neue IBAN korrekt ist:

    * **IBAN-Validierung:** Format- und Prüfziffernprüfung

    * **Vertrag existiert:** Die Änderung muss einem gültigen Vertrag zugeordnet werden

    ```php theme={null}
    // Vertrag abrufen
    $this->contractData = ApiEnneo::getContract($this->input->contractId);
    if (!$this->contractData) {
        throw new Exception('Vertrag nicht gefunden.');
    }

    // Format- und Prüfziffernvalidierung der IBAN
    if (!$this->validateIbanFormatting($this->input->newIBAN) || !$this->validateIbanChecksum($this->input->newIBAN)) {
        $this->interaction->infos[] = new IntentInfo(
            type: 'warning',
            message: 'IBAN nicht im korrekten Format oder Prüfsumme ungültig',
        );
        $this->interaction->options[] = new IntentOption(
            type: self::ACTION_IBAN_INVALID,
            name: 'Kunden nach korrekter IBAN fragen',
            recommended: true,
        );
        throw new ChangeBankDataException();
    }
    ```

    **3. Ergebnis ausgeben und nächste Aktion bestimmen**

    Je nach Ergebnis der Prüfungen entscheidet die Business-Logik, wie der Prozess weitergeht:

    * Falls die Prüfungen erfolgreich sind → **IBAN wird gespeichert**

    * Falls Fehler erkannt wurden → **Kunde erhält eine Rückfrage oder Korrekturmöglichkeit**

    ```php theme={null}
    if ($this->input->_action === self::ACTION_ENTER_INTO_SYSTEM) {
        $this->saveBankData();
        foreach ($this->form->fields as $field) {
            $field->readonly = true;
        }
    } else {
        $this->interaction->options[] = new IntentOption(
            type: self::ACTION_ENTER_INTO_SYSTEM,
            name: 'Bankverbindung im System hinterlegen',
            recommended: true,
        );
    }
    ```

    **4. Interaktionsgestaltung mit dem SDK**

    Interaktionen sind das Hauptinstrument von Enneo, um Agenten strukturiertes Feedback zu geben. Eine Interaktion besteht aus vier Elementen:

    1. **Infos:** Welche Nachrichten oder Warnungen sollen dem Agenten angezeigt werden?
    2. **Form:** Welche Eingabefelder, z.B. Textfelder oder Dropdown-Menüs, sollen angezeigt werden?
    3. **Data:** Welche Werte haben die Eingabefelder?
    4. **Options:** Welche Schaltflächen sollen dem Nutzer angezeigt werden?

    Um eine Interaktion zu erstellen, kann das Enneo SDK verwendet werden, eine Bibliothek mit Objektdefinitionen. Die obige Interaktion kann mit diesem Code erstellt werden:

    <Info>
      **Hinweis:** Das Enneo SDK erfordert Umgebungsvariablen, die die API-URL von Enneo und ein Session-Token für die Autorisierung angeben. Wird ein Quellcode-Executor verwendet, werden diese Umgebungsvariablen zur Laufzeit eingefügt und müssen nicht manuell eingestellt werden. Wird das SDK in einen eigenen Webdienst eingebunden, muss `ENNEO_API_URL` auf `https://instance-name.enneo.ai` und `ENNEO_SESSION_TOKEN` auf ein Service-Worker-Token eingestellt werden.
    </Info>

    <CodeGroup>
      ```php PHP theme={null}
      <?php

      use EnneoSDK\Interaction;
      require(getenv()['SDK']);

      $interaction = new Interaction(data: $in);
      $interaction->infos[] = new IntentInfo(
          type: 'warning',
          message: 'Vertrag wurde vor Belieferungsbeginn storniert und kann daher nicht gekündigt werden.'
      );
      $interaction->options[] = new IntentOption(
          type: 'termination_already_processed',
          name: 'Kunden darüber informieren',
          recommended: true
      );
      ```

      ```javascript Node.js theme={null}
      // Load SDK
      const dotenv = require('dotenv');
      dotenv.config();

      const sdkPath = process.env.SDK || 'sdk.js';
      const SDK = require(sdkPath);

      (async () => {
      const inputData = await SDK.getInputData();
      console.log('Received input data:', inputData);

      const interaction = new SDK.Interaction(inputData);
      interaction.infos.push(
      new SDK.IntentInfo(
      'warning',
      'Vertrag wurde vor Belieferungsbeginn storniert und kann daher nicht gekündigt werden.',
      ),
      );
      interaction.options.push(new SDK.IntentOption('termination_already_processed', 'Kunden darüber informieren', true));

      console.log(JSON.stringify(interaction));
      })();
      ```
    </CodeGroup>

    Anstelle des SDK kann das JSON-Objekt für die Interaktion auch direkt erstellt werden. Hier ist ein vollständiges Beispiel für die Interaktion der oben gezeigten Kündigungs-KI-Funktionalität:

    ```json theme={null}
    {
        "data": {
              "date": "2023-12-08",
              "type": "regular",
              "dryRun": "true",
              "_action": "null",
              "contractId": 756852,
              "dateReceived": "2023-12-08",
              "proofIncluded": false
          },
        "form": {
              "fields": [
                  {
                      "id": "contractId",
                      "type": "integer",
                      "label": "Vertragsnummer",
                      "fields": null,
                      "hidden": true,
                      "options": null,
                      "readonly": false,
                      "valueRef": "data.contractId",
                      "validation": null,
                      "placeholder": null,
                      "defaultValue": null
                  },{
                      "id": "date",
                      "type": "date",
                      "label": "K\u00fcndigungsdatum",
                      "fields": null,
                      "hidden": false,
                      "options": null,
                      "readonly": false,
                      "valueRef": "data.date",
                      "validation": null,
                      "placeholder": null,
                      "defaultValue": null
                  },{
                      "id": "type",
                      "type": "select",
                      "label": "K\u00fcndigungsart",
                      "fields": null,
                      "hidden": false,
                      "options": [
                          {
                              "id": "regular",
                              "label": "Regul\u00e4r",
                              "value": "regular"
                          },
                          {
                              "id": "priceAdjustment",
                              "label": "Preisanpassung",
                              "value": "priceAdjustment"
                          },
                          {
                              "id": "relocation",
                              "label": "Umzug",
                              "value": "relocation"
                          },
                          {
                              "id": "death",
                              "label": "Tod",
                              "value": "death"
                          },
                          {
                              "id": "custom",
                              "label": "Sonstiges",
                              "value": "custom"
                          }
                      ],
              "readonly": false,
              "valueRef": "data.type",
              "validation": null,
              "placeholder": null,
              "defaultValue": null
          },
          {
              "id": "_action",
              "type": "text",
              "label": "_action",
              "fields": null,
              "hidden": true,
              "options": null,
              "readonly": false,
              "valueRef": "data._action",
              "validation": null,
              "placeholder": null,
              "defaultValue": null
          },
          {
              "id": "proofIncluded",
              "type": "checkbox",
              "label": "Nachweis beigef\u00fcgt",
              "fields": null,
              "hidden": false,
              "options": null,
              "readonly": false,
              "valueRef": "data.proofIncluded",
              "validation": null,
              "placeholder": null,
              "defaultValue": null
          },
          {
              "id": "dryRun",
              "type": "checkbox",
              "label": "(schreibzugriff tats\u00e4chlich ausf\u00fchren)",
              "fields": null,
              "hidden": true,
              "options": null,
              "readonly": false,
              "valueRef": "data.dryRun",
              "validation": null,
              "placeholder": null,
              "defaultValue": null
          },
          {
              "id": "dateReceived",
              "type": "date",
              "label": "K\u00fcndigungseingang",
              "fields": null,
              "hidden": true,
              "options": null,
              "readonly": false,
              "valueRef": "data.dateReceived",
              "validation": null,
              "placeholder": null,
              "defaultValue": null
          },
          {
              "id": "sourceCode-0",
              "type": "dict",
              "label": "Source code executor response",
              "fields": null,
              "hidden": false,
              "options": null,
              "readonly": false,
              "valueRef": "data.sourceCode-0",
              "validation": null,
              "placeholder": null,
              "defaultValue": null
          }
              ]
          },
              "infos": [
                  {
                      "code": null,
                      "type": "warning",
                      "message": "Vertrag wurde vor Belieferungsbeginn storniert und kann daher nicht gek\u00fcndigt werden.",
                      "extraInfo": null
                  }
              ],
              "options": [
                  {
                      "icon": "check",
                      "name": "Kunden dar\u00fcber informieren",
                      "type": "termination_already_processed",
                      "order": 1,
                      "handler": "",
                      "recommended": true
                  }
       ]
    }
    ```

    ### Zusammenfassung

    Die Business-Logik definiert, wie ein KI-Agent Eingabeparameter verarbeitet und darauf basierend Entscheidungen trifft. Sie stellt sicher, dass Kundenanfragen strukturiert geprüft, validiert und entsprechend weiterverarbeitet werden. Durch automatisierte Regeln und Abläufe werden Prozesse effizient gesteuert und nachvollziehbar ausgeführt, wodurch manuelle Eingriffe minimiert werden.
  </Tab>

  <Tab title="Ausgabebehandlung">
    ### Ausgabebehandlung

    Funktionsweise und Beispiel

    <Tip>
      Die **Ausgabebehandlung** legt fest, wie der KI-Agent auf die Ergebnisse der Business-Logik reagiert. Sie bestimmt, ob und wie Informationen an den Nutzer oder ein System zurückgegeben werden.
    </Tip>

    ### Grundlegende Funktionsweise

    Die Ausgabebehandlung basiert auf **vordefinierten Regeln**, die auf den Ergebnissen der Business-Logik aufbauen. Sie steuert unter anderem:

    * **Textvorlagen:** Automatische Nachrichten an den Nutzer, z. B. Bestätigungen oder Rückfragen.

    * **Interaktionen:** Bereitstellung von Schaltflächen oder Formularen zur weiteren Verarbeitung.

    * **API-Aufrufe:** Weiterleitung der Ergebnisse an andere Systeme.

    * **Automatische Ticket-Aktionen:** Einträge ins System oder Abschluss von Vorgängen.

    In Enneo gibt es verschiedene **Aktionstypen**, die eine Reaktion auslösen können:

    * **Antwortvorschlag von KI:** Die KI generiert auf Basis des Kontexts eine Antwort an den Kunden.

    * **Textvorlage verwenden:** Eine definierte Nachricht wird direkt versendet.

    * **Interaktion:** Der Nutzer erhält Auswahlmöglichkeiten zur weiteren Bearbeitung.

    * **Ticket schließen, ohne zu antworten:** Das Anliegen wird automatisch abgeschlossen.

    * **Textvorlage senden und Ticket schließen:** Eine Bestätigung wird versendet, und das Ticket wird abgeschlossen.

    ### Beispiel: Ausgabebehandlung im Bankdaten-Agenten

    Die Business-Logik des Bankdaten-Agenten trifft Entscheidungen basierend auf den Eingabeparametern. Die **Ausgabebehandlung setzt darauf auf und steuert die Reaktion**.

    &#x20;

    **1. IBAN ist bereits im System**

    Falls die neue IBAN bereits hinterlegt ist (`iban_already_in_system`), wird automatisch eine **Textvorlage** an den Kunden gesendet:

    ```bash theme={null}
    vielen Dank für die Übermittlung der Bankdaten.

    Die Bankverbindung mit den Endziffern ...{{last4digits newIBAN}} ist bereits bei uns im System hinterlegt und wird von uns 
    {{#if payoutOnly}}für künftige Gutschriften{{else}}für monatliche Abschläge, Rechnungen sowie eventuelle Gutschriften{{/if}} verwendet.

    ```

    * **Aktion:** **Textvorlage verwenden**

    * **Bedingung:** `_action = iban_already_in_system`

    * **Automatische Ausführung:** **Ja** → Nachricht wird vollautomatisiert versendet.

    **2. IBAN ist ungültig**

    Falls die Business-Logik die neue IBAN als **ungültig** erkennt (`iban_invalid`), wird eine alternative Aktion ausgeführt. Der Kunde erhält eine Rückfrage, um eine korrekte IBAN anzugeben.

    ```bash theme={null}
    Die angegebene IBAN {{newIBAN}} ist nicht gültig.

    Bitte überprüfen Sie die IBAN auf eventuelle Tippfehler und senden uns die korrekte Bankverbindung, damit wir sie hinterlegen können. Vielen Dank für Ihre Unterstützung.

    ```

    * **Aktion:** **Interaktion oder Textvorlage verwenden**

    * **Bedingung:** `_action = iban_invalid`

    * **Automatische Ausführung:** **Nein** → Der Nutzer entscheidet über die weitere Vorgehensweise.

    **3. IBAN wurde erfolgreich hinterlegt**

    Sobald die IBAN erfolgreich ins System eingetragen wurde (`enter_into_system`), wird dem Kunden eine Bestätigung gesendet:

    ```bash theme={null}
    vielen Dank für deine Nachricht.

    Die Bankverbindung mit den Endziffern ...{{last4digits newIBAN}} haben wir bei uns im System hinterlegt und wird von uns 
    {{#if payoutOnly}}für künftige Gutschriften{{else}}für monatliche Abschläge, Rechnungen sowie eventuelle Gutschriften{{/if}} verwendet.

    ```

    * **Aktion:** **Textvorlage verwenden**

    * **Bedingung:** `_action = enter_into_system`

    * **Automatische Ausführung:** **Ja** → Nachricht wird direkt versendet.

    ### Zusammenfassung

    Die **Ausgabebehandlung verbindet die Business-Logik mit der Kommunikation**. Sie sorgt dafür, dass Entscheidungen automatisiert in Aktionen umgesetzt werden – sei es durch direkte Bestätigungen, Rückfragen oder Folgeprozesse. So werden Kundenanfragen effizient, nachvollziehbar und ohne manuelle Eingriffe abgewickelt.
  </Tab>

  <Tab title="Testen und veröffentlichen">
    ### Testen und Veröffentlichen

    Funktionsweise

    <Tip>
      **Testfälle** simulieren **reale Szenarien**, um sicherzustellen, dass der KI-Agent korrekt funktioniert. Jeder Testfall basiert auf einer **Ticket-ID** und bildet den gesamten **Bearbeitungsprozess** ab.
      &#x20;
      Regelmäßige Tests stellen sicher, dass der KI-Agent **stabil** und **zuverlässig** arbeitet, auch bei geänderten **Anforderungen** oder **Systemupdates**.
    </Tip>

    ### Testablauf

    * Eine reale Ticket-ID wird ausgewählt und hinzugefügt.

    * Der KI-Agent verarbeitet das Ticket basierend auf der definierten Logik.

    * Das Ergebnis wird als erfolgreich oder fehlgeschlagen angezeigt.

    ### Ergebnisinterpretation

    * *Erfolgreich*: Der Test bestätigt, dass der KI-Agent wie vorgesehen reagiert. Der KI-Agent kann nun veröffentlicht werden.

    * *Fehlgeschlagen*: In diesem Fall müssen die bestehenden Einstellungen geprüft werden. Anweisungen, Erkennungen, Eingabeparameter, Business-Logik und/oder Ausgabebehandlung sollten auf mögliche Inkonsistenzen untersucht werden. Nach der Anpassung sollte der Test erneut durchgeführt werden.
  </Tab>
</Tabs>
