KI fragen
Deutsch DE
Zu Watbot

JavaScript API

Mehrere Blöcke des Chatbots führen Ihren JavaScript-Code aus. Der Code rechnet, wertet Antworten externer Dienste aus, ändert Variablen und Tags des Kontakts, sendet Nachrichten und entscheidet, wohin das Szenario weitergeht. Dieser Abschnitt ist eine Referenz für alle, die solchen Code schreiben.

Wo der Code ausgeführt wird

Wo Wann der Code startet Was ihm außer den Funktionen zur Verfügung steht
Block „JavaScript-Interpreter“ Der Kontakt hat den Block erreicht Daten des Kontakts
Block „HTTP-Anfrage“, Feld „Antwort mit JavaScript verarbeiten“ Der Server hat auf die Anfrage geantwortet Daten des Kontakts und die Serverantwort response
Block „Eingehender Webhook“ An der Adresse des Blocks ist eine Anfrage eingegangen Die Anfrage request, die Daten des Kontakts erst, nachdem der Code ihn gefunden hat
Block „Zeilen aus Google Sheets lesen“, Feld „JavaScript zur Tabellenverarbeitung“ Der Block hat Zeilen in der Tabelle gefunden Daten des Kontakts und die gefundenen Zeilen sheet.data

Was in diesen Daten steht, beschreibt die Seite „Eingebaute Variablen“. Die Funktionen sind in allen Blöcken dieselben:

Seite Funktionen
Variablen getContactVariable, setContactVariable, deleteContactVariable, getGlobalVariable, setGlobalVariable, deleteGlobalVariable
Tags getContactTags, hasContactTag, setContactTag, deleteContactTag
Nachrichten und Sprünge sendMessage, goToBlock, disableContinue
Kontakt auswählen setContactById und weitere — nur im Block „Eingehender Webhook“
Signaturen und Base64 hash_hmac, base64_encode, base64_decode

Wie der Code ausgeführt wird

  1. Der Code läuft vollständig auf einem separaten Server. Die Funktionen ändern den Kontakt nicht sofort, sondern merken sich, was zu tun ist: welche Variablen und Tags geschrieben, welche Nachrichten gesendet werden, zu welchem Block gesprungen wird.
  2. Der Code endet ohne Fehler — der Bot schreibt die Variablen und Tags des Kontakts und die globalen Variablen des Bots, sendet dann in der Reihenfolge der Aufrufe die Nachrichten und leitet den Kontakt in den Block aus goToBlock. Danach wird die Verbindung „Fortsetzen“ ausgelöst, sofern der Code sie nicht abgeschaltet hat.
  3. Der Code endet mit einem Fehler — nichts wird übernommen, auch nicht das, was der Code vor dem Fehler aufgerufen hat.

Innerhalb eines Laufs sehen die Lesefunktionen bereits, was der Code vorher geschrieben hat: Nach setContactVariable('strauss', 'Rosen') liefert getContactVariable('strauss') den Wert 'Rosen', obwohl die Variable beim Kontakt noch nicht gespeichert ist.

Der Code startet bei jedem Durchlauf des Blocks neu. Gewöhnliche JavaScript-Variablen (var) bleiben zwischen den Läufen nicht erhalten — was Sie sich merken müssen, schreiben Sie in Variablen des Kontakts oder in globale Variablen des Bots.

Sprache

Der Code wird als JavaScript nach dem Standard ES5 ausgeführt. Aus neueren Standards fehlen:

  • let und const — deklarieren Sie Variablen mit var;
  • Pfeilfunktionen — schreiben Sie function (x) { return x * 2; };
  • Template-Strings in Backticks — verbinden Sie Zeichenketten mit +;
  • Klassen, Destrukturierung, Promise, async/await, setTimeout;
  • Methoden aus neueren Standards: includes, startsWith, padStart, find, Object.assign, Array.from und ähnliche. Statt includes und startsWith eignet sich indexOf.

Alles aus ES5 ist vorhanden: JSON.parse und JSON.stringify, Math, Date, die String- und Array-Methoden split, replace, trim, map, filter, forEach, reduce, indexOf, sort. Die Direktive 'use strict' stört nicht, schaltet den strikten Modus aber nicht ein.

Netzwerkanfragen aus dem Code sind nicht möglich: fetch, XMLHttpRequest und require stehen nicht zur Verfügung. Für Anfragen gibt es den Block „HTTP-Anfrage“.

Datumsangaben

Date rechnet in der Zeitzone des Servers, nehmen Sie für Berechnungen daher die Methoden mit UTC: getUTCHours(), getUTCDate(). Eine Zeichenkette wie 2026-01-31 12:00:00 (so sieht created_at aus) kann Date nicht lesen — ersetzen Sie das Leerzeichen durch T und hängen Sie Z an:

var created = new Date(created_at.replace(' ', 'T') + 'Z');
var days = Math.floor((new Date() - created) / 86400000);

Reguläre Ausdrücke

Reguläre Ausdrücke laufen auf der Engine RE2, und einige Möglichkeiten von JavaScript funktionieren dort nicht. Code mit einem solchen Muster bricht mit dem Fehler Invalid regular expression ab:

Muster Was es ist
(?=...), (?!...) Lookahead
(?<=...), (?<!...) Lookbehind
\1, \2 Rückverweise auf eine Gruppe

\w, \b und \d kennen nur lateinische Buchstaben ohne Umlaute und Ziffern: /\w+/ findet das Wort „Blütenstrauß“ nicht vollständig. Zählen Sie solche Buchstaben ausdrücklich auf: /[a-zäöüß]+/i.

Grenzen

Was Grenze
Länge des Codes 16 384 Zeichen in jedem Code-Feld
Ausführungszeit 5 Sekunden. Code, der nicht rechtzeitig fertig wird, bricht mit dem Fehler Script execution time exceeded ab
sendMessage 10 Nachrichten pro Lauf
goToBlock Ein Aufruf pro Lauf
Funktionen zur Kontaktauswahl Ein Aufruf pro Anfrage, nur im Block „Eingehender Webhook“

Fehler und Fehlersuche

Was bei einem Lauf passiert ist, zeigt das „Ausführungsprotokoll“ in den Einstellungen des Blocks: Quellcode, Wert des letzten Ausdrucks, ausgeführte Aktionen und Fehlertext.

Der Wert des letzten Ausdrucks ist das wichtigste Werkzeug zur Fehlersuche. Schreiben Sie einen Variablennamen oder einen Ausdruck ans Ende des Codes, und sein Wert erscheint im Protokoll. Wandeln Sie ein Objekt oder ein Array vorher in eine Zeichenkette um, sonst steht im Protokoll [object Object]:

var bouquet = { name: 'Rosen', count: 7 };
JSON.stringify(bouquet);

console.log verursacht keinen Fehler, schreibt aber nichts ins Protokoll.

Wohin ein Fehler geht, hängt vom Block ab:

Block Was bei einem Fehler passiert
„JavaScript-Interpreter“ Der Fehlertext geht an den Kontakt in den Chat, die Verbindung „Fortsetzen“ wird ausgelöst
„HTTP-Anfrage“ Der Fehlertext geht an den Kontakt in den Chat, die Verbindung „Fortsetzen“ wird nicht ausgelöst
„Zeilen aus Google Sheets lesen“ Der Fehlertext geht an den Kontakt in den Chat, die Verbindung „Fortsetzen“ wird nicht ausgelöst
„Eingehender Webhook“ Der Kontakt erhält nichts, der Block beantwortet die Anfrage mit dem Code 422 und dem Fehlertext

In der Meldung eines Syntaxfehlers ist die Zeilennummer um eins größer als im Editor: Der Fehler Line 4:5 Unexpected identifier meint Zeile vier minus eins — also Zeile drei.

Einen Fehler können Sie auch absichtlich auslösen — throw new Error('Kein Preis') hält den Code an, und nichts von dem, was er getan hat, wird gespeichert. In Blöcken, die den Fehlertext in den Chat senden, sieht der Kontakt Error: Kein Preis.

Tipp

Testen Sie den Code in der Vorschau des Bots — Button „Bot testen“ im Editor. So sehen Sie den Fehler, nicht Ihre Kunden.