INTEGRITY Dokumentace

Skupinové místnosti

Příklady kódu

Pokud se raději učíte na příkladech, podívejte se na příslušné repozitáře s ukázkami.

Webové příklady

Skupinové místnosti umožňují účastníkům schůzky rozdělit se do menších skupin pro cílené diskuze a spolupráci. S nástupem práce na dálku a online výuky se skupinové místnosti staly nezbytným nástrojem pro zvýšení zapojení a budování komunity ve virtuálním prostředí. Jsou ideální volbou pro workshopy, online výuku nebo situace, kdy potřebujete mluvit soukromě s vybranými účastníky mimo hlavní schůzku.

V RealtimeKit se breakout místnosti vytvářejí jako samostatná schůzka. Každá breakout místnost je nezávislá schůzka a lze ji spravovat stejně jako jakoukoli jinou schůzku RealtimeKit. RealtimeKit poskytuje sadu SDK API pro vytváření breakout místností, jejich správu a přepínání mezi nimi.

Klíčové funkce

Mezi klíčové vlastnosti breakout rooms v RealtimeKitu patří:

Role ve skupinové místnosti

Role ve skupinové místnosti jsou spravovány pomocí předvoleb.

Host

Hostitelé mohou vytvářet skupinové místnosti, přiřazovat do nich účastníky, zahajovat a ukončovat je a přepínat mezi místnostmi.

Účastníci

Jako účastník skupinové místnosti můžete:

Zvuk a video

Každá skupinová místnost funguje jako samostatná schůzka. Když přepnete z hlavní schůzky do skupinové místnosti, automaticky se přepnou zvuk a video na relaci dané skupinové místnosti. Zvuk můžete kdykoli ztlumit nebo zapnout a video spustit nebo zastavit, stejně jako na hlavní schůzce.

Když skončí schůzka ve skupinové místnosti, váš zvuk a video se automaticky přepnou zpět na hlavní schůzku.

Nahrávání schůzek ve skupinových místnostech

Každá relace skupinové místnosti je samostatná relace. Nahrávka každé relace skupinové místnosti se ukládá a spravuje samostatně, stejně jako u jakékoli jiné schůzky RealtimeKit. Další informace najdete v Nahrávání.

Správa skupinových místností

Skupinové místnosti umožňují účastníkům rozdělit se do samostatných relací. Hostitel může skupinové místnosti vytvářet, přiřazovat do nich účastníky a zahajovat i ukončovat je.

Vytváření předvoleb

Předvolba je sada oprávnění a konfigurací uživatelského rozhraní, které se použijí na hostitele a účastníky. Určují vzhled, dojem z používání a chování diskusní místnosti.

Pro breakout rooms musíte v Connected Meetings poskytnout hostitelům a účastníkům následující oprávnění:

Host

Předvolba hostitele by měla mít Plný přístup oprávnění v Connected Meetings. To hostiteli umožňuje:

Účastníci

Účastníkům můžete udělit následující oprávnění:

Uložit předvolbu

  1. Jakmile provedete všechny změny předvolby, klikněte na Save
  2. Zadejte název svého presetu a klikněte na Save
  3. Váš předvolený profil (preset) je v seznamu, klikněte na Úprava k provedení jakýchkoli změn

Vytvoření schůzky

Vytvořte schůzku RealtimeKit pomocí API pro vytvoření schůzky. Toto API vrací jedinečný identifikátor vaší schůzky.

Přidání účastníků

Po vytvoření schůzky přidejte každého účastníka pomocí Přidání účastníka (API). presetName vytvořený dříve musí být předán v těle požadavku API Add Participant.

Spustit skupinovou místnost

  1. Ve schůzce RealtimeKit klikněte na Skupinové místnosti
  2. V dialogovém okně Create Breakout zadejte požadovaný počet místností a klikněte na Vytvořit

Jakmile vytvoříte skupinové místnosti, přiřaďte do nich účastníky. Můžete buď:

Přiřadit účastníky automaticky

Automatické přiřazení účastníků:

  1. V dialogovém okně Assign Participants klikněte na tlačítko pro promíchání
  2. Účastníci jsou přiřazeni k místnostem
  3. Názvy místností upravte kliknutím na ikonu tužky vedle názvu místnosti (volitelné)
  4. V případě potřeby přesunout účastníky do jiných místností
  5. Klikněte na Spustit skupinové místnosti
  6. Klikněte na Ano, zahájit v potvrzovacím dialogu

Přiřadit účastníky ručně

Ruční přiřazení účastníků:

  1. V dialogovém okně Assign Participants vyberte účastníky, které chcete přiřadit do místnosti
  2. V sekci Rooms klikněte na Přiřadit
  3. Zopakujte pro všechny účastníky a místnosti
  4. Klikněte na Spustit skupinové místnosti
  5. Klikněte na Ano, zahájit v potvrzovacím dialogu
  1. Ve schůzce RealtimeKit klepněte na Skupinové místnosti
  2. V dialogovém okně Create Breakout zadejte požadovaný počet místností a klepněte na Vytvořit

Jakmile vytvoříte skupinové místnosti, přiřaďte do nich účastníky. Účastníky můžete přiřadit automaticky (RealtimeKit je rozdělí rovnoměrně) nebo ručně (sami zvolíte, kdo kam patří).

Přiřadit účastníky automaticky

Automatické přiřazení účastníků:

  1. V dialogovém okně Assign Participants klepněte na tlačítko pro promíchání
  2. RealtimeKit přiřazuje účastníky k místnostem
  3. Názvy místností upravte klepnutím na ikonu tužky vedle názvu místnosti (volitelné)
  4. V případě potřeby přesunout účastníky do jiných místností
  5. Klepněte Spustit skupinové místnosti
  6. Klepněte Ano, zahájit v potvrzovacím dialogu

Přiřadit účastníky ručně

Ruční přiřazení účastníků:

  1. V dialogovém okně Assign Participants vyberte účastníky, které chcete přiřadit do místnosti
  2. V sekci Rooms klepněte na Přiřadit
  3. Zopakujte pro všechny účastníky a místnosti
  4. Klepněte Spustit skupinové místnosti
  5. Klepněte Ano, zahájit v potvrzovacím dialogu
  1. Ve schůzce RealtimeKit klepněte na Skupinové místnosti
  2. V dialogovém okně Create Breakout zadejte požadovaný počet místností a klepněte na Vytvořit

Jakmile vytvoříte skupinové místnosti, přiřaďte do nich účastníky. Účastníky můžete přiřadit automaticky (RealtimeKit je rozdělí rovnoměrně) nebo ručně (sami zvolíte, kdo kam patří).

Přiřadit účastníky automaticky

Automatické přiřazení účastníků:

  1. V dialogovém okně Assign Participants klepněte na tlačítko pro promíchání
  2. RealtimeKit přiřazuje účastníky k místnostem
  3. Názvy místností upravte klepnutím na ikonu tužky vedle názvu místnosti (volitelné)
  4. V případě potřeby přesunout účastníky do jiných místností
  5. Klepněte Spustit skupinové místnosti
  6. Klepněte Ano, zahájit v potvrzovacím dialogu

Přiřadit účastníky ručně

Ruční přiřazení účastníků:

  1. V dialogovém okně Assign Participants vyberte účastníky, které chcete přiřadit do místnosti
  2. V sekci Rooms klepněte na Přiřadit
  3. Zopakujte pro všechny účastníky a místnosti
  4. Klepněte Spustit skupinové místnosti
  5. Klepněte Ano, zahájit v potvrzovacím dialogu
  1. Ve schůzce RealtimeKit klepněte na Skupinové místnosti
  2. V dialogovém okně Create Breakout zadejte požadovaný počet místností a klepněte na Vytvořit

Jakmile vytvoříte skupinové místnosti, přiřaďte do nich účastníky. Účastníky můžete přiřadit automaticky (RealtimeKit je rozdělí rovnoměrně) nebo ručně (sami zvolíte, kdo kam patří).

Přiřadit účastníky automaticky

Automatické přiřazení účastníků:

  1. V dialogovém okně Assign Participants klepněte na tlačítko pro promíchání
  2. RealtimeKit přiřazuje účastníky k místnostem
  3. Názvy místností upravte klepnutím na ikonu tužky vedle názvu místnosti (volitelné)
  4. V případě potřeby přesunout účastníky do jiných místností
  5. Klepněte Spustit skupinové místnosti
  6. Klepněte Ano, zahájit v potvrzovacím dialogu

Přiřadit účastníky ručně

Ruční přiřazení účastníků:

  1. V dialogovém okně Assign Participants vyberte účastníky, které chcete přiřadit do místnosti
  2. V sekci Rooms klepněte na Přiřadit
  3. Zopakujte pro všechny účastníky a místnosti
  4. Klepněte Spustit skupinové místnosti
  5. Klepněte Ano, zahájit v potvrzovacím dialogu

Integrace skupinových místností

Po nastavení breakout rooms přes API je potřeba je integrovat do vaší aplikace pomocí RealtimeKit SDK.

Inicializujte SDK s podporou breakout místností

Inicializujte SDK a přidejte obslužnou rutinu události pro breakout místnosti:

import {
	RealtimeKitProvider,
	useRealtimeKitClient,
} from "@cloudflare/realtimekit-react";
import { RtkMeeting } from "@cloudflare/realtimekit-react-ui";
import { useEffect, useState } from "react";

function App() {
	const [meeting, initMeeting] = useRealtimeKitClient();
	const [authToken, setAuthToken] = useState("<participant_auth_token>");

	useEffect(() => {
		if (authToken) {
			initMeeting({
				authToken: authToken,
			});
		}
	}, [authToken]);

	// Add event handler for breakout rooms
	useEffect(() => {
		if (meeting) {
			meeting.connectedMeetings.on("meetingChanged", (newMeeting) => {
				// Meeting object is automatically updated in React
				console.log("Switched to breakout room or main meeting");
			});
		}
	}, [meeting]);

	return (
		<RealtimeKitProvider value={meeting}>
			<RtkMeeting showSetupScreen={true} meeting={meeting} />
		</RealtimeKitProvider>
	);
}

meetingChanged událost se spustí, když účastník přepne mezi hlavní schůzkou a skupinovými místnostmi. V Reactu je objekt meeting spravován automaticky providerem.

<script type="module">
	import RealtimeKitClient from "https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit@latest/dist/index.es.js";

	let meeting = await RealtimeKitClient.init({
		authToken: "<participant_auth_token>",
	});

	// Add event handler for breakout rooms
	meeting.connectedMeetings.on("meetingChanged", (newMeeting) => {
		meeting = newMeeting;
		document.querySelector("rtk-meeting").meeting = meeting;
	});
</script>

meetingChanged událost se spustí, když účastník přepne mezi hlavní schůzkou a skupinovými místnostmi. Při jejím spuštění aktualizujte referenci na objekt meeting.

import { Component, ViewChild, AfterViewInit } from '@angular/core';
import RealtimeKitClient from '@cloudflare/realtimekit';
import { RtkMeeting } from '@cloudflare/realtimekit-angular';

@Component({
	selector: 'app-root',
	template: `<rtk-meeting #myid [showSetupScreen]="true"></rtk-meeting>`
})
export class AppComponent implements AfterViewInit {
	@ViewChild('myid') meetingComponent: RtkMeeting;
	rtkMeeting: RealtimeKitClient;

	async ngAfterViewInit() {
		let meeting = await RealtimeKitClient.init({
			authToken: '<participant_auth_token>',
		});

		// Add event handler for breakout rooms
		meeting.connectedMeetings.on('meetingChanged', (newMeeting) => {
			meeting = newMeeting;
			if (this.meetingComponent) {
				this.meetingComponent.meeting = meeting;
			}
		});

		this.rtkMeeting = meeting;
		if (this.meetingComponent) {
			this.meetingComponent.meeting = meeting;
		}
	}
}

meetingChanged událost se spustí, když účastník přepne mezi hlavní schůzkou a skupinovými místnostmi. Při jejím spuštění aktualizujte referenci na objekt meeting.

Při použití RealtimeKitUI.startMeeting(), SDK automaticky spravuje RtkConnectedMeetingsListener, pro přepínání mezi breakout místnostmi není potřeba žádné další nastavení.

Pokud vytváříte vlastní UI schůzky (obchází MeetingViewController), zaregistrujte posluchače sami:

import RealtimeKit
import RealtimeKitUI

let listener = RtkConnectedMeetingsListener(rtkClient: rtkClient)

listener.onChangingMeeting = { meetingId in
    // Show a loading overlay; the SDK is switching rooms
    let isReturningToMain = meetingId == rtkClient.connectedMeetings.parentMeeting?.id
    showLoadingOverlay(message: isReturningToMain ? "Returning to Main Room\u{2026}" : "Joining breakout room\u{2026}")
}

listener.onMeetingChanged = { error in
    hideLoadingOverlay()
    if let error {
        showErrorAlert(message: error.message)
    } else {
        // Re-register all feature event listeners — the SDK clears them during the room switch
        // Re-register your listener instances, for example:
        // rtkClient.addSelfEventListener(selfEventListener: mySelfListener)
        // rtkClient.addParticipantsEventListener(participantsEventListener: myParticipantsListener)
    }
}

listener.onStateUpdate = { meetings, parentMeeting in
    // Refresh your breakout-rooms UI list
}

Při použití RealtimeKitUIBuilder + startMeeting(), SDK automaticky registruje a spravuje RtkConnectedMeetingsEventListener, pro přepínání mezi breakout místnostmi není potřeba žádné další nastavení.

Pokud vytváříte vlastní UI schůzky, zaregistrujte listener sami:

import com.cloudflare.realtimekit.ui.RtkConnectedMeetingsEventListener
import com.cloudflare.realtimekit.models.MeetingError

val connectedMeetingsListener = object : RtkConnectedMeetingsEventListener {
    override fun onChangingMeeting(meetingId: String) {
        // Show a transition screen; the SDK is switching rooms
        val isReturningToMain = meetingId == meeting.connectedMeetings.parentMeeting?.id
        showLoadingOverlay(isReturningToMain)
    }

    override fun onMeetingChanged(error: MeetingError?) {
        hideLoadingOverlay()
        if (error != null) {
            showErrorMessage(error.message)
        }
        // No need to re-register listeners — the SDK handles this automatically
    }
}

meeting.addConnectedMeetingsEventListener(connectedMeetingsListener)

onChangingMeeting callback se spustí, jakmile SDK začne opouštět aktuální místnost. onMeetingChanged callback se spustí, jakmile je přepnutí dokončeno (nebo selže).

useRealtimeKitClient hook automaticky zpracovává meetingChanged událost a přepne aktivní odkaz na klienta, když se účastník přesune mezi rozdělenými místnostmi. Ruční zpracování události není nutné.

import { useEffect } from "react";
import { useRealtimeKitClient } from "@cloudflare/realtimekit-react-native";
import { RtkMeeting } from "@cloudflare/realtimekit-react-native-ui";

function App() {
  const [meeting, initMeeting] = useRealtimeKitClient();

  useEffect(() => {
    initMeeting({ authToken: "<participant_auth_token>" });
  }, []);

  if (!meeting) return null;

  return <RtkMeeting meeting={meeting} showSetupScreen={true} />;
}

RtkMeeting automaticky zobrazí přechodovou obrazovku „Joining…“ při přepínání mezi rozdělenými místnostmi. Není potřeba žádné další nastavení.

Vykreslit uživatelské rozhraní schůzky

Použijte výchozí komponentu uživatelského rozhraní schůzky, která obsahuje vestavěnou podporu skupinových místností:

import {
	RealtimeKitProvider,
	useRealtimeKitClient,
} from "@cloudflare/realtimekit-react";
import { RtkMeeting } from "@cloudflare/realtimekit-react-ui";
import { useEffect, useState } from "react";

function App() {
	const [meeting, initMeeting] = useRealtimeKitClient();
	const [authToken, setAuthToken] = useState("<participant_auth_token>");

	useEffect(() => {
		if (authToken) {
			initMeeting({
				authToken: authToken,
			});
		}
	}, [authToken]);

	useEffect(() => {
		if (meeting) {
			meeting.connectedMeetings.on("meetingChanged", (newMeeting) => {
				console.log("Switched to breakout room or main meeting");
			});
		}
	}, [meeting]);

	return (
		<RealtimeKitProvider value={meeting}>
			<RtkMeeting showSetupScreen={true} meeting={meeting} />
		</RealtimeKitProvider>
	);
}

showSetupScreen vlastnost určuje, zda se zobrazí obrazovka nastavení, což účastníkům umožňuje před připojením k relaci zkontrolovat zvuk a video.

<body>
	<rtk-meeting id="my-meeting"></rtk-meeting>

	<script type="module">
		import RealtimeKitClient from "https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit@latest/dist/index.es.js";

		let meeting = await RealtimeKitClient.init({
			authToken: "<participant_auth_token>",
		});

		// Add event handler for breakout rooms
		meeting.connectedMeetings.on("meetingChanged", (newMeeting) => {
			meeting = newMeeting;
			document.querySelector("rtk-meeting").meeting = meeting;
		});

		document.querySelector("rtk-meeting").showSetupScreen = true;
		document.querySelector("rtk-meeting").meeting = meeting;
	</script>
</body>

showSetupScreen vlastnost určuje, zda se zobrazí obrazovka nastavení, což účastníkům umožňuje před připojením k relaci zkontrolovat zvuk a video.

<rtk-meeting #myid [showSetupScreen]="true"></rtk-meeting>
import { Component, ViewChild, AfterViewInit } from '@angular/core';
import RealtimeKitClient from '@cloudflare/realtimekit';
import { RtkMeeting } from '@cloudflare/realtimekit-angular';

@Component({
	selector: 'app-root',
	templateUrl: './app.component.html'
})
export class AppComponent implements AfterViewInit {
	@ViewChild('myid') meetingComponent: RtkMeeting;
	rtkMeeting: RealtimeKitClient;

	async ngAfterViewInit() {
		let meeting = await RealtimeKitClient.init({
			authToken: '<participant_auth_token>',
		});

		// Add event handler for breakout rooms
		meeting.connectedMeetings.on('meetingChanged', (newMeeting) => {
			meeting = newMeeting;
			if (this.meetingComponent) {
				this.meetingComponent.meeting = meeting;
			}
		});

		this.rtkMeeting = meeting;
		if (this.meetingComponent) {
			this.meetingComponent.meeting = meeting;
		}
	}
}

showSetupScreen vlastnost určuje, zda se zobrazí obrazovka nastavení, což účastníkům umožňuje před připojením k relaci zkontrolovat zvuk a video.

import RealtimeKit
import RealtimeKitUI

let meetingInfo = RtkMeetingInfo(authToken: "<participant_auth_token>")
let rtkUI = RealtimeKitUI(meetingInfo: meetingInfo)

let setupVC = rtkUI.startMeeting { [weak self] in
    // Called when the participant leaves or ends the meeting
    self?.dismiss(animated: true)
}
present(setupVC, animated: true)

Ve výchozím nastavení se zobrazuje obrazovka nastavení (náhled zvuku a videa). Vestavěná podpora breakout rooms, včetně překryvné vrstvy pro přepínání místností a aktualizací názvů místností, je řešena automaticky pomocí MeetingViewController.

import com.cloudflare.realtimekit.models.RtkMeetingInfo
import com.cloudflare.realtimekit.ui.RealtimeKitUIBuilder
import com.cloudflare.realtimekit.ui.RealtimeKitUIInfo

val meetingInfo = RtkMeetingInfo(authToken = "<participant_auth_token>")
val uiKitInfo = RealtimeKitUIInfo(
    activity = this,
    rtkMeetingInfo = meetingInfo,
)
val rtkUIKit = RealtimeKitUIBuilder.build(uiKitInfo)
rtkUIKit.startMeeting()

Vestavěná podpora skupinových místností je automaticky zajištěna pomocí RtkMeetingActivity. Když SDK přesouvá účastníky mezi místnostmi, zobrazí přechodové překrytí s lokalizovanou zprávou. Hostitel může spravovat skupinové místnosti prostřednictvím RtkBreakoutRoomsBottomSheet, které se automaticky zobrazí po klepnutí na tlačítko ovládací lišty Breakout Rooms.

import { useEffect } from "react";
import { useRealtimeKitClient } from "@cloudflare/realtimekit-react-native";
import { RtkMeeting } from "@cloudflare/realtimekit-react-native-ui";

function App() {
  const [meeting, initMeeting] = useRealtimeKitClient();

  useEffect(() => {
    initMeeting({ authToken: "<participant_auth_token>" });
  }, []);

  if (!meeting) return null;

  return <RtkMeeting meeting={meeting} showSetupScreen={true} />;
}

Vestavěná podpora skupinových místností je automaticky zajištěna pomocí RtkMeeting. Když se účastník přesune mezi místnostmi, automaticky se zobrazí přechodová obrazovka „Joining…“. Hostitel může spravovat skupinové místnosti pomocí RtkBreakoutRoomsManager, která je dostupná přes RtkBreakoutRoomsToggle v ovládacím panelu.

Další kroky

Do své aplikace RealtimeKit jste úspěšně integrovali breakout rooms. Účastníci nyní mohou:

Pro pokročilejší přizpůsobení prozkoumejte následující: