A practical, step‑by‑step guide for the Microsoft community
📌 Why this article?
Many teams are exploring Copilot Studio to build conversational experiences like:
“Can you help me find a good time for a meeting with my team?”
Behind the scenes, this requires:
- Checking user availability
- Respecting working hours
- Suggesting realistic time slots
This is where Microsoft Graph shines — especially the findMeetingTimes API.
However, when people try this for the first time, they often hit challenges:
- Premium license errors
- Graph connection confusion
- Copilot + Power Automate integration doubts
This article walks through a clean Proof‑of‑Concept (POC) approach, keeping things simple, understandable, and production‑ready later.
🧠 What we are building (POC scope)
✅ Copilot asks for meeting details
✅ Power Automate calls Microsoft Graph
✅ Graph suggests best available time slots
✅ Copilot responds with suggestions
🚫 No auto‑booking (yet)
🚫 No heavy governance (POC only)
🏗️ High‑level Architecture (POC)
User
↓
Copilot Studio Agent
↓
Power Automate Flow (POC)
↓
HTTP with Microsoft Entra ID
↓
Microsoft Graph – findMeetingTimes
↓
Suggested time slots
↓
Copilot responds to user
📎 Screenshot idea:
Diagram slide or whiteboard view of Copilot → Flow → Graph
🧩 Key Components Explained (in simple terms)
1️⃣ Copilot Studio
This is the conversation layer.
It collects:
- Attendees
- Meeting duration
- Preferred date/time range
Copilot does not talk to Graph directly — it calls Power Automate.
📎 Screenshot: Copilot topic with trigger phrases and variables
2️⃣ Power Automate (Heart of the POC)
Power Automate acts as the orchestrator:
- Receives input from Copilot
- Calls Microsoft Graph
- Formats the response back to Copilot
👉 For POC, the Power Automate Premium Trial is sufficient.
📎 Screenshot: Cloud flow triggered by Copilot
3️⃣ Microsoft Graph – findMeetingTimes
This API:
- Looks at calendars
- Considers working hours
- Suggests realistic meeting slots
This avoids brute‑force checking and handles all the logic for you.
🔐 POC Licensing – Keep It Simple
For POC:
- ✅ Start Power Automate Premium trial
- ✅ Use your own user account
- ✅ No service account needed yet
⚠️ Microsoft Graph in Power Automate is a Premium connector — this is expected and by design.
📎 Screenshot: Power Automate “Try premium” banner
🔗 Configuring Microsoft Graph Connection (POC)
Recommended connector
✅ HTTP with Microsoft Entra ID
Why?
- Simple
- Supported
- No custom connector maintenance
Connection setup
| Field | Value |
|---|---|
| Base Resource URL | https://graph.microsoft.com |
| Entra ID Resource URI | https://graph.microsoft.com |
| Authentication | User sign‑in (POC) |
📎 Screenshot: Creating HTTP with Entra ID connection
Suggestions
- Pick top 3 slots
- Convert to friendly text:
- “Tuesday 11:00–11:30”
- “Wednesday 3:00–3:30”
Copilot then replies conversationally:
“I found a few good options for everyone. Would you like to go with Tuesday at 11 AM?”
✅ Why this POC approach works well
✔ Minimal setup
✔ Matches real‑world behaviour
✔ No reinventing scheduling logic
✔ Easy upgrade path to PROD
🔜 How this POC evolves into PROD (Later)
| POC | Production |
|---|---|
| User account | Service account |
| Premium trial | Per‑Flow license |
| Suggest only | Auto‑book meetings |
| Light governance | Full security & auditing |
✅ Graph payloads stay the same
✅ Copilot logic stays the same
Only ownership & licensing change.
❗ Common Pitfalls (and how to avoid them)
- ❌ Trying to avoid Premium connectors → Not supported
- ❌ Direct Graph calls from Copilot → Not possible
- ❌ Using shared mailbox → Unsupported
- ✅ Always go through Power Automate
📝 Final Thoughts
If you’re exploring Copilot Studio + scheduling scenarios, start small:
- Prove value with
findMeetingTimes - Keep the conversation human
- Let Microsoft Graph do the heavy lifting
Once stakeholders see the value, moving to a production‑grade model is straightforward.
🙋♂️ I’d love community feedback!
If you’ve tried similar Copilot scheduling ideas or have tips, please comment and share your experience.
Happy to iterate and learn together 🚀