Transcribir Audio con n8n + OpenRouter

El flujo tiene 3 nodos: descarga el audio → lo convierte a base64 → lo manda a un LLM multimodal vía OpenRouter para transcribirlo.

¿Por qué no Whisper directo? El endpoint /audio/transcriptions de OpenRouter con ogg/opus (formato de WhatsApp/Chatwoot) da error 500. La solución es usar un modelo multimodal como Gemini 2.5 Pro via chat/completions que sí acepta audio en base64.


Nodo 1 — Descargar Audio

  • Tipo: HTTP Request
  • Method: GET
  • URL:
={{ $('Webhook').item.json.body.messages[0].attachments[0].data_url }}

Ajusta esta expresión según de dónde venga tu URL de audio. El resultado debe ser un binario (data).

  • Response Format: deja el default (n8n lo detecta automáticamente como binario)

Nodo 2 — Convertir Audio a Base64

  • Tipo: Code
  • Mode: Run Once for All Items
const buffer = await this.helpers.getBinaryDataBuffer(0, 'data');
const base64Audio = buffer.toString('base64');

return [{
  json: {
    audio_base64: base64Audio,
    format: 'mp3'
  }
}];

⚠️ El argumento 0 es el índice del item (no el objeto item). Esto es requerido en n8n v2.x con binaryDataMode: database. El format puedes dejarlo en mp3 aunque el archivo sea .ogg — Gemini lo interpreta igual.


Nodo 3 — Transcribir con OpenRouter

  • Tipo: HTTP Request
  • Method: POST
  • URL: https://openrouter.ai/api/v1/chat/completions

Headers:

NameValue
AuthorizationBearer TU_API_KEY_OPENROUTER

Body Content Type: JSON
Body:

{
  "model": "google/gemini-2.5-pro",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Transcribe este audio sin agregar nada más."
        },
        {
          "type": "input_audio",
          "input_audio": {
            "data": "={{ $json.audio_base64 }}",
            "format": "={{ $json.format }}"
          }
        }
      ]
    }
  ]
}

Puedes cambiar google/gemini-2.5-pro por cualquier modelo multimodal de OpenRouter que soporte audio, como google/gemini-2.0-flash.


Resultado

El texto transcrito llega en:

{{ $json.choices[0].message.content }}

Conexiones

Descargar audio → Audio en base64 → Open Router: Transcribir audio

Puedes hacer clic aquí para descargar la plantilla.

Artículos relacionados

Respuestas