← Cloudflare Realtime / realtime / realtimekit / core
Skupinové místnosti
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ří:
- Spravujte oprávnění a práva hostitelů a účastníků pomocí předvoleb
- 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 mohou spouštět a zastavovat video, komunikovat s ostatními účastníky prostřednictvím chatu a anket a ztlumit či zapnout zvuk
- Nahrávejte všechny schůzky ve skupinových místnostech jednotlivě, stejně jako každou jinou schůzku RealtimeKit
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:
- Přepnout na nadřazenou schůzku - Přepnout zpět do hlavní schůzky (pokud máte potřebná oprávnění)
- Přepnout připojené schůzky - Přesun z hlavní schůzky do menších, tematicky zaměřených diskuzních skupin (breakout rooms) pro spolupráci
- Spolupracovat - Používat nástroje, jako je chat a ankety, během breakout relací
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.
- Pokud bylo vaše video zapnuté během breakout relace, zůstane zapnuté i po návratu do hlavní relace
- Pokud byl váš mikrofon zapnutý během breakout relace, zůstane zapnutý i po návratu do hlavní relace
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:
- Vytváření skupinových místností
- Přiřadit účastníky do místností
- Zahajte a ukončete skupinové místnosti
- Přepnout mezi místnostmi
Účastníci
Účastníkům můžete udělit následující oprávnění:
- Přepnout připojené schůzky - Umožňuje účastníkům přecházet mezi rozdělenými místnostmi
- Přepnout na nadřazenou schůzku - Umožňuje účastníkům vrátit se do hlavní schůzky
Uložit předvolbu
- Jakmile provedete všechny změny předvolby, klikněte na Save
- Zadejte název svého presetu a klikněte na Save
- 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.
Ověřte oprávnění
Před vytvořením skupinových místností ověřte oprávnění aktuálního účastníka, abyste se ujistili, že má oprávnění potřebná k jejich vytvoření. Nesprávná oprávnění mohou vést k vyvolání chyb.
// Check if breakout rooms are supported
const areBreakoutRoomsSupported = meeting.connectedMeetings.supportsConnectedMeetings;
// Check if any breakout rooms are already created
const areBreakoutRoomsActive = meeting.connectedMeetings.isActive;
// Check if the current participant has permission to create breakout rooms
const hasPermissionToCreateBreakoutRooms = meeting.self.permissions.connectedMeetings.canAlterConnectedMeetings;
// Check if the current participant has permission to switch to parent meeting
const hasPermissionToSwitchToParentMeeting = meeting.self.permissions.connectedMeetings.canSwitchToParentMeeting;
// Check if the current participant has permission to switch to connected meeting
const hasPermissionToSwitchToConnectedMeeting = meeting.self.permissions.connectedMeetings.canSwitchConnectedMeetings;// Check if breakout rooms are supported
const areBreakoutRoomsSupported = meeting.connectedMeetings.supportsConnectedMeetings;
// Check if any breakout rooms are already created
const areBreakoutRoomsActive = meeting.connectedMeetings.isActive;
// Check if the current participant has permission to create breakout rooms
const hasPermissionToCreateBreakoutRooms = meeting.self.permissions.connectedMeetings.canAlterConnectedMeetings;
// Check if the current participant has permission to switch to parent meeting
const hasPermissionToSwitchToParentMeeting = meeting.self.permissions.connectedMeetings.canSwitchToParentMeeting;
// Check if the current participant has permission to switch to connected meeting
const hasPermissionToSwitchToConnectedMeeting = meeting.self.permissions.connectedMeetings.canSwitchConnectedMeetings;// Check if breakout rooms are supported
const areBreakoutRoomsSupported = meeting.connectedMeetings.supportsConnectedMeetings;
// Check if any breakout rooms are already created
const areBreakoutRoomsActive = meeting.connectedMeetings.isActive;
// Check if the current participant has permission to create breakout rooms
const hasPermissionToCreateBreakoutRooms = meeting.self.permissions.connectedMeetings.canAlterConnectedMeetings;
// Check if the current participant has permission to switch to parent meeting
const hasPermissionToSwitchToParentMeeting = meeting.self.permissions.connectedMeetings.canSwitchToParentMeeting;
// Check if the current participant has permission to switch to connected meeting
const hasPermissionToSwitchToConnectedMeeting = meeting.self.permissions.connectedMeetings.canSwitchConnectedMeetings;val connectedMeetings = meeting.connectedMeetings
// Check if breakout rooms are active
val areBreakoutRoomsActive = connectedMeetings.isActive
// Check permissions on the local participant
val permissions = meeting.self.permissions.connectedMeetings
// Check if the current participant has permission to create/alter breakout rooms
val hasPermissionToAlterBreakoutRooms = permissions.canAlterConnectedMeetings
// Check if the current participant has permission to switch between breakout rooms
val hasPermissionToSwitchConnectedMeetings = permissions.canSwitchConnectedMeetings
// Check if the current participant has permission to switch back to the parent meeting
val hasPermissionToSwitchToParentMeeting = permissions.canSwitchToParentMeetinglet connectedMeetings = meeting.connectedMeetings
// Check if breakout rooms are active
let areBreakoutRoomsActive = connectedMeetings.isActive
// Check permissions on the local participant
let permissions = meeting.self.permissions.connectedMeetings
// Check if the current participant has permission to create/alter breakout rooms
let hasPermissionToAlterBreakoutRooms = permissions.canAlterConnectedMeetings
// Check if the current participant has permission to switch between breakout rooms
let hasPermissionToSwitchConnectedMeetings = permissions.canSwitchConnectedMeetings
// Check if the current participant has permission to switch back to the parent meeting
let hasPermissionToSwitchToParentMeeting = permissions.canSwitchToParentMeetingconst [meeting] = useRealtimeKitClient();
// Check if any breakout rooms are currently active
const areBreakoutRoomsActive = meeting?.connectedMeetings.isActive;
// Check whether the local participant can create, rename, or delete rooms and move any participant
const canAlterBreakoutRooms = meeting?.self.permissions.connectedMeetings.canAlterConnectedMeetings;
// Check whether the local participant can move themselves to any breakout room
const canSwitchRooms = meeting?.self.permissions.connectedMeetings.canSwitchConnectedMeetings;
// Check whether the local participant can return to the parent meeting
const canReturnToParent = meeting?.self.permissions.connectedMeetings.canSwitchToParentMeeting;Vytváření skupinových místností
const breakoutRooms = await meeting.connectedMeetings.createMeetings([
{ title: "Breakout Room 1" },
{ title: "Breakout Room 2" },
{ title: "Breakout Room 3" },
]);
console.log("Created Breakout Rooms: ", breakoutRooms.map((room) => "Id:: " + room.id + " --- Title:: " + room.title).join("\n"));breakoutRooms je pole základních informací o schůzce, jako jsou id a title. Můžete použít id těchto objektů pro přesun účastníků do breakout room.
const breakoutRooms = await meeting.connectedMeetings.createMeetings([
{ title: "Breakout Room 1" },
{ title: "Breakout Room 2" },
{ title: "Breakout Room 3" },
]);
console.log("Created Breakout Rooms: ", breakoutRooms.map((room) => "Id:: " + room.id + " --- Title:: " + room.title).join("\n"));breakoutRooms je pole základních informací o schůzce, jako jsou id a title. Můžete použít id těchto objektů pro přesun účastníků do breakout room.
const breakoutRooms = await meeting.connectedMeetings.createMeetings([
{ title: "Breakout Room 1" },
{ title: "Breakout Room 2" },
{ title: "Breakout Room 3" },
]);
console.log("Created Breakout Rooms: ", breakoutRooms.map((room) => "Id:: " + room.id + " --- Title:: " + room.title).join("\n"));breakoutRooms je pole základních informací o schůzce, jako jsou id a title. Můžete použít id těchto objektů pro přesun účastníků do breakout room.
meeting.connectedMeetings.createMeetings(
titles = listOf("Breakout Room 1", "Breakout Room 2", "Breakout Room 3")
) { result ->
result.onSuccess { breakoutRooms ->
val roomInfo = breakoutRooms.joinToString("\n") { "Id:: ${it.id} --- Title:: ${it.title}" }
println("Created Breakout Rooms: $roomInfo")
}.onFailure { error ->
println("Failed to create breakout rooms: ${error.value.message}")
}
}breakoutRooms je seznam základních informací o schůzce, jako například id a title. Můžete použít id těchto objektů pro přesun účastníků do breakout room.
meeting.connectedMeetings.createMeetings(titles: ["Breakout Room 1", "Breakout Room 2", "Breakout Room 3"]) { result in
switch result {
case .success(let breakoutRooms):
let roomInfo = breakoutRooms.map { "Id:: \($0.id) --- Title:: \($0.title)" }.joined(separator: "\n")
print("Created Breakout Rooms: \(roomInfo)")
case .failure(let error):
print("Failed to create breakout rooms: \(error.value.message)")
}
}breakoutRooms je pole základních informací o schůzce, jako například id a title. Můžete použít id těchto objektů pro přesun účastníků do breakout room.
const breakoutRooms = await meeting.connectedMeetings.createMeetings([
{ title: "Breakout Room 1" },
{ title: "Breakout Room 2" },
{ title: "Breakout Room 3" },
]);
console.log("Created Breakout Rooms: ", breakoutRooms.map((room) => "Id:: " + room.id + " --- Title:: " + room.title).join("\n"));breakoutRooms je pole základních informací o schůzce, jako jsou id a title. Můžete použít id těchto objektů pro přesun účastníků do breakout room.
Načíst seznam skupinových místností a jejich účastníků
Pokud v místnosti vytváří skupinové místnosti více hostitelů, můžete pomocí následujícího API získat souhrnný seznam skupinových místností.
const breakoutRoomsInfo = await meeting.connectedMeetings.getConnectedMeetings();breakoutRoomsInfo je objekt obsahující seznam breakout rooms a jejich účastníků spolu s podrobnostmi o nadřazené schůzce.
Tato data lze použít k zobrazení seznamu rozdělených místností a účastníků v uživatelském rozhraní. Toto API znovu načítá seznam rozdělených místností a účastníků, a lze ho proto považovat za zdroj pravdy pro rozdělené místnosti a účastníky. Pokud probíhá mnoho změn, doporučuje se toto API volat, abyste získali nejaktuálnější seznam rozdělených místností a účastníků.
Můžete také naslouchat stateUpdate událost a získejte tak nejnovější seznam skupinových místností a účastníků, jak se aktualizují v reálném čase.
meeting.connectedMeetings.on("stateUpdate", ({meetings, parentMeeting}) => {
console.log("stateUpdate", {meetings, parentMeeting});
// Alternatively, you can access the meetings and parentMeeting from the connectedMeetings object
console.log("Meetings List", meeting.connectedMeetings.meetings);
console.log("Parent Meeting", meeting.connectedMeetings.parentMeeting);
});const breakoutRoomsInfo = await meeting.connectedMeetings.getConnectedMeetings();breakoutRoomsInfo je objekt obsahující seznam breakout rooms a jejich účastníků spolu s podrobnostmi o nadřazené schůzce.
Tato data lze použít k zobrazení seznamu rozdělených místností a účastníků v uživatelském rozhraní. Toto API znovu načítá seznam rozdělených místností a účastníků, a lze ho proto považovat za zdroj pravdy pro rozdělené místnosti a účastníky. Pokud probíhá mnoho změn, doporučuje se toto API volat, abyste získali nejaktuálnější seznam rozdělených místností a účastníků.
Můžete také naslouchat stateUpdate událost a získejte tak nejnovější seznam skupinových místností a účastníků, jak se aktualizují v reálném čase.
meeting.connectedMeetings.on("stateUpdate", ({meetings, parentMeeting}) => {
console.log("stateUpdate", {meetings, parentMeeting});
// Alternatively, you can access the meetings and parentMeeting from the connectedMeetings object
console.log("Meetings List", meeting.connectedMeetings.meetings);
console.log("Parent Meeting", meeting.connectedMeetings.parentMeeting);
});const breakoutRooms = await meeting.connectedMeetings.createMeetings([
{ title: "Breakout Room 1" },
{ title: "Breakout Room 2" },
{ title: "Breakout Room 3" },
]);
console.log("Created Breakout Rooms: ", breakoutRooms.map((room) => "Id:: " + room.id + " --- Title:: " + room.title).join("\n"));breakoutRooms je pole základních informací o schůzce, jako jsou id a title. Můžete použít id těchto objektů pro přesun účastníků do breakout room.
meeting.connectedMeetings.getConnectedMeetings { result ->
result.onSuccess { breakoutRoomsInfo ->
println("Parent Meeting: ${breakoutRoomsInfo.parentMeeting}")
println("Breakout Rooms: ${breakoutRoomsInfo.meetings}")
}.onFailure { error ->
println("Failed to fetch breakout rooms: ${error.value.message}")
}
}breakoutRoomsInfo je objekt obsahující seznam breakout rooms a jejich účastníků spolu s podrobnostmi o nadřazené schůzce.
Tato data lze použít k zobrazení seznamu rozdělených místností a účastníků v uživatelském rozhraní. Toto API znovu načítá seznam rozdělených místností a účastníků, a lze ho proto považovat za zdroj pravdy. Pokud probíhá mnoho změn, doporučuje se toto API volat, abyste získali nejaktuálnější stav.
Můžete také naslouchat onStateUpdate událost a získávejte aktualizace seznamu skupinových místností a účastníků v reálném čase.
meeting.addConnectedMeetingsEventListener(object : RtkConnectedMeetingsEventListener {
override fun onStateUpdate(meetings: List<RtkConnectedMeeting>, parentMeeting: RtkConnectedMeeting?) {
println("State updated. Meetings: $meetings, Parent: $parentMeeting")
// Alternatively, access state directly from the connectedMeetings object
println("Meetings List: ${meeting.connectedMeetings.meetings}")
println("Parent Meeting: ${meeting.connectedMeetings.parentMeeting}")
}
override fun onChangingMeeting(meetingId: String) {}
override fun onMeetingChanged(error: MeetingError?) {}
})meeting.connectedMeetings.getConnectedMeetings { result in
switch result {
case .success(let breakoutRoomsInfo):
print("Parent Meeting: \(String(describing: breakoutRoomsInfo.parentMeeting))")
print("Breakout Rooms: \(breakoutRoomsInfo.meetings)")
case .failure(let error):
print("Failed to fetch breakout rooms: \(error.value.message)")
}
}breakoutRoomsInfo je objekt obsahující seznam breakout rooms a jejich účastníků spolu s podrobnostmi o nadřazené schůzce.
Tato data lze použít k zobrazení seznamu rozdělených místností a účastníků v uživatelském rozhraní. Toto API znovu načítá seznam rozdělených místností a účastníků, a lze ho proto považovat za zdroj pravdy. Pokud probíhá mnoho změn, doporučuje se toto API volat, abyste získali nejaktuálnější stav.
Můžete také naslouchat onStateUpdate událost a získávejte aktualizace seznamu skupinových místností a účastníků v reálném čase.
class MyListener: RtkConnectedMeetingsEventListener {
func onStateUpdate(meetings: [RtkConnectedMeeting], parentMeeting: RtkConnectedMeeting?) {
print("State updated. Meetings: \(meetings), Parent: \(String(describing: parentMeeting))")
// Alternatively, access state directly from the connectedMeetings object
print("Meetings List: \(meeting.connectedMeetings.meetings)")
print("Parent Meeting: \(String(describing: meeting.connectedMeetings.parentMeeting))")
}
func onChangingMeeting(meetingId: String) {}
func onMeetingChanged(error: MeetingError?) {}
}
meeting.addConnectedMeetingsEventListener(MyListener())const breakoutRoomsInfo = await meeting.connectedMeetings.getConnectedMeetings();breakoutRoomsInfo je objekt obsahující seznam breakout rooms a jejich účastníků spolu s podrobnostmi o nadřazené schůzce.
Tato data lze použít k zobrazení seznamu rozdělených místností a účastníků v uživatelském rozhraní. Toto API znovu načítá seznam rozdělených místností a účastníků, a lze ho proto považovat za zdroj pravdy pro rozdělené místnosti a účastníky. Pokud probíhá mnoho změn, doporučuje se toto API volat, abyste získali nejaktuálnější seznam rozdělených místností a účastníků.
Můžete také naslouchat stateUpdate událost a získejte tak nejnovější seznam skupinových místností a účastníků, jak se aktualizují v reálném čase.
meeting.connectedMeetings.on("stateUpdate", ({meetings, parentMeeting}) => {
console.log("stateUpdate", {meetings, parentMeeting});
// Alternatively, you can access the meetings and parentMeeting from the connectedMeetings object
console.log("Meetings List", meeting.connectedMeetings.meetings);
console.log("Parent Meeting", meeting.connectedMeetings.parentMeeting);
});Přesunutí účastníků do breakout rooms
Jakmile vytvoříte skupinové místnosti, přiřaďte do nich účastníky.
// Retrieve list of breakout rooms & participants
const breakoutRoomsInfo = await meeting.connectedMeetings.getConnectedMeetings();
/*
* You can retrieve meetingIds and participantIds from the breakoutRoomsInfo object.
* Based on where the participant currently is, you can decide the sourceMeetingId and targetMeetingId.
*/
// Move participants to breakout rooms
const response = await meeting.connectedMeetings.moveParticipants(
"SOURCE_MEETING_ID", // sourceMeetingId, meeting id where participants are currently in
"TARGET_MEETING_ID", // targetMeetingId, meeting id where participants are to be moved
["PARTICIPANT_ID_1", "PARTICIPANT_ID_2"], // participantIds, array of participant ids to be moved
);// Retrieve list of breakout rooms & participants
const breakoutRoomsInfo = await meeting.connectedMeetings.getConnectedMeetings();
/*
* You can retrieve meetingIds and participantIds from the breakoutRoomsInfo object.
* Based on where the participant currently is, you can decide the sourceMeetingId and targetMeetingId.
*/
// Move participants to breakout rooms
const response = await meeting.connectedMeetings.moveParticipants(
"SOURCE_MEETING_ID", // sourceMeetingId, meeting id where participants are currently in
"TARGET_MEETING_ID", // targetMeetingId, meeting id where participants are to be moved
["PARTICIPANT_ID_1", "PARTICIPANT_ID_2"], // participantIds, array of participant ids to be moved
);// Retrieve list of breakout rooms & participants
const breakoutRoomsInfo = await meeting.connectedMeetings.getConnectedMeetings();
/*
* You can retrieve meetingIds and participantIds from the breakoutRoomsInfo object.
* Based on where the participant currently is, you can decide the sourceMeetingId and targetMeetingId.
*/
// Move participants to breakout rooms
const response = await meeting.connectedMeetings.moveParticipants(
"SOURCE_MEETING_ID", // sourceMeetingId, meeting id where participants are currently in
"TARGET_MEETING_ID", // targetMeetingId, meeting id where participants are to be moved
["PARTICIPANT_ID_1", "PARTICIPANT_ID_2"], // participantIds, array of participant ids to be moved
);// Retrieve list of breakout rooms & participants
meeting.connectedMeetings.getConnectedMeetings { result ->
result.onSuccess { breakoutRoomsInfo ->
/*
* You can retrieve meetingIds and participantIds from breakoutRoomsInfo.
* Based on where the participant currently is, decide the sourceMeetingId and targetMeetingId.
*/
// Move participants to a breakout room
meeting.connectedMeetings.moveParticipants(
sourceMeetingId = "SOURCE_MEETING_ID",
destinationMeetingId = "TARGET_MEETING_ID",
participantIds = listOf("PARTICIPANT_ID_1", "PARTICIPANT_ID_2")
) { error ->
if (error != null) {
println("Failed to move participants: $error")
} else {
println("Participants moved successfully")
}
}
}
}// Retrieve list of breakout rooms & participants
meeting.connectedMeetings.getConnectedMeetings { result in
switch result {
case .success(let breakoutRoomsInfo):
/*
* You can retrieve meetingIds and participantIds from breakoutRoomsInfo.
* Based on where the participant currently is, decide the fromMeetingId and toMeetingId.
*/
// Move participants to a breakout room
meeting.connectedMeetings.moveParticipants(
sourceMeetingId: "SOURCE_MEETING_ID",
destinationMeetingId: "TARGET_MEETING_ID",
participantIds: ["PARTICIPANT_ID_1", "PARTICIPANT_ID_2"]
) { error in
if let error = error {
print("Failed to move participants: \(error)")
} else {
print("Participants moved successfully")
}
}
case .failure(let error):
print("Failed to fetch breakout rooms: \(error.value.message)")
}
}// Retrieve list of breakout rooms & participants
const breakoutRoomsInfo = await meeting.connectedMeetings.getConnectedMeetings();
/*
* You can retrieve meetingIds and participantIds from the breakoutRoomsInfo object.
* Based on where the participant currently is, you can decide the sourceMeetingId and targetMeetingId.
*/
// Move participants to breakout rooms
const response = await meeting.connectedMeetings.moveParticipants(
"SOURCE_MEETING_ID", // sourceMeetingId, meeting id where participants are currently in
"TARGET_MEETING_ID", // targetMeetingId, meeting id where participants are to be moved
["PARTICIPANT_ID_1", "PARTICIPANT_ID_2"], // participantIds, array of participant ids to be moved
);Přesunutí účastníků s konkrétním přednastavením do breakout rooms
Jakmile vytvoříte skupinové místnosti, přiřaďte do nich účastníky.
const response = await meeting.connectedMeetings.moveParticipantsWithCustomPreset(
"SOURCE_MEETING_ID", // sourceMeetingId, meeting id where participants are currently in
"TARGET_MEETING_ID", // targetMeetingId, meeting id where participants are to be moved
[{ presetId: "PRESET_ID_1" }, { presetId: "PRESET_ID_2" }], // array of objects with presetId field
);const response = await meeting.connectedMeetings.moveParticipantsWithCustomPreset(
"SOURCE_MEETING_ID", // sourceMeetingId, meeting id where participants are currently in
"TARGET_MEETING_ID", // targetMeetingId, meeting id where participants are to be moved
[{ presetId: "PRESET_ID_1" }, { presetId: "PRESET_ID_2" }], // array of objects with presetId field
);const response = await meeting.connectedMeetings.moveParticipantsWithCustomPreset(
"SOURCE_MEETING_ID", // sourceMeetingId, meeting id where participants are currently in
"TARGET_MEETING_ID", // targetMeetingId, meeting id where participants are to be moved
[{ presetId: "PRESET_ID_1" }, { presetId: "PRESET_ID_2" }], // array of objects with presetId field
);meeting.connectedMeetings.moveParticipantsWithCustomPreset(
sourceMeetingId = "SOURCE_MEETING_ID",
destinationMeetingId = "TARGET_MEETING_ID",
participants = listOf(
MoveParticipantPayload(id = "PARTICIPANT_ID_1", presetId = "PRESET_ID_1"),
MoveParticipantPayload(id = "PARTICIPANT_ID_2", presetId = "PRESET_ID_2")
)
) { error ->
if (error != null) {
println("Failed to move participants: $error")
} else {
println("Participants moved with custom preset successfully")
}
}meeting.connectedMeetings.moveParticipantsWithCustomPreset(
sourceMeetingId: "SOURCE_MEETING_ID",
destinationMeetingId: "TARGET_MEETING_ID",
participants: [
MoveParticipantPayload(id: "PARTICIPANT_ID_1", presetId: "PRESET_ID_1"),
MoveParticipantPayload(id: "PARTICIPANT_ID_2", presetId: "PRESET_ID_2")
]
) { error in
if let error = error {
print("Failed to move participants: \(error)")
} else {
print("Participants moved with custom preset successfully")
}
}const response = await meeting.connectedMeetings.moveParticipantsWithCustomPreset(
"SOURCE_MEETING_ID", // sourceMeetingId, meeting id where participants are currently in
"TARGET_MEETING_ID", // targetMeetingId, meeting id where participants are to be moved
[{ presetId: "PRESET_ID_1" }, { presetId: "PRESET_ID_2" }], // array of objects with presetId field
);Přesunutí místního účastníka do breakout room
Chcete-li přesunout místního účastníka do jiné skupinové místnosti nebo zpět do nadřazené schůzky, použijte stejné API jako pro přesun ostatních účastníků, ale předejte ID místního účastníka. Místní účastník musí mít odpovídající oprávnění: canSwitchConnectedMeetings a přepínat tak mezi breakout rooms, nebo canSwitchToParentMeeting a vrátit se tak do nadřazené schůzky, pokud požadavek vznesl místní účastník, který není hostitelem.
Zpracování událostí skupinových místností
Pokud byl účastník přesunut do skupinové místnosti, changingMeeting událost se spustí, po níž následuje meetingChanged událost. Tyto události se spouštějí také při přepnutí účastníka mezi hlavní schůzkou a skupinovými místnostmi. Pokud jsou účastníci do skupinové místnosti přiřazeni, připojí se k ní automaticky. Ke schůzce se tak nemusíte připojovat explicitně.
// Listen to changingMeeting event to show a custom UI to indicate that a meeting switch is happening
meeting.connectedMeetings.on("changingMeeting", (meetingId) => {
console.log("Switching to breakout room or main meeting with id: " + meetingId);
console.log("Show a Custom UI to indicate that a meeting switch is happening");
});
// Listen to meetingChanged event to update the meeting object reference
meeting.connectedMeetings.on("meetingChanged", (newMeeting) => {
console.log("Switched to breakout room or main meeting");
console.log("Every action now should be performed on this meeting");
});// Listen to changingMeeting event to show a custom UI to indicate that a meeting switch is happening
meeting.connectedMeetings.on("changingMeeting", (meetingId) => {
console.log("Switching to breakout room or main meeting with id: " + meetingId);
console.log("Show a Custom UI to indicate that a meeting switch is happening");
});
// Listen to meetingChanged event to update the meeting object reference
meeting.connectedMeetings.on("meetingChanged", (newMeeting) => {
console.log("Switched to breakout room or main meeting");
console.log("Every action now should be performed on this meeting");
});// Listen to changingMeeting event to show a custom UI to indicate that a meeting switch is happening
meeting.connectedMeetings.on("changingMeeting", (meetingId) => {
console.log("Switching to breakout room or main meeting with id: " + meetingId);
console.log("Show a Custom UI to indicate that a meeting switch is happening");
});
// Listen to meetingChanged event to update the meeting object reference
meeting.connectedMeetings.on("meetingChanged", (newMeeting) => {
console.log("Switched to breakout room or main meeting");
console.log("Every action now should be performed on this meeting");
});meeting.addConnectedMeetingsEventListener(object : RtkConnectedMeetingsEventListener {
// Triggered when a meeting switch is initiated — use this to show a loading UI
override fun onChangingMeeting(meetingId: String) {
println("Switching to breakout room or main meeting with id: $meetingId")
println("Show a custom UI to indicate that a meeting switch is happening")
}
// Triggered when the meeting switch is complete
override fun onMeetingChanged(error: MeetingError?) {
if (error != null) {
println("Failed to switch meeting: $error")
} else {
println("Switched to breakout room or main meeting successfully")
}
}
override fun onStateUpdate(meetings: List<RtkConnectedMeeting>, parentMeeting: RtkConnectedMeeting?) {}
})class MyListener: RtkConnectedMeetingsEventListener {
// Triggered when a meeting switch is initiated — use this to show a loading UI
func onChangingMeeting(meetingId: String) {
print("Switching to breakout room or main meeting with id: \(meetingId)")
print("Show a custom UI to indicate that a meeting switch is happening")
}
// Triggered when the meeting switch is complete
func onMeetingChanged(error: MeetingError?) {
if let error = error {
print("Failed to switch meeting: \(error)")
} else {
print("Switched to breakout room or main meeting successfully")
}
}
func onStateUpdate(meetings: [RtkConnectedMeeting], parentMeeting: RtkConnectedMeeting?) {}
}
meeting.addConnectedMeetingsEventListener(MyListener()) useRealtimeKitClient hook automaticky zpracovává meetingChanged událost a přepne aktivní odkaz na klienta, když je místní účastník přesunut do rozdělené místnosti nebo zpět do hlavní schůzky. Není potřeba žádné další nastavení.
Pokud používáte RtkMeeting komponenty UI Kit se automaticky vyřeší i přechodové UI (obrazovka „Joining…“).
Chcete-li během přepínání zobrazit vlastní načítací obrazovku, naslouchejte changingMeeting událost:
useEffect(() => {
if (!meeting) return;
const onChangingMeeting = (meetingId: string) => {
console.log("Switching to meeting:", meetingId);
// Show a loading indicator
};
meeting.connectedMeetings.on("changingMeeting", onChangingMeeting);
return () => meeting.connectedMeetings.removeListener("changingMeeting", onChangingMeeting);
}, [meeting]);Zavření skupinových místností
Skupinové místnosti můžete zavřít nebo smazat. Účastníci těchto schůzek pak budou muset přejít do hlavní místnosti.
await meeting.connectedMeetings.deleteMeetings([
"MEETING_ID_TO_CLOSE_1",
"MEETING_ID_TO_CLOSE_2",
]);Tím by se také spustilo stateUpdate událost, která aktualizuje seznam skupinových místností a účastníků.
meeting.connectedMeetings.on("stateUpdate", ({meetings, parentMeeting}) => {
console.log("stateUpdate", {meetings, parentMeeting});
});
// Alternatively, you can access the meetings and parentMeeting from the connectedMeetings object
console.log("Meetings List", meeting.connectedMeetings.meetings);
console.log("Parent Meeting", meeting.connectedMeetings.parentMeeting);await meeting.connectedMeetings.deleteMeetings([
"MEETING_ID_TO_CLOSE_1",
"MEETING_ID_TO_CLOSE_2",
]);Tím by se také spustilo stateUpdate událost, která aktualizuje seznam skupinových místností a účastníků.
meeting.connectedMeetings.on("stateUpdate", ({meetings, parentMeeting}) => {
console.log("stateUpdate", {meetings, parentMeeting});
});
// Alternatively, you can access the meetings and parentMeeting from the connectedMeetings object
console.log("Meetings List", meeting.connectedMeetings.meetings);
console.log("Parent Meeting", meeting.connectedMeetings.parentMeeting);await meeting.connectedMeetings.deleteMeetings([
"MEETING_ID_TO_CLOSE_1",
"MEETING_ID_TO_CLOSE_2",
]);Tím by se také spustilo stateUpdate událost, která aktualizuje seznam skupinových místností a účastníků.
meeting.connectedMeetings.on("stateUpdate", ({meetings, parentMeeting}) => {
console.log("stateUpdate", {meetings, parentMeeting});
});
// Alternatively, you can access the meetings and parentMeeting from the connectedMeetings object
console.log("Meetings List", meeting.connectedMeetings.meetings);
console.log("Parent Meeting", meeting.connectedMeetings.parentMeeting);meeting.connectedMeetings.deleteMeetings(
meetingIds = listOf("MEETING_ID_TO_CLOSE_1", "MEETING_ID_TO_CLOSE_2")
) { error ->
if (error != null) {
println("Failed to close breakout rooms: $error")
} else {
println("Breakout rooms closed successfully")
}
}Tím se také spustí onStateUpdate událost, která aktualizuje seznam skupinových místností a účastníků.
meeting.addConnectedMeetingsEventListener(object : RtkConnectedMeetingsEventListener {
override fun onStateUpdate(meetings: List<RtkConnectedMeeting>, parentMeeting: RtkConnectedMeeting?) {
println("State updated. Meetings: $meetings, Parent: $parentMeeting")
// Alternatively, access state directly from the connectedMeetings object
println("Meetings List: ${meeting.connectedMeetings.meetings}")
println("Parent Meeting: ${meeting.connectedMeetings.parentMeeting}")
}
override fun onChangingMeeting(meetingId: String) {}
override fun onMeetingChanged(error: MeetingError?) {}
})meeting.connectedMeetings.deleteMeetings(meetingIds: ["MEETING_ID_TO_CLOSE_1", "MEETING_ID_TO_CLOSE_2"]) { error in
if let error = error {
print("Failed to close breakout rooms: \(error)")
} else {
print("Breakout rooms closed successfully")
}
}Tím se také spustí onStateUpdate událost, která aktualizuje seznam skupinových místností a účastníků.
class MyListener: RtkConnectedMeetingsEventListener {
func onStateUpdate(meetings: [RtkConnectedMeeting], parentMeeting: RtkConnectedMeeting?) {
print("State updated. Meetings: \(meetings), Parent: \(String(describing: parentMeeting))")
// Alternatively, access state directly from the connectedMeetings object
print("Meetings List: \(meeting.connectedMeetings.meetings)")
print("Parent Meeting: \(String(describing: meeting.connectedMeetings.parentMeeting))")
}
func onChangingMeeting(meetingId: String) {}
func onMeetingChanged(error: MeetingError?) {}
}
meeting.addConnectedMeetingsEventListener(MyListener())await meeting.connectedMeetings.deleteMeetings([
"MEETING_ID_TO_CLOSE_1",
"MEETING_ID_TO_CLOSE_2",
]);Tím by se také spustilo stateUpdate událost, která aktualizuje seznam skupinových místností a účastníků.
meeting.connectedMeetings.on("stateUpdate", ({meetings, parentMeeting}) => {
console.log("stateUpdate", {meetings, parentMeeting});
});
// Alternatively, you can access the meetings and parentMeeting from the connectedMeetings object
console.log("Meetings List", meeting.connectedMeetings.meetings);
console.log("Parent Meeting", meeting.connectedMeetings.parentMeeting);Další kroky
Do své aplikace RealtimeKit jste úspěšně integrovali breakout rooms. Účastníci nyní mohou:
- Připojit se k hlavní schůzce
- Být hostitelem přiřazen do skupinových místností
- Přepnout mezi hlavní schůzkou a skupinovými místnostmi
- Spolupracovat v menších zaměřených skupinách
Pro pokročilejší přizpůsobení prozkoumejte následující:
- Knihovna komponent UI Kit - Procházejte dostupné komponenty
- Stavy UI Kit - Zjistěte, jak komponenty synchronizují
- Vytváření vlastního UI - Vytvářejte vlastní rozhraní schůzek