AutomationFlowsAI & RAG › Transcription Service

Transcription Service

Transcription Service. Uses executeWorkflowTrigger, telegram, openAi. Event-driven trigger; 14 nodes.

Event trigger★★★★☆ complexityAI-powered14 nodesExecute Workflow TriggerTelegramOpenAI
AI & RAG Trigger: Event Nodes: 14 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow follows the Execute Workflow Trigger → OpenAI recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "Transcription Service",
  "nodes": [
    {
      "parameters": {
        "workflowInputs": {
          "values": [
            {
              "name": "fileId"
            },
            {
              "name": "chatId"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "typeVersion": 1.1,
      "position": [
        -200,
        300
      ],
      "id": "workflow-trigger",
      "name": "When Executed by Another Workflow"
    },
    {
      "parameters": {
        "jsCode": "// Process input parameters\nconst fileId = $json.fileId || '';\nconst chatId = $json.chatId;\n\n// Validate file ID\nconst isValidFileId = fileId && fileId.length > 0;\n\nreturn {\n  json: {\n    file_id: fileId,\n    chat_id: chatId,\n    is_valid_file_id: isValidFileId\n  }\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        0,
        300
      ],
      "id": "input-processor",
      "name": "Input Processor"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": false,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "leftValue": "={{ $json.is_valid_file_id }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "equal"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        200,
        300
      ],
      "id": "file-validator",
      "name": "File ID Validator"
    },
    {
      "parameters": {
        "chatId": "={{ $json.chat_id }}",
        "text": "\ud83d\udeab Invalid voice file. Please send a valid voice message.",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        200,
        500
      ],
      "id": "invalid-file-response",
      "name": "Invalid File Response"
    },
    {
      "parameters": {
        "chatId": "={{ $json.chat_id }}",
        "text": "\ud83c\udfa4 Transcribing your voice message...\n\n\u23f3 This will take a few seconds...",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        400,
        200
      ],
      "id": "transcription-notification",
      "name": "Transcription Notification"
    },
    {
      "parameters": {
        "resource": "file",
        "fileId": "={{ $json.file_id }}"
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        600,
        200
      ],
      "id": "download-voice-file",
      "name": "Download Voice File"
    },
    {
      "parameters": {
        "resource": "audio",
        "operation": "transcribe",
        "options": {
          "language": "auto",
          "temperature": 0,
          "response_format": "text"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [
        800,
        200
      ],
      "id": "transcribe-audio",
      "name": "Transcribe Audio"
    },
    {
      "parameters": {
        "jsCode": "// Process transcription result\nconst transcriptionText = $json.text || '';\nconst originalInput = $('Input Processor').item.json;\n\n// Clean up the transcription\nconst cleanedText = transcriptionText.trim();\n\nif (cleanedText && cleanedText.length > 0) {\n  return {\n    json: {\n      success: true,\n      chat_id: originalInput.chat_id,\n      file_id: originalInput.file_id,\n      transcription: cleanedText,\n      word_count: cleanedText.split(' ').length,\n      message: `\u2705 Voice transcribed successfully!\\n\\n\ud83d\udcdd Transcript: \"${cleanedText}\"`\n    }\n  };\n} else {\n  return {\n    json: {\n      success: false,\n      chat_id: originalInput.chat_id,\n      file_id: originalInput.file_id,\n      error: 'Failed to transcribe the voice message',\n      message: '\u274c Could not transcribe the voice message. Please try again or speak more clearly.'\n    }\n  };\n}"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1000,
        200
      ],
      "id": "transcription-processor",
      "name": "Transcription Processor"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": false,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "leftValue": "={{ $json.success }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "equal"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        1200,
        200
      ],
      "id": "success-check",
      "name": "Success Check"
    },
    {
      "parameters": {
        "chatId": "={{ $json.chat_id }}",
        "text": "={{ $json.message }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        1400,
        100
      ],
      "id": "success-notification",
      "name": "Success Notification"
    },
    {
      "parameters": {
        "chatId": "={{ $json.chat_id }}",
        "text": "={{ $json.message }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        1400,
        300
      ],
      "id": "error-notification",
      "name": "Error Notification"
    },
    {
      "parameters": {
        "content": "# Input Validation\n\n\ud83d\udccb Validate voice file parameters",
        "height": 260,
        "width": 440,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -220,
        180
      ],
      "id": "input-validation-label",
      "name": "#InputValidation"
    },
    {
      "parameters": {
        "content": "# Voice Processing\n\n\ud83c\udfa4 Download and transcribe voice files",
        "height": 260,
        "width": 440,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        380,
        80
      ],
      "id": "voice-processing-label",
      "name": "#VoiceProcessing"
    },
    {
      "parameters": {
        "content": "# Result Processing\n\n\ud83d\udcca Process transcription results",
        "height": 260,
        "width": 440,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1180,
        80
      ],
      "id": "result-processing-label",
      "name": "#ResultProcessing"
    }
  ],
  "connections": {
    "When Executed by Another Workflow": {
      "main": [
        [
          {
            "node": "Input Processor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Input Processor": {
      "main": [
        [
          {
            "node": "File ID Validator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "File ID Validator": {
      "main": [
        [
          {
            "node": "Transcription Notification",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Invalid File Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcription Notification": {
      "main": [
        [
          {
            "node": "Download Voice File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Voice File": {
      "main": [
        [
          {
            "node": "Transcribe Audio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcribe Audio": {
      "main": [
        [
          {
            "node": "Transcription Processor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcription Processor": {
      "main": [
        [
          {
            "node": "Success Check",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Success Check": {
      "main": [
        [
          {
            "node": "Success Notification",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Error Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "1.0.0",
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "id": "TranscriptionService",
  "tags": [
    "transcription",
    "voice-processing",
    "openai-whisper",
    "module"
  ]
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Transcription Service. Uses executeWorkflowTrigger, telegram, openAi. Event-driven trigger; 14 nodes.

Source: https://github.com/0xabstracted/socialmedia-audio-extractor/blob/main/n8n/workflows/03_Transcription_Service.json — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Template Carnaval - time instagram. Uses toolWorkflow, lmChatOpenAi, memoryBufferWindow, agent. Event-driven trigger; 56 nodes.

Tool Workflow, OpenAI Chat, Memory Buffer Window +10
AI & RAG

Turn your Telegram into a personal Bloomberg terminal. Ask any question about any stock — get institutional-grade analysis back in seconds. TwelveData Pro Analyst is a complete, ready-to-import n8n wo

Telegram, Telegram Trigger, Agent +6
AI & RAG

Telegram. Uses memoryBufferWindow, toolWorkflow, agent, telegramTrigger. Event-driven trigger; 35 nodes.

Memory Buffer Window, Tool Workflow, Agent +8
AI & RAG

Trading Agent - Agent Flow. Uses memoryBufferWindow, toolWorkflow, agent, telegramTrigger. Event-driven trigger; 35 nodes.

Memory Buffer Window, Tool Workflow, Agent +8
AI & RAG

I prepared a detailed guide that demonstrates the complete process of building a trading agent automation using n8n and Telegram, seamlessly integrating various functions for stock analysis.

Memory Buffer Window, Tool Workflow, Agent +8