AI Audio Transcription & Summarization with OpenAI and Google Drive
Automate your audio workflow. Use OpenAI to transcribe audio files, generate AI-powered summaries in JSON and Markdown, and save everything neatly to Google Drive.
Overview
Automates transcribing audio files from Google Drive with OpenAI, generates structured summaries, and sends notifications with report links via email and Telegram.
🧠 Description & Use Case
This workflow automates the entire process of converting audio files into actionable, summarized content. It listens for new audio files in Google Drive, transcribes them using OpenAI's Whisper model, generates two types of AI-powered summaries (structured JSON and detailed Markdown), saves all reports back to Google Drive, and notifies you via Gmail and Telegram with direct links to the documents.
🔄 How It Works:
-
Trigger & Approval
- The workflow can be initiated manually or automatically when a new file is created in a specified Google Drive folder.
- An optional Human-in-the-Loop step is included (disabled by default), where an approval email is sent via
Gmailbefore the transcription process begins.
-
Fetch and Prepare Audio
- The
Search Google Drivenode finds files in your designated 'Audio Recordings' folder. - It then filters for files ending with the
.m4aextension and uses theLimitnode to select only the most recent one. - The
Download audio filenode fetches the audio data, making it ready for transcription.
- The
-
Transcribe with AI
- The
Transcribe with OpenAInode sends the audio file to OpenAI's API, which returns a complete text transcript. - For archival purposes, the raw text transcript is immediately saved to Google Drive.
- The
-
AI-Powered Summarization The raw transcript is sent down two parallel paths for different types of summaries using OpenAI's
gpt-4o-minimodel:- Structured JSON Report: The
Summarize to Structured JSONnode prompts the AI to extract key information like a title, main points, action items, and sentiment, returning a clean JSON object. - Detailed Markdown Report: The
Summarize to JSONandConvert JSON to Markdownnodes work together to create a comprehensive, well-organized summary in Markdown format, perfect for documentation or reports.
- Structured JSON Report: The
-
Store and Organize Reports
- Both the JSON and Markdown summaries are saved to the same Google Drive folder as the original audio file. The files are dynamically named using the original file ID and a timestamp for easy tracking.
-
Notify & Deliver
- The workflow retrieves the
webViewLinkfor the newly created JSON and Markdown files. - An
Email Content Formatternode uses OpenAI to generate a clean HTML email body with links to the reports. - Finally, notifications are sent via both
GmailandTelegram, providing you with instant access to your transcribed and summarized content.
- The workflow retrieves the
✅ Real-World Use Cases:
- Meeting Recaps: Automatically transcribe and summarize Zoom or Teams meetings to capture decisions and action items without manual note-taking.
- Content Creation: Convert podcasts, interviews, or voice notes into blog posts, show notes, or social media content.
- Academic & Market Research: Quickly process and analyze audio from interviews, focus groups, or lectures to identify key themes and insights.
- Personal Productivity: Turn voice memos into organized to-do lists, journal entries, or structured notes.
- Customer Support Analysis: Transcribe and analyze support calls to identify recurring issues, customer sentiment, and agent performance.
Instructions
Basic steps
- Download workflow JSON
- Import into n8n
- Configure node parameters as needed
- Test and enable the workflow
💡 Tips
After importing, verify all connectors and credentials match your environment.
Preview
Workflow Visualization
Nodes
Gmail User for Approval
gmail
Sticky Note
stickyNote
Set Config
set
Transcribe with OpenAI
@n8n/langchain.openAi
Sticky Note1
stickyNote
Sticky Note2
stickyNote
Sticky Note3
stickyNote
Sticky Note4
stickyNote
Sticky Note5
stickyNote
Sticky Note6
stickyNote
Filter by .m4a extension
filter
Limit to last file
limit
Download audio file
googleDrive
Search Google Drive
googleDrive
Sticky Note7
stickyNote
Send Telegram Message
telegram
Send Gmail Message
gmail
Email Content Formatter
@n8n/langchain.openAi
Summarize to Structured JSON
@n8n/langchain.openAi
Summarize to JSON
@n8n/langchain.openAi
Convert JSON to Markdown
@n8n/langchain.openAi
Get Filename for JSON
set
Get Filename for Markdown
set
Save JSON file to Google Drive
googleDrive
Save Markdown file to Google Drive
googleDrive
Get JSON File Meta
googleDrive
Get Markdown File Meta
googleDrive
Prepare Response JSON
set
Prepare Response Markdown
set
Merge All Paths
merge
Save Raw Transcript to Google Drive
googleDrive
Start Workflow
manualTrigger
On File Created Trigger
googleDriveTrigger
Statistics
View full JSON structure
{
"nodes": [
{
"id": "3918995a-a587-40c1-828c-97e75b988a9f",
"name": "Gmail User for Approval",
"type": "n8n-nodes-base.gmail",
"disabled": true,
"position": [
360,
-20
],
"webhookId": "c46cf421-ddb6-45a8-b83b-80b381666f0e",
"parameters": {
"sendTo": "={{ $env.EMAIL_ADDRESS_JOE }} ",
"message": "=A new was just created in the Audio Recordings folder on Google Drive. Would you like to continue the workflow and Transcribe the audio file and generate reports.",
"options": {
"limitWaitTime": {
"values": {
"resumeUnit": "minutes",
"resumeAmount": 45
}
}
},
"subject": "=💡New Audio File Created - Approve Transcription Service",
"operation": "sendAndWait",
"approvalOptions": {
"values": {
"approvalType": "double"
}
}
},
"credentials": {
"gmailOAuth2": {
"id": "1xpVDEQ1yx8gV022",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "44aa6e99-9b4a-4af4-93e3-4b1a50fc7628",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-320,
680
],
"parameters": {
"color": 3,
"width": 260,
"height": 280,
"content": "## 3️⃣ Transcribe Audio"
},
"typeVersion": 1
},
{
"id": "cbf765b5-b888-4e22-b4a2-1d430b557109",
"name": "Set Config",
"type": "n8n-nodes-base.set",
"position": [
0,
780
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "2f5cef95-a26b-46ff-ab9a-501187ce4211",
"name": "text",
"type": "string",
"value": "={{ $json.text }}"
},
{
"id": "ac623698-1263-4b83-8c59-159863d950b9",
"name": "datetime",
"type": "string",
"value": "={{ $now }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "bd9cd4aa-6afc-4875-a487-df4f0d3a4a29",
"name": "Transcribe with OpenAI",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
-240,
780
],
"parameters": {
"options": {},
"resource": "audio",
"operation": "transcribe"
},
"credentials": {
"openAiApi": {
"id": "jEMSvKmtYfzAkhe6",
"name": "OpenAi account"
}
},
"typeVersion": 1
},
{
"id": "4d91f6f7-a89e-44d9-9433-4d9a1df368a2",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
180,
580
],
"parameters": {
"color": 5,
"width": 1560,
"height": 280,
"content": "## 4️⃣ Process Transcript and Generate Structured JSON Report"
},
"typeVersion": 1
},
{
"id": "64421d13-0aff-46f8-bf3e-5fac89ec9c46",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
180,
900
],
"parameters": {
"color": 6,
"width": 1560,
"height": 280,
"content": "## 5️⃣ Process Transcript and Generate Structured JSON -> Markdown Report"
},
"typeVersion": 1
},
{
"id": "769ca5a4-2a54-4ed8-85af-4359b97755bc",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1000,
1220
],
"parameters": {
"color": 2,
"width": 460,
"height": 280,
"content": "## 6️⃣ Save Raw Transcript to Google Drive"
},
"typeVersion": 1
},
{
"id": "aa612f37-f7cd-4cf7-919c-87564f03eef1",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-100,
240
],
"parameters": {
"color": 4,
"width": 300,
"height": 300,
"content": "## 1️⃣ Start Transcription Service"
},
"typeVersion": 1
},
{
"id": "1e520267-6275-4d07-bba8-9ebaf0afbc68",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-100,
-140
],
"parameters": {
"width": 700,
"height": 340,
"content": "## Wait for Google Drive Trigger and Send for User Approval to Proceed (Human in the Loop)\n(optional)"
},
"typeVersion": 1
},
{
"id": "1f07fa9c-ecfc-4534-a0b2-569eca1a3092",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
680,
240
],
"parameters": {
"color": 2,
"width": 880,
"height": 300,
"content": "## 2️⃣ Search and Download Audio File from Google Drive\n💡Note: Adjust Filter and Limit settings for your needs"
},
"typeVersion": 1
},
{
"id": "b769d523-6b1f-45f2-98b1-4d0f8eb2d7f4",
"name": "Filter by .m4a extension",
"type": "n8n-nodes-base.filter",
"position": [
980,
340
],
"parameters": {
"options": {
"ignoreCase": true
},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": false,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "420e1a9c-2145-4845-b4b0-31a82855a78c",
"operator": {
"type": "string",
"operation": "endsWith"
},
"leftValue": "={{ $json.name }}",
"rightValue": ".m4a"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "5a67182e-4f13-4b6f-a3e2-863e18af31b0",
"name": "Limit to last file",
"type": "n8n-nodes-base.limit",
"position": [
1180,
340
],
"parameters": {
"keep": "lastItems"
},
"typeVersion": 1
},
{
"id": "f42b4efc-6e04-49a1-8bd8-252ebd3dbf42",
"name": "Download audio file",
"type": "n8n-nodes-base.googleDrive",
"position": [
1380,
340
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "UhdXGYLTAJbsa0xX",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "4313e19f-ca7a-4982-b3b4-1680c674e696",
"name": "Search Google Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
780,
340
],
"parameters": {
"filter": {
"folderId": {
"__rl": true,
"mode": "list",
"value": "1Wqd4zEEb847gFYKoDBbNnXsWEc-kCAm2",
"cachedResultUrl": "https://drive.google.com/drive/folders/1Wqd4zEEb847gFYKoDBbNnXsWEc-kCAm2",
"cachedResultName": "Audio Recordings"
},
"whatToSearch": "files"
},
"options": {},
"resource": "fileFolder"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "UhdXGYLTAJbsa0xX",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "e25655b0-9d30-40d4-9051-bffe38fb41e0",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
2020,
700
],
"parameters": {
"width": 660,
"height": 480,
"content": "## 7️⃣ Send Transcription Report Links to User"
},
"typeVersion": 1
},
{
"id": "38ff9906-41af-430a-9de9-0500577826a5",
"name": "Send Telegram Message",
"type": "n8n-nodes-base.telegram",
"position": [
2460,
980
],
"webhookId": "bb40ede7-03cf-493d-b051-196b96725925",
"parameters": {
"text": "=Audio Transcribed and Reports Generated\n{{ $json.id_json.webViewLink }}\n{{ $json.id_markdown.webViewLink }}",
"chatId": "={{ $env.TELEGRAM_CHAT_ID }}",
"additionalFields": {
"parse_mode": "HTML",
"appendAttribution": false
}
},
"credentials": {
"telegramApi": {
"id": "pAIFhguJlkO3c7aQ",
"name": "Telegram account"
}
},
"typeVersion": 1.2
},
{
"id": "5b6aedaa-897f-4b76-84d8-3ca18d06cc5c",
"name": "Send Gmail Message",
"type": "n8n-nodes-base.gmail",
"position": [
2460,
800
],
"webhookId": "0a81b95a-cd82-465d-8450-cf38518a4cbb",
"parameters": {
"sendTo": "={{ $env.EMAIL_ADDRESS_JOE }} ",
"message": "={{ $json.message.content }}",
"options": {
"appendAttribution": false
},
"subject": "Audio Transcribed and Reports Generated"
},
"credentials": {
"gmailOAuth2": {
"id": "1xpVDEQ1yx8gV022",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "4500efdb-7a70-40da-97b6-e4668af21a19",
"name": "Email Content Formatter",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
2100,
800
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"content": "=Prapare this HTML template using the following: \n{{ $json.id_json.toJsonString() }}\n{{ $json.id_markdown.toJsonString() }}\n\nEnsure that the 'webViewLink' is always provided.\n\nRespond only with HTML and avoid any preamble or further explanation. Remove all ``` or ```html from final response.\n\n<style type=\"text/css\">\n /* Reset styles */\n body { margin: 0; padding: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; }\n .wrapper { max-width: 600px; margin: 0 auto; }\n .content { padding: 30px; line-height: 1.6; color: #333333; }\n .divider { border-top: 1px solid #eeeeee; margin: 25px 0; }\n .button { display: inline-block; padding: 12px 24px; background-color: #2563eb; color: white; text-decoration: none; border-radius: 6px; }\n</style>\n</head>\n<body>\n <div class=\"wrapper\">\n <div class=\"content\">\n <h2 style=\"color: #1f2937; margin-bottom: 20px;\">Your Documents</h2>\n \n <div style=\"margin-bottom: 30px;\">\n <h3 style=\"color: #374151; margin-bottom: 12px;\">[name]</h3>\n <a href=\"[webViewLink]\" class=\"button\" style=\"color: white;\">View Document</a>\n </div>\n\n <div class=\"divider\"></div>\n\n [continue the pattern ...]\n\n </div>\n </div>\n</body>"
},
{
"role": "system"
}
]
}
},
"credentials": {
"openAiApi": {
"id": "jEMSvKmtYfzAkhe6",
"name": "OpenAi account"
}
},
"typeVersion": 1
},
{
"id": "287fcc26-69be-43d8-a855-c57658e92ac4",
"name": "Summarize to Structured JSON",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
240,
660
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"content": "=\"Today is \" {{ $now }} \"Transcript: \" {{ $json.text }}"
},
{
"role": "system",
"content": "## ROLE\nYou are an expert at summarizing long transcripts.\n\n## TASK\nSummarize the provided transcript into a structured JSON format.\n\n## RULES\nReturn only valid JSON in this example format:\n\"transcript_report\": {\n\"title\": \"Notion Buttons\",\n\"summary\": \"A collection of buttons for Notion\",\n\"main_points\": [\"item 1\", \"item 2\", \"item 3\"],\n\"action_items\": [\"item 1\", \"item 2\", \"item 3\"],\n\"follow_up\": [\"item 1\", \"item 2\", \"item 3\"],\n\"stories\": [\"item 1\", \"item 2\", \"item 3\"],\n\"references\": [\"item 1\", \"item 2\", \"item 3\"],\n\"arguments\": [\"item 1\", \"item 2\", \"item 3\"],\n\"related_topics\": [\"item 1\", \"item 2\", \"item 3\"],\n\"sentiment\": \"positive\"\n}"
}
]
},
"jsonOutput": true
},
"credentials": {
"openAiApi": {
"id": "jEMSvKmtYfzAkhe6",
"name": "OpenAi account"
}
},
"typeVersion": 1
},
{
"id": "7b5b751f-a7fa-4983-a0e4-1a79e5c4286c",
"name": "Summarize to JSON",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
240,
980
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"content": "=Transcript: {{ $json.text }}"
},
{
"role": "system",
"content": "=## ROLE: Expert Transcript Analyst\n**Current Date:** {{ $now }}\n**Specialization:** Technical documentation, executive reporting, and information architecture\n\n\n## TASK: Create Structured Transcript Summary\nTransform verbose transcripts into well-organized technical documents using this 3-step process:\n1. Extract key information\n2. Identify natural thematic groupings\n3. Structure for optimal scannability\n\n\n## FORMAT REQUIREMENTS\n[Document Title] - {{ $now }}\n\nExecutive Summary (3-5 sentences)\n- Core purpose of discussion\n- Key decision points\n- Actionable outcomes\n\nDetailed Analysis\n[Topic 1: Clear Section Name]\n- Key statements\n- Supporting data points\n- Action items\n\n[Topic 2: Specific Category]\n-Decision rationale\n-Contradictions/agreements\n-Follow-up requirements\n\n(...continue pattern...)\n\nAdditional Observations\n- Unresolved questions\n- Technical terminology glossary\n- Participant sentiment trends\n\n\n## RULES\n1. **Content Fidelity**\n - Never add external knowledge\n - Preserve quantitative data exactly\n - Maintain speaker intent through paraphrasing\n\n2. **Structural Requirements**\n - Use H2/H3 headers only\n - Apply consistent tense (prefer present)\n - Include timestamps for critical points [00:00]\n\n3. **Style Guidelines**\n - Technical > conversational tone\n - Active voice required\n - Bullet points for lists\n - **Bold** key decisions\n\n4. **Validation**\n - Self-check for topic overlap\n - Verify chronological accuracy\n - Confirm all action items are highlighted"
}
]
},
"jsonOutput": true
},
"credentials": {
"openAiApi": {
"id": "jEMSvKmtYfzAkhe6",
"name": "OpenAi account"
}
},
"typeVersion": 1
},
{
"id": "e92d8de3-8287-4ecd-9ca6-6f8d18b8942e",
"name": "Convert JSON to Markdown",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
620,
980
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"content": "=Today is: {{ $now }}\nTranscript: {{ $json.message.content.toJsonString() }}"
},
{
"role": "system",
"content": "Convert this transcript summary to a markdown document. Only respond with text and remove all ``` or ```markdown."
}
]
}
},
"credentials": {
"openAiApi": {
"id": "jEMSvKmtYfzAkhe6",
"name": "OpenAi account"
}
},
"typeVersion": 1
},
{
"id": "419e050f-3a9b-4fc0-99f2-2e478f080e06",
"name": "Get Filename for JSON",
"type": "n8n-nodes-base.set",
"position": [
980,
660
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a0c31c80-87c9-41e5-ae07-8639bf52870c",
"name": "filename",
"type": "string",
"value": "={{ $('Download audio file').item.json.id }}-{{ $('Download audio file').item.json.name }}-{{ $('Set Config').item.json.datetime }}.json"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "1307431e-80ea-404c-925f-d3ad5bdaa27c",
"name": "Get Filename for Markdown",
"type": "n8n-nodes-base.set",
"position": [
980,
980
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a0c31c80-87c9-41e5-ae07-8639bf52870c",
"name": "filename",
"type": "string",
"value": "={{ $('Download audio file').item.json.id }} - {{ $('Download audio file').item.json.name }}- {{ $('Set Config').item.json.datetime }}.md"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "c87a9dcb-3edb-47ba-a059-6e7a6c63c287",
"name": "Save JSON file to Google Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
1180,
660
],
"parameters": {
"name": "={{ $json.filename }}",
"content": "={{ $('Summarize to Structured JSON').item.json.message.content.toJsonString() }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1Wqd4zEEb847gFYKoDBbNnXsWEc-kCAm2",
"cachedResultUrl": "https://drive.google.com/drive/folders/1Wqd4zEEb847gFYKoDBbNnXsWEc-kCAm2",
"cachedResultName": "Audio Recordings"
},
"operation": "createFromText"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "UhdXGYLTAJbsa0xX",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "2f0c30b5-1c99-4c06-9c1b-8a18033e6921",
"name": "Save Markdown file to Google Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
1180,
980
],
"parameters": {
"name": "={{ $json.filename }}",
"content": "={{ $('Convert JSON to Markdown').item.json.message.content }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1Wqd4zEEb847gFYKoDBbNnXsWEc-kCAm2",
"cachedResultUrl": "https://drive.google.com/drive/folders/1Wqd4zEEb847gFYKoDBbNnXsWEc-kCAm2",
"cachedResultName": "Audio Recordings"
},
"operation": "createFromText"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "UhdXGYLTAJbsa0xX",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "abc070ee-c276-410b-a3cf-a8504bf992a1",
"name": "Get JSON File Meta",
"type": "n8n-nodes-base.googleDrive",
"position": [
1380,
660
],
"parameters": {
"filter": {
"whatToSearch": "files"
},
"options": {
"fields": [
"id",
"webViewLink",
"name"
]
},
"resource": "fileFolder",
"queryString": "={{ $('Get Filename for JSON').item.json.filename }}"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "UhdXGYLTAJbsa0xX",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "0961424a-f3a3-4469-962b-6b2a7affd66d",
"name": "Get Markdown File Meta",
"type": "n8n-nodes-base.googleDrive",
"position": [
1380,
980
],
"parameters": {
"filter": {
"whatToSearch": "files"
},
"options": {
"fields": [
"id",
"webViewLink",
"name"
]
},
"resource": "fileFolder",
"queryString": "={{ $('Get Filename for Markdown').item.json.filename }}"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "UhdXGYLTAJbsa0xX",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "bddd4298-7570-48df-a16b-5352909f6530",
"name": "Prepare Response JSON",
"type": "n8n-nodes-base.set",
"position": [
1580,
660
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c89d0613-9b1e-4906-a4d2-ecc5fe585f5b",
"name": "id_json",
"type": "object",
"value": "={{ $json }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "d3a77222-96ac-4d2e-a98c-b185524bebe0",
"name": "Prepare Response Markdown",
"type": "n8n-nodes-base.set",
"position": [
1580,
980
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "9e23ce26-bdf5-46c8-9099-02179cd29fc5",
"name": "id_markdown",
"type": "object",
"value": "={{ $json }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "41e6a279-426e-4fcd-ad6d-182fbc111d28",
"name": "Merge All Paths",
"type": "n8n-nodes-base.merge",
"position": [
1840,
980
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition",
"numberInputs": 3
},
"typeVersion": 3
},
{
"id": "e2bb4ed5-f9cd-4807-950c-8f9a4bef1a24",
"name": "Save Raw Transcript to Google Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
1180,
1300
],
"parameters": {
"name": "={{ $('Download audio file').item.json.id }} - {{ $('Download audio file').item.json.name }}- {{ $('Set Config').item.json.datetime }}.txt",
"content": "={{ $('Transcribe with OpenAI').item.json.text }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1Wqd4zEEb847gFYKoDBbNnXsWEc-kCAm2",
"cachedResultUrl": "https://drive.google.com/drive/folders/1Wqd4zEEb847gFYKoDBbNnXsWEc-kCAm2",
"cachedResultName": "Audio Recordings"
},
"operation": "createFromText"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "UhdXGYLTAJbsa0xX",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "fb2cced9-8c42-43de-b4a3-5dd66ddd24b3",
"name": "Start Workflow",
"type": "n8n-nodes-base.manualTrigger",
"position": [
0,
340
],
"parameters": {},
"typeVersion": 1
},
{
"id": "c2ef200f-4e45-42ba-a5f2-f7eb47df8f2f",
"name": "On File Created Trigger",
"type": "n8n-nodes-base.googleDriveTrigger",
"disabled": true,
"position": [
0,
-20
],
"parameters": {
"event": "fileCreated",
"options": {
"fileType": "application/vnd.google-apps.audio"
},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"triggerOn": "specificFolder",
"folderToWatch": {
"__rl": true,
"mode": "list",
"value": "1Wqd4zEEb847gFYKoDBbNnXsWEc-kCAm2",
"cachedResultUrl": "https://drive.google.com/drive/folders/1Wqd4zEEb847gFYKoDBbNnXsWEc-kCAm2",
"cachedResultName": "Audio Recordings"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "UhdXGYLTAJbsa0xX",
"name": "Google Drive account"
}
},
"typeVersion": 1
}
],
"connections": {
"Set Config": {
"main": [
[
{
"node": "Summarize to JSON",
"type": "main",
"index": 0
},
{
"node": "Summarize to Structured JSON",
"type": "main",
"index": 0
},
{
"node": "Save Raw Transcript to Google Drive",
"type": "main",
"index": 0
}
]
]
},
"Start Workflow": {
"main": [
[
{
"node": "Search Google Drive",
"type": "main",
"index": 0
}
]
]
},
"Merge All Paths": {
"main": [
[
{
"node": "Send Telegram Message",
"type": "main",
"index": 0
},
{
"node": "Email Content Formatter",
"type": "main",
"index": 0
}
]
]
},
"Summarize to JSON": {
"main": [
[
{
"node": "Convert JSON to Markdown",
"type": "main",
"index": 0
}
]
]
},
"Get JSON File Meta": {
"main": [
[
{
"node": "Prepare Response JSON",
"type": "main",
"index": 0
}
]
]
},
"Limit to last file": {
"main": [
[
{
"node": "Download audio file",
"type": "main",
"index": 0
}
]
]
},
"Download audio file": {
"main": [
[
{
"node": "Transcribe with OpenAI",
"type": "main",
"index": 0
}
]
]
},
"Search Google Drive": {
"main": [
[
{
"node": "Filter by .m4a extension",
"type": "main",
"index": 0
}
]
]
},
"Get Filename for JSON": {
"main": [
[
{
"node": "Save JSON file to Google Drive",
"type": "main",
"index": 0
}
]
]
},
"Prepare Response JSON": {
"main": [
[
{
"node": "Merge All Paths",
"type": "main",
"index": 0
}
]
]
},
"Get Markdown File Meta": {
"main": [
[
{
"node": "Prepare Response Markdown",
"type": "main",
"index": 0
}
]
]
},
"Transcribe with OpenAI": {
"main": [
[
{
"node": "Set Config",
"type": "main",
"index": 0
}
]
]
},
"Email Content Formatter": {
"main": [
[
{
"node": "Send Gmail Message",
"type": "main",
"index": 0
}
]
]
},
"Gmail User for Approval": {
"main": [
[
{
"node": "Search Google Drive",
"type": "main",
"index": 0
}
]
]
},
"On File Created Trigger": {
"main": [
[
{
"node": "Gmail User for Approval",
"type": "main",
"index": 0
}
]
]
},
"Convert JSON to Markdown": {
"main": [
[
{
"node": "Get Filename for Markdown",
"type": "main",
"index": 0
}
]
]
},
"Filter by .m4a extension": {
"main": [
[
{
"node": "Limit to last file",
"type": "main",
"index": 0
}
]
]
},
"Get Filename for Markdown": {
"main": [
[
{
"node": "Save Markdown file to Google Drive",
"type": "main",
"index": 0
}
]
]
},
"Prepare Response Markdown": {
"main": [
[
{
"node": "Merge All Paths",
"type": "main",
"index": 1
}
]
]
},
"Summarize to Structured JSON": {
"main": [
[
{
"node": "Get Filename for JSON",
"type": "main",
"index": 0
}
]
]
},
"Save JSON file to Google Drive": {
"main": [
[
{
"node": "Get JSON File Meta",
"type": "main",
"index": 0
}
]
]
},
"Save Markdown file to Google Drive": {
"main": [
[
{
"node": "Get Markdown File Meta",
"type": "main",
"index": 0
}
]
]
},
"Save Raw Transcript to Google Drive": {
"main": [
[
{
"node": "Merge All Paths",
"type": "main",
"index": 2
}
]
]
}
}
}Actions
Technical Specs
Compatibility
License
This workflow template follows MIT license, you can freely use, modify and distribute.
Please comply with relevant third-party service terms when using.