On a schedule
Get a Teams briefing before important meetings
Before each meeting with external attendees, you get a Teams message summarising your recent Outlook emails with them.
- Runs
- On a schedule
- Apps
- Microsoft Teams, Outlook
- AI
- Yes, uses the built-in AI allowance
- Access
- Calendars.Read, Mail.Read, ChatMessage.Send
Send this to your assistant
Create a ClickRuntime automation: every 30 minutes, for meetings starting soon, find my recent Outlook emails with the attendees, summarise them with AI, and send me a Teams briefing.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
An account manager has back-to-back client calls. Before each one there is a scramble through Outlook to remember what was last promised, what the client complained about and which invoice is still open. Often there is no time, and the call starts with an awkward catch-up.
This automation checks your calendar every 30 minutes. For meetings starting soon with people outside your company, it finds your recent emails with those attendees and has AI summarise them into a short briefing sent to you in Teams.
What you get out of it
Walk in prepared
Open questions, recent promises and the tone of the last exchange are in front of you before the call. Clients notice when you remember the details.
No digging through your inbox
The briefing pulls the relevant threads for you. Five minutes of searching per meeting adds up across a busy week.
Only meetings that need it
Internal meetings are skipped, and each meeting gets one briefing. Your Teams chat does not fill up with noise.
Useful for handovers
Covering for a colleague's client meeting is easier with a summary of the recent history. The briefing gives you context you would otherwise not have.
How it works
What happens, step by step
Every 30 minutes, ClickRuntime looks at your Outlook calendar for meetings starting in the next hour.
It skips internal meetings and any meeting it has already briefed you on.
For each remaining meeting, it finds your recent emails with the attendees, and AI summarises them into a short briefing.
The briefing is sent to you as a Teams message before the meeting starts.
Before it runs live
- Connect Microsoft Teams
- Connect Outlook
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
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Slack
- Combine it with other Microsoft Teams and Outlook steps into one automation
Under the hood
The code that runs this automation
from datetime import datetime, timedelta, timezone
from clickruntime import on_trigger, credentials, http, state, ai
DOMAIN = "contoso.com"
CHAT_ID = "your-teams-chat-id"
GRAPH = "https://graph.microsoft.com/v1.0"
@on_trigger
def run(event):
h = {"Authorization": f"Bearer {credentials.connection('microsoft', 'work')}"}
now = datetime.now(timezone.utc)
meetings = http.get(f"{GRAPH}/me/calendarView", headers=h, params={"startDateTime": now.isoformat(), "endDateTime": (now + timedelta(hours=1)).isoformat()}).json()["value"]
done, sent = set(state.get("briefed") or []), 0
for m in meetings:
emails = [a["emailAddress"]["address"] for a in m.get("attendees", []) if not a["emailAddress"]["address"].endswith("@" + DOMAIN)]
if m["id"] in done or not emails:
continue
msgs = http.get(f"{GRAPH}/me/messages", headers=h, params={"$search": f'"participants:{emails[0]}"', "$top": 15, "$select": "subject,bodyPreview,from"}).json()["value"]
history = "\n".join(f"{x['from']['emailAddress']['address']}: {x['subject']} - {x['bodyPreview'][:300]}" for x in msgs)
try:
brief = ai.generate(f"Meeting: {m['subject']}\nRecent emails:\n{history}", system="Brief me in 5 bullets: open items, promises, tone.", max_output_tokens=300).text
except ai.AIError:
brief = "Recent subjects:\n" + "\n".join(x["subject"] for x in msgs[:5])
http.post(f"{GRAPH}/chats/{CHAT_ID}/messages", headers=h, json={"body": {"content": f"Briefing: {m['subject']}\n{brief}"}})
done.add(m["id"])
sent += 1
state.set("briefed", list(done)[-200:])
return {"briefings": sent}FAQ
Common questions
Which meetings get a briefing?
How far back does it look in my email?
Where does the briefing appear?
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
Post today's Outlook meetings to Teams each morning
Every weekday at 8, today's Outlook meetings with times and attendees are posted to your Teams channel.
See how it worksSave Outlook attachments to OneDrive and tell Teams
Attachments from new Outlook emails are saved to your OneDrive Attachments folder, and a Teams message lists what arrived.
See how it worksTurn action emails in Outlook into Planner tasks with a Teams alert
Flagged or action emails in Outlook become Planner tasks, and the team is told about each one in Teams.
See how it worksKeep exploring
Set up “Get a Teams briefing before important meetings” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.