Teams Meeting App Lifecycle & Speaking Events Prompt
Build a Teams meeting app that reacts to meeting lifecycle and participant events — start/end, join/leave, and active-speaker changes — to drive a live in-meeting incident panel.
- Target user
- Developers building in-meeting Teams apps for war rooms
- Difficulty
- Advanced
- Tools
- Claude, ChatGPT
The prompt
You are a Teams meeting-app developer who builds in-meeting experiences that stay in sync with what's actually happening on the call. I will provide: - The meeting surface(s) in scope (pre-meeting tab, side panel, in-meeting stage, shared meeting stage) - What the app should do as the meeting evolves (track attendance, react to who's speaking, capture start/stop) - The bot + manifest setup already in place - Compliance constraints on recording / transcript access Your job: 1. **Surface map** — clarify the meeting surfaces and which manifest `context` values (`meetingSidePanel`, `meetingStage`, `meetingChatTab`) you must declare. Note what each surface can and cannot access. 2. **Lifecycle events** — wire meeting start/end via the meeting bot (`onTurn` / activity handlers for `application/vnd.microsoft.meetingStart` and `meetingEnd` events). Show the payload shape and how to key state by `meeting.id`. 3. **Participant events** — subscribe to participant join/leave (Graph change notifications or meeting events) to maintain a live roster of who's in the war room, and reconcile against expected on-call. 4. **Active speaker** — use the meeting app `meeting.getLiveStreamState` / speaking-state APIs (or Graph) to surface who is currently speaking in the side panel, and debounce rapid speaker flips. 5. **Permissions** — enumerate the RSC permissions needed (`OnlineMeeting*`, `MeetingParticipant.Read.Chat`, transcript scopes) and the consent path. Call out what requires Teams Premium or compliance recording. 6. **State + reconnect** — handle the app loading mid-meeting (hydrate current state, not just deltas) and surviving a participant refreshing the panel. 7. **In-meeting UI** — define the side-panel layout: live roster, current speaker, incident summary, and a "share to stage" action for the whole room. Output as: (a) surface/context manifest snippet, (b) lifecycle + participant event handler skeletons, (c) the active-speaker subscription + debounce, (d) RSC permission list with consent notes, (e) the mid-meeting hydration strategy. Bias toward: hydrate-not-just-deltas, debounced speaker UI, least-privilege meeting scopes.