DeepScript

Integratie

n8n-integratie – self-hosted audio-automatisering

Jouw n8n + jouw DeepScript-servers = volledige datasoevereiniteit. Geen cloudautomatisering, geen Schrems II-risico.

n8n is het self-hostable alternatief voor Zapier en Make – je draait de workflow-engine zelf, bijvoorbeeld op dezelfde Hetzner-server als de rest van je infrastructuur. In combinatie met DeepScript (ook in Duitsland gehost) ontstaat een pijplijn waarbij audio-, workflow- en metadata nooit Amerikaanse cloudaanbieders raken – ideaal voor ziekenhuizen, advocatenkantoren en overheden. Een officiële DeepScript-community-node is in voorbereiding; gebruik tot die tijd de generieke HTTP Request-node van n8n met de `X-API-KEY`-header. Hieronder vind je een volledige workflow-export als JSON die je in je n8n-instantie kunt importeren (`Workflows → Import from File`). Webhooks terug naar n8n werken via de Webhook-node, zodat zelfs lange transcripties (> 30 min) netjes draaien zonder polling-loop.

n8n-documentatie: HTTP Request-node

Wat je kunt bouwen

  • Volledig self-hosted: n8n + DeepScript-containers + je reverse proxy = volledige datasoevereiniteit op één machine.
  • HTTP Request-node met `X-API-KEY`-header – geen extra plugin nodig, werkt meteen.
  • Webhook-node voor `transcription.completed`-events, een schone async-flow zonder polling.
  • Vertakkingen, loops, code-nodes (JavaScript/Python) – complexe logica direct in de workflow.
  • Ideaal voor overheden, ziekenhuizen en advocatenkantoren: niets gaat naar de Amerikaanse cloud, alles blijft op je eigen machine.

Codevoorbeelden

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-handtekening verifiërenJavaScript
// 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 een paar stappen

  1. 1

    n8n installeren of de Docker-container starten

    Via Docker: `docker run -d --name n8n -p 5678:5678 -v ~/.n8n:/home/node/.n8n n8nio/n8n`. Voor productie raden we aan n8n achter Caddy of Traefik te draaien met Let's Encrypt-TLS op dezelfde server als de rest van je infrastructuur.

  2. 2

    De API-sleutel als credential opslaan

    Maak in n8n onder Credentials een nieuw "Generic Credential Type" aan met headernaam `X-API-KEY` en waarde `ds_live_xxx`. Alternatief: mount de API-sleutel als omgevingsvariabele `DEEPSCRIPT_API_KEY` en verwijs ernaar in HTTP-nodes via `{{ $env.DEEPSCRIPT_API_KEY }}`.

  3. 3

    De workflow importeren

    Kopieer de JSON-export hierboven naar een `.json`-bestand en kies dan `Workflows → Import from File`. n8n detecteert de nodes automatisch – je hoeft alleen het DeepScript-credential te koppelen en eventueel bestandspaden aan te passen.

  4. 4

    De webhook in DeepScript registreren

    De Webhook-node van n8n geeft je een URL zoals `https://your-n8n.example.com/webhook/deepscript-completed`. Registreer deze URL bij `POST /v1/webhooks` met het event `transcription.completed`. Sla het teruggegeven secret op in de HMAC-verificatie-Code-node.

Veelgestelde vragen

Heb ik de community-node nodig of volstaat HTTP Request?

HTTP Request volstaat voor elke use case – de API is eenvoudig genoeg. Een community-node is in de maak, maar die brengt vooral gemaksfuncties (auto-polling-loop, getypeerde outputs). Functioneel niets wat je vandaag al niet kunt.

Kan ik n8n op dezelfde server als mijn reverse proxy draaien?

Ja – aanbevolen. Docker Compose-setup met Caddy of Traefik voor n8n. Bij meerdere workflows per seconde is de queue-mode-architectuur van n8n (workers + Redis) zinvol. Voor lage volumes volstaat de single-instance-modus.

Hoe groot mogen audiobestanden in de HTTP Request-node zijn?

De standaard body-limiet van n8n is 16 MB. Om DeepScripts upload-limiet van 500 MB te benutten, stel je `N8N_PAYLOAD_SIZE_MAX=512` (in MB) in op je n8n-instantie. Alternatief voor zeer grote bestanden: upload eerst naar S3-compatibele opslag en stuur alleen de URL naar de DeepScript API.

Verlaat er data mijn infrastructuur?

Alleen het audiobestand plus metadata gaat naar DeepScript (Hetzner DE). Als je DeepScript ook op eigen hardware draait (enterprise-setup), blijft zelfs dat in-house. n8n-workflowdata, credentials en logs blijven in elk geval op je eigen server.

Kan ik workflows in Git versiebeheren?

Ja – sinds versie 1.0 ondersteunt n8n native Git-integratie via Source Control (Enterprise-functie). Community edition: workflows als JSON exporteren en handmatig committen. Dat laatste is voor de meeste setups voldoende.

Klaar om dit naar productie te brengen?

Maak een account aan, genereer een API-sleutel en ga van start. Drie transcripties gratis om te testen. Volledige OpenAPI 3.1-docs op api.deepscript.com/docs.

n8n-integratie – self-hosted & AVG-conform | DeepScript