Zum Inhalt springen
Wbiztool

Produktanleitungen

Webhooks für eingehende Nachrichten (Listener)

Ein Listener verbindet eine Ihrer WhatsApp-Nummern mit Unibox und kann einen Webhook für eingehende Nachrichten an Ihren Server senden. Im Dashboard werden Listener auf der Seite Eingehende Trigger verwaltet. Sobald eine Nummer ein Listener ist, werden ihre Chats in den Unibox-Posteingang synchronisiert, und wenn Sie eine Webhook-URL angeben, sendet Wbiztool jede neue Nachricht an Ihren Server. Nutzen Sie Webhooks, um Unterhaltungen in einem CRM zu protokollieren, Ihr Team zu benachrichtigen oder eine automatische Antwort zu bauen.

Bevor Sie beginnen#

  • Das Unibox-Add-on. Es kostet 20 $/Monat oder 200 $/Jahr pro WhatsApp-Nummer, und die Anzahl möglicher Listener entspricht der gebuchten Menge des Add-ons. Kaufen Sie es unter Verfügbare Add-ons auf der Seite Abrechnung & Pläne im Dashboard. Ohne das Add-on öffnet sich die Seite Eingehende Trigger zwar, aber ein Klick auf Neuen Listener hinzufügen zeigt Unibox Add-on Required (Unibox-Add-on erforderlich) mit einer Schaltfläche Subscribe to Unibox Add-on (Unibox-Add-on abonnieren).
  • Eine verbundene WhatsApp-Nummer in den WhatsApp-Einstellungen. Nur verbundene Nummern, die noch keine Listener sind, können hinzugefügt werden.
  • Sie müssen Inhaber oder Bearbeiter des Arbeitsbereichs sein.
  • Für Webhooks: eine öffentliche URL (verwenden Sie https) mit höchstens 100 Zeichen, die POST-Anfragen mit JSON-Body annimmt.

Listener hinzufügen#

  1. Eingehende Trigger öffnen

    Öffnen Sie in der Seitenleiste Unibox und klicken Sie auf Eingehende Trigger, oder rufen Sie Eingehende Trigger auf.

  2. Neuen Listener anlegen

    Klicken Sie auf die Karte Neuen Listener hinzufügen.

  3. Nummer auswählen

    Wählen Sie sie unter WhatsApp-Nummer auswählen aus. Zeigt die Liste Keine verfügbaren WhatsApp-Nummern, ist jede verbundene Nummer bereits ein Listener oder es ist keine verbunden.

  4. Webhook hinzufügen (optional)

    Geben Sie Ihre Webhook-URL (Optional) ein. Sobald Sie eine URL eingeben, erscheint Webhook Events (Webhook-Ereignisse): Lassen Sie Incoming Messages (eingehende Nachrichten), Outgoing Messages (ausgehende Nachrichten) oder beide angehakt. Sie können die URL später hinzufügen oder ändern.

  5. Speichern

    Klicken Sie auf Listener hinzufügen. Der Listener erscheint als Karte mit dem Status Active (Aktiv). Wenn Sie eine URL eingegeben haben, wird dafür ein Webhook-Geheimnis erstellt.

Listener verwalten#

Jede Karte zeigt die Nummer, ihren Status, die Webhook-URL: (oder Nicht konfiguriert), Letzte Aktivität: (wann die Nummer zuletzt auf Nachrichten geprüft wurde, oder Niemals) und das Webhook-Geheimnis:, das verborgen ist, bis Sie auf das Augen-Symbol klicken.

Öffnen Sie das Menü auf einer Karte, um:

AktionWas passiert
BearbeitenWebhook-URL, Webhook-Ereignisse oder Geheimnis ändern. Die Nummer kann nicht geändert werden.
Deaktivieren / AktivierenBeim Deaktivieren wird der Listener auf Inactive (Inaktiv) gesetzt: Die Nummer wird nicht mehr in den Posteingang synchronisiert, und es werden keine Webhooks gesendet. Beim Aktivieren wird er wieder Active.
LöschenEntfernt den Listener nach Ihrer Bestätigung. Bereits im Posteingang vorhandene Unterhaltungen bleiben erhalten. Wird dieselbe Nummer später erneut hinzugefügt, wird der Listener wiederhergestellt. Geben Sie beim erneuten Hinzufügen eine Webhook-URL ein, behält der Listener sein bisheriges Webhook-Geheimnis, falls er eines hatte, statt ein neues zu erhalten.

Listener-Status#

StatusBedeutung
Active (Aktiv)Nachrichten werden synchronisiert und Webhooks gesendet, solange die Nummer verbunden ist.
Pending (Ausstehend)Die Nummer war nicht verbunden, als der Listener erstellt wurde, zum Beispiel durch Zapier. Klicken Sie auf Aktivieren, sobald die Nummer verbunden ist.
Inactive (Inaktiv)Deaktiviert. Es wird nichts synchronisiert und es werden keine Webhooks gesendet.

Statistiken#

KarteWas sie anzeigt
Aktive ListenerAlle Listener auf der Seite, einschließlich deaktivierter.
Verfügbare NummernVerbundene Nummern, die noch keine Listener sind. Nummern, deren Listener Sie gelöscht haben, zählen hier weiterhin als belegt, daher kann der Wert niedriger sein als die Zahl, die Sie tatsächlich hinzufügen können.
GesamtlimitWie viele Listener Ihr Unibox-Add-on erlaubt.
Nachrichten heuteWird noch nicht erfasst; zeigt immer 0.

Webhook-URL oder Ereignisse ändern#

  1. Listener öffnen

    Klicken Sie auf der Karte auf und dann auf Bearbeiten.

  2. Einstellungen aktualisieren

    Ändern Sie die Webhook-URL (Optional) und die Webhook Events. Leeren Sie die URL, um Webhooks für diese Nummer zu beenden: Dabei wird auch das Geheimnis entfernt, und ein neues wird erstellt, wenn Sie wieder eine URL hinzufügen.

  3. Speichern

    Klicken Sie auf Update Listener (Listener aktualisieren).

Geheimnis neu generieren#

Klicken Sie in Edit Listener (Listener bearbeiten) auf die Aktualisieren-Schaltfläche neben Webhook Secret (Webhook-Geheimnis) und bestätigen Sie. Das neue Geheimnis wird sofort gespeichert, auch wenn Sie den Dialog anschließend schließen, ohne auf Update Listener zu klicken, und Anfragen werden ab dann damit signiert. Aktualisieren Sie das Geheimnis sofort auf Ihrem Server.

Wie Webhooks zugestellt werden#

Wbiztool sendet für jede neue Nachricht, die bei der Synchronisierung der Nummer gefunden wird, eine POST-Anfrage an Ihre URL. Die Synchronisierung erfolgt alle paar Minuten, solange die Nummer verbunden ist und nicht mit dem Senden von Nachrichten beschäftigt ist.

  • Ereignisse: message_received für Nachrichten, die Personen an Ihre Nummer senden, und message_sent für Nachrichten, die von ihr gesendet werden (vom Smartphone, aus Kampagnen oder über die API). Es werden nur die unter Webhook Events angehakten Ereignisse gesendet.
  • Antworten aus dem Unibox-Posteingang lösen message_sent in der Regel nicht aus, weil der Posteingang sie bei der Synchronisierung bereits enthält.
  • Antwort Ihres Servers: Antworten Sie innerhalb von 8 Sekunden mit HTTP 200. Jede andere Antwort oder eine Zeitüberschreitung gilt als fehlgeschlagene Zustellung.
  • Keine Wiederholungen: Jede Nachricht wird einmal gesendet. Ist Ihr Server nicht erreichbar, geht dieser Webhook verloren.
  • Reihenfolge: Anfragen werden unabhängig voneinander gesendet und können in anderer Reihenfolge ankommen. Sortieren Sie nach message.timestamp, wenn die Reihenfolge wichtig ist.
HeaderWert
Content-Typeapplication/json
X-Wbiztool-Eventmessage_received oder message_sent
X-Wbiztool-TimestampWann der Webhook gesendet wurde, in ISO 8601 (UTC). Identisch mit timestamp im Body.
X-Wbiztool-Webhook-IdDie ID des Listeners. Identisch mit webhook_id im Body.
X-Wbiztool-Signaturesha256= gefolgt von der Signatur. Wird gesendet, sobald der Listener ein Geheimnis hat, was bei gesetzter URL immer der Fall ist.

Payload#

Beispiele für Webhook-Bodys
{
  "event": "message_received",
  "timestamp": "2026-09-16T10:31:12.482913+00:00",
  "webhook_id": 42,
  "whatsapp_client_id": "678",
  "whatsapp_phone": "919812345678",
  "message": {
    "id": "[email protected]_3EB0C1A2B3D4E5F60718",
    "type": "chat",
    "content": "Hi, is my order #4821 out for delivery?",
    "from": "919876543210",
    "from_name": "Aman",
    "to": "919812345678",
    "timestamp": "2026-09-16T10:29:58+00:00",
    "whatsapp_timestamp": 1789554598,
    "direction": "incoming",
    "status": "pending",
    "is_forwarded": false,
    "forwarding_score": 0
  },
  "contact": {
    "whatsapp_id": "[email protected]",
    "phone": "919876543210",
    "name": "Aman",
    "is_group": false,
    "is_business": false
  },
  "organisation": {
    "id": "10314",
    "name": "Acme Stores"
  }
}

Die oben gezeigten Nummern, IDs und Namen sind Beispiele.

Felder der obersten Ebene#

FeldTypBeschreibung
eventstringmessage_received oder message_sent.
timestampstringWann der Webhook gesendet wurde (ISO 8601, UTC).
webhook_idintegerDie ID des Listeners.
whatsapp_client_idstringID Ihrer WhatsApp-Nummer, wie in den WhatsApp-Einstellungen angezeigt.
whatsapp_phonestringIhre WhatsApp-Nummer.
messageobjectDie Nachricht. Siehe unten.
contactobjectDie Person oder Gruppe, mit der die Unterhaltung geführt wird. Siehe unten.
organisationobjectid (string) und name Ihres Arbeitsbereichs.
groupobjectNur bei Gruppenchats: name, der Name der Gruppe.

Felder von message#

FeldTypBeschreibung
idstringDie WhatsApp-ID der Nachricht. Verwenden Sie sie, um Duplikate zu ignorieren.
typestringchat für Text. Ansonsten der WhatsApp-Typ, zum Beispiel image, video, audio, ptt (Sprachnachricht), document, sticker oder location.
contentstringDer Text bei chat-Nachrichten. Bei Medien stattdessen eine Bezeichnung: 📸 Image, 🎥 Video, 🎵 Audio, 🎤 Voice Message, 😊 Sticker, Document: gefolgt vom Text des Dokuments (Document, wenn es keinen Text gibt), oder bei allem anderen der Typname mit großem Anfangsbuchstaben, zum Beispiel Location. Bildunterschriften sind nicht enthalten.
fromstringImmer die Nummer des Kontakts (oder die ID der Gruppe), in beiden Richtungen.
from_namestringDer Name des Kontakts oder der Gruppe. Kann leer sein.
tostringImmer Ihre WhatsApp-Nummer, in beiden Richtungen.
timestampstringWann die Nachricht in WhatsApp gesendet wurde (ISO 8601, UTC).
whatsapp_timestampintegerDerselbe Zeitpunkt als Unix-Zeitstempel in Sekunden.
directionstringincoming oder outgoing. Bestimmen Sie die Richtung hiermit, nicht mit from und to.
statusstringDerzeit immer pending. Verlassen Sie sich nicht darauf für den Zustell- oder Lesestatus.
is_forwardedbooleanOb die Nachricht weitergeleitet wurde.
forwarding_scoreintegerWie oft sie weitergeleitet wurde.
mediaobjectBei Mediennachrichten, sofern Details verfügbar sind: filename, mimetype und size in Bytes. Die Datei selbst ist nicht enthalten.
quoted_message_idstringNur wenn die Nachricht eine Antwort auf eine andere Nachricht ist.

Felder von contact#

FeldTypBeschreibung
whatsapp_idstringDie WhatsApp-ID, zum Beispiel [email protected] für eine Person oder …@g.us für eine Gruppe.
phonestringDie Nummer ohne + bzw. bei Gruppen die ID der Gruppe.
namestringDer Name, den Wbiztool für den Kontakt gespeichert hat, oder der Gruppenname. Kann leer sein.
is_groupbooleantrue bei Gruppenchats.
is_businessbooleantrue bei WhatsApp-Business-Konten, sofern bekannt.

Signatur prüfen#

Jede Anfrage wird mit dem Geheimnis Ihres Listeners per HMAC-SHA256 signiert. Die Signatur wird über den rohen Request-Body genau so, wie er empfangen wurde, berechnet und als sha256= plus hexadezimaler Digest in Kleinbuchstaben in X-Wbiztool-Signature gesendet.

Berechnen Sie die Signatur immer aus den rohen Bytes, bevor Sie das JSON parsen. Wird der Body geparst und neu kodiert, ändert er sich (zum Beispiel kommen nicht-englische Zeichen und Emojis als \uXXXX maskiert an), und die Signatur stimmt nicht mehr überein.

// Express: keep the raw body for this route
import crypto from "node:crypto";
import express from "express";

const app = express();
const SECRET = process.env.WBIZTOOL_WEBHOOK_SECRET;

app.post("/wbiztool/webhook", express.raw({ type: "application/json" }), (req, res) => {
  const expected = "sha256=" + crypto.createHmac("sha256", SECRET).update(req.body).digest("hex");
  const received = req.get("X-Wbiztool-Signature") || "";

  const valid =
    received.length === expected.length &&
    crypto.timingSafeEqual(Buffer.from(received), Buffer.from(expected));
  if (!valid) return res.status(401).send("Invalid signature");

  const data = JSON.parse(req.body.toString("utf8"));
  if (data.event === "message_received") {
    console.log(`New message from ${data.contact.phone}: ${data.message.content}`);
  }
  res.sendStatus(200); // reply quickly; do slow work in the background
});

app.listen(3000);

Die Signatur umfasst den Timestamp-Header nicht und schützt daher nicht davor, dass eine Anfrage erneut abgespielt wird (Replay). Falls das für Sie wichtig ist, speichern Sie jede verarbeitete message.id und ignorieren Sie Wiederholungen.

Fehlerbehebung#

Meldung oder ProblemWas zu tun ist
Unibox Add-on Required, wenn Sie auf Neuen Listener hinzufügen klickenIhr Arbeitsbereich hat das Unibox-Add-on nicht. Kaufen Sie es unter Verfügbare Add-ons auf der Seite Abrechnung & Pläne im Dashboard.
You have reached your unibox numbers limitSie haben Ihr Limit für Unibox-Nummern erreicht. Löschen Sie einen nicht mehr benötigten Listener oder erhöhen Sie die Menge des Add-ons.
Keine verfügbaren WhatsApp-NummernVerbinden Sie eine weitere Nummer – oder die Nummer ist bereits ein Listener.
This WhatsApp number is already a listenerDiese Nummer ist bereits ein Listener. Bearbeiten Sie stattdessen die vorhandene Karte.
Invalid WhatsApp clientDie Nummer wurde getrennt. Verbinden Sie sie in den WhatsApp-Einstellungen erneut und laden Sie die Seite neu.
Fehler mit value too long beim SpeichernDie Webhook-URL ist länger als 100 Zeichen. Verwenden Sie eine kürzere URL.
Es kommen keine Webhooks anPrüfen Sie, ob der Listener Active ist, die Nummer verbunden ist, der Ereignistyp angehakt ist und Ihre URL öffentlich über https mit gültigem Zertifikat erreichbar ist. Nachrichten werden erst nach der nächsten Synchronisierung gesendet, einige Minuten später.
Einige Webhooks fehlenIhr Server hat etwas anderes als 200 zurückgegeben, länger als 8 Sekunden gebraucht oder war nicht erreichbar. Fehlgeschlagene Zustellungen werden nicht wiederholt.
Signatur stimmt nicht übereinVerwenden Sie den rohen Body, nicht neu kodiertes JSON, und das aktuelle Geheimnis. Das Neugenerieren des Geheimnisses oder das Verbinden von Zapier ersetzt es.
Letzte Aktivität: zeigt NiemalsDie Nummer wurde noch nicht geprüft. Sie muss verbunden und darf nicht mit dem Senden von Nachrichten beschäftigt sein.

Verwandte Themen#