DeepScript

Integracja

Integracja z n8n – self-hostowana automatyzacja audio

Twój n8n + Twoje serwery DeepScript = pełna suwerenność danych. Bez automatyzacji w chmurze, bez ryzyka Schrems II.

n8n to self-hostowalna alternatywa dla Zapier i Make – silnik workflow uruchamiasz samodzielnie, na przykład na tym samym serwerze Hetzner co reszta Twojej infrastruktury. W połączeniu z DeepScript (również hostowanym w Niemczech) powstaje pipeline, w którym dane audio, dane workflow i metadane nigdy nie trafiają do amerykańskich dostawców chmury – idealne dla szpitali, kancelarii prawnych i administracji. Oficjalny node społecznościowy DeepScript jest w przygotowaniu; do tego czasu korzystaj z generycznego node'a HTTP Request w n8n z nagłówkiem `X-API-KEY`. Poniżej znajdziesz kompletny eksport workflow w formacie JSON, który możesz zaimportować do swojej instancji n8n (`Workflows → Import from File`). Webhooki z powrotem do n8n działają przez node Webhook, dzięki czemu nawet długie transkrypcje (> 30 min) działają płynnie bez pętli pollingu.

Dokumentacja n8n: node HTTP Request

Co możesz zbudować

  • Wszystko self-hosted: n8n + kontenery DeepScript + Twój reverse proxy = pełna suwerenność danych na jednej maszynie.
  • Node HTTP Request z nagłówkiem `X-API-KEY` – bez dodatkowej wtyczki, działa od razu.
  • Node Webhook dla zdarzeń `transcription.completed`, czysty przepływ asynchroniczny bez pollingu.
  • Rozgałęzienia, pętle, code node'y (JavaScript/Python) – złożona logika bezpośrednio w workflow.
  • Idealne dla administracji, szpitali i kancelarii prawnych: nic nie trafia do amerykańskiej chmury, wszystko zostaje na Twojej maszynie.

Przykłady kodu

JSON 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 – weryfikacja podpisu 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 } }];

Konfiguracja w kilku krokach

  1. 1

    Zainstaluj n8n lub uruchom kontener Docker

    Przez Docker: `docker run -d --name n8n -p 5678:5678 -v ~/.n8n:/home/node/.n8n n8nio/n8n`. W produkcji zalecamy uruchamianie n8n za Caddy lub Traefik z TLS Let's Encrypt na tym samym serwerze co reszta Twojej infrastruktury.

  2. 2

    Zapisz klucz API jako credential

    W n8n w sekcji Credentials utwórz nowy „Generic Credential Type” z nazwą nagłówka `X-API-KEY` i wartością `ds_live_xxx`. Alternatywnie: zamontuj klucz API jako zmienną środowiskową `DEEPSCRIPT_API_KEY` i odwołuj się do niej w node'ach HTTP przez `{{ $env.DEEPSCRIPT_API_KEY }}`.

  3. 3

    Zaimportuj workflow

    Skopiuj powyższy eksport JSON do pliku `.json`, a następnie `Workflows → Import from File`. n8n automatycznie wykrywa node'y – wystarczy przypisać credential DeepScript i w razie potrzeby dostosować ścieżki plików.

  4. 4

    Zarejestruj webhook w DeepScript

    Node Webhook w n8n daje Ci URL w rodzaju `https://your-n8n.example.com/webhook/deepscript-completed`. Zarejestruj ten URL w `POST /v1/webhooks` ze zdarzeniem `transcription.completed`. Zapisz zwrócony secret w node Code weryfikującym HMAC.

Często zadawane pytania

Czy potrzebuję node'a społecznościowego, czy wystarczy HTTP Request?

HTTP Request wystarcza do każdego przypadku użycia – API jest wystarczająco proste. Node społecznościowy jest w przygotowaniu, ale wniesie głównie udogodnienia (pętla auto-pollingu, typowane wyjścia). Funkcjonalnie nic, czego nie da się zrobić już dziś.

Czy mogę uruchomić n8n na tym samym serwerze co mój reverse proxy?

Tak – zalecane. Konfiguracja Docker Compose z Caddy lub Traefik przed n8n. Przy kilku workflowach na sekundę sensowna jest architektura queue mode w n8n (workery + Redis). Przy niskich wolumenach wystarczy tryb single-instance.

Jak duże mogą być pliki audio w node HTTP Request?

Domyślny limit body w n8n to 16 MB. Aby wykorzystać limit uploadu 500 MB w DeepScript, ustaw `N8N_PAYLOAD_SIZE_MAX=512` (w MB) w swojej instancji n8n. Alternatywa dla bardzo dużych plików: najpierw prześlij je do magazynu zgodnego z S3 i wyślij do API DeepScript tylko URL.

Czy jakiekolwiek dane opuszczają moją infrastrukturę?

Do DeepScript (Hetzner DE) trafia tylko plik audio i metadane. Jeśli DeepScript uruchamiasz również na własnym sprzęcie (setup enterprise), nawet to zostaje u Ciebie. Dane workflow n8n, credentiale i logi w każdym przypadku pozostają na Twoim serwerze.

Czy mogę wersjonować workflowy w Git?

Tak – od wersji 1.0 n8n obsługuje natywną integrację z Git przez Source Control (funkcja enterprise). Community edition: eksportuj workflowy jako JSON i commituj je ręcznie. To ostatnie wystarcza w większości konfiguracji.

Gotowy, aby wdrożyć to na produkcję?

Załóż konto, wygeneruj klucz API i działaj. Trzy transkrypcje za darmo na test. Pełna dokumentacja OpenAPI 3.1 pod api.deepscript.com/docs.

Integracja z n8n – self-hosted i zgodna z RODO | DeepScript