NueForm

Webhooks testen

So testest du NueForm-Webhooks in der lokalen Entwicklung mit ngrok, webhook.site, curl und der NueForm-API.

Um Webhooks während der Entwicklung zu testen, muss dein Endpunkt aus dem öffentlichen Internet erreichbar sein. Diese Anleitung stellt mehrere Ansätze vor — von schnellen Inspektionstools bis zum vollständigen lokalen Entwicklungssetup.

Option 1: webhook.site (schnelle Inspektion)

webhook.site stellt eine temporäre öffentliche URL bereit, die eingehende HTTP-Anfragen erfasst und anzeigt. Das ist der schnellste Weg zu sehen, was NueForm sendet, ohne Code zu schreiben.

  1. Gehe auf webhook.site.
  2. Kopiere die eindeutige URL (z. B. https://webhook.site/abc123-def456-...).
  3. Setze sie als Webhook-URL deines Formulars:
bash
curl -X PUT https://app.nueform.com/api/v1/webhooks/form/YOUR_FORM_ID \
  -H "Authorization: Bearer nf_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://webhook.site/abc123-def456-..." }'
  1. Übermittle eine Antwort auf dein Formular.
  2. Aktualisiere webhook.site, um die erfasste Anfrage zu sehen — inklusive Header, Body und der X-NueForm-Signature.

webhook.site eignet sich hervorragend zur Inspektion, erlaubt aber keine eigene Verifizierungslogik. Nutze es, um das Payload-Format zu verstehen, und wechsle dann für vollständige Tests zu einem lokalen Server.

Option 2: ngrok (lokale Entwicklung)

ngrok erstellt einen sicheren Tunnel von einer öffentlichen URL zu deinem lokalen Rechner. So empfängst du echte Webhook-Zustellungen auf deinem Entwicklungsserver.

Einrichtung

  1. Installiere ngrok:
bash
# macOS (Homebrew)
brew install ngrok

# Or download from https://ngrok.com/download
  1. Starte deinen lokalen Webhook-Server (z. B. auf Port 3001):
bash
node server.js
# or
python app.py
  1. Starte einen ngrok-Tunnel:
bash
ngrok http 3001
  1. Kopiere die HTTPS-Weiterleitungs-URL aus der ngrok-Ausgabe:
text
Forwarding  https://a1b2c3d4.ngrok-free.app -> http://localhost:3001
  1. Setze die ngrok-URL als deinen Webhook-Endpunkt:
bash
curl -X PUT https://app.nueform.com/api/v1/webhooks/form/YOUR_FORM_ID \
  -H "Authorization: Bearer nf_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://a1b2c3d4.ngrok-free.app/webhooks/nueform" }'
  1. Übermittle eine Antwort auf dein Formular. Der Webhook kommt bei deinem lokalen Server an.

Traffic inspizieren

ngrok bietet unter http://localhost:4040 eine lokale Weboberfläche, in der du alle Anfragen durch den Tunnel inspizieren, erneut senden und Header sowie Statuscodes einsehen kannst.

Kostenlose ngrok-URLs ändern sich bei jedem Neustart von ngrok. Denke daran, deine Webhook-URL in NueForm zu aktualisieren, wenn du eine neue Tunnel-URL erhältst. Für eine stabile Subdomain lohnt sich ein bezahlter ngrok-Tarif.

Option 3: curl (Payloads simulieren)

Mit curl kannst du Test-Payloads an deinen lokalen Server senden, ganz ohne NueForm. Das ist praktisch, um deine Verifizierungs- und Verarbeitungslogik isoliert zu testen.

Signierte Test-Payload erzeugen

Erstelle zuerst eine Test-Payload und signiere sie mit deinem Webhook-Secret:

bash
# Your webhook secret (from the NueForm API or dashboard)
SECRET="a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2"

# The test payload
PAYLOAD='{
  "event": "form.submitted",
  "formId": "507f1f77bcf86cd799439011",
  "formTitle": "Test Form",
  "responseId": "507f1f77bcf86cd799439022",
  "answers": [
    { "questionId": "507f1f77bcf86cd799439033", "value": "Test answer" },
    { "questionId": "507f1f77bcf86cd799439044", "value": 5 }
  ],
  "submittedAt": "2025-03-15T14:32:07.123Z"
}'

# Compute the HMAC-SHA256 signature
SIGNATURE=$(echo -n "$PAYLOAD" | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $2}')

echo "Signature: $SIGNATURE"

Signierte Anfrage senden

bash
curl -X POST http://localhost:3001/webhooks/nueform \
  -H "Content-Type: application/json" \
  -H "X-NueForm-Signature: $SIGNATURE" \
  -d "$PAYLOAD"

Einzeiler

Alles kombiniert in einem einzigen Befehl:

bash
SECRET="your_secret_here"
PAYLOAD='{"event":"form.submitted","formId":"507f1f77bcf86cd799439011","formTitle":"Test Form","responseId":"507f1f77bcf86cd799439022","answers":[{"questionId":"q1","value":"hello"}],"submittedAt":"2025-03-15T14:32:07.123Z"}'
SIGNATURE=$(echo -n "$PAYLOAD" | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $2}')

curl -X POST http://localhost:3001/webhooks/nueform \
  -H "Content-Type: application/json" \
  -H "X-NueForm-Signature: $SIGNATURE" \
  -d "$PAYLOAD"

Ablehnung ungültiger Signaturen testen

Um zu prüfen, ob dein Endpunkt ungültige Signaturen korrekt ablehnt, sende eine Anfrage mit falscher Signatur:

bash
curl -X POST http://localhost:3001/webhooks/nueform \
  -H "Content-Type: application/json" \
  -H "X-NueForm-Signature: 0000000000000000000000000000000000000000000000000000000000000000" \
  -d '{"event":"form.submitted","formId":"test","formTitle":"Test","responseId":"test","answers":[],"submittedAt":"2025-03-15T14:32:07.123Z"}'

Dein Endpunkt sollte 401 Unauthorized zurückgeben.

Option 4: Node.js-Testskript

Erstelle ein eigenständiges Node.js-Skript, um Test-Payloads schnell zu signieren und zu senden:

javascript
import crypto from 'crypto';

const SECRET = process.env.NUEFORM_WEBHOOK_SECRET || 'your_secret_here';
const ENDPOINT = process.env.WEBHOOK_URL || 'http://localhost:3001/webhooks/nueform';

const payload = JSON.stringify({
  event: 'form.submitted',
  formId: '507f1f77bcf86cd799439011',
  formTitle: 'Customer Feedback Survey',
  responseId: crypto.randomUUID().replace(/-/g, '').slice(0, 24),
  answers: [
    { questionId: 'q_name', value: 'Jane Doe' },
    { questionId: 'q_email', value: 'jane@example.com' },
    { questionId: 'q_rating', value: 4 },
    { questionId: 'q_feedback', value: 'Great product!' },
    { questionId: 'q_features', value: ['Feature A', 'Feature C'] },
  ],
  submittedAt: new Date().toISOString(),
});

const signature = crypto
  .createHmac('sha256', SECRET)
  .update(payload)
  .digest('hex');

const response = await fetch(ENDPOINT, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-NueForm-Signature': signature,
  },
  body: payload,
});

console.log(`Status: ${response.status}`);
console.log(`Body: ${await response.text()}`);

Starte es mit:

bash
NUEFORM_WEBHOOK_SECRET=your_secret node test-webhook.mjs

Option 5: Echte Übermittlung auslösen

Der gründlichste Test ist, eine echte Antwort auf dein Formular zu übermitteln:

  1. Konfiguriere deine Webhook-URL (pro Formular oder global) auf deinen Test-Endpunkt.
  2. Öffne dein veröffentlichtes Formular im Browser.
  3. Fülle das Formular aus und schicke es ab.
  4. Beobachte die Webhook-Zustellung auf deinem Endpunkt.

Damit testest du die gesamte Pipeline von Anfang bis Ende — inklusive Antwortvalidierung, Quiz-Auswertung und der tatsächlich von NueForm erzeugten Payload.

Fehlgeschlagene Zustellungen debuggen

Wenn dein Webhook-Endpunkt keine Anfragen erhält, arbeite diese Checkliste durch:

1. Prüfe, ob die URL konfiguriert ist

bash
# Check per-form webhook
curl https://app.nueform.com/api/v1/webhooks/form/YOUR_FORM_ID \
  -H "Authorization: Bearer nf_your_api_key"

# Check global webhooks
curl https://app.nueform.com/api/v1/webhooks/global \
  -H "Authorization: Bearer nf_your_api_key"

2. Prüfe, ob die URL erreichbar ist

bash
# Test that your endpoint accepts POST requests
curl -X POST https://your-endpoint.com/webhooks/nueform \
  -H "Content-Type: application/json" \
  -d '{"test": true}'

3. Prüfe, ob ein Webhook-Secret existiert

Webhooks werden nur versendet, wenn für dein Konto ein Webhook-Secret gesetzt ist. Prüfe das so:

bash
curl https://app.nueform.com/api/v1/webhooks/secret \
  -H "Authorization: Bearer nf_your_api_key"

Zeigt die Antwort ein Secret, ist alles in Ordnung. Falls nicht, wird durch genau diese Anfrage automatisch eines erzeugt.

4. Prüfe deinen Tarif

Webhooks erfordern mindestens den Pro-Tarif. Prüfe deinen Tarifstatus im NueForm-Dashboard in deinen Kontoeinstellungen.

5. Prüfe das Timeout

NueForm hat ein Timeout von 5 Sekunden. Braucht dein Endpunkt länger, wird die Anfrage abgebrochen. Stelle sicher, dass du sofort 200 OK zurückgibst und die Daten im Hintergrund verarbeitest.

6. Prüfe Firewall- und Netzwerkregeln

Stelle sicher, dass dein Server eingehende POST-Anfragen von externen Quellen zulässt. Hinter einer Firewall oder einem VPN musst du eventuell NueForms IP-Bereiche freigeben oder ngrok verwenden.

Häufige Fehler beim Testen

FehlerLösung
express.json()-Middleware vor der SignaturprüfungVerwende express.raw({ type: 'application/json' }) auf der Webhook-Route
Testen mit einem widerrufenen oder abgelaufenen API-SchlüsselErstelle einen frischen API-Schlüssel
Globale Webhooks nicht aktiviertSetze "enabled": true bei jedem globalen Webhook-Eintrag
HTTP statt HTTPS für die Webhook-URLNueForm sendet an jede angegebene URL, aber nutze in der Produktion HTTPS
Kein Webhook-Secret vorhandenStelle sicher, dass dein Konto ein Webhook-Secret hat, bevor du Zustellungen erwartest

Nächste Schritte

Zuletzt aktualisiert: 20. Juli 2026