Telegram to Notion, approved tasks from voice notes
Your tasks are hiding in plain sight. They show up as quick Telegram pings, messy voice notes after meetings, or “remind me tomorrow” messages you swear you’ll handle later. Then they vanish. Or worse, they get copied into Notion with the wrong date.
This Telegram Notion tasks automation hits busy project leads first, but freelancers tracking client asks and students juggling deadlines feel it too. You capture requests in seconds, confirm them in Telegram, and only then create a clean Notion task with a real due date.
Below you’ll see how the workflow works, what you need, and what “set it up once” looks like in practice.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Telegram to Notion, approved tasks from voice notes
flowchart LR
subgraph sg0["Telegram: Receive Message Flow"]
direction LR
n0@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Approval Check (If Approved?)", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Telegram: Receive Message"]
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch: Text or Voice", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set: Prepare Text", pos: "b", h: 48 }
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Telegram: Download Voice File"]
n6@{ icon: "mdi:robot", form: "rounded", label: "Gemini: Transcribe Voice", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set: Put Transcript into Text", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "AI Extractor: TaskName & Tas..", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If: Extraction Valid?", pos: "b", h: 48 }
n10["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Telegram: Ask Approve / Decl.."]
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/notion.dark.svg' width='40' height='40' /></div><br/>Notion: Create Task Page"]
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Telegram: Notify - Task Crea.."]
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Telegram: Notify - Task Not .."]
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Telegram: Notify - Extractio.."]
n4 --> n8
n9 --> n10
n9 --> n14
n3 --> n4
n3 --> n5
n6 --> n7
n0 -.-> n8
n11 --> n12
n2 --> n3
n1 --> n11
n1 --> n13
n7 --> n8
n5 --> n6
n10 --> n1
n8 --> n9
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n2 trigger
class n6,n8 ai
class n0 aiModel
class n1,n3,n9 decision
class n11 database
classDef customIcon fill:none,stroke:none
class n2,n5,n10,n11,n12,n13,n14 customIcon
The Problem: Telegram Turns Into a Task Graveyard
Telegram is fast, which is why tasks land there first. A teammate sends “Can you update the deck by Friday?” A client drops a voice note with three changes and a deadline buried in the middle. You plan to move it into Notion later, but later gets crowded. So you either forget it, or you copy it over with missing context, no due date, or a vague title you’ll have to decode next week. That mental load is the real tax, because you keep re-reading chats just to feel “caught up.”
The friction compounds. Small mistakes create big cleanup.
- You end up scanning Telegram threads multiple times a day just to find the one message that mattered.
- Voice notes slow everything down because you have to replay them, then paraphrase them into a usable task.
- Due dates are the first thing to get skipped, which means Notion stops being trustworthy as a planning tool.
- When you finally do a cleanup sweep, it’s an hour of copy-paste and second-guessing.
The Solution: Turn Messages Into Approved Notion Tasks
This n8n workflow watches a Telegram chat for new messages, then turns those messages into structured Notion tasks only after you approve them. If it’s a text message, it uses the text directly. If it’s a voice note, it fetches the audio file, transcribes it, and then uses AI to extract two specific fields: a clear task name and a due date. Next, it validates what was extracted so garbage doesn’t slip into your database. Finally, it sends you a simple approval prompt back in Telegram. Tap approve, and a Notion task page is created with the right properties mapped. Tap reject, and nothing gets created.
The workflow starts with a Telegram trigger, routes text vs. audio, then uses transcription plus an AI extractor to turn “human language” into Notion-ready fields. The last mile is the important part: Telegram approval first, Notion creation second, with confirmation messages either way.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you capture 10 tasks a week from Telegram, and half are voice notes. Manually, a text task might take 3 minutes to rewrite and enter, while a voice note often takes about 10 minutes once you replay it and decide on a due date, so you’re looking at roughly 60–80 minutes weekly. With this workflow, you spend maybe 10 seconds sending the message, then another 10 seconds approving it after AI extraction. That’s close to an hour back most weeks, and the Notion database stays clean.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Telegram bot to receive messages and send approvals
- Notion to store tasks in a database
- AI/transcription API key (create it in your provider dashboard)
Skill level: Intermediate. You’ll connect accounts, paste a few tokens, and map Notion properties (Title and Date).
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Telegram message arrives. The workflow triggers the moment your bot receives a new message in the chosen chat, so you don’t need to forward anything or click “run.”
Text vs. voice is handled differently. Text gets mapped immediately into a consistent format. Voice notes are downloaded from Telegram first, then sent to a transcription step (in this template, Gemini is used, but the pattern works with other providers too).
AI extracts the fields you actually need. The workflow pulls out a task name and a due date, then validates that both are present. If extraction fails, you get an error message in Telegram instead of a broken Notion entry.
You approve the task in Telegram. A quick approval prompt is sent back. Approve creates a Notion task page with the Title and Date mapped to the right properties, then you get a confirmation message. Reject stops the workflow and sends a “rejected” note, which is surprisingly useful for staying honest.
You can easily modify the extracted fields to include priority, assignee, or project tags based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Telegram Trigger
Start by configuring the workflow entry point so incoming Telegram messages (text or voice) kick off the automation.
- Add and open Telegram Incoming Trigger.
- Set Updates to
message. - Credential Required: Connect your
telegramApicredentials. - Save the node to generate and register the webhook.
Step 2: Route Text vs Voice Inputs
Route incoming Telegram messages to either text processing or voice transcription.
- Open Route Text vs Audio and confirm it checks the expression
={{ $json.message.text }}to detect text messages. - Ensure the Route Text vs Audio output for text connects to Map Incoming Text.
- Ensure the voice output connects to Telegram Voice Fetch.
Execution Flow: Telegram Incoming Trigger → Route Text vs Audio → Map Incoming Text or Telegram Voice Fetch.
Step 3: Capture Text or Transcribe Voice
Standardize the input text, either from message text or transcribed audio.
- In Map Incoming Text, set text to
={{ $json.message.text }}. - In Telegram Voice Fetch, set Resource to
fileand File ID to={{ $json.message.voice.file_id }}. - Credential Required: Connect your
telegramApicredentials for Telegram Voice Fetch. - In Gemini Audio Transcription, set Resource to
audioand Input Type tobinary. - Credential Required: Connect your
googlePalmApicredentials for Gemini Audio Transcription. - In Store Transcript Text, set text to
={{ $json.content.parts[0].text }}.
Step 4: Set Up AI Extraction and Validation
Extract the task name and due date from the normalized text, then validate the results.
- Open Extract Task Details and confirm Text is set to
={{ $json.text }}. - Confirm Extract Task Details attributes include TaskName and TaskDue (date type).
- Open Gemini Chat Engine and confirm Model Name is
models/gemini-2.5-flash-lite. - Credential Required: Connect your
googlePalmApicredentials for Gemini Chat Engine. - Note that Gemini Chat Engine is connected as the language model for Extract Task Details—configure credentials in the parent node, not the extractor.
- In Validate Extracted Fields, ensure it checks
={{ $json.output.TaskName }}and={{ $json.output.TaskDue }}for existence.
Step 5: Configure Approval and Notion Creation
Request approval, then create the task in Notion when approved.
- In Request Task Approval, set Operation to
sendAndWait. - Set Chat ID to
={{ $('Telegram Incoming Trigger').item.json.message.chat.id }}. - Set Message to
=Task Name: {{ $json.output.TaskName }} Due Date: {{ new Date($json.output.TaskDue).toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' }) }}. - Credential Required: Connect your
telegramApicredentials for Request Task Approval. - In Approval Decision Gate, confirm the approval condition uses
={{ $json.data.approved }}. - In Notion Task Page Create, set Resource to
databasePageand Title to={{ $('Extract Task Details').item.json.output.TaskName }}. - Set Database ID to your Notion database ID (replace
[YOUR_ID]). - In Properties, set the date property to
={{ $('Extract Task Details').item.json.output.TaskDue }}with Include Time disabled. - Credential Required: Connect your
notionApicredentials for Notion Task Page Create.
Execution Flow: Request Task Approval → Approval Decision Gate → Notion Task Page Create (approved) or Telegram Task Rejected Alert (declined).
Step 6: Configure Telegram Notifications
Send confirmation or error messages back to the user in Telegram.
- In Telegram Task Created Alert, set Text to
=✅ Task created in Notion.and Chat ID to={{ $('Telegram Incoming Trigger').item.json.message.from.id }}. - In Telegram Task Rejected Alert, set Text to
=❌ Task not created in Notion.and Chat ID to={{ $('Telegram Incoming Trigger').item.json.message.from.id }}. - In Telegram Extraction Error, set Text to
=Title or due date cannot be extracted. Please try again.and Chat ID to={{ $('Telegram Incoming Trigger').item.json.message.from.id }}. - Credential Required: Connect your
telegramApicredentials to all Telegram notification nodes (5 Telegram nodes in total handle triggers, file fetch, approvals, and alerts).
Execution Flow: Validate Extracted Fields → Telegram Extraction Error when required fields are missing, and Notion Task Page Create → Telegram Task Created Alert on success.
Step 7: Test & Activate
Validate the workflow with both text and voice messages, then activate it for production use.
- Click Execute Workflow and send a text message to your bot with a clear task name and due date.
- Verify that Request Task Approval sends an approval prompt and that approving creates a Notion page.
- Send a voice message and confirm the flow runs through Telegram Voice Fetch → Gemini Audio Transcription → Store Transcript Text.
- Check that Telegram Task Created Alert or Telegram Task Rejected Alert sends the correct response.
- When testing succeeds, toggle the workflow Active to enable continuous automation.
Common Gotchas
- Telegram bot credentials can expire or the bot can lose access to a chat. If things break, check BotFather settings and confirm the chat ID your trigger listens to first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About 30 minutes if your Telegram bot and Notion database are ready.
No. You’ll mainly connect credentials and map the Notion Title and Date fields.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in AI/transcription API usage, which is usually low per message but depends on your provider and how long your voice notes are.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s a practical upgrade. You can adjust the AI extraction step (the task details extractor) to return extra fields like Priority, Project, or Assignee, then add those mappings in the Notion “create page” node. Many teams also tweak the approval message in Telegram so it shows the parsed title and due date in a more readable format. If you want to route “urgent” items to a different database, add a simple conditional check before the Notion step.
Usually it’s an invalid bot token or the bot isn’t allowed to read the chat you’re testing in. Regenerate the token in BotFather if needed, then confirm the chat ID matches your trigger. Also check that you’re sending a voice note to the same chat the bot is listening to, because people often test in a different thread and assume the workflow is broken.
A lot. On n8n Cloud, it depends on your execution limit, and on self-hosted it mainly depends on your server and your AI provider’s rate limits.
Often, yes, because this flow isn’t just “send message to Notion.” You’ve got branching (text vs. audio), transcription, extraction, validation, and an approval gate, and n8n handles that complexity without turning every conditional into a separate paid step. n8n also gives you a self-hosted path, which can matter once you’re processing lots of messages. Zapier or Make can still be fine for a basic text-only capture, especially if you want the simplest UI. If you’re torn, Talk to an automation expert and describe your volume and your approval needs.
Once this is running, Telegram stops being a leaky inbox and starts being a reliable capture tool. The workflow handles the repetitive cleanup, so your Notion task list stays usable.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.