Eingebaute Variablen
Einen Teil der Daten erhält der Code ohne Funktionsaufrufe — in fertigen JavaScript-Variablen. Welche es gibt, hängt vom Block ab, in dem der Code läuft.
Daten des Kontakts
In allen Blöcken außer „Eingehender Webhook“ stehen die Daten des Kontakts, für den der Code läuft, sofort zur Verfügung. Im „Eingehenden Webhook“ erscheinen sie, nachdem der Code den Kontakt mit einer Funktion zur Kontaktauswahl gefunden hat.
| Variable | Was darin steht |
|---|---|
id |
ID des Kontakts auf der Plattform |
bot_id |
ID des Bots |
name |
Vollständiger Name des Kontakts |
first_name |
Erstes Wort des Namens |
last_name |
Zweites Wort des Namens |
phone |
Telefon |
email |
|
address |
Adresse |
username |
Benutzername im Messenger: @flower_lover in Telegram und MAX, id123456 in VK |
telegram_id |
ID der Person in Telegram |
max_id |
ID der Person in MAX |
created_at |
Wann der Kontakt beim Bot erschienen ist, im Format 2026-01-31 12:00:00 (UTC) |
Die Werte sind Zeichenketten, auch id und bot_id. Im „Eingehenden Webhook“ kommen id und bot_id als Zahlen, bringen Sie sie daher vor einem Vergleich in dieselbe Form: Number(id) === 12345.
Fehlt dem Kontakt etwas — etwa die Telefonnummer —, gibt es die Variable gar nicht, und ein Zugriff darauf bricht den Code mit einem ReferenceError ab. Prüfen Sie solche Variablen mit typeof:
if (typeof phone !== 'undefined') {
setContactVariable('telefon_kurier', phone);
} else {
sendMessage('Bitte hinterlassen Sie eine Telefonnummer für den Kurier.');
}
Im „Eingehenden Webhook“ gibt es nach der Kontaktauswahl noch einige Variablen — ebenfalls nur, wenn der Kontakt einen Wert hat:
| Variable | Was darin steht |
|---|---|
start_message |
Die erste Nachricht, die der Kontakt an den Bot gesendet hat |
amocrm_lead_id, amocrm_contact_id |
IDs von Deal und Kontakt in amoCRM |
bitrix_lead_id, bitrix_deal_id, bitrix_contact_id |
IDs von Lead, Deal und Kontakt in Bitrix24 |
Variablen des Kontakts und globale Variablen des Bots kommen nicht als fertige Variablen — lesen Sie sie mit den Funktionen getContactVariable und getGlobalVariable.
Serverantwort
Im Code des Blocks „HTTP-Anfrage“ liegt die Antwort des Servers im Objekt response:
| Feld | Was darin steht |
|---|---|
response.status |
Antwortcode als Zahl: 200, 404 und so weiter |
response.body |
Body der Antwort als Zeichenkette, so wie er angekommen ist |
response.data |
Body der Antwort, als JSON gelesen. Ist die Antwort kein JSON, steht hier ein leeres Objekt {} |
Der Code startet nur, wenn der Server geantwortet hat. Gibt es keine Antwort — der Server hat in der Zeit aus dem Feld „Timeout“ nicht geantwortet oder die Verbindung kam nicht zustande —, verlässt der Block den Ausgang „Keine Antwort vom Server“, und der Code läuft nicht. Eine Antwort mit Fehlercode, etwa 500, ist eine normale Antwort: Der Code läuft, prüfen Sie response.status selbst.
Der Code läuft nach den übrigen Einstellungen des Blocks: Die Variablen aus „JSON-Antwort in Variablen schreiben“ sind zu diesem Zeitpunkt bereits geschrieben.
if (response.status !== 200) {
sendMessage('Der Lieferdienst ist gerade nicht erreichbar, bitte versuchen Sie es später.');
disableContinue();
} else if (response.data.slots && response.data.slots.length > 0) {
setContactVariable('naechste_lieferung', response.data.slots[0].time);
} else {
sendMessage('Für heute gibt es keine freien Lieferfenster.');
}
Eingehende Anfrage
Im Code des Blocks „Eingehender Webhook“ liegt die eingegangene Anfrage im Objekt request:
| Feld | Was darin steht |
|---|---|
request.query |
Parameter aus dem Query-String. Die Werte sind Zeichenketten |
request.headers |
Header der Anfrage. Namen in Kleinbuchstaben: request.headers['content-type'] |
request.body |
Body der Anfrage als Zeichenkette, so wie er angekommen ist |
request.data |
Alle Parameter der Anfrage zusammen: aus dem Query-String, dem Formular und einem JSON-Body. Zahlen und Wahrheitswerte aus JSON bleiben Zahlen und true/false |
Hat die Anfrage keine Parameter, ist request.query ein leeres Objekt. Prüfen Sie verschachtelte Felder vor dem Zugriff, damit der Code nicht an undefined scheitert:
var order = request.data.order;
if (order && order.contact_id && setContactById(order.contact_id)) {
setContactVariable('bestellnummer', String(order.id));
sendMessage('Bestellung Nr. ' + order.id + ' ist gepackt und an den Kurier übergeben.');
}
Signiert der Absender seine Anfragen, können Sie die Signatur mit der Funktion hash_hmac prüfen — anhand von request.body und dem Header mit der Signatur.
Tabellenzeilen
Im Code des Blocks „Zeilen aus Google Sheets lesen“ liegen die gefundenen Zeilen in sheet.data — einem Array von Zeilen, in dem jede Zeile ein Array von Zellen ist.
sheet.dataenthält nur Zeilen, die die Filter des Blocks passiert haben, und nicht mehr als in „Anzahl der Einträge in der Nachricht“ angegeben.- Die Zellen sind Zeichenketten. Die erste Zelle des Arrays ist Spalte
A. - Der Block lädt die Spalten bis zur rechtesten, die in seinen Einstellungen vorkommt. Damit der Code auch andere Spalten erhält, rufen Sie am Anfang des Codes
setColumnRange("A:F")mit dem gewünschten Bereich auf — der Block liest diesen Aufruf vor der Abfrage der Tabelle. Leere Zellen am Zeilenende sendet Google nicht, deshalb können Zeilen unterschiedlich lang sein. - Werden keine Zeilen gefunden, läuft der Code nicht: Der Block verlässt den Ausgang „Einträge nicht gefunden“.
setColumnRange("A:C");
var rows = sheet.data;
var total = 0;
for (var i = 0; i < rows.length; i++) {
total += Number(rows[i][2] || 0);
}
setContactVariable('bestellsumme', total);
Hier steht in Spalte C der Preis des Straußes, und der Code addiert die Preise aller gefundenen Zeilen.