On a schedule
Get a Telegram warning about tomorrow's calendar clashes
Each evening at 19:00, ClickRuntime checks tomorrow on your Google Calendars and sends a Telegram warning if any events overlap or run back to back.
- Runs
- On a schedule
- Apps
- Google Calendar, Telegram
- AI
- Not needed
- Access
- Calendar read-only (calendar.readonly); bot token
Send this to your assistant
Create a ClickRuntime automation: every day at 19:00, check tomorrow on my work and personal Google Calendars and send me a Telegram message if any events overlap or leave less than 10 minutes between them. Ignore all-day events and ones I declined.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Double bookings happen when invites come from several people and booking pages, or when work and personal calendars live apart. You notice the clash the next morning when it is too late to move anything politely.
This automation checks tomorrow's schedule at 19:00 and sends a short Telegram warning only when two events overlap or sit too close together. You have the evening to reschedule or send an apology.
It suits managers, consultants and parents juggling a work calendar with a family one.
What you get out of it
Time to fix it
An evening warning leaves time to move a meeting before anyone is waiting.
Across calendars
Work and personal events are checked together, which Google Calendar does not do for you.
Catches tight gaps
Meetings with no time to travel or prepare are flagged along with true overlaps.
Ignores what does not count
Declined invites, free blocks and all-day events are left out.
Silent on good days
No message means tomorrow is clear.
How it works
What happens, step by step
At 19:00 each day, ClickRuntime reads tomorrow's events from the calendars you chose.
It leaves out all-day events, events marked free and invites you declined.
It looks for events that overlap and pairs with less than 10 minutes between them.
If it finds any, your bot sends a list so you can move something tonight. On clear days nothing is sent.
Before it runs live
- Connect Google Calendar
- Connect Telegram
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Run it at a different time, more or less often, or only on weekdays
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Google Calendar and Telegram steps into one automation
Under the hood
The code that runs this automation
from datetime import datetime, timedelta
from zoneinfo import ZoneInfo
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http
CALENDARS = {"primary": "work", "you.personal@gmail.com": "personal"}
TZ, CHAT_ID, MIN_GAP = ZoneInfo("Europe/Berlin"), "123456789", 10
def tg(method, **params):
r = http.post(f"https://api.telegram.org/bot{credentials.secret('TELEGRAM_BOT_TOKEN')}/{method}", json=params)
r.raise_for_status()
return r.json()["result"]
@on_trigger
def run(event):
cal = build("calendar", "v3", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False)
start = datetime.now(TZ).replace(hour=0, minute=0, second=0, microsecond=0) + timedelta(days=1)
events = []
for cid, label in CALENDARS.items():
for e in cal.events().list(calendarId=cid, timeMin=start.isoformat(), timeMax=(start + timedelta(days=1)).isoformat(),
singleEvents=True, orderBy="startTime").execute().get("items", []):
me = next((a for a in e.get("attendees", []) if a.get("self")), {})
if "dateTime" not in e["start"] or e.get("transparency") == "transparent" or me.get("responseStatus") == "declined":
continue
events.append((datetime.fromisoformat(e["start"]["dateTime"]).astimezone(TZ),
datetime.fromisoformat(e["end"]["dateTime"]).astimezone(TZ), e.get("summary", "(no title)"), label))
events.sort()
issues = []
for i, (s1, e1, t1, l1) in enumerate(events):
for s2, e2, t2, l2 in events[i + 1:]:
if s2 < e1:
issues.append(f"• {s1:%H:%M} {t1} overlaps {s2:%H:%M} {t2} ({l2})")
elif (s2 - e1) < timedelta(minutes=MIN_GAP):
issues.append(f"• {t1} ends {e1:%H:%M}, {s2:%H:%M} {t2} starts ({int((s2 - e1).total_seconds() // 60)} min gap)")
else:
break
if issues:
tg("sendMessage", chat_id=CHAT_ID, text=f"⚠️ Tomorrow has {len(issues)} clashes\n" + "\n".join(issues))
return {"clashes": len(issues)}
FAQ
Common questions
Can it compare a work and a personal calendar?
Why warn about short gaps?
Will it message me every evening?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Block tomorrow's prayer times in your calendar and get them on Telegram
Each night, tomorrow's prayer times are blocked as busy in your Google Calendar and the schedule is sent to you on Telegram.
See how it worksGet a Telegram reminder before each meeting
A few minutes before each meeting you get a Telegram message with the time, the join link and a short prep note.
See how it worksGet today's calendar on Telegram every morning
Every weekday at 7am you get a tidy list of today's meetings and events in Telegram.
See how it worksKeep exploring
Set up “Get a Telegram warning about tomorrow's calendar clashes” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.