1. Opening Problem Statement
Meet Sahar, a busy project manager juggling multiple meetings every day across various teams. Each morning, she wastes up to 30 minutes just checking her Google Calendar and cross-referencing meeting details with her messaging apps. Important meetings sometimes get overlooked, or she scrambles to find attendee information last minute. This scattered routine often leads to missed discussions or delayed preparations, costing her productivity and professional reputation.
This specific challenge of keeping up-to-date with daily meetings and having them conveniently accessible on a preferred communication platform is what our workflow directly solves. By automating the daily meeting summary from Google Calendar and sending it to Telegram, Sahar regains lost time and stays organized effortlessly.
2. What This Automation Does
This workflow runs automatically every day at 6 AM and performs the following tasks:
- Fetches all meetings scheduled for the current day directly from your Google Calendar, including details like meeting names, start times, and guests.
- Formats the meeting data into a user-friendly summary message customized with meeting times localized for Iran’s timezone.
- Generates a detailed text message listing each meeting, its time, and attendees, adding a note if no guests are invited.
- Sends this compiled summary message to your Telegram account using a Telegram bot, delivering it as a neat notification first thing in the morning.
- Reduces manual calendar checks and messaging app toggling, saving you about 30 minutes each morning.
- Makes managing meetings more reliable and less stressful by automating reminders exactly when needed.
3. Prerequisites ⚙️
- Google Calendar account connected via n8n Google Calendar OAuth2 credentials 📅🔑
- Telegram bot created using Telegram’s @BotFather and API token configured in n8n 🤖📧
- Your personal Telegram User ID for message delivery
- An active n8n account, either cloud-hosted or self-hosted (for self-hosting, explore options like Hostinger).
4. Step-by-Step Guide
Step 1: Create Schedule Trigger Node for 6 AM
In the n8n workflow editor, drag the Schedule Trigger node onto the canvas. Set the trigger time to 6 AM every morning by navigating: Schedule Trigger → Parameters → Rule → Add interval → Set “triggerAtHour” to 6. This node ensures the workflow runs at your preferred time daily.
After saving, you should see a clock icon next to the node confirming its scheduled trigger. If the time zone is set incorrectly, adjust in workflow settings to Asia/Tehran for accurate timing.
Step 2: Connect Google Calendar Node to Fetch Today’s Meetings
Add the Google Calendar node. Choose the “Get All” operation and configure the parameters:
- Set
timeMinto today’s date with:{{$today}} - Set
timeMaxto tomorrow’s date `{{$today.plus({ days: 1 })}}` for a 24-hour range - Select your calendar email (e.g., [email protected])
- Enable
singleEventsto true to expand recurring events
This node pulls all your meetings for the day in detail. Verify your Google OAuth2 credentials are connected to n8n under credentials settings.
Step 3: Use Set Node to Extract Specific Meeting Fields
Insert a Set node next to Google Calendar. Structurally map each meeting’s key attributes to simpler field names:
- Name from
summary - Time from
start - Guests from
attendees
Use: Name = {{$json.summary}}, Time = {{$json.start}}, Guests = {{$json.attendees}}
This streamlines the JSON data for easier use downstream.
Step 4: Format Message Text Using Function Node
Add a Function node for JavaScript customization. Paste this code snippet:
let message = "*Your meetings today are:* n";
for (item of items) {
const time = new Date(item.json.Time.dateTime);
const formattedTime = new Intl.DateTimeFormat('fa-IR', {
hour: 'numeric',
minute: 'numeric',
timeZone: item.json.Time.timeZone
}).format(time);
message += `* ${item.json.Name} | ${formattedTime}n`;
if (item.json.Guests && item.json.Guests.length > 0) {
message += '*Â - ';
item.json.Guests.forEach((guest, index) => {
message += `${guest.email}${index < item.json.Guests.length - 1 ? ', ' : ''}`;
});
message += 'n';
} else {
message += '*Â - No guestsn';
}
}
return [{ json: { message } }];This script loops through all meetings, formats times for Iran timezone, and assembles emails of all guests or notes when none are invited. The result is a neatly formatted Markdown Telegram message.
Step 5: Send the Formatted Message via Telegram Node
Finally, add the Telegram node. Use your bot credentials and set the message field to the generated message expression: {{$json["message"]}}.
This will deliver the daily meeting summary to your personal Telegram chat.
Test the workflow manually or wait until 6 AM the next day to see your meeting list pop right into Telegram.
5. Customizations ✏️
- Change Timezone: In the Function node, modify
'fa-IR'to your preferred locale code to format time properly for your region. - Add Meeting Location: Extend the Set node to include
location, then update the Function node to append meeting venues for richer details. - Include Meeting Description: Retrieve and display the description field for each meeting by adding it to the Set node and formatting message output accordingly.
- Schedule Multiple Notifications: Duplicate the Schedule Trigger node to run multiple reminders at different times like noon or evening.
- Send to Group Chats: Modify the Telegram node's chat ID to broadcast the meeting list to a team or group channel instead of just a personal chat.
6. Troubleshooting 🔧
Problem: "Google Calendar node returns empty data or no events found."
Cause: Incorrect calendar ID or date range filters.
Solution: Double-check the calendar email in the Google Calendar node, ensure timeMin and timeMax parameters correctly define the current day, and verify you have upcoming meetings scheduled.
Problem: "Telegram messages are not sent or fail with 401 Unauthorized."
Cause: Invalid or expired bot token, or incorrect chat ID.
Solution: Confirm your Telegram bot token and chat ID are correctly input in n8n credentials and Telegram node parameters. Test the bot by sending sample messages using Telegram API before workflow use.
Problem: "Timing issues where message arrives late or not at 6 AM."
Cause: Workflow timezone mismatch.
Solution: Set your workflow timezone explicitly to Asia/Tehran or your local timezone under workflow settings to ensure schedule trigger fires correctly.
7. Pre-Production Checklist ✅
- Confirm Google Calendar OAuth2 credentials are connected and active in n8n.
- Verify the Telegram bot credentials and personal user ID are correctly set.
- Test the Schedule Trigger node timing matches your desired daily run time.
- Run the workflow manually to verify it fetches meetings and sends Telegram messages with correct formatting.
- Backup your workflow JSON and credentials before going live.
8. Deployment Guide
Once tested, toggle the workflow to active in n8n. The Schedule Trigger node will auto-execute every morning at 6 AM (or your customized time).
Monitor initial runs via execution logs to catch any unforeseen errors. Adjust configurations if meeting data or timezone appears incorrect.
Use n8n's inbuilt workflow history to audit successfully sent Telegram messages. If you self-host n8n, consider automated backups and uptime monitoring.
10. Conclusion
By following this guide, you've equipped yourself with an automated n8n workflow that pulls your daily meetings from Google Calendar and delivers them to Telegram every morning. This empowers you to stay ahead, saves approximately 30 minutes daily, and eliminates manual calendar checks.
Next steps to expand this automation could include integrating meeting location details, adding Slack notifications, or sending reminders before meeting start times. With this solid foundation, your productivity just got a boost!