Alle Artikel
SMS- und Voice-Events fließen als Webhooks in einen lokalen Entwicklungs-Handler.
Twiliowebhook debuggingSMSlocal testing

Twilio-Webhooks lokal testen: Komplette Anleitung

Mit dem lokalen Testen von Twilio-Webhooks empfängst du SMS-Antworten, Voice-Callbacks und Messaging-Status-Updates direkt auf deinem Rechner. Twilio sendet Webhooks als HTTP-POST-Requests mit formularkodierten Payloads – dein localhost braucht während der Entwicklung eine öffentliche HTTPS-URL, um sie zu empfangen.

Warum Twilio-Callbacks eine öffentliche URL brauchen

Wenn jemand eine SMS an deine Twilio-Nummer sendet oder einen Anruf abschließt, schickt Twilio die Eventdaten per POST an deine konfigurierte Webhook-URL. Lokale Adressen wie http://localhost:3000/sms sind von Twilios Infrastruktur nicht erreichbar. Ein Localhost-Tunnel überbrückt diese Lücke mit einem öffentlichen HTTPS-Endpunkt.

Twilio-Webhook-Typen zum lokalen Testen

  • SMS eingehend: wenn ein Nutzer eine Textnachricht an deine Twilio-Nummer sendet.
  • SMS-Status-Callbacks: Zustellbestätigungen (sent, delivered, failed).
  • Voice-Callbacks: TwiML-Requests, wenn ein Anruf verbindet oder in ein Menü eintritt.
  • WhatsApp-Messaging: eingehende und Status-Webhooks für die WhatsApp Business API.
  • Conversations API: Message-added- und Teilnehmer-Events.

Schritt für Schritt: Twilio-Webhooks lokal testen

  1. Starte deine lokale App mit Twilio-Webhook-Routen (zum Beispiel /sms/inbound).
  2. Führe npx portpreview 3000 aus, um eine öffentliche HTTPS-URL zu erzeugen.
  3. Setze in der Twilio-Konsole die Webhook-URL deiner Telefonnummer auf die Tunnel-URL plus deinen Routenpfad.
  4. Konfiguriere die HTTP-Methode (meist POST) und stelle sicher, dass der Content-Type zu deinem Handler passt.
  5. Sende eine Test-SMS oder tätige einen Testanruf, um den Webhook auszulösen.
  6. Inspiziere die erfasste Anfrage – Twilio sendet formularkodierte Payloads, kein JSON.
  7. Prüfe, dass dein Handler die Twilio-Signatur validiert und gültiges TwiML oder eine 2xx-Antwort zurückgibt.

Twilio-Request-Signaturen lokal validieren

Twilio signiert jeden Request mit einem X-Twilio-Signature-Header, der aus der vollständigen URL und den POST-Parametern mit deinem Auth-Token berechnet wird. Dein Handler sollte:

  • die exakte öffentliche URL (inklusive Tunnel-Hostname) für die Signaturvalidierung verwenden.
  • alle POST-Parameter an die Validierungsfunktion übergeben.
  • Requests mit ungültiger Signatur ablehnen, auch beim lokalen Testen.

Wenn sich deine Tunnel-URL zwischen Sitzungen ändert, aktualisiere sowohl die Webhook-URL in der Twilio-Konsole als auch deine Validierungs-URL entsprechend.

Twilio-spezifische Debugging-Tipps

Formularkodierte Payloads

Anders als Stripe oder GitHub sendet Twilio application/x-www-form-urlencoded-Daten. Stelle sicher, dass dein Handler Form-Bodies korrekt parst, nicht nur JSON.

TwiML-Antworten

Voice- und SMS-Handler müssen gültiges TwiML-XML zurückgeben. Teste die Antwortformatierung lokal, bevor Twilio Zustellungen als fehlgeschlagen markiert.

Timeout-Verhalten

Twilio erwartet bei den meisten Webhooks Antworten innerhalb von 15 Sekunden. Langsame Handler verursachen Retries und Doppelzustellungen – nutze Webhook-Replay, um die Retry-Behandlung zu testen.

Status-Callback-Ketten

SMS-Workflows verketten oft eingehende Webhooks mit Status-Callbacks. Teste beide Endpunkte lokal, indem du separate Tunnel-Routen oder Pfade konfigurierst.

Twilio lokal testen vs. Twilio CLI

Die Twilio CLI kann eingehende Requests mit twilio phone-numbers:update und lokalen Tunnel-Plugins simulieren. Ein dedizierter Localhost-Tunnel mit Anfrageerfassung gibt dir dauerhafte Sichtbarkeit auf jeden Callback, Replay-Fähigkeit und einen Workflow, der über mehrere Provider skaliert – nicht nur Twilio.

Allgemeine Muster zum Webhook-Debugging findest du in So debuggst du Webhooks lokal.

Tritt der PortPreview-Warteliste bei für Twilio- und Multi-Provider-Webhook-Tests aus einem Tunnel.

Häufig gestellte Fragen

Wie teste ich Twilio-Webhooks auf localhost?
Starte einen Localhost-Tunnel mit PortPreview, setze die Webhook-URL deiner Twilio-Telefonnummer auf die HTTPS-Tunnel-URL und sende dann eine Test-SMS oder tätige einen Anruf, um den Callback auszulösen.
Sendet Twilio JSON oder formularkodierte Webhooks?
Twilio sendet application/x-www-form-urlencoded-Payloads, kein JSON. Stelle sicher, dass dein lokaler Handler Form-Bodies parst und den X-Twilio-Signature-Header validiert.
Warum schlägt die Twilio-Signaturvalidierung mit einem Tunnel fehl?
Twilio-Signaturen schließen die vollständige Request-URL ein. Wenn dein Validierungscode localhost statt der Tunnel-URL nutzt oder sich die Tunnel-URL geändert hat, schlagen die Signaturprüfungen fehl.