Integrationen
Webhooks
Eingehende Webhook-Endpunkte für Meta-Kanäle: Facebook Messenger, Instagram DM und WhatsApp.
Kurzüberblick#
| Basis-URL | https://helpstack.eu/api/webhooks |
| Authentifizierung (Verifizierung) | hub.verify_token muss dem konfigurierten Verify-Token entsprechen (GET-Handshake) |
| Authentifizierung (Empfang) | x-hub-signature-256: sha256=<HMAC-SHA256(rawBody, FACEBOOK_APP_SECRET)> |
| Content-Type | application/json |
| Sichtbarkeit | Endpunkte sind öffentlich; die Sicherheit basiert auf Token + Signatur |
Webhooks werden unter helpstack.eu empfangen; die Callback-URL registrieren Sie im Meta-App-Dashboard. Der Verify-Token und das App-Secret werden durch HelpStack konfiguriert (siehe die unten referenzierten Umgebungsvariablen).
Funktionsweise des Handshakes (alle Anbieter)#
Meta verifiziert einen Webhook, indem es ein GET mit drei Query-Parametern sendet. HelpStack gibt die Challenge nur zurück, wenn der Verify-Token übereinstimmt.
GET /api/webhooks/facebook
?hub.mode=subscribe
&hub.verify_token=TOKEN
&hub.challenge=CHALLENGE
- Wenn
TOKENdem konfigurierten Verify-Token entspricht → mit200und dem rohenCHALLENGE-Wert antworten. - Andernfalls → mit
403antworten.
Funktionsweise der Signaturverifizierung (alle Anbieter)#
Jeder POST trägt einen x-hub-signature-256-Header. Die Signatur wird über den rohen Request-Body mit HMAC-SHA256 berechnet, gehasht mit FACEBOOK_APP_SECRET, und mit sha256= prefixiert.
x-hub-signature-256: sha256=<hex HMAC-SHA256(rawBody, FACEBOOK_APP_SECRET)>
Node-Beispiel (Berechnung/Verifizierung):
import crypto from 'node:crypto';
function verifySignature(rawBody, headerValue, appSecret) {
const expected =
'sha256=' +
crypto.createHmac('sha256', appSecret).update(rawBody).digest('hex');
return headerValue === expected;
}
Achtung — verwenden Sie den rohen Body. Die Signatur wird über die exakten Bytes berechnet, die Meta gesendet hat. HelpStack liest den Body als rohen Text, bevor JSON geparst wird. Wenn Sie eine eigene Verifizierung erstellen, dürfen Sie das geparste JSON-Objekt nicht erneut serialisieren (Schlüsselreihenfolge/Leerzeichen weichen ab und die Signatur stimmt nicht überein). Erfassen Sie den rohen Body-String und berechnen Sie dessen HMAC.
Facebook / Messenger#
| Verifizierungs-Endpunkt | GET /api/webhooks/facebook |
| Empfangs-Endpunkt | POST /api/webhooks/facebook |
| Signaturschlüssel | FACEBOOK_APP_SECRET |
| Verify-Token-Umgebungsvariable | FACEBOOK_VERIFY_TOKEN |
Struktur des eingehenden Payloads. Der Body enthält ein entry[]-Array. Jeder Eintrag hat entweder:
entry[].messaging[]— älteres Messenger-Format, oderentry[].changes[]— neueres Format.
Kanalabgleich & Verarbeitung. Der Handler gleicht einen Kanal über facebookPageId / credentials.pageId ab und:
- Erstellt oder aktualisiert ein Gespräch, das durch die PSID des Absenders identifiziert wird.
- Speichert die eingehende Nachricht.
- Ruft das Profil des Absenders ab und lädt Anhänge in den Speicher herunter.
- Sendet ein Echtzeit-Ereignis an das Dashboard.
Instagram#
| Endpunkt | GET/POST /api/webhooks/instagram |
| Signaturschlüssel | FACEBOOK_APP_SECRET |
| Verify-Token-Umgebungsvariable | INSTAGRAM_VERIFY_TOKEN (fällt auf FACEBOOK_VERIFY_TOKEN zurück) |
Gleicht OAuth-verwaltete Kanäle über die Instagram-Konto-ID ab. Handshake und Signaturverifizierung funktionieren wie bei Facebook.
WhatsApp#
| Endpunkt | GET/POST /api/webhooks/whatsapp |
| Signaturschlüssel | FACEBOOK_APP_SECRET |
| Verify-Token-Umgebungsvariable | WHATSAPP_VERIFY_TOKEN (fällt auf FACEBOOK_VERIFY_TOKEN zurück) |
Struktur des eingehenden Payloads. Der Body enthält entry[].changes[].value mit messages[] und contacts[]. Der Handler gleicht einen Kanal über credentials.phoneNumberId ab und identifiziert das Gespräch über die Telefonnummer des Absenders.
Umgebungsvariablen#
| Variable | Verwendet von | Zweck |
|---|---|---|
FACEBOOK_APP_SECRET | FB, IG, WhatsApp | HMAC-SHA256-Signaturschlüssel für x-hub-signature-256 |
FACEBOOK_VERIFY_TOKEN | FB (IG/WhatsApp-Fallback) | GET-Handshake-Verify-Token |
INSTAGRAM_VERIFY_TOKEN | Verify-Token; fällt auf FACEBOOK_VERIFY_TOKEN zurück | |
WHATSAPP_VERIFY_TOKEN | Verify-Token; fällt auf FACEBOOK_VERIFY_TOKEN zurück |
Registrierung im Meta-App-Dashboard#
Für Messenger (dasselbe Muster gilt für Instagram und WhatsApp mit ihren jeweiligen Endpunkten):
- Öffnen Sie im Meta-App-Dashboard das Produkt (Messenger / Instagram / WhatsApp) → Webhooks.
- Callback-URL:
https://helpstack.eu/api/webhooks/facebook(Instagram:.../api/webhooks/instagram, WhatsApp:.../api/webhooks/whatsapp.) - Verify-Token: der Wert, den Sie in
FACEBOOK_VERIFY_TOKENgesetzt haben (oder der anbieterspezifische Token). - Klicken Sie auf Verify and Save — Meta sendet den
GET-Handshake; er ist erfolgreich, wenn der Token übereinstimmt. - Felder abonnieren: abonnieren Sie die Felder
messages/messaging, damit Nachrichtenereignisse zugestellt werden. - Stellen Sie sicher, dass das App Secret Ihrer App mit
FACEBOOK_APP_SECRETübereinstimmt, damit die Signaturverifizierung beiPOSTerfolgreich ist.
Senden Sie nach dem Speichern eine Testnachricht an die Seite/das Konto — sie sollte als neues Gespräch im Dashboard erscheinen.