Google Calendar + Telegram, your daily audio briefing
Your morning shouldn’t start with five apps, twelve notifications, and that “I’ll just check the news real quick” lie. But once you open your calendar, then weather, then headlines, you’ve already burned focus before the day even begins.
This Telegram audio briefing hits busy founders hardest. Marketing leads trying to protect creative time feel it too, and so do operators who need the day’s schedule in their head before standup. The outcome is simple: one short audio file in Telegram that tells you what matters.
You’ll see how this workflow pulls your Google Calendar, weather, and news into a single 3-minute “good morning podcast”, then delivers it automatically. No tab hopping. No doomscrolling warm-up.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Calendar + Telegram, your daily audio briefing
flowchart LR
subgraph sg0["When clicking ‘Execute workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "News Sources", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out News Sources", pos: "b", h: 48 }
n3["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Headlines from NewsApi"]
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Config", pos: "b", h: 48 }
n6["<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/merge.svg' width='40' height='40' /></div><br/>Merge"]
n7@{ icon: "mdi:location-exit", form: "rounded", label: "Get Today Meetings", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "Calendar Summary", pos: "b", h: 48 }
n9@{ icon: "mdi:brain", form: "rounded", label: "Gemini_Calendar", pos: "b", h: 48 }
n10@{ icon: "mdi:brain", form: "rounded", label: "Gemini_Weather", pos: "b", h: 48 }
n11@{ icon: "mdi:robot", form: "rounded", label: "Weather Summary", pos: "b", h: 48 }
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Open Weather Map"]
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Get Useful Fields", pos: "b", h: 48 }
n14@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Headlines", pos: "b", h: 48 }
n15@{ icon: "mdi:robot", form: "rounded", label: "News Summary", pos: "b", h: 48 }
n16@{ icon: "mdi:brain", form: "rounded", label: "Gemini_News", pos: "b", h: 48 }
n17@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Podcast Parts", pos: "b", h: 48 }
n18["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Generate Podcast Audio"]
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Filename", pos: "b", h: 48 }
n20@{ icon: "mdi:cog", form: "rounded", label: "Convert Audio to File", pos: "b", h: 48 }
n21@{ icon: "mdi:cog", form: "rounded", label: "Write Audio File on Disk", pos: "b", h: 48 }
n22@{ icon: "mdi:cog", form: "rounded", label: "Convert Audio to MP3", pos: "b", h: 48 }
n23@{ icon: "mdi:cog", form: "rounded", label: "Read Audio File from Disk", pos: "b", h: 48 }
n24["<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/>Send Podcast to Telegram"]
n25@{ icon: "mdi:cog", form: "rounded", label: "Route", pos: "b", h: 48 }
n26@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Events", pos: "b", h: 48 }
n6 --> n17
n25 --> n7
n25 --> n12
n25 --> n1
n5 --> n25
n4 --> n13
n16 -.-> n15
n1 --> n2
n15 --> n6
n19 --> n18
n10 -.-> n11
n9 -.-> n8
n11 --> n6
n26 --> n8
n8 --> n6
n12 --> n11
n13 --> n14
n7 --> n26
n14 --> n15
n22 --> n23
n20 --> n21
n18 --> n20
n2 --> n3
n17 --> n19
n21 --> n22
n23 --> n24
n3 --> n4
n0 --> n5
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 n0 trigger
class n8,n11,n15 ai
class n9,n10,n16 aiModel
class n3,n12,n18 api
classDef customIcon fill:none,stroke:none
class n3,n6,n12,n18,n24 customIcon
The Problem: Morning Context Lives in Too Many Places
Mornings are when you need clarity, but most people start by assembling it manually. Calendar in one place. Weather somewhere else. News scattered across notifications, feeds, and “recommended” rabbit holes. Even when you only spend a few minutes per app, it stacks up fast, and it’s not just time. It’s the mental switching, the temptation to keep scrolling, and the nagging feeling you might miss something important. By the time you’re “ready to work,” you’ve already spent your best attention on information gathering.
None of this is hard. That’s the problem. It’s easy to keep doing it forever.
- You check Google Calendar twice because you forgot the first event time.
- Weather gets skipped until you’re already out the door, which means last-minute changes and extra stress.
- News becomes “just one more headline,” and suddenly 20 minutes are gone.
- Manual routines break the moment your schedule changes or you travel to a different city.
The Solution: A Daily Audio Briefing Delivered in Telegram
This workflow turns your morning inputs into a single output you can actually use. It starts with your preferences (name, city, language, and the topics you care about), then runs three parallel checks at the same time: weather, calendar, and news. Weather is pulled from OpenWeatherMap and condensed into a simple forecast you can act on. Your Google Calendar events for today are retrieved, grouped, and summarized so you hear the schedule without scanning a screen. News headlines are collected via NewsAPI (top headlines plus keyword-based stories), then Google Gemini generates a short digest so you get the gist without opening a browser.
After that, everything is merged into one script, converted into audio with Google Text-to-Speech, processed into a clean MP3 using FFmpeg, and sent straight to you through a Telegram bot. One message. One play button. Done.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say your current routine is Google Calendar (about 5 minutes), weather (another 3), and news (easily 15 if you click anything). That’s roughly 20 minutes every morning, and frankly it often turns into more. With this workflow, you spend about 1 minute setting your preferences once, then your daily “effort” is basically zero because it arrives in Telegram. Even if the audio generation and MP3 processing take a few minutes in the background, you’re not the one doing the work.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Calendar to pull today’s meetings automatically
- Telegram Bot to deliver the MP3 to your chat
- OpenWeatherMap API key (get it from your OpenWeatherMap account)
Skill level: Intermediate. You’ll connect a few accounts, paste API keys, and make sure FFmpeg is installed on the machine running n8n.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Your preferences kick it off. The workflow begins with a simple input (your name, city, language, and news keywords). By default it’s a manual start, but many teams switch this to a scheduled run so it arrives every morning automatically.
Three branches run in parallel. One branch pulls a 15-hour forecast from OpenWeatherMap and condenses it into a clean weather report. Another branch connects to Google Calendar to retrieve today’s events and turn them into a readable agenda. The third branch collects headlines and keyword stories from NewsAPI, then Gemini creates a short digest that doesn’t ramble.
Everything is merged into one script. The workflow combines the three summaries into a single “podcast” text, with transitions and a greeting so it feels coherent instead of stitched together.
Audio is generated, cleaned up, and delivered. Google Text-to-Speech creates the audio draft, then FFmpeg converts it into a final MP3. n8n reads the file and sends it to you via Telegram.
You can easily modify the news topics to track different keywords based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
This workflow starts on demand to generate a daily podcast episode.
- Add the Manual Start Trigger node as the workflow trigger.
- Connect Manual Start Trigger to Setup Preferences.
Step 2: Connect Preferences and Branch the Workflow
Set user and location inputs, then split into three parallel branches for weather, calendar, and news.
- In Setup Preferences, set user_name to
User, city_name toSample City, city_lat to0.0000, city_lon to0.0000, and output_language toEnglish (US). - Connect Setup Preferences to Dispatch Branches.
- Ensure Dispatch Branches outputs to both Retrieve Today's Meetings, OpenWeather Forecast, and Define News Feeds in parallel.
Sample City and coordinates with your real city to avoid irrelevant weather results.Step 3: Set Up Weather and Calendar Data Retrieval
Collect forecast and meeting data, then summarize with AI for the podcast script.
- In OpenWeather Forecast, set URL to
https://api.openweathermap.org/data/2.5/forecastand configure query parameters: lat={{ $json.city_lat }}, lon={{ $json.city_lon }}, unitsmetric, cnt5. Credential Required: Connect your httpQueryAuth credentials. - Connect OpenWeather Forecast to Summarize Weather. Ensure Summarize Weather uses the text input
=User Name: {{ $('Setup Preferences').item.json.user_name }} Today's Date: {{ $now.toISO().split('T')[0] }} Here is the weather forecast data: {{ $json.list.toJsonString() }}. - Open Retrieve Today's Meetings, set operation to
getAll, returnAll totrue, timeMin to={{$now.startOf('day')}}, and timeMax to={{$now.endOf('day')}}. Credential Required: Connect your googleCalendarOAuth2Api credentials. - Connect Retrieve Today's Meetings → Group Calendar Events and set destinationFieldName to
events. - Connect Group Calendar Events → Summarize Calendar and set the text field to
=Here is the calendar data: {{ $json.events.toJsonString() }}. - For AI models, ensure Gemini Weather Model is connected to Summarize Weather, and Gemini Calendar Model is connected to Summarize Calendar. Credential Required: Connect your googlePalmApi credentials on each Gemini model node (do not add credentials to the agent nodes).
Step 4: Configure News Pipeline and AI Summary
Define news sources, fetch headlines, and create a summarized news segment.
- In Define News Feeds, set news_sources to the array value
["techcrunch","wired","the-verge","mit-technology-review","ars-technica","venturebeat","engadget","hacker-news","techcrunch","wired"]. - Connect Define News Feeds → Expand Feed List, and set fieldToSplitOut to
news_sources. - In Fetch NewsAPI Headlines, set URL to
https://newsapi.org/v2/top-headlinesand query parameters: from={{ (d => (d.setDate(d.getDate() - 1), d))(new Date()).toISOString().split('T')[0] }}, pageSize3, sources={{ $json.news_sources }}. Credential Required: Connect your httpHeaderAuth credentials. - Connect Fetch NewsAPI Headlines → Expand Articles (set fieldToSplitOut to
articles), then to Extract Headline Fields and map source, title, and description using={{ $json.source.name }},={{ $json.title }}, and={{ $json.description }}. - Connect Extract Headline Fields → Group Headlines with destinationFieldName set to
headlines, then to Summarize News with text=Here are the headlines: {{ $json.headlines.toJsonString() }}. - Ensure Gemini News Model is connected to Summarize News. Credential Required: Connect your googlePalmApi credentials on Gemini News Model.
Step 5: Merge Segments and Generate Audio
Combine all script segments, render audio, and prepare the MP3 file.
- Connect Summarize Weather, Summarize Calendar, and Summarize News into Combine Segments with numberInputs set to
3. - Connect Combine Segments → Assemble Podcast Parts to aggregate the output fields.
- In Assign File Name, set output_filename to
=goodmorning-{{ $now.toISO()}}. - In Generate Audio Draft, set URL to
https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-tts:generateContent, method toPOST, and jsonBody to={...}using the existing expression. Credential Required: Connect your httpBasicAuth and httpHeaderAuth credentials. - Configure Convert Audio Binary with operation
toBinaryand sourcePropertycandidates[0].content.parts[0].inlineData.data, keeping filename={{ $('Assign File Name').item.json.output_filename }}.pcm. - In Write Audio to Disk, set fileName to
=/users/[YOUR_ID]/{{ $('Assign File Name').item.json.output_filename }}.pcm. - In Transcode to MP3, set command to
=ffmpeg -y -f s16le -ar 24000 -ac 1 -i /users/[YOUR_ID]/{{ $('Assign File Name').item.json.output_filename }}.pcm -b:a 192k /users/[YOUR_ID]/{{ $('Assign File Name').item.json.output_filename }}.mp3. - In Read MP3 from Disk, set fileSelector to
=/users/[YOUR_ID]/{{ $('Assign File Name').item.json.output_filename }}.mp3.
/users/[YOUR_ID]. Replace [YOUR_ID] with a valid path on your n8n host, or the FFmpeg step will fail.Step 6: Configure Telegram Delivery
Send the finished MP3 to your Telegram chat.
- In Send Audio via Telegram, set chatId to
[YOUR_ID], operation tosendAudio, and binaryData totrue. - In Send Audio via Telegram, set title to
=Good Morning: {{ $now.toISO().split('T')[0]}}under additionalFields. - Credential Required: Connect your telegramApi credentials.
Step 7: Test and Activate Your Workflow
Validate every segment, ensure the audio file is generated, and then activate the workflow for production use.
- Click Execute Workflow from Manual Start Trigger to run the full pipeline.
- Confirm Summarize Weather, Summarize Calendar, and Summarize News output conversational script segments.
- Verify Read MP3 from Disk contains binary audio and Send Audio via Telegram delivers the MP3 to your chat.
- When everything runs successfully, toggle the workflow to Active for production use.
Common Gotchas
- Google Calendar credentials can expire or need specific permissions. If things break, check your Google OAuth connection in n8n’s Credentials section 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.
- FFmpeg has to be installed on the same machine running n8n, and it must be available in your system PATH. If the MP3 step fails, verify the command works in your terminal before blaming the workflow.
Frequently Asked Questions
About 45 minutes if you already have the API keys.
No. You’ll mostly paste API keys and connect Google/Telegram credentials. The only “technical” part is installing FFmpeg if it isn’t already on your machine.
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 OpenWeatherMap, NewsAPI, and Google AI usage costs (usually low for one daily briefing).
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 one of the best reasons to use this workflow. Set your language parameter (like “en-US” or “nl-NL”), then adjust the Google Text-to-Speech steps (the audio generation nodes) to pick a specific voice, speaking rate, or style. Many people also tweak the Gemini prompt used for summarizing headlines so the tone matches their brand voice. If you want a tighter briefing, shorten the prompt and reduce the number of headlines aggregated before summarization.
Usually it’s the bot token or chat ID. Regenerate the token with BotFather if needed, then confirm you’re sending to the same chat you tested with. Also make sure the bot has actually received a message from you at least once, because Telegram won’t always allow outbound messages to a chat that was never initiated.
A lot.
Often, yes, because this workflow isn’t just “send data from A to B.” You’re merging three branches, summarizing text with an AI model, generating audio, then running FFmpeg to produce a real MP3 file. Zapier and Make can do pieces of that, but you’ll usually end up stitching together multiple zaps/scenarios, and file handling can get awkward (and expensive) as you add steps. n8n also gives you the option to self-host, which keeps ongoing costs predictable if you run automations frequently. If you only want a simple daily text message, Zapier or Make might be quicker. Talk to an automation expert if you want help choosing.
Once this is running, your morning context shows up the same way every day: one message, one audio file, one quick listen. The workflow handles the repetitive stuff so you can start the day already oriented.
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.