# Fehler und Grenzen

## Was der Kontakt sieht

Lässt sich ein Ausdruck nicht berechnen — zum Beispiel steht in der Variable Text statt einer Zahl oder die Funktion existiert nicht —, sieht der Kontakt an dieser Stelle nichts. Bei einem Tippfehler (einer nicht geschlossenen Klammer) bleibt der Platzhalter so im Text, wie er geschrieben ist. In beiden Fällen erscheint der Grund in der Bot-Vorschau und im Protokoll des Blocks, und der übrige Nachrichtentext wird wie gewohnt gesendet.

Als Ausdruck gilt für den Bot Text, der eine Variable mit `$` oder einen Funktionsaufruf wie `round(` enthält. Fehlt beides — etwa bei `{{#each items}}` —, lässt der Bot den Text unverändert und wertet ihn nicht als Fehler. So gehen keine Texte kaputt, in denen geschweifte Klammern für etwas anderes gebraucht werden.

## Wo Sie den Grund finden

- **Block-Editor.** Während Sie tippen, werden die Teile eines Platzhalters farbig markiert; ein Platzhalter, der nicht funktioniert, wird rot unterstrichen, und unter dem Feld erscheint der Grund.
- **Bot-Vorschau.** Klicken Sie im Editor auf „Bot testen“ und gehen Sie das Szenario durch. Hat ein Platzhalter nicht funktioniert, erscheint unter dem Chat ein gelber Block: Name des Blocks (Link zum Block im Schema), der Platzhalter selbst und der Grund.
- **Blockprotokoll.** Bei Blöcken mit Protokoll (HTTP-Anfrage und andere) werden Platzhalterfehler im Ausführungsprotokoll im Abschnitt „Template errors“ festgehalten.

## Häufige Fehler

| Was geschrieben wurde | Was falsch ist | So beheben Sie es |
|---|---|---|
| Variablenname mit Leerzeichen über `$` geschrieben | Der Bot liest den Namen nach `$` nur bis zum Leerzeichen | `{{ var("Name des Kunden") }}`, siehe [Namen mit Leerzeichen](https://support.watbot.org/de/chatbots/templates/data#wenn-der-variablenname-leerzeichen-enthält) |
| Globale Variable im Ausdruck ohne `global` geschrieben | In Ausdrücken werden globale Variablen nur über die Funktion gelesen | `{{ global("Kurs (USD)") * 2 }}` |
| `{{ round($preis * 0.9 }}` | Die Klammer ist nicht geschlossen | `{{ round($preis * 0.9) }}` |
| `{{ rabatt($preis, 10) }}` | Diese Funktion gibt es nicht | Prüfen Sie den Namen in der [Funktionsreferenz](https://support.watbot.org/de/chatbots/templates/functions) |
| `{{ $stadt * 2 }}` | In der Variable steht Text, keine Zahl | Prüfen Sie, dass in der Variable eine Zahl steht |
| `{{ phone + 1 }}` bei leerer Telefonnummer | Leerer Wert | Geben Sie einen Ersatzwert an: `{{ (phone ?? 0) + 1 }}` |
| `{{ upper(getInviteLink()) }}` in einem Button | In Buttons sind nur einfache Funktionen verfügbar | Verschieben Sie den Link in den Nachrichtentext |
| `{{ $a > 1 ? messageToTelegram("...") : "" }}` | Funktionen, die Nachrichten senden oder Variablen schreiben, dürfen nicht in einem Ausdruck stehen | Verwenden Sie die Funktion als eigenen Platzhalter |

## Grenzen

| Was | Grenze |
|---|---|
| Länge eines Ausdrucks in `{{ ... }}` | 1000 Zeichen. Längerer Text bleibt unverändert |
| Ergebnis eines Platzhalters | 10 000 Zeichen über die Länge der gelesenen Variablen hinaus. Der Wert einer Variable wird in jeder Länge vollständig ausgegeben, auch über `var()`, mit `trim`, `upper`, `len` darauf und mit angehängtem Text: `{{ $x ~ "!" }}` |
| Ausdrücke in einem Text | 200 |
| Funktionen in einem Text | 100 einfache und 10 übrige. Darüber hinaus werden Funktionen nicht ausgeführt: Ein eigener Platzhalter wie `{{ getInviteLink() }}` bleibt so im Text, wie er geschrieben ist, und innerhalb eines Ausdrucks steht an der Stelle der Funktion nichts und im Protokoll erscheint ein Fehler. Das Lesen einer Variable (`$name`, `var()`, `global()`) zählt nicht als Funktion |

In Ausdrücken sind reguläre Ausdrücke (`matches`), Bereiche (`1..10`) und der Zugriff auf interne Daten der Plattform nicht verfügbar.
