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 NodeWas 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
{
"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 }]] }
}
}// 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
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
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
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
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.