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

# Gesprächs-Flows bauen

> Den Gesprächsablauf eines Agenten als Zustandsgraph modellieren.

Ein **Flow** beschreibt, wie ein Gespräch abläuft. Du baust ihn im **Flow-Editor** als **Zustandsgraph**: eine Landkarte aus Zuständen (States) und Übergängen zwischen ihnen.

## Der Flow-Editor

Der Flow-Editor ist eine grafische Oberfläche, in der du Zustände als Knoten anordnest und mit Verbindungen (Übergängen) verknüpfst. Du kannst den Graphen frei anordnen, Zustände hinzufügen, bearbeiten und wieder entfernen.

<Frame caption="Der Flow-Editor: links die Zustandsliste, rechts die Konfiguration des gewählten Zustands (Anweisungen, erlaubte Tools, Ausgänge).">
  <img src="https://mintcdn.com/msg-hello/N3O-B12QNjCabj-J/images/agenten/Agent_Entwurf.png?fit=max&auto=format&n=N3O-B12QNjCabj-J&q=85&s=e03d641f5deb5cdb736dfbc0d0d2df95" alt="Flow-Editor mit Zustandsliste und Zustands-Konfiguration" width="2294" height="1141" data-path="images/agenten/Agent_Entwurf.png" />
</Frame>

## Zustände

Ein Flow besteht aus **Zuständen** – den Schritten des Gesprächs. Ein Zustand trägt eigene Anweisungen, erlaubte Tools und Übergänge zu Folgezuständen.

Zwei zusätzliche Punkte schließen das Gespräch ab:

<CardGroup cols={2}>
  <Card title="Weiterleiten" icon="phone-arrow-up-right">
    Verbindet den Anruf an eine externe Rufnummer (z. B. an einen Menschen).
  </Card>

  <Card title="Auflegen" icon="phone-slash">
    Beendet den Anruf.
  </Card>
</CardGroup>

## Übergänge und Bedingungen

Ein Zustand besitzt **Outputs** – benannte, sortierte Übergänge zu Folgezuständen. Jeder Output ist an eine **Bedingung** geknüpft:

* ein **Tool**, das im Zustand aufgerufen wurde,
* ein erwarteter **Response-Code** (das Ergebnis des Tools),
* optional **negiert** ("trifft *nicht* zu").

Beim Durchlaufen prüft der Agent die Outputs in ihrer Reihenfolge. Der erste passende Übergang bestimmt den Folgezustand.

<Note>
  **Ohne Response-Code kein Übergang.** Löst ein Tool keinen deklarierten Response-Code aus, bleibt der Agent im aktuellen Zustand. So behältst du die Kontrolle über den Gesprächsverlauf.
</Note>

### Beispiel

```
[Begrüßung & Anliegen]
   ── classify → "termin"    →  [Termin buchen]
   ── classify → "sonstiges" →  [Weiterleiten: an Praxis]

[Termin buchen]
   ── book_appointment → "ok"        →  [Auflegen: Verabschiedung]
   ── book_appointment → "kein_slot" →  [Termin buchen]
```

## Tools im Zustand

Pro Zustand legst du fest, welche **Tools** der Agent dort verwenden darf. Sie stammen aus drei Kategorien (Details unter [Integrationen & Tools](/connectoren)):

* **[Built-In-Tools](/system-tools)** – plattform-eigen und ohne Konfiguration, etwa `classify` zum Einordnen des Anliegens. Die Kategorien werden zu Response-Codes für deine Übergänge.
* **[Connector-Tools](/connectoren)** – fachliche Aktionen wie „Termin buchen" oder „Patient suchen", die über einen Connector an dein System gehen (z. B. planorg PVS).
* **[MCP-Tools](/mcp-server)** – Tools eines angebundenen MCP-Servers.

<Note>
  `classify`, Weiterleitung und Auflegen funktionieren vollständig. Die Connector-Tool-Ausführung ist für die angebundenen Systeme (MCP-Server, planorg PVS, Demo-Connectoren) live.
</Note>

## Zustands-Anweisungen

Jeder Zustand kann eigene **Anweisungen** tragen, die nur dort gelten (zusätzlich zu den [Basis-Instructions](/agenten-verwalten) des Agenten).

<Tip>
  Wie du gute Anweisungen formulierst – global und pro Schritt – zeigt der [Prompting-Guide](/prompting-guide).
</Tip>

## Validierung

Der Editor prüft deinen Flow laufend – etwa ob alle Zustände erreichbar sind und Übergänge gültig sind. Offene Punkte werden angezeigt, bevor du veröffentlichst.

## Versionierung

<Steps>
  <Step title="Entwurf bearbeiten">
    Du arbeitest immer auf einem bearbeitbaren **Entwurf (Draft)**.
  </Step>

  <Step title="Veröffentlichen">
    Beim Veröffentlichen wird der Entwurf validiert und als unveränderliche, nummerierte **Version** gespeichert.
  </Step>

  <Step title="Aktivieren">
    Du setzt eine Version als **Live-Version**. Neue Anrufe nutzen sie ab sofort.
  </Step>
</Steps>

Frühere Versionen kannst du schreibgeschützt einsehen und bei Bedarf wieder als Entwurf öffnen.

## Flows importieren und exportieren

Du kannst einen kompletten Flow als **JSON-Datei exportieren** und an anderer Stelle wieder **importieren** – praktisch zum Sichern, Duplizieren oder Übertragen zwischen Agenten.

<Steps>
  <Step title="Exportieren">
    Öffne im Flow-Editor das **⋮-Menü** (oben rechts) und wähle **Flow exportieren**. Der aktuelle Flow wird als JSON-Datei heruntergeladen. Export ist auch in der schreibgeschützten Versionsansicht möglich.
  </Step>

  <Step title="Importieren">
    Öffne im **Entwurf** dasselbe Menü und wähle **Flow importieren**. Wähle eine zuvor exportierte JSON-Datei; ihr Inhalt ersetzt den aktuellen Entwurf. Prüfe das Ergebnis anschließend mit einem [Test-Anruf](/agenten-testen).
  </Step>
</Steps>

<Note>
  Der Import überschreibt den bestehenden **Entwurf**. Bereits veröffentlichte Versionen bleiben unberührt – der importierte Flow wird erst mit dem nächsten Veröffentlichen zu einer Version.
</Note>

### Aufbau einer Export-Datei

Die Datei enthält ein Objekt `flow` mit:

* **`startStateId`** – ID des Start-Zustands.
* **`statesOrder`** – Reihenfolge der Zustände.
* **`states`** – die Zustände, je Schlüssel eine Zustands-ID. Ein Zustand trägt:

  * **`type`** – `REGULAR`, `FORWARD` oder `HANGUP`.
  * **`name`** – Anzeigename.
  * **`stateInstructions`** – die [Anweisungen](#zustands-anweisungen) des Zustands.
  * **`allowedTools`** – erlaubte Tools (bei `REGULAR`).
  * **`outputsOrder`** / **`outputs`** – die Ausgänge. Jeder Ausgang hat ein Ziel (`transitionTo`) und **`conditions`** aus `tool`, `responseCode` und `isNegated`.

  Ein `FORWARD`-Zustand trägt zusätzlich die Ziel-Rufnummer, ein `HANGUP`-Zustand nur Name und Anweisungen.

### Beispiel

Ein exportierter Flow (Auszug aus dem Demo-Agenten „Forderungsmanagement"):

```json expandable theme={null}
{
  "flow": {
    "startStateId": "3b3aeb6f-3f07-4a7d-9e72-29ec1c728179",
    "statesOrder": [
      "3b3aeb6f-3f07-4a7d-9e72-29ec1c728179",
      "5ea95814-f003-4497-ab48-b7198ff6e4b1",
      "1d206d25-7529-407c-a29f-f516d66d2866",
      "ebc687d6-ed86-4ac8-b6ab-412061367298"
    ],
    "states": {
      "3b3aeb6f-3f07-4a7d-9e72-29ec1c728179": {
        "type": "REGULAR",
        "name": "S1 Begrüßung & Identifikation",
        "stateInstructions": "Begrüße den Anrufer und frage nach Geburtsdatum und Kundennummer. Frage so lange nach, bis beides genannt wurde.",
        "allowedTools": ["verify_customer"],
        "outputsOrder": ["0ee3293b-6e72-4472-9cb1-5a7f48a7b460"],
        "outputs": {
          "0ee3293b-6e72-4472-9cb1-5a7f48a7b460": {
            "name": "Ausgang 1",
            "transitionTo": "5ea95814-f003-4497-ab48-b7198ff6e4b1",
            "conditions": [
              { "tool": "verify_customer", "responseCode": "CUSTOMER_VERIFIED", "isNegated": false }
            ]
          }
        }
      },
      "5ea95814-f003-4497-ab48-b7198ff6e4b1": {
        "type": "REGULAR",
        "name": "S2 Saldo mitteilen & Absicht klären",
        "stateInstructions": "Rufe den offenen Betrag ab und lies ihn samt Rechnungsgrund und Fälligkeit vor. Frage, ob eine Ratenzahlung gewünscht ist.",
        "allowedTools": ["get_balance", "classify"],
        "outputsOrder": ["3477d025-58a5-4eb8-ae38-7369ada2ed13"],
        "outputs": {
          "3477d025-58a5-4eb8-ae38-7369ada2ed13": {
            "name": "Ausgang 1",
            "transitionTo": "1d206d25-7529-407c-a29f-f516d66d2866",
            "conditions": [
              { "tool": "classify", "responseCode": "Ratenzahlung gewünscht", "isNegated": false }
            ]
          }
        }
      },
      "1d206d25-7529-407c-a29f-f516d66d2866": {
        "type": "REGULAR",
        "name": "S3 Ratenplan aushandeln",
        "stateInstructions": "Frage nach Wunsch-Ratenanzahl ODER Wunschrate. Lies den Plan vor und hole ein klares Ja ein, bevor du verbindlich vereinbarst.",
        "allowedTools": ["propose_installment_plan", "agree_installment_plan"],
        "outputsOrder": ["0ac15add-b8f1-4f38-8c84-4b46352b2141"],
        "outputs": {
          "0ac15add-b8f1-4f38-8c84-4b46352b2141": {
            "name": "Ausgang 1",
            "transitionTo": "ebc687d6-ed86-4ac8-b6ab-412061367298",
            "conditions": [
              { "tool": "agree_installment_plan", "responseCode": "AGREEMENT_CONFIRMED", "isNegated": false }
            ]
          }
        }
      },
      "ebc687d6-ed86-4ac8-b6ab-412061367298": {
        "type": "HANGUP",
        "name": "Verabschiedung",
        "stateInstructions": "Fasse das Ergebnis in einem Satz zusammen, bedanke dich und verabschiede dich."
      }
    }
  }
}
```
