DeepScript

Intégration

Intégration n8n – automatisation audio auto-hébergée

Votre n8n + vos serveurs DeepScript = souveraineté totale des données. Pas d'automatisation cloud, pas de risque Schrems II.

n8n est l'alternative auto-hébergeable à Zapier et Make – vous exécutez vous-même le moteur de workflow, par exemple sur le même serveur Hetzner que le reste de votre infrastructure. Combiné à DeepScript (également hébergé en Allemagne), cela crée une pipeline où les données audio, de workflow et les métadonnées ne touchent jamais de fournisseurs cloud américains – idéal pour les hôpitaux, les cabinets d'avocats et les administrations. Une node communautaire DeepScript officielle est en préparation ; en attendant, utilisez la node HTTP Request générique de n8n avec l'en-tête `X-API-KEY`. Vous trouverez ci-dessous un export complet de workflow en JSON, que vous pouvez importer dans votre instance n8n (`Workflows → Import from File`). Les webhooks de retour vers n8n passent par la node Webhook, de sorte que même les longues transcriptions (> 30 min) s'exécutent proprement sans boucle de polling.

Documentation n8n : node HTTP Request

Ce que vous pouvez créer

  • Tout auto-hébergé : n8n + conteneurs DeepScript + votre reverse proxy = souveraineté totale des données sur un seul serveur.
  • Node HTTP Request avec en-tête `X-API-KEY` – aucun plugin supplémentaire, fonctionne immédiatement.
  • Node Webhook pour les événements `transcription.completed`, un flux asynchrone propre sans polling.
  • Branches, boucles, code nodes (JavaScript/Python) – logique complexe directement dans le workflow.
  • Idéal pour les administrations, les hôpitaux et les cabinets d'avocats : rien ne part dans le cloud américain, tout reste sur votre machine.

Exemples de code

JSON de workflow n8n – upload + callback webhookJSON
{
  "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 – vérifier la signature HMACJavaScript
// 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 } }];

Configuration en quelques étapes

  1. 1

    Installer n8n ou démarrer le conteneur Docker

    Via Docker : `docker run -d --name n8n -p 5678:5678 -v ~/.n8n:/home/node/.n8n n8nio/n8n`. En production, nous recommandons de faire tourner n8n derrière Caddy ou Traefik avec TLS Let's Encrypt sur le même serveur que le reste de votre infrastructure.

  2. 2

    Enregistrer la clé API comme credential

    Dans n8n, sous Credentials, créez un nouveau « Generic Credential Type » avec le nom d'en-tête `X-API-KEY` et la valeur `ds_live_xxx`. Alternative : montez la clé API en tant que variable d'environnement `DEEPSCRIPT_API_KEY` et référencez-la dans les nodes HTTP via `{{ $env.DEEPSCRIPT_API_KEY }}`.

  3. 3

    Importer le workflow

    Copiez l'export JSON ci-dessus dans un fichier `.json`, puis `Workflows → Import from File`. n8n détecte automatiquement les nodes – il vous suffit d'associer le credential DeepScript et d'ajuster les chemins de fichiers si nécessaire.

  4. 4

    Enregistrer le webhook dans DeepScript

    La node Webhook de n8n vous fournit une URL du type `https://your-n8n.example.com/webhook/deepscript-completed`. Enregistrez cette URL via `POST /v1/webhooks` avec l'événement `transcription.completed`. Stockez le secret renvoyé dans la node Code de vérification HMAC.

Questions fréquentes

Ai-je besoin de la community node ou HTTP Request suffit-il ?

HTTP Request suffit pour tous les cas d'usage – l'API est assez simple. Une community node est en cours ; elle apportera surtout des fonctionnalités de confort (boucle d'auto-polling, sorties typées). Rien sur le plan fonctionnel que vous ne puissiez déjà faire aujourd'hui.

Puis-je faire tourner n8n sur le même serveur que mon reverse proxy ?

Oui – recommandé. Setup Docker Compose avec Caddy ou Traefik devant n8n. À plusieurs workflows par seconde, l'architecture queue mode de n8n (workers + Redis) a du sens. Pour de faibles volumes, le mode single-instance suffit.

Quelle taille peuvent avoir les fichiers audio dans la node HTTP Request ?

La limite de body par défaut de n8n est de 16 Mo. Pour exploiter la limite d'upload de 500 Mo de DeepScript, définissez `N8N_PAYLOAD_SIZE_MAX=512` (en Mo) sur votre instance n8n. Alternative pour les très gros fichiers : uploadez d'abord sur un stockage compatible S3 et n'envoyez que l'URL à l'API DeepScript.

Des données quittent-elles mon infrastructure ?

Seuls le fichier audio et les métadonnées partent vers DeepScript (Hetzner DE). Si vous exécutez DeepScript sur votre propre matériel (setup entreprise), même cela reste en interne. Les données de workflow n8n, les credentials et les logs restent dans tous les cas sur votre serveur.

Puis-je versionner les workflows dans Git ?

Oui – depuis la version 1.0, n8n prend en charge une intégration Git native via Source Control (fonctionnalité entreprise). Community edition : exportez les workflows en JSON et committez-les manuellement. Cette dernière option suffit pour la plupart des setups.

Prêt à mettre ça en production ?

Créez un compte, générez une clé API, c'est parti. Trois transcriptions gratuites pour tester. Documentation OpenAPI 3.1 complète sur api.deepscript.com/docs.

Intégration n8n – auto-hébergée & conforme au RGPD | DeepScript