This workflow corresponds to n8n.io template #7123 — we link there as the canonical source.
This workflow follows the Google Drive → Google Sheets 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 →
{
"id": "Jd7X52ywyO4xTZoE",
"meta": {
"templateId": "2465",
"templateCredsSetupCompleted": true
},
"name": "\ud83c\udf99\ufe0f VoiceScribe AI: Telegram Audio Message Auto Transcription with OpenAI Whisper",
"tags": [
{
"id": "84SlSTthTSHRbFGM",
"name": "Telegram",
"createdAt": "2025-08-05T06:23:21.764Z",
"updatedAt": "2025-08-05T06:23:21.764Z"
},
{
"id": "nyc9wEV6N1lqPyOk",
"name": "Operations",
"createdAt": "2025-08-07T05:47:09.931Z",
"updatedAt": "2025-08-07T05:47:09.931Z"
},
{
"id": "ow6eIe95VK6fRkyw",
"name": "Chatbot",
"createdAt": "2025-08-05T06:23:11.231Z",
"updatedAt": "2025-08-05T06:23:11.231Z"
}
],
"nodes": [
{
"id": "638b4ba9-c381-44d4-9245-c5d4964371f7",
"name": "Un-supported message type",
"type": "n8n-nodes-base.telegram",
"position": [
1312,
2480
],
"parameters": {
"text": "=Sorry, I can\u2019t read your input right now.\nPlease send me a voice message, and I\u2019ll help you transcribe and track it! \ud83c\udf99\ufe0f\ud83d\udcac",
"chatId": "={{ $('Telegram Voice Message Trigger').item.json.message.chat.id }}",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "779f89de-cf46-467c-829e-48ef902f2e88",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-800,
1648
],
"parameters": {
"width": 1232,
"height": 2032,
"content": "# \ud83c\udf99\ufe0f VoiceScribe AI: Telegram Audio Message Auto Transcription with OpenAI Whisper\n> Automatically transcribe Telegram voice messages and store them as structured logs in Google Sheets, while backing up the audio in Google Drive.\n\n## \ud83e\uddd1\u200d\ud83d\udcbc Who\u2019s it for\n\n- Journalists, content creators, or busy professionals who often record voice memos or short interviews on the go.\n- Anyone who wants to turn voice recordings into searchable, structured notes.\n\n## \u2699\ufe0f How it works / What it does\n\n1. User sends a voice message to a Telegram bot.\n2. n8n checks if the message is an audio voice note.\n3. If valid, it downloads the audio file and:\n - Transcribes it using OpenAI Whisper (or your LLM of choice).\n - Uploads the original audio to Google Drive for safekeeping.\n4. The transcript and audio metadata are merged.\n5. The workflow:\n - Logs the data into a Google Sheet.\n - Sends a formatted confirmation message to the user via Telegram.\n\nIf the input is not audio, the bot politely informs the user that only voice messages are accepted.\n\n## \u2705 Features\n\n- Accepts only Telegram voice messages.\n- Transcribes via OpenAI Whisper.\n- Logs DateTime, Duration, Transcript, and Audio URL to Google Sheets.\n- Sends user feedback message via Telegram with download + transcript link.\n\n## \ud83d\ude80 How to set up\n### Prerequisites\n\n- Telegram Bot connected to n8n (via Telegram Trigger)\n- Google Drive & Google Sheets credentials configured\n- OpenAI or Whisper API credentials (for transcription)\n\n### Steps\n\n1. **Telegram Trigger** \n Start the flow when a new message is sent to your bot.\n2. **Check Message Type** \n Use a conditional node to confirm it's a voice message.\n3. **Download Voice Message** \n Download the `.oga` file from Telegram.\n4. **Transcribe Audio** \n Send the binary audio to OpenAI Whisper or your transcription service.\n5. **Upload to Google Drive** \n Backup the original audio file.\n6. **Merge Outputs** \n Combine transcription with Drive metadata.\n7. **Transform to Row Format** \n Prepare structured JSON for Google Sheets.\n8. **Append to Google Sheet** \n Store the transcript log (DateTime, Duration, Transcript, AudioURL).\n9. **Send Confirmation to User** \n Inform the user via Telegram with their transcript and download link.\n10. **Unsupported Message Handler** \n Reply to users who send non-audio messages.\n\n## \ud83d\udcc4 Example Output in Google Sheet\n\n| DateTime | Duration | Transcript | AudioURL |\n|-----------------------|----------|--------------------------------------------|------------------------------------------------------------|\n| 2025-08-07T13:12:19Z | 27 | D\u1ef1 \u00e1n Outlet Activation l\u00e0... | https://drive.google.com/uc?id=xxxx&export=download |\n\n## \ud83e\udde0 How to customize the workflow\n\n- Swap Whisper with Deepgram, AssemblyAI, or other providers.\n- Add speaker name detection or prompt-based tagging via GPT.\n- Route transcripts into Notion, Airtable, or CRM systems.\n- Add multi-language support or summarization steps.\n\n## \ud83d\udce6 Requirements\n\n| Component | Required |\n|---------------------|----------|\n| Telegram API | \u2705 |\n| Google Drive API | \u2705 |\n| Google Sheets API | \u2705 |\n| OpenAI Whisper API | \u2705 |\n| n8n Cloud or Self-hosted | \u2705 |\n\nCreated with \u2764\ufe0f using [n8n](https://n8n.io)"
},
"typeVersion": 1
},
{
"id": "505c0e4a-11e2-4a81-ac38-518af4cd3bf6",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2608,
2080
],
"parameters": {
"width": 752,
"height": 288,
"content": ""
},
"typeVersion": 1
},
{
"id": "3eacc0c8-6f65-47a9-9eaf-559d5c3c273d",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
496,
2400
],
"parameters": {
"width": 304,
"height": 128,
"content": "### 1. \ud83d\udce9 Telegram Trigger \n**Description**: Listens for incoming messages from the user via the connected Telegram bot. This is the entry point of the workflow."
},
"typeVersion": 1
},
{
"id": "b0d947b0-e970-43ea-8cc9-f3fc3b4f2d02",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
992,
2544
],
"parameters": {
"width": 272,
"height": 144,
"content": "### 2. Is Audio Message? \n**Description**: Checks whether the incoming Telegram message is a audio message. If not, the workflow routes to an \"unsupported message type\" handler."
},
"typeVersion": 1
},
{
"id": "447bc7be-707d-4eed-b3c3-1c3bc48bb103",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
1296,
2096
],
"parameters": {
"width": 544,
"height": 80,
"content": "### 3.1. Download audio message and transcript with OpenAI\n Send the binary audio to OpenAI Whisper or your transcription service."
},
"typeVersion": 1
},
{
"id": "938080c1-2503-4eb5-be21-32f732017869",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
2048,
2080
],
"parameters": {
"width": 400,
"height": 80,
"content": "### 4.1. Inform user via telegram\nSend friendly message to user with audio download URL\n"
},
"typeVersion": 1
},
{
"id": "297f8859-a2bf-4a71-82f9-161841669418",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
2112,
2560
],
"parameters": {
"width": 304,
"height": 96,
"content": "### 4.2 Transform & log expense\n- Transform the Output to Audio Record \n- Log Audio Record to Google Sheet \n\n"
},
"typeVersion": 1
},
{
"id": "53031e0c-a427-4023-b1f6-c0aae9b6ad4f",
"name": "Is audio message?",
"type": "n8n-nodes-base.if",
"position": [
1088,
2384
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "069b1c3b-d683-46f2-b7d6-9dbcdde41445",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.message.toJsonString() }}",
"rightValue": "audio/ogg"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "1ecf333c-3dd2-44a9-b301-547391695613",
"name": "Download audio message",
"type": "n8n-nodes-base.telegram",
"position": [
1312,
2288
],
"parameters": {
"fileId": "={{ $json.message.voice.file_id }}",
"resource": "file"
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "d61a14e8-9541-48be-95a0-5d4e5df85ff3",
"name": "Transcribe a recording",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1536,
2192
],
"parameters": {
"options": {},
"resource": "audio",
"operation": "transcribe"
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
},
{
"id": "564864d4-4a40-4f1a-b99e-fd0c6981ef7c",
"name": "Upload file",
"type": "n8n-nodes-base.googleDrive",
"position": [
1536,
2384
],
"parameters": {
"name": "=audio-{{ $now.toFormat(\"yyyyLLdd-HHmmss\") }}-{{$binary.data.fileName}}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1ObNNVJFR2vcKqP8p-ZnX_eaZy4gBHgha",
"cachedResultUrl": "https://drive.google.com/drive/folders/1ObNNVJFR2vcKqP8p-ZnX_eaZy4gBHgha",
"cachedResultName": "SmartIT"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "59241354-ef2f-43aa-bf2a-bf394ace5907",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
1760,
2288
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "af081dde-eb7d-4a4f-ad6c-d28ffd1a81ab",
"name": "Telegram Voice Message Trigger",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
864,
2384
],
"parameters": {
"updates": [
"message"
],
"additionalFields": {
"download": true
}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "348897c4-3baf-4564-ae4c-f956d98936b9",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
2464,
2400
],
"parameters": {
"width": 1072,
"height": 272,
"content": ""
},
"typeVersion": 1
},
{
"id": "e8a585eb-1ed0-41c9-a2d8-25d62c12d387",
"name": "Inform user via Telegram",
"type": "n8n-nodes-base.telegram",
"position": [
2208,
2192
],
"parameters": {
"text": "=\u2705 Voice Transcription Complete\n\nYour voice recording (\u23f1\ufe0f {{ $json.Duration }} seconds, recorded at {{ $json.DateTime }}) has been successfully transcribed and securely stored.\n\n\ud83d\udcce Original audio stored here: {{ $json.AudioURL }}\n\nThank you for using VoiceScribe AI! \ud83c\udf99\ufe0f",
"chatId": "={{ $json.ChatID }}",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "1ecbac8a-2451-4856-8a96-f7d5b3dbcef5",
"name": "Log voice record to google sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
2208,
2384
],
"parameters": {
"columns": {
"value": {},
"schema": [],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1a-u0XHQWjn4VKbq5WpvSJy5_JgHuFl5A2Q2TEBDC5bI/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1a-u0XHQWjn4VKbq5WpvSJy5_JgHuFl5A2Q2TEBDC5bI",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1a-u0XHQWjn4VKbq5WpvSJy5_JgHuFl5A2Q2TEBDC5bI/edit?usp=drivesdk",
"cachedResultName": "Audio Notes"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "ef75b354-3db8-4536-afc9-4268395dff0a",
"name": "Transform the output of voice record",
"type": "n8n-nodes-base.code",
"position": [
1984,
2288
],
"parameters": {
"jsCode": "const inputs = $input.all();\n\n// Assumes: \n// inputs[0] = transcript\n// inputs[1] = drive metadata\n\nconst transcriptData = inputs[0].json;\nconst driveData = inputs[1].json;\n\nconst result = {\n DateTime: driveData.createdTime || '',\n Duration: transcriptData.usage?.seconds || '',\n Transcript: transcriptData.text || '',\n AudioURL: driveData.webContentLink || '',\n ChatID: $('Telegram Voice Message Trigger').first().json.message.chat.id\n};\n\nreturn [{ json: result }];"
},
"typeVersion": 2
},
{
"id": "7996b57e-fffb-4707-a338-8bf390ecd134",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
1520,
2544
],
"parameters": {
"width": 544,
"height": 80,
"content": "### 3.2. Upload the original audio to drive for later usage\nBackup the original audio file."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "c8c05b3a-a276-4324-88ef-7a55779d4e2f",
"connections": {
"Merge": {
"main": [
[
{
"node": "Transform the output of voice record",
"type": "main",
"index": 0
}
]
]
},
"Upload file": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Is audio message?": {
"main": [
[
{
"node": "Download audio message",
"type": "main",
"index": 0
}
],
[
{
"node": "Un-supported message type",
"type": "main",
"index": 0
}
]
]
},
"Download audio message": {
"main": [
[
{
"node": "Transcribe a recording",
"type": "main",
"index": 0
},
{
"node": "Upload file",
"type": "main",
"index": 0
}
]
]
},
"Transcribe a recording": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Telegram Voice Message Trigger": {
"main": [
[
{
"node": "Is audio message?",
"type": "main",
"index": 0
}
]
]
},
"Transform the output of voice record": {
"main": [
[
{
"node": "Log voice record to google sheet",
"type": "main",
"index": 0
},
{
"node": "Inform user via Telegram",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googleDriveOAuth2ApigoogleSheetsOAuth2ApiopenAiApitelegramApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
> Automatically transcribe Telegram voice messages and store them as structured logs in Google Sheets, while backing up the audio in Google Drive. Journalists, content creators, or busy professionals who often record voice memos or short interviews on the go. Anyone who wants…
Source: https://n8n.io/workflows/7123/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
💥 Automate YouTube thumbnail creation from video links -vide. Uses telegramTrigger, httpRequest, googleDrive, gmail. Event-driven trigger; 25 nodes.
💥 Automate YouTube thumbnail creation from video links -vide. Uses telegramTrigger, httpRequest, googleDrive, gmail. Event-driven trigger; 25 nodes.
💥 Automate YouTube thumbnail creation from video links -vide. Uses telegramTrigger, httpRequest, googleDrive, gmail. Event-driven trigger; 25 nodes.
This workflow is designed for YouTube creators, content marketers, automation builders, and agencies who want to repurpose existing YouTube videos into new original content and automate the publishing
Ask questions like “How much did I spend on food last month?” and get instant answers from your financial data — directly in Telegram.