🎙️ VoiceScribe IA : Transcrire automatiquement les messages audio Telegram avec OpenAI Whisper
Ceci est unDocument Extraction, Multimodal AIworkflow d'automatisation du domainecontenant 19 nœuds.Utilise principalement des nœuds comme If, Code, Merge, Telegram, GoogleDrive. Transcrire automatiquement les messages vocaux Telegram avec OpenAI Whisper et Google Workspace
- •Token Bot Telegram
- •Informations d'identification Google Drive API
- •Informations d'identification Google Sheets API
- •Clé API OpenAI
Nœuds utilisés (19)
{
"id": "Jd7X52ywyO4xTZoE",
"meta": {
"instanceId": "4a2e6764ba7a6bc9890d9225f4b21d570ce88fc9bd57549c89057fcee58fed0f",
"templateId": "2465",
"templateCredsSetupCompleted": true
},
"name": "🎙️ 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": "Type de message non pris en charge",
"type": "n8n-nodes-base.telegram",
"position": [
1312,
2480
],
"webhookId": "344e09e1-f90a-4181-b88d-eba8a1729454",
"parameters": {
"text": "=Sorry, I can’t read your input right now.\nPlease send me a voice message, and I’ll help you transcribe and track it! 🎙️💬",
"chatId": "={{ $('Telegram Voice Message Trigger').item.json.message.chat.id }}",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"id": "paNoPvnV5Wzt4Lhv",
"name": "Telegram account"
}
},
"typeVersion": 1.2
},
{
"id": "779f89de-cf46-467c-829e-48ef902f2e88",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-800,
1648
],
"parameters": {
"width": 1232,
"height": 2032,
"content": "# 🎙️ 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## 🧑💼 Who’s 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## ⚙️ 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## ✅ 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## 🚀 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## 📄 Example Output in Google Sheet\n\n| DateTime | Duration | Transcript | AudioURL |\n|-----------------------|----------|--------------------------------------------|------------------------------------------------------------|\n| 2025-08-07T13:12:19Z | 27 | Dự án Outlet Activation là... | https://drive.google.com/uc?id=xxxx&export=download |\n\n## 🧠 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## 📦 Requirements\n\n| Component | Required |\n|---------------------|----------|\n| Telegram API | ✅ |\n| Google Drive API | ✅ |\n| Google Sheets API | ✅ |\n| OpenAI Whisper API | ✅ |\n| n8n Cloud or Self-hosted | ✅ |\n\nCreated with ❤️ using [n8n](https://n8n.io)"
},
"typeVersion": 1
},
{
"id": "505c0e4a-11e2-4a81-ac38-518af4cd3bf6",
"name": "Note adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2608,
2080
],
"parameters": {
"width": 752,
"height": 288,
"content": ""
},
"typeVersion": 1
},
{
"id": "3eacc0c8-6f65-47a9-9eaf-559d5c3c273d",
"name": "Note adhésive5",
"type": "n8n-nodes-base.stickyNote",
"position": [
496,
2400
],
"parameters": {
"width": 304,
"height": 128,
"content": "### 1. 📩 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": "Note adhésive6",
"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": "Note adhésive7",
"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": "Note adhésive8",
"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": "Note adhésive9",
"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": "Est-ce un message audio ?",
"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": "Télécharger le message audio",
"type": "n8n-nodes-base.telegram",
"position": [
1312,
2288
],
"webhookId": "b7eb04dc-b5db-4fbd-8ea6-7692282d9469",
"parameters": {
"fileId": "={{ $json.message.voice.file_id }}",
"resource": "file"
},
"credentials": {
"telegramApi": {
"id": "paNoPvnV5Wzt4Lhv",
"name": "Telegram account"
}
},
"typeVersion": 1.2
},
{
"id": "d61a14e8-9541-48be-95a0-5d4e5df85ff3",
"name": "Transcrire un enregistrement",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1536,
2192
],
"parameters": {
"options": {},
"resource": "audio",
"operation": "transcribe"
},
"credentials": {
"openAiApi": {
"id": "PPSwAKeLQYgAPobT",
"name": "OpenAi account"
}
},
"typeVersion": 1.8
},
{
"id": "564864d4-4a40-4f1a-b99e-fd0c6981ef7c",
"name": "Téléverser un fichier",
"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": {
"id": "fC471es5gk5Mm900",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "59241354-ef2f-43aa-bf2a-bf394ace5907",
"name": "Fusionner",
"type": "n8n-nodes-base.merge",
"position": [
1760,
2288
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "af081dde-eb7d-4a4f-ad6c-d28ffd1a81ab",
"name": "Déclencheur de message vocal Telegram",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
864,
2384
],
"webhookId": "5cdd7f36-b2e3-4c8d-ab5f-1f2763eb5c75",
"parameters": {
"updates": [
"message"
],
"additionalFields": {
"download": true
}
},
"credentials": {
"telegramApi": {
"id": "paNoPvnV5Wzt4Lhv",
"name": "Telegram account"
}
},
"typeVersion": 1.2
},
{
"id": "348897c4-3baf-4564-ae4c-f956d98936b9",
"name": "Note adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
2464,
2400
],
"parameters": {
"width": 1072,
"height": 272,
"content": ""
},
"typeVersion": 1
},
{
"id": "e8a585eb-1ed0-41c9-a2d8-25d62c12d387",
"name": "Informer l'utilisateur via Telegram",
"type": "n8n-nodes-base.telegram",
"position": [
2208,
2192
],
"webhookId": "e7e7cab6-27c6-4604-bab4-901873f55e24",
"parameters": {
"text": "=✅ Voice Transcription Complete\n\nYour voice recording (⏱️ {{ $json.Duration }} seconds, recorded at {{ $json.DateTime }}) has been successfully transcribed and securely stored.\n\n📎 Original audio stored here: {{ $json.AudioURL }}\n\nThank you for using VoiceScribe AI! 🎙️",
"chatId": "={{ $json.ChatID }}",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"id": "paNoPvnV5Wzt4Lhv",
"name": "Telegram account"
}
},
"typeVersion": 1.2
},
{
"id": "1ecbac8a-2451-4856-8a96-f7d5b3dbcef5",
"name": "Journaliser l'enregistrement vocal dans la feuille google",
"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": {
"id": "L670Nly6gZGo71br",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.6
},
{
"id": "ef75b354-3db8-4536-afc9-4268395dff0a",
"name": "Transformer la sortie de l'enregistrement vocal",
"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": "Note adhésive10",
"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,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "c8c05b3a-a276-4324-88ef-7a55779d4e2f",
"connections": {
"59241354-ef2f-43aa-bf2a-bf394ace5907": {
"main": [
[
{
"node": "ef75b354-3db8-4536-afc9-4268395dff0a",
"type": "main",
"index": 0
}
]
]
},
"564864d4-4a40-4f1a-b99e-fd0c6981ef7c": {
"main": [
[
{
"node": "59241354-ef2f-43aa-bf2a-bf394ace5907",
"type": "main",
"index": 1
}
]
]
},
"53031e0c-a427-4023-b1f6-c0aae9b6ad4f": {
"main": [
[
{
"node": "1ecf333c-3dd2-44a9-b301-547391695613",
"type": "main",
"index": 0
}
],
[
{
"node": "638b4ba9-c381-44d4-9245-c5d4964371f7",
"type": "main",
"index": 0
}
]
]
},
"1ecf333c-3dd2-44a9-b301-547391695613": {
"main": [
[
{
"node": "d61a14e8-9541-48be-95a0-5d4e5df85ff3",
"type": "main",
"index": 0
},
{
"node": "564864d4-4a40-4f1a-b99e-fd0c6981ef7c",
"type": "main",
"index": 0
}
]
]
},
"d61a14e8-9541-48be-95a0-5d4e5df85ff3": {
"main": [
[
{
"node": "59241354-ef2f-43aa-bf2a-bf394ace5907",
"type": "main",
"index": 0
}
]
]
},
"af081dde-eb7d-4a4f-ad6c-d28ffd1a81ab": {
"main": [
[
{
"node": "53031e0c-a427-4023-b1f6-c0aae9b6ad4f",
"type": "main",
"index": 0
}
]
]
},
"ef75b354-3db8-4536-afc9-4268395dff0a": {
"main": [
[
{
"node": "1ecbac8a-2451-4856-8a96-f7d5b3dbcef5",
"type": "main",
"index": 0
},
{
"node": "e8a585eb-1ed0-41c9-a2d8-25d62c12d387",
"type": "main",
"index": 0
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Avancé - Extraction de documents, IA Multimodale
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Trung Tran
@trungtranEmpowering small and medium businesses with smart automation and practical AI, no big tech team required. Reach out: lets@automatewith.me
Partager ce workflow