Telegram-Sprachnachricht → Whisper API in n8n schlägt mit binary/form-data-Problemen fehl (keine OpenAI-Alternative)

Problem/Fehler/Frage beschreiben

Hi alle zusammen,
ich baue einen Workflow in n8n für ein Kursprojekt und bin bei der letzten Stufe der Audio-Transkription stecken geblieben.
Das Ziel ist:
-Eine Sprachnachricht von Telegram empfangen
-Die Audio mit Telegram → Get a File herunterladen (über file_id)
-Die Audio in Text umwandeln (speech-to-text)
-Die Transkription an einen AI Agent senden
Frage
Was ist die empfohlene und zuverlässige Methode in n8n, um:
:backhand_index_pointing_right: eine Telegram-Sprachnachricht (.oga / opus) zu verarbeiten
:backhand_index_pointing_right: sie an eine nicht-OpenAI speech-to-text API zu senden (z. B. Groq Whisper oder ähnlich)
:backhand_index_pointing_right: und eine stabile Transkriptions-Ausgabe zu erhalten
Besonders interessiert bin ich in:
Best Practice für die Verarbeitung von Telegram-Binärdateien
ob es bekannte Einschränkungen mit multipart/form-data im HTTP Request Node gibt
empfohlene Workarounds, wenn direkter Binär-Upload unzuverlässig ist
Jedes funktionierende Muster oder Beispiel-Workflow würde ich sehr schätzen :folded_hands:

Was ist die Fehlermeldung (falls vorhanden)?

Wo ich feststecke

In dieser Phase:

  • Telegram → Get a File funktioniert korrekt
  • Ich erhalte die Binärdatei (.oga, audio/ogg)
  • Der Workflow bricht ab, wenn ich versuche, diese Datei an eine Whisper/STT API zu senden

Ich habe mehrere Ansätze getestet:

  • HTTP Request Node mit Form-Data + Binärdatei
  • Code Node mit fetch + FormData
  • verschiedene Binär-Mappings in n8n

Aber ich bekomme immer Fehler wie:

  • „file must be one of [flac mp3 mp4 mpeg mpga m4a ogg opus wav webm]„
  • „file not received„
  • multipart/form-data-Probleme
  • invalid request / bad request

Zu diesem Zeitpunkt kann ich die Datei erfolgreich herunterladen, aber ich kann sie nicht zuverlässig an eine Transkriptions-API senden.

Bitte teilen Sie Ihren Workflow

Erwarteter Workflow (aus dem Tutorial)
Das Tutorial, das ich befolge, schlägt vor:
Telegram → Get a File
OpenAI → Whisper → Transcribe a Recording
Whisper-Ausgabe mit einem AI Agent verbinden

Verwenden Sie diesen Ausdruck im AI Agent:
{{$json.message.text ?? $node["OpenAI"].json.text}}

Damit der Agent beide verarbeiten kann:
Text-Nachrichten
Audio-Transkriptionen

ABER ich verwende NICHT OpenAI!!
Ich möchte OpenAI vermeiden (aus Kostengründen), daher versuche ich, eine alternative speech-to-text-Lösung zu verwenden (z. B. Groq Whisper API oder ähnlich).

Geben Sie die vom letzten Node zurückgegebene Ausgabe an

Informationen zu Ihrem n8n-Setup

  • n8n-Version: 2.23.4
  • Datenbank (Standard: SQLite): Standard
  • n8n EXECUTIONS_PROCESS-Einstellung (Standard: own, main): Standard
  • n8n wird ausgeführt über (Docker, npm, n8n cloud, Desktop-App): Web
  • Betriebssystem: Cloud (nicht selbst gehostet)

Hi @SilvyElba, willkommen!

Zwei behebbare Probleme hier.

Zunächst den Code-Node mit fetch/FormData weglassen, der ist für Binärdaten anfällig. Nutze den HTTP Request-Node: stelle Body auf Form-Data, füge einen Parameter namens file mit Typ n8n Binary File hinzu, und setze Input Data Field Name auf deine Binäreigenschaft, normalerweise data. Füge ein model-Feld hinzu, das auf whisper-large-v3 gesetzt ist, und zeige auf Groqs Endpoint https://api.groq.com/openai/v1/audio/transcriptions mit einem Bearer-Token-Header.

Zweitens, der Fehler „file must be one of

Um die Umbenennung konkret zu handhaben, fügen Sie einen Code-Knoten direkt nach dem Schritt “Telegram Get a File” ein:

const binary = $input.first().binary;
binary.data.fileName = binary.data.fileName.replace('.oga', '.ogg');
return $input.first();

Fügen Sie dann im HTTP Request-Knoten Body auf Form-Data ein, fügen Sie einen file-Parameter mit dem Typ „n8n Binary File

{“output”:"Gute Nachricht: Deine Datei ist in Ordnung - .oga IST ogg/opus, was bereits in dieser Allowlist enthalten ist. Der Fehler „file must be one of […ogg opus…]

Um zu bestätigen, was @work6 erläutert hat, das ist das vollständige funktionierende Muster. Eine Sache, die hinzuzufügen ist, falls du immer noch „Datei nicht empfangen

Hey @SilvyElba — dieses .oga + manuelles multipart/form-data-Getümmel ist wirklich der schmerzhafte Teil, wenn man den Raw HTTP Request-Weg geht. Das .oga → .ogg-Umbenennen + Form-Data-Fix oben ist solide, wenn du bei Groq bleiben willst.

Wenn du offen für eine verwaltete Multi-Provider-Option bist, die die ganze Binary-Plumbing umgeht, hier ist noch ein anderer Ansatz.

Hinweis: Ich arbeite bei Eden AI, nimm das also als eine Option unter vielen — aber es löst genau deinen Blocker, daher dachte ich, es ist wert zu teilen.

Eden AI ist ein Aggregator (eine API/ein Schlüssel vor Deepgram, AssemblyAI, Gladia, Amazon, Google, Whisper…), und es gibt einen Community-Node: n8n-nodes-edenai. Das Relevante für dich: sein Expert Models-Node nimmt eine Binary-Property direkt und lädt die Datei für dich hoch — kein manuelles Form-Data, kein .oga-Umbenennen, kein „Datei nicht empfangen