# Ausdrücke

Innerhalb von `{{ ... }}` können Sie nicht nur einen Wert einfügen, sondern auch rechnen, vergleichen oder Text abhängig von einer Bedingung wählen:

```
{{ $alter >= 18 ? "Willkommen!" : "Zugang ab 18 Jahren" }}
10 % Rabatt: {{ $preis * 0.9 }} €
{{ upper(first_name) ~ ", guten Tag!" }}
```

## Woraus ein Ausdruck besteht

| Was | Schreibweise | Beispiel |
|---|---|---|
| Kontaktvariable | `$name` | `$stadt` |
| Variable mit Leerzeichen im Namen | `var("name")` | `var("Name des Kunden")` |
| Daten des Kontakts | Name ohne `$` | `first_name`, `phone` |
| Globale Variable | `global("name")` | `global("Kurs (USD)")` |
| Text | in Anführungszeichen `"..."` oder `'...'` | `"Guten Tag"` |
| Zahl | Ziffern, Nachkommastellen mit Punkt | `10`, `0.9` |
| Wahrheitswert | `true`, `false` | |
| Leerer Wert | `null` | |
| Funktion | `name(argumente)` | `round($preis, 2)` |

Innerhalb von Anführungszeichen wird nichts ersetzt: `{{ "preis $a" }}` gibt `preis $a` aus.

## Rechnen

| Operator | Bedeutung | Beispiel | Ergebnis |
|---|---|---|---|
| `+` | Addition | `{{ 2 + 3 }}` | `5` |
| `-` | Subtraktion | `{{ 10 - 4 }}` | `6` |
| `*` | Multiplikation | `{{ 3 * 4 }}` | `12` |
| `/` | Division | `{{ 10 / 4 }}` | `2.5` |
| `%` | Rest einer Division | `{{ 10 % 3 }}` | `1` |
| `**` | Potenz | `{{ 2 ** 10 }}` | `1024` |

Klammern ändern die Reihenfolge: `{{ ($preis + $lieferung) * 2 }}`.

Dezimalzahlen werden ohne überflüssige Stellen ausgegeben: `{{ 0.1 + 0.2 }}` ergibt `0.3`. Zum Runden verwenden Sie [`round`](03-functions.md#mathematik), für die Ausgabe mit Trennzeichen [`number_format`](03-functions.md#text).

## Vergleiche

| Operator | Bedeutung |
|---|---|
| `==` | gleich |
| `!=` | ungleich |
| `>`, `>=` | größer, größer oder gleich |
| `<`, `<=` | kleiner, kleiner oder gleich |

Stehen auf beiden Seiten Zahlen — auch als Text gespeicherte, wie Variablenwerte —, werden Zahlen verglichen: `"10" > 9` ist wahr.

Ein Vergleich, der allein ausgegeben wird, ergibt `true` oder `false`: `{{ $alter >= 18 }}`.

## Logik

| Operator | Bedeutung |
|---|---|
| `and` oder `&&` | und |
| `or` oder `\|\|` | oder |
| `not` oder `!` | nicht |

```
{{ $alter >= 18 and $stadt == "Berlin" ? "Wir laden Sie ins Büro ein" : "Wir arbeiten online" }}
```

## Bedingung

`bedingung ? wenn_ja : wenn_nein` — wählt eine von zwei Varianten:

```
{{ $punkte >= 100 ? "Ihnen steht ein Geschenk zu" : "Bis zum Geschenk fehlen noch " ~ (100 - $punkte) ~ " Punkte" }}
```

Die Kurzform `wert ?: ersatz` gibt den Wert aus, wenn er nicht leer ist, sonst den Ersatz:

```
Guten Tag, {{ first_name ?: "liebe Kundin, lieber Kunde" }}!
```

## Ersatzwert für fehlende Daten

`wert ?? ersatz` — fehlt der Wert ganz (beim Kontakt ist keine Telefonnummer hinterlegt, die Variable ist nicht gefüllt), wird der Ersatz eingesetzt:

```
Telefon: {{ phone ?? "nicht angegeben" }}
```

## Arbeit mit Text

| Operator | Bedeutung | Beispiel |
|---|---|---|
| `~` | Text verbinden | `{{ first_name ~ " " ~ last_name }}` |
| `contains` | enthält | `{{ $antwort contains "ja" ? "Prima!" : "Schade" }}` |
| `starts with` | beginnt mit | `{{ phone starts with "+49" ? "Deutschland" : "Anderes Land" }}` |
| `ends with` | endet mit | `{{ email ends with "@gmail.com" }}` |
| `in` | ist in der Liste | `{{ $stadt in ["Berlin", "Hamburg"] ? "Lieferung möglich" : "Selbstabholung" }}` |
| `not in` | ist nicht in der Liste | `{{ $tarif not in ["pro", "business"] }}` |

`contains`, `starts with` und `ends with` unterscheiden Groß- und Kleinschreibung. Damit das keine Rolle spielt, bringen Sie den Text in eine Schreibweise: `{{ lower($antwort) contains "ja" }}`.

## Funktionen in Ausdrücken

Funktionen lassen sich ineinander verschachteln und mit Operatoren kombinieren:

```
{{ capitalize(lower(var("Name des Kunden"))) }}
{{ round(($preis + $lieferung) * 0.9, 2) }}
{{ number_format(global("Kurs (USD)") * $summe, 2) }} €
```

Die Liste der Funktionen finden Sie in der [Referenz](https://support.watbot.org/de/chatbots/templates/functions).

## Was nicht geht

In Ausdrücken gibt es keine Schleifen, keine Zuweisungen und keinen Zugriff auf interne Daten der Plattform — nur Operatoren und Funktionen aus der Referenz. Mehr zu den Grenzen unter [Fehler und Grenzen](https://support.watbot.org/de/chatbots/templates/errors).
