# Funktionsreferenz

Eine Funktion wird so aufgerufen: `{{ name(argument1, argument2) }}`. Argumente sind Text in Anführungszeichen, Zahlen, Variablen (`$name`) und in [Ausdrücken](https://support.watbot.org/de/chatbots/templates/expressions) auch Ergebnisse anderer Funktionen.

Mit **einfach** markierte Funktionen funktionieren überall, wo es Platzhalter gibt. Die übrigen nur in Nachrichtentexten, Bedingungen und einigen Blockeinstellungen, siehe [Wo Platzhalter funktionieren](https://support.watbot.org/de/chatbots/templates/where).

## Text

| Funktion | Was sie tut | Beispiel | Ergebnis |
|---|---|---|---|
| `upper(text)` | Alle Buchstaben groß | `{{ upper("hallo") }}` | `HALLO` |
| `lower(text)` | Alle Buchstaben klein | `{{ lower("HALLO") }}` | `hallo` |
| `capitalize(text)` | Erster Buchstabe groß | `{{ capitalize("anna") }}` | `Anna` |
| `len(text)` | Anzahl der Zeichen | `{{ len("Montag") }}` | `6` |
| `trim(text)` | Entfernt Leerzeichen am Rand | `{{ trim("  ja ") }}` | `ja` |
| `replace(text, was, womit)` | Ersetzt alle Vorkommen | `{{ replace("0151-000-00", "-", "") }}` | `015100000` |
| `substr(text, start, länge)` | Teil eines Textes; Start bei 0 | `{{ substr("Montag", 0, 3) }}` | `Mon` |
| `number_format(zahl, stellen, dezimaltrenner, tausendertrenner)` | Zahl mit Trennzeichen. Standard: 0 Stellen, Komma und Leerzeichen | `{{ number_format(1234.5, 2) }}` | `1 234,50` |
| `urlencode(text)` | Kodiert Text für einen Link | `https://site.de/?q={{ urlencode($suche) }}` | |
| `randomText(variante1, variante2, ...)` | Eine Variante nach Zufall | `{{ randomText("Hallo", "Guten Tag") }}` | |
| `strRandom(länge, groß)` | Zufällige Zeichenfolge aus Buchstaben und Ziffern, bis 1000 Zeichen. `true` als zweites Argument — nur Großbuchstaben | `{{ strRandom(8, true) }}` | `K3JD8QWZ` |

Alle Funktionen dieses Abschnitts sind **einfach**.

## Mathematik

| Funktion | Was sie tut | Beispiel | Ergebnis |
|---|---|---|---|
| `round(zahl, stellen)` | Runden, standardmäßig auf eine ganze Zahl | `{{ round(2.567, 2) }}` | `2.57` |
| `ceil(zahl)` | Aufrunden | `{{ ceil(2.1) }}` | `3` |
| `floor(zahl)` | Abrunden | `{{ floor(2.9) }}` | `2` |
| `abs(zahl)` | Betrag einer Zahl | `{{ abs(-5) }}` | `5` |
| `sqrt(zahl)` | Quadratwurzel | `{{ sqrt(16) }}` | `4` |
| `max(a, b, ...)` | Größter Wert | `{{ max(3, 7, 5) }}` | `7` |
| `min(a, b, ...)` | Kleinster Wert | `{{ min(3, 7, 5) }}` | `3` |
| `rand(von, bis)` | Zufällige ganze Zahl | `{{ rand(1, 100) }}` | |

Alle Funktionen dieses Abschnitts sind **einfach**. Addition, Subtraktion, Multiplikation, Division und Potenz schreiben Sie mit Zeichen, siehe [Rechnen](https://support.watbot.org/de/chatbots/templates/expressions#rechnen).

### Veraltete Funktionen

Diese Funktionen funktionieren weiterhin, aber in neuen Texten schreiben Sie die Zeichen — das ist kürzer und verständlicher:

| Veraltete Funktion | Neue Schreibweise |
|---|---|
| `sum($a, $b)`, `сумма($a, $b)` | `{{ $a + $b }}` |
| `diff($a, $b)`, `разность($a, $b)` | `{{ $a - $b }}` |
| `multiplication($a, $b)`, `произведение($a, $b)` | `{{ $a * $b }}` |
| `div($a, $b)`, `деление($a, $b)` | `{{ $a / $b }}` |
| `pow($a, $b)` | `{{ $a ** $b }}` |

Zum Beispiel statt `{{ sum($preis, $lieferung) }}` — `{{ $preis + $lieferung }}`.

## Datum und Uhrzeit

> [!WARNING]
> Die Zeit wird in UTC berechnet. Für Berlin addieren Sie im Winter eine Stunde, im Sommer zwei: `{{ date("H:i", "+1 hour") }}`.

| Funktion | Was sie tut |
|---|---|
| `date(format, datum)` | Datum im gewünschten Format. Ohne Datum — jetzt. Datum — `"2026-10-02"`, `"+7 days"`, `"next monday"` usw. |
| `time()` | Aktuelle Zeit in Sekunden seit 1970 (Unix-Zeit) |
| `modifyDateTime(datum, datumsformat, ausgabeformat, verschiebung)` | Liest ein Datum aus einer Variable in ihrem Format, verschiebt es und gibt es in einem anderen Format aus |
| `modifyUnixTime(unix_zeit, verschiebung, format)` | Verschiebt eine Unix-Zeit; mit Format wird ein Datum ausgegeben, ohne Format die neue Unix-Zeit |

Beispiele:

```
Heute ist der {{ date("d.m.Y") }}
Wir erwarten Sie am {{ date("d.m.Y", "+3 days") }}
Der Termin wurde auf den {{ modifyDateTime($termin_datum, "d.m.Y", "d.m.Y", "+1 day") }} verschoben
Zugang bis {{ modifyUnixTime(time(), "+30 days", "d.m.Y") }}
```

Die wichtigsten Formatzeichen:

| Zeichen | Bedeutung | Beispiel |
|---|---|---|
| `d` | Tag mit führender Null | `02` |
| `j` | Tag ohne führende Null | `2` |
| `m` | Monat mit führender Null | `10` |
| `n` | Monat ohne führende Null | `10` |
| `Y` | Jahr | `2026` |
| `H` | Stunden, 24-Stunden-Format | `14` |
| `i` | Minuten | `05` |
| `s` | Sekunden | `09` |
| `N` | Wochentag, 1 — Montag | `5` |

Die Verschiebung wird auf Englisch geschrieben: `"+1 day"`, `"-2 hours"`, `"+1 month"`, `"next friday"`.

Alle Funktionen dieses Abschnitts sind **einfach**.

> [!NOTE]
> In älteren Szenarien findet sich die Ersetzung über ein Fragezeichen: `{{ date("d.m.Y", "+? days", $tage) }}` — `?` wird durch das nächste Argument ersetzt. Das funktioniert weiterhin, in Ausdrücken ist es aber einfacher, Text zu verbinden: `{{ date("d.m.Y", "+" ~ $tage ~ " days") }}`.

## Bedingungen

| Funktion | Was sie tut |
|---|---|
| `printByCondition(a, operator, b, wenn_ja, wenn_nein)` | Vergleicht `a` und `b` und gibt eine der Varianten aus. Operatoren: `=`, `!=`, `>`, `>=`, `<`, `<=`. Ist `a` oder `b` leer, wird `wenn_nein` ausgegeben |
| `printByExistsCondition(wert, wenn_ja, wenn_nein)` | `wenn_ja`, wenn der Wert nicht leer ist, sonst `wenn_nein` |

```
{{ printByCondition($punkte, ">=", 100, "Das Geschenk gehört Ihnen!", "Sammeln Sie weiter") }}
{{ printByExistsCondition($telefonnummer, "Telefonnummer gespeichert", "Bitte hinterlassen Sie Ihre Telefonnummer") }}
```

Beide Funktionen sind **einfach**. In Ausdrücken ist der Bedingungsoperator praktischer: `{{ $punkte >= 100 ? "Das Geschenk gehört Ihnen!" : "Sammeln Sie weiter" }}`.

## Daten des Kontakts und des Bots

| Funktion | Was sie tut | Einfach |
|---|---|---|
| `var("name")` | Wert einer Kontaktvariable; praktisch für Namen mit Leerzeichen | ja |
| `global("name")` | Wert einer globalen Variable | ja |
| `printContactTags()` | Tags des Kontakts, durch Kommas getrennt | ja |
| `printContactVariables()` | Alle Textvariablen des Kontakts als Liste „- name: wert“ | ja |
| `printGlobalVariables()` | Alle globalen Variablen des Bots als Liste „- name: wert“ | ja |
| `getBalance("währung", "bezeichnung")` | Kontostand des Kontakts in der Währung, mit Währungszeichen: `getBalance("EUR")`. Mit zweitem Argument — Zahl und Ihre Bezeichnung: `getBalance("PTS", "Punkte")` → `150 Punkte` | nein |
| `getCartAmount()` | Summe des Warenkorbs aus dem alten Block „Warenkorb“ | nein |

> [!WARNING]
> `printGlobalVariables()` gibt **alle** globalen Variablen aus. Verwenden Sie sie nicht in Nachrichten an Kontakte, wenn in globalen Variablen Schlüssel oder Passwörter gespeichert sind.

## Variablen

Diese Funktionen schreiben das Ergebnis in eine Kontaktvariable und geben selbst nichts aus.

| Funktion | Was sie tut |
|---|---|
| `setSumVariablesIntoVariable("ergebnis", a, b, ...)` | Speichert die Summe in der Variable `ergebnis` |
| `setMultiplicationVariablesIntoVariable("ergebnis", a, b, ...)` | Speichert das Produkt in der Variable `ergebnis` |

Summanden sind Zahlen oder Variablennamen in Anführungszeichen, mindestens zwei: `{{ setSumVariablesIntoVariable("ergebnis", "preis", "lieferung", 100) }}`.

Für Berechnungen ist der Block „Variablenoperation“ praktischer — dort können Sie ebenfalls Ausdrücke verwenden.

## Listen

| Funktion | Was sie tut |
|---|---|
| `getListRow("eintrags-id", "vorlage")` | Gibt einen Eintrag einer Liste nach der Vorlage aus |
| `getListRows("listen-id", "vorlage", anzahl, "sortierfeld", "asc" oder "desc", "trennzeichen")` | Gibt Einträge einer Liste nach der Vorlage aus, standardmäßig 10, höchstens 50, jeder in einer neuen Zeile |

In der Vorlage steht ein Feld des Eintrags in einfachen geschweiften Klammern: `{Bezeichnung}`, `{Preis}`. In `getListRows` können Sie eine Kontaktvariable in die Vorlage einfügen: `{$stadt}`.

```
{{ getListRows("6523f0c2a1b2c3d4e5f60718", "{Bezeichnung} — {Preis} €", 5, "Preis", "asc") }}
```

Der Bot liest nur Listen seines Eigentümers.

## Empfehlungsprogramm

| Funktion | Was sie ausgibt |
|---|---|
| `getInviteLink()` | Persönlichen Empfehlungslink des Kontakts (Telegram, MAX) |
| `getDirectInviteLink(szenario_id)` | Direkten Link zum Bot mit Empfehlungsparameter; mit Szenario — Start dieses Szenarios |
| `getInviteLinkWithSchema(szenario_id)` | Empfehlungslink zum Start eines Szenarios |
| `getLinkBySchema(szenario_id)` | Link zum Start eines Szenarios, ohne Empfehlungsparameter |
| `getReferrals(anzahl, "tag")` | Liste der vom Kontakt Eingeladenen (erste Ebene): „1. Name - username“, standardmäßig 10, höchstens 100. Mit Tag — nur mit diesem Tag |
| `getReferralsByDepth(ebene, anzahl, "tag")` | Dasselbe für die angegebene Ebene |
| `getReferralsCount("tag")` | Anzahl der Eingeladenen auf allen Ebenen |
| `getReferralsCountByDepth(ebene, "tag")` | Anzahl der Eingeladenen auf der angegebenen Ebene; 0 — auf allen |
| `getReferrer(ebene)` | Wer den Kontakt eingeladen hat; 2 — wer den Einladenden eingeladen hat usw. |
| `getReferrers(anzahl_ebenen, ab_ebene, "tag")` | Liste der Einladenden nach oben entlang der Kette |

Die Funktionen dieses Abschnitts sind nicht einfach. Veraltete Varianten mit `Telegram` im Namen (`getTelegramInviteLink` und andere) funktionieren genauso.

## Unterschiedliche Texte für Messenger

Den Text in der Funktion sehen nur Kontakte aus dem angegebenen Messenger, alle anderen erhalten eine leere Stelle:

| Funktion | Messenger |
|---|---|
| `messageToTelegram("text")` | Telegram |
| `messageToViber("text")` | Viber |
| `messageToVK("text")` | VK |
| `messageToWeb("text")` | Webchat auf der Website |

```
Schreiben Sie uns{{ messageToTelegram(" in Telegram: @example_support") }}{{ messageToWeb(" direkt in diesem Chat") }}
```

Die Funktionen dieses Abschnitts sind nicht einfach. In einem Ausdruck muss eine solche Funktion allein stehen — sie darf nicht in eine Bedingung oder eine andere Funktion gesetzt werden.
