Setting the file. One moment.
Subchapter 157.12
examples/breakout-rooms.mdMarkdown3 KBView on GitHub
Detect breakout rooms, track room changes, and sync state across rooms.
When a meeting uses breakout rooms, each room gets its own meeting UUID. Your app needs to handle room transitions and optionally sync state between rooms.
| Property | Description |
|---|---|
meetingUUID | Unique per room (changes when moving to breakout) |
parentUUID | Original meeting UUID (available in breakout rooms) |
onBreakoutRoomChange | Event fired when user moves between rooms |
import zoomSdk from '@zoom/appssdk';
await zoomSdk.config({
capabilities: [
'getMeetingUUID', 'getMeetingContext',
'onBreakoutRoomChange'
],
version: '0.16'
});
// Get current room info
const { meetingUUID } = await zoomSdk.getMeetingUUID();
console.log('Current room UUID:', meetingUUID);
// Listen for room changes
zoomSdk.addEventListener('onBreakoutRoomChange', async (event) => {
console.log('Room changed:', event);
// Get new room UUID
const { meetingUUID: newUUID } = await zoomSdk.getMeetingUUID();
console.log('Now in room:', newUUID);
// Re-initialize room-specific state
await loadRoomState(newUUID);
});Use your backend to sync state across rooms. The parentUUID links all breakout rooms to the main meeting.
// Frontend: Register with backend on room entry
async function registerRoom() {
const { meetingUUID } = await zoomSdk.getMeetingUUID();
const context = await zoomSdk.getMeetingContext();
await fetch('/api/room/register', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
roomUUID: meetingUUID,
parentUUID: context.parentUUID || meetingUUID,
// parentUUID is null in main room, set in breakout rooms
})
});
}
// Backend: Aggregate state across all rooms
app.get('/api/meeting/:parentUUID/state', async (req, res) => {
const rooms = await db.find({ parentUUID: req.params.parentUUID });
const aggregated = rooms.reduce((acc, room) => {
// Merge state from all rooms
return { ...acc, ...room.state };
}, {});
res.json(aggregated);
});Create and manage breakout rooms from your backend using the Zoom REST API:
// Create breakout rooms (requires meeting:write scope)
const response = await axios.post(
`https://api.zoom.us/v2/meetings/${meetingId}/batch_registrants`,
{
rooms: [
{ name: 'Room 1', participants: ['user1@example.com'] },
{ name: 'Room 2', participants: ['user2@example.com'] }
]
},
{ headers: { 'Authorization': `Bearer ${accessToken}` } }
);const { meetingUUID } = await zoomSdk.getMeetingUUID();
const context = await zoomSdk.getMeetingContext();
const parentUUID = context.parentUUID || meetingUUID;
// Room-specific state (e.g., room discussion notes)
const roomState = await loadState(`room:${meetingUUID}`);
// Global state (e.g., meeting agenda visible in all rooms)
const globalState = await loadState(`meeting:${parentUUID}`);