M365 Show -  Microsoft 365 Digital Workplace Daily
M365 Show with Mirko Peters - Microsoft 365 Digital Workplace Daily
Advanced Teams Meeting Extensibility with Apps & Bots
0:00
-15:45

Advanced Teams Meeting Extensibility with Apps & Bots

If you think Teams meetings are just about video calls and screen shares, you’re missing the real game. What if the meeting itself could trigger workflows, display live business data, or even run internal apps right next to the conversation?

Today, we’re breaking down exactly how custom apps, in-meeting side panels, and Graph API events can turn Teams into a dynamic work hub — but the way they work together might surprise you. And once you see how these components connect, you’ll start seeing the meeting window as a control center, not just a chat box. Let’s unpack it.

The Core Building Blocks of Teams Meeting Extensibility

Most people who join a Teams meeting only see the faces, the chat, and maybe a shared screen or two. What they don’t see is the machinery under the hood that makes those meetings more than just digital conference calls. There’s an entire framework in place that can surface live data, automate tasks, and turn the meeting environment into something a lot smarter than it looks from the outside. The surprising part? That capability isn’t hidden behind obscure licenses or unreleased features—it’s sitting there in plain sight, but in pieces most people never connect together.

Think of the Teams Meeting Extensibility System as three separate tools that can operate on their own, but were designed to work together. You’ve got custom apps—your tailor-made solutions built on the Teams platform. Then there are in-meeting side panels, which act like an extra set of eyes and hands in the call. Finally, there are Graph API meeting lifecycle events, the signals that tell your systems exactly when key moments in the meeting happen. Each of these has its own development model, permissions, and deployment considerations, but none depend entirely on the others to work. They’re interoperable, not interdependent.

The problem is that most of the resources out there treat them like unrelated subjects. You’ll find one blog explaining how to pin a custom tab, another about launching a side panel, and maybe a separate API reference showing lifecycle event triggers. On their own, these guides are fine for quick wins, but they leave you without a mental map of how the entire system operates as a whole. It’s like hiring three different departments in a company, letting them operate in isolation, and never telling them what the others are working on. They might get their individual jobs done, but they’ll miss opportunities to create real synergy.

Picture this: during a project status meeting, instead of juggling between Teams and your browser, the project tracker sits as a dedicated meeting tab. Everyone sees updates in real time, no one has to dig through links, and changes stick as soon as they’re made. That’s custom apps doing their job. Now, in the same meeting, without leaving the stage view, you open a side panel that shows live data pulled straight from your CRM about the client you’re discussing—current sales pipeline, outstanding issues, and even recent interactions. Zero tab-switching, no hunting for context. That’s the side panel bringing in high-value information exactly when it’s needed.

Then you’ve got the piece most people ignore: lifecycle events. These aren’t visual at all. They’re signals—sort of like the meeting raising a hand to say, “We’ve just started,” or “This person has joined,” or “We’re wrapping up.” Using the Graph API, those signals can trigger a workflow: maybe syncing that CRM data into the side panel at the moment the meeting starts, or automatically compiling a follow-up task list as soon as the meeting ends. You’re not waiting on someone to remember to hit a button; the meeting’s state itself drives the automation.

Individually, these pieces are useful. But when they’re aware of each other, you get a multiplier effect. The app in the meeting tab isn’t just static—it reacts to updates triggered by an event. The side panel isn’t just a read-only feed—it’s an interactive dashboard updated in context. The lifecycle events don’t just run in the background—they set the rhythm for how those other components behave. Once you start thinking this way, you stop seeing them as features to be bolted on and start seeing them as modules in an architecture you control.

When you frame it as a system of plug-and-play parts, the picture changes. You can decide exactly which parts a given meeting needs, and wire them together so they act as a single, coordinated environment. That mindset shift is what moves Teams from being a video meeting tool to being a responsive workspace. Now, we can pull each of these apart and look at how they work without tripping over each other’s roles.

Custom Apps: Embedding with Zero Disruption

Ever notice how some in-meeting apps feel like they were always meant to be there, while others stick out like a pop‑up ad? Same platform, same concept, but completely different experiences. That gap usually comes down to how intentionally the app is built for the Teams meeting environment, versus being a re-skinned web app dropped into a tab without much thought for how people will actually use it mid‑discussion.

When we talk about custom apps in this context, we’re not talking about off‑the‑shelf tools from the App Store. These are purpose‑built solutions created with the Teams SDK, designed to operate within a meeting surface. That means they can use Teams’ context, authentication, and integration points to feel like a first‑party feature. It also means they come with some responsibilities — you’re building inside a shared space where anything from slow load times to mismatched UI styling is immediately obvious to every participant.

A lot of developers hit snags here. UI consistency is one of the big ones. You might have a great web app that works perfectly in a browser, but inside Teams it looks out of place because the color schemes, button sizes, or spacing don’t align. Then there’s the permissions model. Meetings have their own access rules and participant roles. If your app starts asking for extra sign‑ins or denies a key function to someone who doesn’t understand why, you’ve broken the meeting flow and lost momentum.

Take a sales forecasting app as an example. If it’s embedded cleanly as a meeting tab, it can automatically recognize the meeting’s associated team or channel, pull in relevant sales data, and filter it to the client currently under discussion. No extra clicks, no hunting through menus — the app adapts to the meeting’s context without the user having to do anything. That seamless behavior comes down to configuring your app manifest carefully. The manifest controls not just the app’s name and icons, but where in Teams it can appear — including in‑meeting surfaces like side panels, shared tabs, and the main stage when shared.

Deep linking and context parameters are a key part of making that happen. A deep link can drop a participant on a precise view — say, the forecast for one product line — instead of a generic dashboard. Context parameters let you determine that view dynamically based on the meeting itself. That’s how you avoid the classic “Okay, now click here” walkthrough during a live discussion.

Security can trip you up, too. Authentication inside a meeting should be almost invisible. You can use Teams single sign‑on where possible so the participant doesn’t leave the meeting to log in. But you also need to be sure you’re requesting the right permissions up front. If the app starts prompting for elevated access during the meeting, you risk grinding the conversation to a halt while someone tries to figure out if they’re supposed to approve it.

When all of this comes together — the manifest placement, the context‑aware deep linking, the seamless authentication — the app stops being “that extra thing” in the meeting. It just becomes the place where the work happens. People stop noticing it as separate from Teams. That invisibility is actually the goal, because it means the tool is supporting the meeting, not competing with it for attention.

Of course, even the most polished custom app has its limits when it’s operating alone. It can present data and let people interact with it, but it can’t always supply live context during a fast‑moving conversation. That’s where side panels fill a different but complementary role — delivering real‑time information without pulling anyone out of the discussion.

In-Meeting Side Panels: Real-Time Context Without Switching Tabs

Most people assume the only meaningful space in a Teams meeting is the main stage — the video grid, screen shares, and whatever’s being presented. Side panels quietly challenge that idea. They give you a way to place information right alongside the conversation, so you’re not asking people to change screens or remember details from a separate app. It’s the difference between someone having the data in front of them as the discussion happens versus trying to recall numbers they saw two minutes ago.

The value becomes obvious once you’ve tried to multitask mid‑meeting. Switching out of the call window to dig up a report or open a dashboard is a guaranteed way to lose track of the discussion. Even when you Alt‑Tab back, you’ve likely missed something and need to ask to repeat information. In training and real‑world deployments, that context switching always comes with a cost — delays, repeated explanations, and a meeting that drags on longer than it should.

A practical example: imagine a second‑line support escalation call. A customer has an unresolved critical issue, and you’ve pulled in a few specialists to help. Instead of shuffling everyone to a separate browser tab to check case notes, you open a side panel that streams the live ticket right into the meeting. As the frontline agent updates details or attaches logs, those changes appear in real time for everyone on the call. That single change removes the “Can you refresh your screen?” loop and keeps the group focused on resolving the actual issue.

From a technical standpoint, side panels can be launched in a couple of ways. An app command — like clicking a custom button in the Teams meeting UI — can trigger it on demand. Alternatively, a meeting event can open it automatically, so it appears for participants at the right moment without manual action. That launch control is part of your app design, configured in the manifest and wired through the Teams SDK.

They’re not limited to static text or lists, either. A side panel can host interactive forms, so participants can submit data without leaving the meeting. It can hold live charts that update as new records hit your database during the conversation. You can even integrate lightweight AI models for real‑time summarization or recommendations. The trick is keeping these elements relevant to the meeting’s purpose and ensuring they don’t overload the interface.

The data benefits are measurable. Decision‑making tends to speed up when participants aren’t mentally juggling multiple tools. By reducing context switching, you lower cognitive fatigue — which is particularly noticeable in back‑to‑back calls. The up‑to‑date information also means fewer follow‑up actions after the meeting just to confirm what was already discussed. That’s not just convenience; in time‑sensitive scenarios, it can directly affect outcomes.

Where this becomes even more powerful is in combination with the other extensibility building blocks. A custom app can push its own data into a side panel, giving you functionality plus context. Graph API lifecycle events can trigger a panel to open with preloaded data the moment the meeting starts, or refresh it automatically when certain topics are covered. In that configuration, the panel almost acts like a live, reactive dashboard — not something you open manually, but something that responds to the flow of the meeting.

Side panels aren’t about replacing the main stage. They’re about supporting it — keeping every participant anchored in the discussion while delivering just‑in‑time information where it’s most useful. When built with the same attention to context and integration as a well‑designed custom app, they quietly eliminate the lag between talking about a decision and having the data to make it. And that’s before you connect them to the hidden signals that can drive them automatically — the orchestration layer you tap into with Graph API lifecycle events.

Graph API Meeting Lifecycle Events: The Automated Conductor

Meetings tend to have obvious moments — when someone presents, when decisions get made, when people start dropping out. But there are also quiet moments that never show up on the screen and yet can drive entire workflows. Those are the signals that Graph API lifecycle events give you. They’re not about someone clicking a button or running a script; they’re about the meeting itself telling the system, “This just happened.” It could be the first participant joining, the meeting officially starting, or everyone leaving and the call ending. Those cues are the difference between a purely manual process and one that keeps running, even if no one remembers to trigger it.

Lifecycle events fall into a few predictable categories. You’ve got “started,” “ended,” and participant changes like “join” or “leave.” Technically, these are webhook‑driven notifications that get sent to whatever service you’ve subscribed through Graph. If your workflow listens for the “started” event, you could have it pull the latest CRM data and push it straight into the side panel, so it’s waiting when people join. If it’s tied to the “ended” event, maybe it compiles the meeting transcript, extracts the key points, and files them in a project management tool. It’s not limited to documentation — you can connect it to anything that makes sense in your environment.

The reality is many Teams integrations don’t use these triggers at all. Without them, the workflow relies on people remembering to perform a set of actions after the meeting. Someone has to manually open the CRM, hit refresh, paste notes into the record, or email out the follow‑up list. That’s fine until no one does it on time, or the wrong version of the data is shared. Lifecycle events remove that dependency on human memory by turning the meeting’s natural flow into automation steps.

Picture a quarterly business review. The moment the meeting starts, your automation kicks off a data sync from your analytics platform into your custom app’s tab. At the same time, the side panel opens for all attendees with the latest metrics preloaded. No one had to scramble to upload reports. At the end of the session, the “ended” event triggers a task list generator that assigns follow‑up items in Planner based on the tagged action points in the transcript. The meeting isn’t just a conversation; it’s a machine that hands off work to the right systems without someone acting as the middleman.

Setting this up does come with a technical checklist. You need the right permissions in Microsoft Graph — typically, subscription and read/write permissions to the meeting objects you care about. Then you define a subscription to those lifecycle events, specifying the resource (like `/communications/onlineMeetings`) and the events you want to listen for. Your service must expose a webhook endpoint that Graph can call when an event fires. You’ll also need to handle validation and security tokens so you’re not processing spoofed calls. None of this is particularly complex for an experienced developer, but it does require deliberate setup and testing across different meeting scenarios.

The business impact is where this becomes interesting. By attaching automation to lifecycle events, you take pressure off participants to remember every procedural step. Reports get filed without delay. Alerts go out while the content is still fresh. Data sets update in sync with discussions, so the next call always starts with the current picture. In environments where speed matters — sales cycles, incident response, fast‑moving projects — that’s the difference between being proactive and constantly catching up.

Once you layer this automation over custom apps and side panels, you get a feedback loop. The app can react to event‑driven updates, the panel can refresh itself mid‑conversation, and the meeting state becomes the conductor that keeps all of it in time. Suddenly, the “start” button is more than just a way to begin talking — it’s the signal for your entire meeting ecosystem to start working. And that’s the point where these three components stop feeling separate and start acting like parts of a single, coordinated system.

Conclusion

The real value isn’t in knowing how to build a custom app, launch a side panel, or subscribe to lifecycle events in isolation. It’s in wiring them together so the meeting reacts like a single, responsive system. One component feeds the other, context updates in real time, and automation keeps pace without manual input.

For your next meeting extension, start with a real business pain point and design all three layers to address it. When the meeting itself becomes an active application — not just a place to talk — your collaboration space stops being static and starts delivering measurable outcomes.

Discussion about this episode

User's avatar