Dela via


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

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 deviceManagertill .

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 ogiltig Call 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ök Call Agent har exponerat connectionIssue 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 egenskapen data för att återge information om alla breakout-rum. Den här klassen har en egenskap type 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 egenskap type 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 egenskapen state är inställd på open, lämna breakout-rummet när egenskapen state är inställd på closedeller återge information om breakout-rummet. Den här klassen har en egenskap type 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. om assignedBreakoutRoom egenskapen är inställd open på och autoMoveParticipantToBreakoutRoom är inställd truepå ) eller när en användare uttryckligen ansluter till ett breakout-rum (dvs. anropar metoden join på instansen assignedBreakoutRoom när autoMoveParticipantToBreakoutRoom är inställd falsepå ).state Egenskapen data innehåller breakout room-instansen call , som utvecklare kan använda för att styra breakout room-samtal. Den här klassen har en egenskap type 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 trueflyttas användaren automatiskt till breakout-rummet när egenskapen state är inställd på open. Om autoMoveParticipantToBreakoutRoom är inställt på falseanvä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 truepå 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 closedinformeras 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 truestä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 falsemå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.

Nästa steg