Breakout-rum
Den här artikeln beskriver hur du implementerar Microsoft Teams breakout-rum med Azure Communication Services. Den här funktionen gör det möjligt för Azure Communication Services-användare i Teams-möten att delta i breakout-rum. Teams-administratörer styr tillgängligheten för breakout-rum i Teams möte med Teams mötesprincip. Du hittar ytterligare information om breakout-rum i Teams-dokumentationen.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Se Skapa ett konto kostnadsfritt.
- En distribuerad Communication Services-resurs. Se Skapa en Communication Services-resurs.
- En användaråtkomsttoken för att aktivera den anropande klienten. Mer information finns i Skapa och hantera åtkomsttoken.
- Teams mötesorganisatör måste tilldela Teams mötesprincip som möjliggör grupprum. Se Teams mötesprincip.
- Valfritt: Slutför snabbstarten för att lägga till röstsamtal i ditt program.
Endast Microsoft 365-användare med roller som organisatör, medorganisatör eller Breakout Room-chef kan hantera breakout-rummen.
Support
Följande tabeller definierar stöd för breakout-rum i Azure Communication Services.
Identiteter och anropstyper
I följande tabell visas stöd i breakout-rum för specifik samtalstyp och identitet.
Identiteter | Teams-möte | Rum | 1:1 samtal | Gruppsamtal | 1:1 Teams interop-samtal | Grupp teams-interop-anrop |
---|---|---|---|---|---|---|
Communication Services-användare | ✔️ | |||||
Microsoft 365-användare | ✔️ |
Operations
I följande tabell visas stöd för enskilda API:er i anropande SDK som är relaterade till enskilda identitetstyper.
Operations | Communication Services-användare | Microsoft 365-användare |
---|---|---|
Hämta tilldelat breakout-rum | ✔️ | ✔️ |
Hämta alla breakout-rum | ✔️ [1] | |
Gå med i breakout room | ✔️ | ✔️ |
Hantera breakout-rum | ||
Delta i breakout room chat | ✔️ [2] | |
Hämta inställningar för breakout-rum | ✔️ | ✔️ |
[1] Endast Microsoft 365-användare med rollorganisatör, medorganisatör eller grupprumshanterare.
[2] Microsoft 365-användare kan använda Graph API för att delta i breakout room chat. Tråd-ID:t för chatten anges i det tilldelade objektet för breakout-rummet.
SDK:er
Följande tabeller visar stöd för funktionen breakout rooms i enskilda Azure Communication Services-SDK:er.
Supportstatus | Webb | Webbgränssnitt | iOS | iOS-användargränssnitt | Android | Android-användargränssnitt | Windows |
---|---|---|---|---|---|---|---|
Stöds | ✔️ |
Installera SDK:n
npm install
Använd kommandot för att installera Azure Communication Services Common och Calling SDK för JavaScript:
npm install @azure/communication-common --save
npm install @azure/communication-calling --save
Initiera nödvändiga objekt
En CallClient
instans krävs för de flesta anropsåtgärder. När du skapar en ny CallClient
instans kan du konfigurera den med anpassade alternativ som en Logger
instans.
Med instansen CallClient
kan du skapa en CallAgent
instans genom att anropa createCallAgent
. Den här metoden returnerar asynkront ett CallAgent
instansobjekt.
Metoden createCallAgent
använder CommunicationTokenCredential
som argument. Den accepterar en användaråtkomsttoken.
Du kan använda getDeviceManager
metoden på instansen CallClient
för att få åtkomst deviceManager
till .
const { CallClient } = require('@azure/communication-calling');
const { AzureCommunicationTokenCredential} = require('@azure/communication-common');
const { AzureLogger, setLogLevel } = require("@azure/logger");
// Set the logger's log level
setLogLevel('verbose');
// Redirect log output to console, file, buffer, REST API, or whatever location you want
AzureLogger.log = (...args) => {
console.log(...args); // Redirect log output to console
};
const userToken = '<USER_TOKEN>';
callClient = new CallClient(options);
const tokenCredential = new AzureCommunicationTokenCredential(userToken);
const callAgent = await callClient.createCallAgent(tokenCredential, {displayName: 'optional Azure Communication Services user name'});
const deviceManager = await callClient.getDeviceManager()
Så här hanterar du SDK-anslutning till Microsoft-infrastruktur på bästa sätt
Instansen Call Agent
hjälper dig att hantera anrop (för att ansluta eller starta samtal). För att kunna arbeta måste din anropande SDK ansluta till Microsofts infrastruktur för att få meddelanden om inkommande samtal och samordna annan samtalsinformation. Du Call Agent
har två möjliga tillstånd:
Ansluten – Ett Call Agent
connectionStatue-värde Connected
innebär att klient-SDK:t är anslutet och kan ta emot meddelanden från Microsofts infrastruktur.
Frånkopplad – Ett Call Agent
connectionStatue-värde för Disconnected
tillstånd det finns ett problem som hindrar SDK:n från att ansluta korrekt.
Call Agent
ska återskapas.
-
invalidToken
: Om en token har upphört att gälla eller om en ogiltigCall Agent
instans kopplas från med det här felet. -
connectionIssue
: Om det finns ett problem med att klienten ansluter till Microsoft-infrastrukturen, efter att många återförsökCall Agent
har exponeratconnectionIssue
felet.
Du kan kontrollera om din lokala Call Agent
är ansluten till Microsofts infrastruktur genom att granska det aktuella värdet för connectionState
egenskapen. Under ett aktivt anrop kan du lyssna på connectionStateChanged
händelsen för att avgöra om Call Agent
det ändras från Anslutet till frånkopplat tillstånd.
const connectionState = callAgentInstance.connectionState;
console.log(connectionState); // it may return either of 'Connected' | 'Disconnected'
const connectionStateCallback = (args) => {
console.log(args); // it will return an object with oldState and newState, each of having a value of either of 'Connected' | 'Disconnected'
// it will also return reason, either of 'invalidToken' | 'connectionIssue'
}
callAgentInstance.on('connectionStateChanged', connectionStateCallback);
Implementera breakout-rum
BreakoutRooms
är en feature
av klassen Call
. Först måste du importera paketet Features
från anropande SDK:
import { Features} from "@azure/communication-calling";
Skapa breakoutRoom-funktion
Hämta sedan funktions-API-objektet från anropsinstansen:
const breakoutRoomsFeature = mainMeetingCall.feature(Features.BreakoutRooms);
Prenumerera på breakoutRoom-händelser
Med API:et BreakoutRooms
kan du prenumerera BreakoutRooms
på händelser. En breakoutRoomsUpdated
händelse kommer från en BreakoutRoomsCallFeature
instans och innehåller information om de skapade, uppdaterade och tilldelade breakout-rummen.
Om du vill få information om breakout-rummet prenumererar du på breakoutRoomsUpdated
händelsen.
breakoutRoomsFeature.on('breakoutRoomsUpdated', breakoutRoomsUpdatedListener);
Hantera breakoutRoom-händelser
Händelsen breakoutRoomsUpdated
tillhandahåller en instans av någon av följande klasser som en indataparameter. Du kan använda egenskapen type
för att skilja mellan enskilda händelsetyper.
Klass
BreakoutRoomsEvent
: Den här händelsen utlöses när en användare med rollorganisatören, samorganisatören eller grupprumshanteraren skapar eller uppdaterar grupprummen. Microsoft 365-användare med rollorganisatör, medorganisatör eller grupprumshanterare kan ta emot den här typen av evenemang. Utvecklare kan använda breakout-rummen i egenskapendata
för att återge information om alla breakout-rum. Den här klassen har en egenskaptype
som är"breakoutRooms"
lika med .export interface BreakoutRoomsEvent { /** * Breakout room event type */ type: "breakoutRooms", /** * list of Breakout rooms */ data: BreakoutRoom[] | undefined; }
Klass
BreakoutRoomsSettingsEvent
: När en användare med en rollorganisatör, medorganisatör eller grupprumshanterare uppdaterar breakout-rummets inställningar utlöses händelsen. Utvecklare kan använda den här informationen för att återge tiden när breakout-rummet slutar eller bestämma om en knapp ska återges för att ansluta till huvudrummet. Den här klassen har en egenskaptype
som är"breakoutRoomSettings"
lika med .export interface BreakoutRoomSettingsEvent { /** * Breakout room event type */ type: "breakoutRoomSettings", /** * Breakout Room setting details */ data: BreakoutRoomSettings | undefined; }
Klass
AssignedBreakoutRoomsEvent
: Den här händelsen utlöses när användaren tilldelas till ett breakout-rum eller tilldelas ett breakout-rum uppdateras. Användare kan ansluta till breakout-rummet när egenskapenstate
är inställd påopen
, lämna breakout-rummet när egenskapenstate
är inställd påclosed
eller återge information om breakout-rummet. Den här klassen har en egenskaptype
som är"assignedBreakoutRoom"
lika med .export interface AssignedBreakoutRoomEvent { /** * Breakout room event type */ type: "assignedBreakoutRoom"; /** * Assigned breakout room details */ data: BreakoutRoom | undefined; }
Klass
JoinBreakoutRoomsEvent
: Den här händelsen utlöses när deltagaren ansluter till ett grupprumssamtal. Den här händelsen kan inträffa när en användare automatiskt flyttas till ett breakout-rum (dvs. omassignedBreakoutRoom
egenskapen är inställdopen
på ochautoMoveParticipantToBreakoutRoom
är inställdtrue
på ) eller när en användare uttryckligen ansluter till ett breakout-rum (dvs. anropar metodenjoin
på instansenassignedBreakoutRoom
närautoMoveParticipantToBreakoutRoom
är inställdfalse
på ).state
Egenskapendata
innehåller breakout room-instansencall
, som utvecklare kan använda för att styra breakout room-samtal. Den här klassen har en egenskaptype
som är"join"
lika med .export interface JoinBreakoutRoomEvent { /** * Breakout room event type */ type: "join"; /** * Breakoutroom call object */ data: Call | TeamsCall; }
Följande kod visar värdefull information som tagits emot i breakout room-händelserna:
const breakoutRoomsUpdatedListener = (event) => {
switch(event.type) {
case "breakoutRooms":
const breakoutRooms = event.data;
console.log(`Breakout rooms are created or updated. There are ${breakoutRooms.length} breakout rooms in total.`);
breakoutRooms.forEach((room)=>{
console.log(`- ${room.displayName}`);
});
break;
case "assignedBreakoutRooms":
const assignedRoom = event.data;
console.log(`You are assigned to breakout room named: ${assignedRoom.displayName}`);
console.log(`Assigned breakout room thread Id: ${assignedRoom.threadId}`);
console.log(`Automatically move participants to breakout room: ${assignedRoom.autoMoveParticipantToBreakoutRoom}`);
console.log(`Assigned breakout room state : ${assignedRoom.state }`);
break;
case "breakoutRoomsSettings":
const breakoutRoomSettings = event.data;
console.log(`Breakout room ends at: ${breakoutRoomSettings.roomEndTime}`);
console.log(`Disable the user to return to main meeting from breakout room call : ${breakoutRoomSettings.disableReturnToMainMeeting}`);
break;
case "join":
const breakoutRoomCall = event.data;
console.log(`You have joined breakout room with call ID: ${breakoutRoomCall.id}`);
break;
}
}
breakoutRoomsFeature.on('breakoutRoomsUpdated', breakoutRoomsUpdatedListener);
Lista tillgängliga breakout-rum
Microsoft 365-användare med rollorganisatör, medorganisatör eller grupprumshanterare kan komma åt alla breakout-rum.
const breakoutRooms = breakoutRoomsFeature.breakoutRooms;
breakoutRooms.forEach((room)=>{
console.log(`- ${room.displayName}`);
});
Lista inbjudna
Microsoft 365-användare med rollorganisatör, medorganisatör eller grupprumshanterare kan komma åt deltagare som tilldelats enskilda breakout-rum.
breakoutRooms.forEach((room)=>{
console.log(`${room.displayName}`);
room.invitees.forEach((invitee) => {
console.log(`- ${invitee.id}`);
})
})
Gå med i breakout room
assignedBreakoutRoom
Om egenskapen autoMoveParticipantToBreakoutRoom
har angetts till true
flyttas användaren automatiskt till breakout-rummet när egenskapen state
är inställd på open
. Om autoMoveParticipantToBreakoutRoom
är inställt på false
använder du följande kod för att ansluta till breakout-rummet.
Detta utlöser breakoutRoomsUpdated
en händelse med en klass JoinBreakoutRoomsEvent
som har egenskapen type
inställd som join
. Du kan använda instansen av en klass call
i egenskapen data
för att hantera breakout room-samtal.
const breakoutRoom = breakoutRoomsFeature.assignedBreakoutRoom;
if(breakoutRoom.state == 'open' && !breakoutRoom.autoMoveParticipantToBreakoutRoom) {
const breakoutRoomCall = await breakoutRoom.join();
}
När användaren är i ett breakout-rum och organisatören tilldelar ett nytt breakout-rum till användaren, får breakoutRoomsUpdated
användaren händelsen med typen assignedBreakoutRooms
. Den här händelsen innehåller den senaste informationen om breakout-rummet. Användaren måste ha hangUp()
ett tidigare breakout-rumsanrop. Om autoMoveParticipantToBreakoutRoom
är inställt true
på flyttas användaren automatiskt, annars måste användaren anropa join
metoden explicit i det nya breakout-rummet.
//Breakout room which is assigned initially.
const breakoutRoom = breakoutRoomsFeature.assignedBreakoutRoom;
if(breakoutRoom.state == 'open' && !breakoutRoom.autoMoveParticipantToBreakoutRoom) {
const breakoutRoomCall = await breakoutRoom.join();
}
// `breakoutRoomsUpdated` event which contains the details of the new breakout room
let assignedRoom = undefined;
const breakoutRoomsUpdatedListener = (event) => {
switch(event.type) {
case "assignedBreakoutRooms":
const assignedRoom = event.data;
break;
}
}
if(assignedRoom.threadId != breakoutRoom.threadId && breakoutRooms != null)
{
await breakoutRoom.hangUp();
}
if(assignedRoom.state == 'open' && !assignedRoom.autoMoveParticipantToBreakoutRoom) {
const breakoutRoomCall = await assignedRoom.join();
}
Microsoft 365-användare med rollorganisatör, medorganisatör eller grupprumshanterare får listan över breakout-rum som skapats av grupprumschefen eller organisatören av huvudmötet. I det här fallet är beteendet något annorlunda. Den här användaren måste uttryckligen anropa join()
metoden för att ansluta till breakout-rummet. Användaren hålls undantagen i huvudmötet från början och tas slutligen bort från huvudmötet. Användaren måste initiera breakoutRooms-funktionen för att inordningen breakoutRoomCall
ska ta emot uppdateringar i breakout-rummet.
Om användaren vill ansluta till något av grupprummen anropar användaren uttryckligen join
metoden.
const breakoutRoom = breakoutRoomsFeature.breakoutRooms[0];
if(breakoutRoom.state == 'open') {
const breakoutRoomCall = await breakoutRoom.join();
}
Om du vill avsluta ett breakout-rum ska användarna köra hangUp()
funktionen i breakout room-anropet. Användaren anropar ReturnToMainMeeting
för att återuppta huvudmötessamtalet.
breakoutRoomCall.hangUp();
const mainMeetingCall = breakoutRoomCall.returnToMainMeeting();
Lämna breakout-rummet
När utbrytningsrummets tillstånd är closed
informeras användaren om slutet av breakout-rummet genom att assignedBreakoutRooms
ta emot händelsen breakoutRoomsUpdated
med klass AssignedBreakoutRoomsEvent
och egenskap type
som är lika med som anger att assignedBreakoutRoom
egenskapen har angetts state
till closed
. Användaren lämnar breakout-rummet automatiskt och kan återgå till huvudmötet genom att anropa returnToMainMeeting()
enligt ovan.
Om användaren vill lämna breakout-rummet redan innan rummet stängs och inställningarna breakoutRoomsFeature.breakoutRoomsSettings
för breakout-rummet har egenskapen disableReturnToMainMeeting
inställd false
på kan användaren återgå till huvudmötessamtalet med följande kod:
breakoutRoomCall.hangUp();
const mainMeetingCall = breakoutRoomCall.returnToMainMeeting();
Få deltagare i breakout-rummet
När du ansluter till breakout-rummet kan du använda följande kod för att hämta listan över fjärranslutna deltagare i breakout-rummet:
const breakoutRoomParticipants = [breakoutRoomCall.remoteParticipants.values()].map((p: SDK.RemoteParticipant) => { p.displayName || p.identifier });
console.log(`Participants of the breakoutRoom : <br/>" + breakoutRoomParticipants.join("<br/>")`);
Sluta ta emot breakout rooms-händelser
Använd följande kod för att sluta ta emot breakoutRooms-händelser.
breakoutRoomsFeature.off('breakoutRoomsUpdated', breakoutRoomsUpdatedListener);
Egenskaper för breakout-rum
Breakout-rum har följande egenskaper:
Kommentar
Följande exempelkod visar effektivt alla egenskaper för breakout-rum. Det är inte avsett att återanvändas som det visas. I praktiken använder du bara de egenskaper som behövs för ditt breakout room-scenario.
const displayName : string = breakoutRoom.displayName;
const threadId : string = breakoutRoom.threadId;
const state : BreakoutRoomState = breakoutRoom.state;
const autoMoveParticipantToBreakoutRoom : boolean = breakoutRoom.autoMoveParticipantToBreakoutRoom;
const call : Call | TeamsCall = breakoutRoom.call;
const invitees : Invitee[] = breakoutRoom.invitees;
Egenskaper för breakout-rum | beskrivning |
---|---|
displayName |
Namn på utbrytarrummet. Den här egenskapen är skrivskyddad. |
threadId |
Använd chatttråds-ID:t för att ansluta till chatten i breakout-rummet. Den här egenskapen är skrivskyddad. |
state |
Tillstånd för utbrytarrummet. Det kan vara antingen open eller closed . Användare skulle bara kunna ansluta till breakout-rummet när tillståndet är open . Den här egenskapen är skrivskyddad. |
autoMoveParticipantToBreakoutRoom |
Booleskt värde som anger om användarna flyttas till grupprum automatiskt när state av assignedBreakoutRoom är inställt på open . Den här egenskapen är skrivskyddad. I Teams användargränssnittsinställningar för breakout-rum kan organisatören, medorganisatören eller grupprumshanteraren justera den här specifika inställningen. Genom att true ställa in det här alternativet på överförs deltagarna automatiskt till sitt avsedda breakout-rum. Om du däremot anger den här egenskapen till false måste du manuellt anropa join metoden för att flytta deltagarna till breakout-rummet. |
call |
Utropsrumsanropsobjekt. Det här objektet returneras när användaren ansluter till utbrytningsrumsanropet automatiskt eller genom att anropa join metoden för assignedBreakoutRoom objektet. Den här egenskapen är skrivskyddad. |
invitees |
Listan över inbjudna som är tilldelade till breakout-rummet. Den här egenskapen är skrivskyddad. |
Inställningar för breakout-rum
Grupprum delar inställning som har följande egenskaper:
const disableReturnToMainMeeting : boolean = breakoutRoomsSettings.disableReturnToMainMeeting;
const roomEndTime : TimestampInfo = breakoutRoomsSettings.roomEndTime;
Egenskaper för breakout-rum | beskrivning |
---|---|
disableReturnToMainMeeting |
Inaktivera deltagare för att återgå till huvudmötet från utbrytarrummets samtal. Den här egenskapen är skrivskyddad. I Teams användargränssnittsinställningar för breakout-rum kan organisatören, medorganisatören eller grupprumshanteraren justera den här specifika inställningen för att styra när deltagaren i breakout-rum kan återvända till huvudmötet. |
roomEndTime |
Sluttid för breakout-rum som angetts av Microsoft 365-användaren med rollorganisatör, medorganisatör eller grupprumschef för huvudmötet. Den här egenskapen är skrivskyddad. |
Felsökning
Felkod | Underkod | Resultatkategori | Orsak | Åtgärd |
---|---|---|---|---|
400 | 46250 | ExpectedError | Funktionen Breakout Rooms är endast tillgänglig i Teams-möten. | Implementera din egen mekanism för breakout-rum eller använd Teams-möten. |
405 | 46251 | ExpectedError | Azure Communication Services har för närvarande inaktiverat den här funktionen. | Prova API:erna om ett par dagar. |
500 | 46254 | UnexpectedServerError | Det gick inte att ansluta till breakout-rummet på grund av ett oväntat fel. | Kontrollera att state metoden assignedBreakoutRoom är open och anropar breakoutRoomsFeature.assignedBreakoutRoom.join() explicit. Om problemet kvarstår samlar du in loggar för webbläsarkonsolen och kontaktar azure communication services-supporten. |
500 | 46255 | UnexpectedServerError | Det går inte att hålla huvudmötet. | Kontrollera att state metoden assignedBreakoutRoom är open och anropar breakoutRoomsFeature.assignedBreakoutRoom.join() explicit. Om problemet kvarstår samlar du in loggar för webbläsarkonsolen och kontaktar azure communication services-supporten. |
412 | 46256 | ExpectedError | Det går inte att ansluta till Breakout Room eftersom rummet är stängt. | Kontrollera att state metoden assignedBreakoutRoom är open och anropar breakoutRoomsFeature.assignedBreakoutRoom.join() explicit. |
412 | 46257 | UnexpectedServerError | Det går inte att återuppta huvudmötet. | Följ anvisningarna som definieras i avsnittet Leave breakout room för att lämna breakout-rummet manuellt. Om problemet kvarstår samlar du in loggar för webbläsarkonsolen och kontaktar azure communication services-supporten. |
412 | 46258 | UnexpectedClientError | Det går inte att läsa information om breakout-rummet. | Samla in webbläsarkonsolloggar och kontakta Azure Communication Services-supporten. |
500 | 46259 | UnexpectedServerError | Det gick inte att lägga på breakout-rumssamtalet. | Följ anvisningarna som definieras i avsnittet Leave breakout room för att lämna breakout-rummet manuellt. |
412 | 46260 | UnexpectedClientError | Det går inte att ansluta till Breakout Room eftersom det inte har tilldelats ännu. | Se till att breakoutRoomsFeature.assignedBreakoutRoom har information om det tilldelade breakout-rummet. Kontrollera att state metoden assignedBreakoutRoom är open och anropar breakoutRoomsFeature.assignedBreakoutRoom.join() explicit. |
412 | 46261 | UnexpectedClientError | Det går inte att ansluta till huvudmötet. | Försök igen genom att breakoutRoomsFeature.assignedBreakoutRoom.returnToMainMeeting() anropa metoden. Om problemet kvarstår samlar du in loggar för webbläsarkonsolen och kontaktar azure communication services-supporten. |
412 | 46262 | ExpectedError | Redan i huvudmötet. | Anropa bara den här metoden när deltagaren är i ett breakout-rum och tas bort från huvudmötet. |
412 | 46263 | UnexpectedClientError | Det gick inte att lägga på det befintliga upplåsningssamtalet i breakout-rummet. | Försök att anropa metoden hangup() igen för att lägga på anropet. Anropa join()-metoden för att ansluta till breakout-rummet igen. |