# JavaScript-Interpreter

Der Block führt Ihren JavaScript-Code aus: Er rechnet, wandelt Daten um, ändert Variablen und Tags des Kontakts und entscheidet, wohin das Szenario weitergeht. Von sich aus sendet der Block nichts in den Chat — nur das, was Sie aus dem Code senden.

![Einstellungspanel des Blocks „JavaScript-Interpreter“](https://support.watbot.org/_media/de/01-chatbots/03-blocks/06-developer/_images/javascript.webp?v=1791781229)

## Einstellungen

Der Block hat ein einziges Feld — den Code-Editor. Beginnen Sie, den Namen einer Funktion zu tippen, und der Editor schlägt eine Ergänzung vor.

![Code-Editor mit Vorschlag: zu „setCon“ werden setContactTag() und setContactVariable() angeboten](https://support.watbot.org/_media/de/01-chatbots/03-blocks/06-developer/_images/javascript-hint.webp?v=1791781229)

## Was dem Code zur Verfügung steht

Die Daten des Kontakts sind fertige Variablen. Alle Werte sind Zeichenfolgen. Fehlt dem Kontakt etwas, gibt es die Variable nicht — prüfen Sie das mit `typeof phone !== 'undefined'`.

| Variable | Was darin steht |
|---|---|
| `id` | ID des Kontakts auf der Plattform |
| `name`, `first_name`, `last_name` | Der vollständige Name, das erste Wort des Namens, das zweite Wort |
| `phone`, `email`, `address` | Telefon, E-Mail, Adresse |
| `username` | Benutzername im Messenger |
| `telegram_id`, `max_id` | ID der Person in Telegram und MAX |
| `created_at` | Datum, an dem der Kontakt entstanden ist, in der Form `2026-01-31 12:00:00` |
| `bot_id` | ID des Bots |

Funktionen:

| Funktion | Was sie tut |
|---|---|
| `getContactVariable(name)` | Gibt den Wert einer Kontaktvariable zurück oder `undefined`, wenn es sie nicht gibt. Der Wert ist eine Zeichenfolge: Für Berechnungen wandeln Sie ihn mit `Number()` um |
| `setContactVariable(name, value)` | Schreibt eine Kontaktvariable. Der Wert ist eine Zeichenfolge, eine Zahl oder `true`/`false`. Ein Objekt oder Array wandeln Sie zuerst in eine Zeichenfolge um: `JSON.stringify(value)` |
| `deleteContactVariable(name)` | Löscht eine Kontaktvariable |
| `getContactTags()` | Gibt ein Array mit den Tags des Kontakts zurück |
| `hasContactTag(name)` | `true`, wenn der Kontakt den Tag hat |
| `setContactTag(name)` | Fügt einen Tag hinzu |
| `deleteContactTag(name)` | Entfernt einen Tag |
| `getGlobalVariable(name)` | Gibt eine globale Variable des Bots zurück |
| `setGlobalVariable(name, value)` | Schreibt eine globale Variable. Der Wert wird als Zeichenfolge gespeichert |
| `deleteGlobalVariable(name)` | Löscht eine globale Variable |
| `sendMessage(text)` | Sendet dem Kontakt einen Text. Pro Ausführung bis zu zehn Nachrichten |
| `goToBlock(id)` | Schickt den Kontakt in den Block mit der angegebenen ID. Pro Ausführung nur ein Aufruf |
| `disableContinue()` | Schaltet die Verbindung „Fortsetzen“ für diese Ausführung ab |
| `hash_hmac(algo, text, key, format)` | HMAC-Signatur. Algorithmus — `md5`, `sha1`, `sha256`, `sha512` oder `md4`. Das Ergebnis ist hexadezimal, und wenn Sie als vierten Parameter `'base64'` übergeben — in Base64 |
| `base64_encode(text)`, `base64_decode(text)` | Base64-Kodierung und -Dekodierung |

Parameter, Rückgabewerte und Beispiele zu jeder Funktion finden Sie im Abschnitt [JavaScript API](https://support.watbot.org/de/api/javascript).

Variablen und Tags werden dem Kontakt geschrieben, nachdem der Code ohne Fehler durchgelaufen ist. Innerhalb des Codes sieht `getContactVariable` bereits den Wert, den Sie gerade geschrieben haben.

Einen Preis mit Rabatt berechnen und das Ergebnis speichern:

```js
var price = Number(getContactVariable('preis'));
var total = Math.round(price * 0.9);
setContactVariable('gesamt', total);
```

Der nächste Block zeigt das Ergebnis mit dem [Platzhalter](https://support.watbot.org/de/chatbots/templates) `{{ $gesamt }}`.

Einen Kontakt mit Tag in einen eigenen Zweig schicken:

```js
if (hasContactTag('vip')) {
    goToBlock(12345);
    disableContinue();
}
```

Setzen Sie statt `12345` die ID des gewünschten Blocks ein — sie steht in den Einstellungen des Blocks. `goToBlock` allein hebt die Verbindung „Fortsetzen“ nicht auf: Ohne `disableContinue()` führt der Bot sowohl den angegebenen Block aus als auch den, der an „Fortsetzen“ angeschlossen ist.

## Ausgänge

- „Fortsetzen“ — wird nach der Ausführung des Codes ausgelöst, wenn der Code `disableContinue()` nicht aufgerufen hat.

## Grenzen

- Die Sprache ist JavaScript nach dem Standard ES5: ohne `let` und `const`, Pfeilfunktionen und Template-Strings.
- Reguläre Ausdrücke — ohne Lookahead, Lookbehind und Rückverweise, mehr dazu unter [Sprache](https://support.watbot.org/de/api/javascript#sprache).
- Der Code — bis zu 16 384 Zeichen.
- Für die Ausführung — 5 Sekunden. Code, der länger braucht, wird mit einem Fehler abgebrochen.
- Netzwerkanfragen aus dem Code sind nicht möglich — dafür gibt es den Block „HTTP-Anfrage“.

## Wenn der Code nicht funktioniert

Öffnen Sie das „Ausführungsprotokoll“ in den Einstellungen des Blocks. Der Eintrag zeigt den Quellcode, die Liste der ausgeführten Aktionen und den Wert des letzten Ausdrucks — er eignet sich gut zur Fehlersuche: Schreiben Sie ans Ende des Codes den Namen einer Variable, und ihr Wert landet im Protokoll.

![„Ausführungsprotokoll“ des JavaScript-Blocks: Quellcode, Wert des letzten Ausdrucks und Liste der Aktionen](https://support.watbot.org/_media/de/01-chatbots/03-blocks/06-developer/_images/javascript-log.webp?v=1791781229)

> [!WARNING]
> Endet der Code mit einem Fehler, geht der Fehlertext an den Kontakt in den Chat, und das Szenario läuft über die Verbindung „Fortsetzen“ weiter. Prüfen Sie den Code im Bot-Test, bevor Sie ihn auf Menschen loslassen.
