Zum Inhalt springen
STAGING — not production

Developer-Portal

Verbinde SendVoiceLink mit deinen eigenen Systemen via signierte Webhooks für neue Aufnahmen, Voice-Form-Antworten und Sprachantworten.

Ein Beispiel: Sobald jemand auf deinen Voice-Link antwortet, schickt SendVoiceLink ein Event an deinen Server. So löst du etwa automatisch eine Slack-Nachricht aus oder legst einen Eintrag in deinem CRM an.

Schnellstart

  1. Lege unter Account → Webhooks einen Endpoint an (öffentliche HTTPS-URL).
  2. Wähle die Events aus, die du empfangen willst.
  3. Kopiere das einmalig angezeigte Signing-Secret und speichere es sicher.
  4. Prüfe in deinem Handler die Signatur (siehe unten) und verarbeite den Payload.

Referenz

Wie Events zugestellt werden

Jedes Event ist ein HTTP POST mit JSON-Body an deine URL. Wir folgen keinen Redirects und erwarten eine Antwort mit Status 2xx innerhalb von 5 Sekunden. Schlägt die Zustellung fehl, versuchen wir sie kurz erneut (bis zu 3 Versuche). Folgende Header werden gesetzt:

  • X-SVL-Event — Event-Name (z.B. recording.created)
  • X-SVL-Delivery — eindeutige ID dieser Zustellung
  • X-SVL-Signature — HMAC-Signatur in der Form sha256=<hex>

Payloads enthalten bewusst nur IDs, Titel, Zeitstempel und öffentliche Links — niemals E-Mail-Adressen, Passwörter oder Transkript-Inhalte.

Verfügbare Events

So sieht eine echte Zustellung aus. Header und JSON-Body treffen zusammen an deiner URL ein. Dieses Beispiel zeigt recording.created, sobald du eine neue Aufnahme erstellst:

POST /dein/webhook/endpoint HTTP/1.1
Host: deine-domain.example
Content-Type: application/json
X-SVL-Event: recording.created
X-SVL-Delivery: dlv_5f3a9c2b
X-SVL-Signature: sha256=9b1d…<hex>

{
  "event": "recording.created",
  "createdAt": "2026-06-06T10:00:00.000Z",
  "data": {
    "id": "rec_abc123",
    "title": "Onboarding-Nachricht",
    "shareUrl": "https://sendvoicelink.com/share/xxxx",
    "createdAt": "2026-06-06T10:00:00.000Z"
  }
}

Zwei weitere Events folgen demselben Aufbau, nur der Body unterscheidet sich:

Sobald jemand ein Voice-Formular von dir vollständig beantwortet.

{
  "event": "voiceform.response",
  "createdAt": "2026-06-06T10:00:00.000Z",
  "data": {
    "formId": "vf_abc123",
    "responseId": "vfr_def456",
    "createdAt": "2026-06-06T10:00:00.000Z"
  }
}
Signatur prüfen

Verifiziere jede eingehende Zustellung, bevor du sie verarbeitest. Berechne den HMAC-SHA256 über den rohen Request-Body mit deinem Signing-Secret und vergleiche ihn zeitkonstant mit dem Wert aus X-SVL-Signature:

import crypto from "node:crypto";

// In deinem Webhook-Handler: rohen Request-Body als String lesen
// (NICHT erst JSON.parsen und neu serialisieren).
function verify(rawBody, signatureHeader, secret) {
  // Header-Form: "sha256=<hex>"
  const expected = crypto
    .createHmac("sha256", secret)
    .update(rawBody, "utf8")
    .digest("hex");
  const received = (signatureHeader || "").replace(/^sha256=/, "");
  // Zeitkonstanter Vergleich gegen Timing-Angriffe.
  const a = Buffer.from(expected, "hex");
  const b = Buffer.from(received, "hex");
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}
Eingehende Webhooks

Jede Webhook-Subscription hat einen eingehenden Endpoint. Ein signierter POST an diesen Endpoint erstellt automatisch einen neuen Voice-Link und gibt die Share-URL zurück. Damit kannst du Voice-Links aus deinen eigenen Systemen heraus anlegen.

Endpoint-Format: POST https://sendvoicelink.com/api/webhooks/inbound/{subscriptionId}

Pflicht-Header

  • X-SVL-Timestamp: aktueller Unix-Zeitstempel in Sekunden (Toleranz ±5 Minuten)
  • X-SVL-Signature: HMAC-SHA256 über timestamp.rawBody, Format sha256=<hex>

Request-Beispiel

{
  "title": "Rückfrage von Kunde Müller",
  "description": "Bitte kurz beschreiben, was Sie benötigen.",
  "templateId": "customer-feedback"  // optional
}

Bei Erfolg antwortet der Endpoint mit HTTP 201 und {"ok":true,"data":{"id":"…","title":"…","shareUrl":"…"}}. Die zurückgegebene shareUrl kannst du direkt an deine Kunden schicken.

Zapier / Make einrichten

Zapier und Make bringen fertige Webhook-Bausteine mit. Auslöser und Aktionen baust du per Klick auf, ganz ohne eigenen Server.

Auslöser: ein Ereignis startet deinen Ablauf

Jede neue Aufnahme, jede Voice-Form-Antwort und jede Sprachantwort kann einen Zapier-Zap oder ein Make-Szenario auslösen.

  • Zapier: Lege als Trigger Webhooks by Zapier → Catch Hook an und kopiere die angezeigte Catch-Hook-URL.
  • Make: Starte das Szenario mit dem Modul Custom Webhook und kopiere die erzeugte Webhook-Adresse.
  • Trage diese URL unter Account → Webhooks als Endpoint ein und wähle die gewünschten Events. Fertig.

Aktion: dein Ablauf erstellt einen Voice-Link

Schicke aus einem Zap oder Szenario einen signierten POST an den eingehenden Endpoint, um automatisch einen Voice-Link anzulegen, etwa wenn in deinem CRM ein neuer Kontakt entsteht.

  • Make: Bilde die Signatur mit dem eingebauten Modul Crypto → Create HMAC (SHA256). Als Eingabe verkettest du den Zeitstempel, einen Punkt und den unveränderten JSON-Body zu einem String (also timestamp.body) und sendest den POST dann mit dem HTTP-Modul, alles ohne Code.
  • Zapier: Berechne die Signatur in einem Code by Zapier-Schritt (eine Zeile HMAC-SHA256, siehe Abschnitt „Signatur prüfen") und sende anschliessend mit Webhooks by Zapier → Custom Request.

Subscription-ID, Secret und Endpoint findest du unter Account → Webhooks.

Heute decken ausgehende und eingehende Webhooks den Echtzeit-Anwendungsfall ab. Fehlt dir ein Event oder ein Endpoint? Schreib uns