Create Meeting Minutes from Telegram Messages with GPT-5 to Airtable Slack Gmail

How it works?

Send a message or a voice note on Telegram right after the meeting.

n8n transcribes (if it’s a voice note) and sends the text to GPT.

GPT generates a structured and professional meeting minutes report.

The report is automatically stored in Airtable.

Your team is instantly notified in Slack.

A formal email is sent via Gmail to the right recipients.

👉 Works for all types of meetings: client calls, team syncs, project updates… whether you type a message or send a quick voice memo.

✅ Requirements

Before running this workflow, you’ll need:

A Telegram account with a bot configured (to send your messages/voice notes)
An OpenAI API key (for GPT and voice transcription)
An Airtable account with a base containing these fields:
Email
Subject
Report
A Slack account with the target channel for notifications
A Gmail account connected to n8n (OAuth2)

🔧 Step-by-step setup

Step 1 – Telegram Trigger Node**: Telegram Trigger
Updates**: message
👉 Captures every message or voice note sent to the bot.

Step 2 – Detect text or voice Node**: Code (“Message or Voice ?”)
Expected output**:
{ type: "text", content } if message
{ type: "voice", file_id } if voice note
👉 Routes the workflow based on the input type.

Step 3 – IF Condition Condition**: {{$json.type}} == voice
👉 Directs to the transcription branch if it’s a voice note.

Voice Branch 🎤

Step 4 – Download the voice file Node**: Telegram → Voice note
Parameter**: fileId = {{$json.file_id}}

Step 5 – Wait Node**: Wait (2–3s)
👉 Lets Telegram prepare the file.

Step 6 – Voice note download Node**: Telegram (file download)
👉 Retrieves the audio file.

Step 7 – Transcribe to text Node**: OpenAI (Transcription)
Resource**: audio
Operation**: transcribe
👉 Converts the voice note into plain text.

Step 8 – Short wait 👉 Ensures continuity before sending to GPT.

Text Branch ✍️

Step 9 – Normalize Node**: Code (“Content”)
Return**: { text: $json.content }
👉 Standardizes the text as if it were already a transcription.

Step 10 – Detect email Node**: Code (“Domain or Email detection”)
👉 Extracts the target email (or builds a fallback contact@gmail.com).

Step 11 – Generate meeting minutes Node**: Agent (“Generate Meeting Message”)
Prompt**: specialized for “meeting minutes”
Model**: GPT-4.1-mini
Output**: { email, subject, body }
👉 GPT creates a clean and structured meeting report.

Step 12 – Enforce clean JSON

Node**: Output Parser Structured
JSON Example**:
json {"email": "address@gmail.com","subject":"Subject","body":Email"}

👉 Ensures the output is always valid JSON.

Step 13 – Cleanup / Airtable mapping

Node**: Code
Return**: { Email, subject, Report }
👉 Prepares the correct fields aligned with your Airtable table.

Step 14 – Store in Airtable

Node**: Airtable (Create Record)
Mapping**:
Email = {{$json.Email}}
subject = {{$json.subject}}
Report = {{$json.Report}}
👉 Archives each meeting report in your Airtable base.

Step 15 – Notify in Slack Node**: Slack (Send Message)
Channel**: your team channel
Message**: {{$json.fields.subject}}{{$json.fields.Report}}

Step 16 – Send the email Node**: Gmail (Send Email)
sendTo**: {{$('Create a record').item.json.fields.Email}}
subject**: {{$('Create a record').item.json.fields.subject}}
message**: {{$('Create a record').item.json.fields.Report}}

0
Downloads
1
Views
8.72
Quality Score
intermediate
Complexity
Author:Baptiste Fort(View Original →)
Created:9/10/2025
Updated:11/17/2025

🔒 Please log in to import templates to n8n and favorite templates

Workflow Visualization

Loading...

Preparing workflow renderer

Comments (0)

Login to post comments