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:
- 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 [email protected]
).
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": "[email protected]","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}}