KI fragen
Deutsch DE
Zu Watbot

Eingehender Webhook

Der Block nimmt eine Anfrage von einem fremden Dienst entgegen und führt Ihren JavaScript-Code aus. So lässt sich das Szenario durch ein Ereignis von außen fortsetzen: Eine Zahlung ist eingegangen, der Status einer Bestellung hat sich geändert, ein Sensor hat ausgelöst.

Einstellungspanel des Blocks „Eingehender Webhook“Einstellungspanel des Blocks „Eingehender Webhook“

In diesen Block führen keine Verbindungen aus anderen Blöcken: Er wird nur durch eine Anfrage gestartet.

Einstellungen

  • „URL für Anfragen“ — die Adresse, die aufgerufen werden muss. Der Block erhält sie beim Erstellen, sie sieht so aus: https://api.<Domain der Plattform>/hook/<ID des Blocks>:<geheimer Schlüssel>. Jede Methode ist geeignet — GET, POST und andere.
  • „JavaScript-Code zur Verarbeitung der Anfrage“ — der Code, der bei jeder Anfrage ausgeführt wird, bis zu 16 384 Zeichen.

Achtung

Die Adresse enthält einen geheimen Schlüssel. Jeder, der die Adresse kennt, kann Ihren Code starten — veröffentlichen Sie sie nicht.

Was im Code ankommt

Die Anfrage liegt im Objekt request:

Feld Was darin steht
request.query Parameter aus der Abfragezeichenfolge
request.headers Header der Anfrage, die Namen in Kleinbuchstaben
request.body Körper der Anfrage als Zeichenfolge, so wie er angekommen ist
request.data Alle Parameter der Anfrage zusammen: aus der Abfragezeichenfolge, dem Formular und dem Körper im JSON-Format

Mehr zu den Feldern und dazu, wie Sie die Signatur einer Anfrage prüfen, unter Eingebaute Variablen.

Die Anfrage kommt nicht von einer Person, deshalb muss der Code selbst angeben, für welchen Kontakt er ausgeführt wird. Dafür gibt es Funktionen:

Funktion Wie sie den Kontakt sucht
setContactById(id) Nach der ID des Kontakts auf der Plattform
setContactByTelegramId(id) Nach der ID der Person in Telegram
setContactByMaxId(id) Nach der ID der Person in MAX
setContactByVkId(id) Nach der ID der Person in VK
setContactByViberId(id) Nach der ID der Person in Viber

Jede Funktion ist auf der Seite Kontakt auswählen ausführlich beschrieben.

Die Funktion gibt true zurück, wenn der Kontakt unter den Kontakten dieses Bots gefunden wurde, und false, wenn nicht. Eine solche Funktion lässt sich nur einmal pro Anfrage aufrufen. Mindestens eine davon muss im Code stehen — sonst antwortet der Block mit einem Fehler, und der Code startet nicht.

Sobald der Kontakt gefunden ist, stehen dem Code seine Daten (id, name, phone und die übrigen) und alle Funktionen des Blocks „JavaScript-Interpreter“ zur Verfügung: Variablen, Tags, sendMessage, goToBlock, disableContinue.

var contactId = request.query.contact_id;

if (setContactById(contactId)) {
    setContactVariable('bestellstatus', request.data.status);
    sendMessage('Der Status Ihrer Bestellung hat sich geändert.');
}

Damit der externe Dienst die ID des Kontakts kennt, übergeben Sie sie vorab — zum Beispiel mit dem Block „HTTP-Anfrage“ und dem Platzhalter {{ id }}.

Wichtig

Wird der Kontakt nicht gefunden, läuft der Code zwar durch, speichert aber nichts: Variablen, Tags und globale Variablen werden nicht geschrieben, Nachrichten nicht gesendet, die Verbindung „Fortsetzen“ wird nicht ausgelöst.

Ausgänge

  • „Fortsetzen“ — wird nach der Ausführung des Codes ausgelöst, wenn der Kontakt gefunden wurde und der Code disableContinue() nicht aufgerufen hat.

Was der Block antwortet

Die Antwort ist JSON mit den Feldern status (ok oder error), message und return_value — dem Wert des letzten Ausdrucks im Code.

Antwortcode Wann
200 Der Code wurde ausgeführt. Wurde der Kontakt nicht gefunden, steht in message der Text Code executed without setting contact
404 Falsche Adresse: Es gibt keinen solchen Block oder der Schlüssel passt nicht
422 Fehler im Code, das Code-Feld ist leer, im Code fehlt eine Funktion zur Kontaktsuche oder der Eigentümer des Bots hat kein Pro
429 Zu viele Anfragen

Jede Anfrage und die Antwort darauf werden im „Ausführungsprotokoll“ des Blocks festgehalten.

„Ausführungsprotokoll“ des eingehenden Webhooks: Methode, Parameter und Body der Anfrage, Rückgabewert und Antwort des Blocks„Ausführungsprotokoll“ des eingehenden Webhooks: Methode, Parameter und Body der Anfrage, Rückgabewert und Antwort des Blocks

Grenzen

  • Der Block arbeitet nur, solange der Eigentümer des Bots ein aktives Pro hat. Mehr dazu — was ohne Pro verfügbar ist.
  • Höchstens 30 Anfragen in 10 Sekunden für einen Bot — für alle seine Blöcke „Eingehender Webhook“ zusammen — und höchstens 180 Anfragen pro Minute von einer IP-Adresse.
  • Für den Code gelten dieselben Grenzen wie im Block „JavaScript-Interpreter“: ES5 und 5 Sekunden für die Ausführung.

Anfragen von Telegram und MAX

Der Block kann alles empfangen, was der Messenger an Ihren Bot sendet. Schalten Sie im Verbindungsfenster von Telegram oder MAX den Schalter „Anfragen an den Block ‚Eingehender Webhook‘ weiterleiten“ ein und wählen Sie im Feld „Block“ den Block nach ID oder Name.

Danach verarbeitet zuerst der Bot jedes Ereignis des Messengers — wie gewohnt, nach dem Szenario —, und anschließend wird es an den Code des Blocks übergeben. Das Ereignis liegt in der Form, in der der Messenger es gesendet hat, in request.data.

So können Sie auf das reagieren, was das Szenario selbst nicht verarbeitet: Nachrichten in Gruppen und Kanälen, das Hinzufügen des Bots zu einem Chat. Anfragen des Inline-Modus von Telegram werden nicht an den Block übergeben.

var message = request.data.message;

if (message && message.from && setContactByTelegramId(message.from.id)) {
    setContactTag('schrieb_in_gruppe');
    disableContinue();
}

Solche Ereignisse zählen zur selben Grenze für die Zahl der Anfragen pro Minute.