DeepScript

Integration

n8n Integration — self-hosted Audio-Automatisierung

Dein n8n + deine DeepScript-Server = vollständige Datenhoheit. Keine Cloud-Automation, kein Schrems-II-Risiko.

n8n ist die self-hostable Alternative zu Zapier und Make — du betreibst die Workflow-Engine selbst, zum Beispiel auf demselben Hetzner-Server wie deine restliche Infrastruktur. In Kombination mit DeepScript (auch DE-gehostet) entsteht eine Pipeline, bei der Audio-, Workflow- und Metadaten niemals US-Cloud-Anbieter berühren — ideal für Krankenhäuser, Kanzleien, Behörden. Eine offizielle DeepScript-Community-Node ist in Vorbereitung; bis dahin nutzt du n8ns generische HTTP-Request-Node mit `X-API-KEY`-Header. Unten findest du einen vollständigen Workflow-Export als JSON, den du in deine n8n-Instanz importieren kannst (`Workflows → Import from File`). Webhooks zurück nach n8n funktionieren über die Webhook-Node, sodass auch lange Transkriptionen (> 30 Min) ohne Polling-Loop sauber laufen.

n8n Dokumentation: HTTP Request Node

Was du bauen kannst

  • Alles self-hosted: n8n + DeepScript Container + dein Reverse Proxy = volle Datenhoheit auf einem Server.
  • HTTP-Request-Node mit `X-API-KEY`-Header — kein extra Plugin, funktioniert out of the box.
  • Webhook-Node für `transcription.completed`-Events, sauberer Async-Flow ohne Polling.
  • Verzweigungen, Loops, Code-Nodes (JavaScript/Python) — komplexe Logik direkt im Workflow.
  • Ideal für Behörden, Krankenhäuser, Kanzleien: nichts geht in die US-Cloud, alles bleibt auf deiner Maschine.

Code-Beispiele

n8n Workflow JSON — Upload + Webhook CallbackJSON
{
  "name": "DeepScript: Upload and Process",
  "nodes": [
    {
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [240, 300],
      "parameters": {}
    },
    {
      "name": "Read Audio File",
      "type": "n8n-nodes-base.readBinaryFile",
      "typeVersion": 1,
      "position": [440, 300],
      "parameters": { "filePath": "/data/audio/meeting.mp3" }
    },
    {
      "name": "Upload to DeepScript",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [640, 300],
      "parameters": {
        "method": "POST",
        "url": "https://api.deepscript.com/v1/transcriptions",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            { "name": "X-API-KEY", "value": "={{ $env.DEEPSCRIPT_API_KEY }}" }
          ]
        },
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            { "name": "file", "value": "={{ $binary.data }}", "parameterType": "formBinaryData" },
            { "name": "model", "value": "premium" },
            { "name": "language", "value": "de" }
          ]
        }
      }
    },
    {
      "name": "Webhook (transcription.completed)",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [840, 300],
      "parameters": {
        "path": "deepscript-completed",
        "responseMode": "responseNode"
      }
    },
    {
      "name": "Get Transcript",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [1040, 300],
      "parameters": {
        "method": "GET",
        "url": "=https://api.deepscript.com/v1/transcriptions/{{ $json.data.transcriptionId }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            { "name": "X-API-KEY", "value": "={{ $env.DEEPSCRIPT_API_KEY }}" }
          ]
        }
      }
    }
  ],
  "connections": {
    "Manual Trigger": { "main": [[{ "node": "Read Audio File", "type": "main", "index": 0 }]] },
    "Read Audio File": { "main": [[{ "node": "Upload to DeepScript", "type": "main", "index": 0 }]] },
    "Webhook (transcription.completed)": { "main": [[{ "node": "Get Transcript", "type": "main", "index": 0 }]] }
  }
}
n8n Code Node — HMAC-Signatur verifizierenJavaScript
// In an n8n Code node placed right after the Webhook node.
// Verifies the X-DeepScript-Signature header against the raw body.
const crypto = require("crypto");

const SIGNING_SECRET = $env.DEEPSCRIPT_WEBHOOK_SECRET; // "whsec_xxx"
const header = $input.first().json.headers["x-deepscript-signature"];
const rawBody = $input.first().json.body;

const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const { t: timestamp, v1: signature } = parts;

if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) {
  throw new Error("Webhook timestamp out of tolerance (>5min)");
}

const signedPayload = `${timestamp}.${JSON.stringify(rawBody)}`;
const expected = crypto
  .createHmac("sha256", SIGNING_SECRET)
  .update(signedPayload)
  .digest("hex");

const valid = crypto.timingSafeEqual(
  Buffer.from(signature, "hex"),
  Buffer.from(expected, "hex")
);
if (!valid) throw new Error("Invalid webhook signature");

return [{ json: { verified: true, event: rawBody } }];

Setup in wenigen Schritten

  1. 1

    n8n installieren oder Docker starten

    Per Docker: `docker run -d --name n8n -p 5678:5678 -v ~/.n8n:/home/node/.n8n n8nio/n8n`. Für Produktion empfehlen wir n8n hinter Caddy oder Traefik mit Let's-Encrypt-TLS auf demselben Server wie deine restliche Infrastruktur.

  2. 2

    API-Key als Credential anlegen

    In n8n unter Credentials einen neuen "Generic Credential Type" mit dem Header-Name `X-API-KEY` und dem Value `ds_live_xxx` anlegen. Alternativ: API-Key als Environment-Variable `DEEPSCRIPT_API_KEY` mounten und in HTTP-Nodes per `{{ $env.DEEPSCRIPT_API_KEY }}` referenzieren.

  3. 3

    Workflow importieren

    Den JSON-Export oben in eine `.json`-Datei kopieren, dann `Workflows → Import from File`. n8n erkennt die Nodes automatisch, du musst nur die DeepScript-Credential zuordnen und ggf. Datei-Pfade anpassen.

  4. 4

    Webhook in DeepScript registrieren

    n8ns Webhook-Node liefert dir eine URL wie `https://your-n8n.example.com/webhook/deepscript-completed`. Diese URL bei `POST /v1/webhooks` registrieren mit dem Event `transcription.completed`. Das zurückgegebene Secret in der HMAC-Verifizierungs-Code-Node hinterlegen.

Häufige Fragen

Brauche ich die Community Node oder reicht HTTP Request?

HTTP Request reicht für alle Use Cases — die API ist schlicht genug. Eine Community Node ist in Arbeit; sie wird hauptsächlich Komfort-Features liefern (Auto-Polling-Loop, getypte Outputs). Funktional nichts, was du nicht heute schon hinbekommst.

Kann ich n8n auf demselben Server wie meinen Reverse Proxy laufen lassen?

Ja — empfohlen. Docker-Compose-Setup mit Caddy oder Traefik vor n8n. Bei mehreren Workflows pro Sekunde ist die n8n-Queue-Mode-Architektur (Worker + Redis) sinnvoll. Für niedrige Volumina genügt der Single-Instance-Modus.

Wie groß dürfen Audiodateien in der HTTP-Request-Node sein?

n8n hat einen Default-Body-Limit von 16 MB. Für DeepScripts 500-MB-Upload-Limit setze in deiner n8n-Instanz `N8N_PAYLOAD_SIZE_MAX=512` (in MB). Alternative für sehr große Files: zuerst auf einen S3-kompatiblen Storage hochladen und nur die URL an die DeepScript-API senden.

Verlassen Daten meine Infrastruktur?

Nur die Audiodatei + Metadaten gehen zu DeepScript (Hetzner DE). Wenn du DeepScript ebenfalls auf eigener Hardware betreibst (Enterprise-Setup), bleibt sogar das in-house. n8n-Workflow-Daten, Credentials und Logs bleiben in jedem Fall auf deinem Server.

Kann ich Workflows in Git versionieren?

Ja — n8n unterstützt seit Version 1.0 native Git-Integration über Source Control (Enterprise-Feature). Community Edition: Workflows als JSON exportieren und manuell committen. Letzteres reicht für die meisten Setups.

Bereit, das in Production zu bringen?

Account erstellen, API-Key generieren, los geht's. Drei Transkriptionen kostenlos zum Testen. Vollständige OpenAPI 3.1 Docs unter api.deepscript.com/docs.

n8n Integration — self-hosted & DSGVO-konform | DeepScript