Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
- Ett Azure-konto med en aktiv prenumeration. Se Skapa ett konto kostnadsfritt.
- En distribuerad Communication Services-resurs. Se Skapa en resurs för kommunikationstjänster.
- 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 en Teams mötespolicy som möjliggör grupprum. Se Teams mötespolicy.
- 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.
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 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()
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 kopplasCall 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 exponerarCall Agent
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);
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 egenskapendata
för att återge information om alla breakout-rum. Den här klassen har en egenskaptype
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 egenskaptype
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 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 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. omassignedBreakoutRoom
egenskapen är inställdstate
på ochopen
är inställdautoMoveParticipantToBreakoutRoom
på ) eller när en användare uttryckligen ansluter till ett breakout-rum (dvs. anropar metodentrue
på instansenjoin
närassignedBreakoutRoom
är inställdautoMoveParticipantToBreakoutRoom
på ).false
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 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 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, 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 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 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. |