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

# Best Practices

> Muster, die Flows in der Produktion zuverlässig machen

## Beschrifte Kanten wie Tool-Beschreibungen

Da Edge-Labels wortwörtlich zu LLM-Tool-Beschreibungen werden, formuliere sie als **Bedingungen aus Sicht des Anrufers**:

* ✅ `caller confirms they are an existing customer`
* ✅ `caller wants to cancel or reschedule`
* ❌ `yes`, `path A`, `continue`

Achte darauf, dass Labels auf derselben Ebene sich **gegenseitig ausschließen** und alle realistischen Fälle abdecken. Überschneiden sich zwei Labels, wird das Routing zum Münzwurf.

## Halte Agenten klein und fokussiert

Ein Agent = ein Job (qualifizieren, Abrechnungsfragen beantworten, Termine buchen). Kurze, gezielte Anweisungen pro Agent schlagen einen Mega-Agenten mit einer Textwand um Längen. Übergaben sind günstig – nutze sie.

## Validiere Daten mit Collect-Knoten, nicht mit Prompts

Per Sprache übertragene E-Mail-Adressen und Telefonnummern sind fehleranfällig. `collect`-Knoten bestätigen und validieren sie („War das m-e-y-e-r?“) und fahren erst bei Erfolg fort. Benenne die **Variable** immer eindeutig (`callback_phone`, nicht `var1`) – diese Namen tauchen später in Webhooks und Anrufdetails auf.

## Plane die Fehlerpfade mit

* Gib `collect`-Knoten eine `failed`-Kante, die zu etwas Sinnvollem führt (eine Weiterleitung an einen Menschen oder eine höfliche Verabschiedung).
* Setze das `fallback`-Verhalten beim Warm Transfer bewusst: `continue` für optionale Übergaben, `cold_transfer`, wenn der Anrufer jemanden *unbedingt* erreichen muss.
* Beende jeden Zweig mit einem `end`-Knoten und einer passenden Verabschiedung.

## Teste mit Web-Anrufen und beobachte die Events

Führe nach jeder Änderung [Testanrufe im Browser](/quickstart#2-test-it-with-a-web-call) durch. In der Anrufdetailansicht zeigt das Event-Log Knoten-Übergänge, Tool-Aufrufe, Collect-Ergebnisse und Transfer-Ausgänge – lies es wie einen Stack-Trace, wenn sich der Flow nicht wie erwartet verhält.

## Nutze asynchrone Tools für alles, was langsamer als \~2 Sekunden ist

Synchrone Tool-Aufrufe frieren die Konversation ein. Markiere langsame Webhooks als `async` und richte Füllphrasen ein – der Assistent bleibt reaktionsfähig, während die Anfrage im Hintergrund läuft. Siehe den [Tool-Knoten](/flow-builder/nodes#tool).

## Starte beim Prompt, wachse in den Flow hinein

Prototype das Verhalten zuerst mit einem einfachen [System-Prompt](/assistants/overview). Sobald der Anruf klar unterscheidbare Phasen bekommt oder eine garantierte Datenerfassung braucht, überführe diese Struktur in einen Flow – Agent-Knoten mit leeren Anweisungen erben den System-Prompt, wodurch die Migration schrittweise erfolgen kann.
