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ötespolicy. 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.

Stöd

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 interoperabilitets-samtal Grupp Teams-interoperabilitetssamtal
Communication Services-användare ✔️
Microsoft 365-användare ✔️

Operativa åtgärder

I följande tabell visas stöd för enskilda API:er i anropande SDK som är relaterade till enskilda identitetstyper.

Operativa åtgärder 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 grupprum
Delta i grupprumschatt ✔️ [2]
Hämta inställningar för breakout-rum ✔️ ✔️

[1] Endast Microsoft 365–användare med roll som organisatö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 finns i det tilldelade breakout-rumsobjektet.

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()

Hantera SDK-anslutning till Microsoft-infrastruktur

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. Din 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 värde för anslutningsstatus med Call Agent anger att det finns ett problem som hindrar SDK:n från att ansluta korrekt. Call Agent ska återskapas.

  • invalidToken: Om en åtkomsttoken har upphört att gälla eller om token är ogiltig kopplas Call Agent instansen från med det här felet.
  • connectionIssue: Om det finns ett problem med att klienten ansluter till Microsoft-infrastrukturen, efter många återförsök exponerar Call AgentconnectionIssue-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);

Införa grupprum

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 rollen organisatör, samorganisatör eller grupprumshanterare skapar eller uppdaterar grupprum. 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 lika med "breakoutRooms".

      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 visa tiden när breakout-rummet avslutas eller bestämma om en knapp ska visas för att ansluta till huvudrummet. Den här klassen har en egenskap type som är lika med "breakoutRoomSettings".

      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 en användare tilldelas till ett grupprum, eller när tilldelningen av grupprummet 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 lika med "assignedBreakoutRoom".

      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 state på och open är inställd autoMoveParticipantToBreakoutRoompå ) eller när en användare uttryckligen ansluter till ett breakout-rum (dvs. anropar metoden true på instansen join när assignedBreakoutRoom är inställd autoMoveParticipantToBreakoutRoompå ).false 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 lika med "join".

      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, får användaren händelsen breakoutRoomsUpdated med typen assignedBreakoutRooms. Den här händelsen innehåller den senaste informationen om breakout-rummet. Användaren måste göra ett tidigare hangUp() breakout-rumssamtal. Om autoMoveParticipantToBreakoutRoom är inställt på true, flyttas användaren automatiskt, annars måste användaren uttryckligen anropa join-metoden i det nya grupprummet.

//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 metoden join() 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 funktionen breakoutRooms på breakoutRoomCall för att få uppdateringar om 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();
}

För att avsluta ett grupperum ska användarna köra hangUp()-funktionen i grupperumsanropet. 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 rummet genom att ta emot händelsen breakoutRoomsUpdated med klassen AssignedBreakoutRoomsEvent och egenskapen type lika med assignedBreakoutRooms, vilket anger att assignedBreakoutRoom har egenskapen state inställd på 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();

Hämta 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 anges av Microsoft 365-användaren med rollen som organisatör, medorganisatör eller ansvarig för breakout-rum i huvudmötet. Den här egenskapen är skrivskyddad.

Felsökning

Felkod Underkod Resultatkategori Orsak Åtgärd
400 46250 FörväntatFel Funktionen Breakout Rooms är endast tillgänglig i Teams-möten. Implementera din egen grupprumsmekanism eller använd Teams-möten.
405 46251 FörväntatFel Azure Communication Services har för närvarande inaktiverat den här funktionen. Prova API:erna om ett par dagar.
500 46254 Oväntat serverfel Det gick inte att ansluta till breakout-rummet på grund av ett oväntat fel. Kontrollera att state är assignedBreakoutRoom och anropa open-metoden explicit. Om problemet kvarstår samlar du in loggar för webbläsarkonsolen och kontaktar azure communication services-supporten.
500 46255 Oväntat serverfel Det går inte att hålla huvudmötet. Kontrollera att state är assignedBreakoutRoom och anropa open-metoden explicit. Om problemet kvarstår samlar du in loggar för webbläsarkonsolen och kontaktar azure communication services-supporten.
412 46256 FörväntatFel Det går inte att ansluta till Breakout Room eftersom rummet är stängt. Kontrollera att state är assignedBreakoutRoom och anropa open-metoden explicit.
412 46257 Oväntat serverfel Det går inte att återuppta huvudmötet. Följ anvisningarna som definieras i avsnittet Leave breakout room för att gå ut ur grupprummet manuellt. Om problemet kvarstår samlar du in loggar för webbläsarkonsolen och kontaktar azure communication services-supporten.
412 46258 OväntatKlientfel Det går inte att läsa information om breakout-rummet. Samla in webbläsarkonsolloggar och kontakta Azure Communication Services-supporten.
500 46259 Oväntat serverfel Det gick inte att lägga på breakout-rumssamtalet. Följ anvisningarna som definieras i avsnittet Leave breakout room för att gå ut ur grupprummet manuellt.
412 46 260 OväntatKlientfel 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 är assignedBreakoutRoom och anropa open-metoden explicit.
412 46261 OväntatKlientfel 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 FörväntatFel 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 OväntatKlientfel Det gick inte att avsluta samtalet i det befintliga grupprummet. 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