Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
Esta característica de Azure Communication Services se encuentra actualmente en versión preliminar. Las características de la versión preliminar están disponibles públicamente y se pueden usar en todos los clientes nuevos y existentes de Microsoft.
Esta versión preliminar se ofrece sin un Acuerdo de Nivel de Servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que las funcionalidades estén restringidas.
Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.
Importante
Esta característica de Azure Communication Services se encuentra actualmente en versión preliminar. Las características de la versión preliminar están disponibles públicamente y se pueden usar en todos los clientes nuevos y existentes de Microsoft.
Esta versión preliminar se ofrece sin un Acuerdo de Nivel de Servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que las funcionalidades estén restringidas.
Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.
Importante
Esta característica de Azure Communication Services se encuentra actualmente en versión preliminar. Las características de la versión preliminar están disponibles públicamente y se pueden usar en todos los clientes nuevos y existentes de Microsoft.
Esta versión preliminar se ofrece sin un Acuerdo de Nivel de Servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que las funcionalidades estén restringidas.
Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.
En este artículo se describe cómo implementar la funcionalidad de sala de espera de reuniones de Teams mediante los SDK de llamadas de Azure Communication Service. Esta funcionalidad permite a los usuarios admitir y rechazar a los participantes de la sala de espera de Teams, recibir la notificación de ingreso a la sala de espera y obtener la lista de participantes de la sala de espera.
Requisitos previos
- Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
- Un recurso de Communication Services implementado. Cree un recurso de Communication Services.
- Un token de acceso de usuario para habilitar el cliente de llamada. Para más información, consulte Crear y administrar tokens de acceso.
- Opcional: Complete la guía de inicio rápido para agregar llamadas de voz a la aplicación.
El usuario llega a la sala de espera en función de la configuración de Microsoft Teams. Los controles se describen en Más información sobre la configuración de Teams .
Los usuarios de Microsoft 365 o Azure Communication Services pueden admitir o rechazar usuarios de la sala de espera, si están conectados a la reunión de Teams y tienen el rol organizador, coorganizador o moderador. Obtenga más información sobre los roles de reunión.
Para actualizar o comprobar las directivas actuales de unión a reuniones y lobby en el Centro de administración de Teams, consulte Más información sobre las directivas de Teams.
Apoyo
En las tablas siguientes se define la compatibilidad con la sala de espera en el SDK de llamadas de Azure Communication Services.
Identidades y tipos de llamadas
Identidades | Reuniones en Teams | Sala | Llamada individual 1:1 | Llamada grupal | Llamada de interoperabilidad de Teams individual | Llamada de interoperabilidad de Teams de grupo |
---|---|---|---|---|---|---|
Usuario de Communication Services | ✔️ | |||||
Usuario de Microsoft 365 | ✔️ |
Operaciones
Las funcionalidades del lobby del SDK de llamadas admiten las siguientes operaciones de API para los usuarios de Communication Services y Microsoft 365.
Operaciones | Usuario de Communication Services | Usuario de Microsoft 365 |
---|---|---|
admitir | ✔️* | ✔️* |
rechazar | ✔️* | ✔️* |
admitAll | ✔️* | ✔️* |
getParticipants | ✔️ | ✔️ |
lobbyParticipantsUpdated | ✔️ | ✔️ |
SDK
Aptitud | La web | Interfaz de Usuario Web | Ios | Interfaz de usuario de iOS | Androide | UI de Android | Windows |
---|---|---|---|---|---|---|---|
Compatible | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
* Solo el usuario de Communication Services y el usuario de Microsoft 365 asignaron el rol de organizador, coorganizador o moderador.
Importante
Estos ejemplos están disponibles en 1.15.1-beta.1 del SDK de llamadas para JavaScript. Asegúrese de usar esa versión o posterior al probar este inicio rápido.
Instalación del SDK
Use el comando npm install
para instalar los SDK comunes y de llamada de Azure Communication Services para JavaScript:
npm install @azure/communication-common --save
npm install @azure/communication-calling --save
Inicialización de los objetos necesarios
Se requiere una instancia de CallClient
para la mayoría de las operaciones de llamada. Al crear una nueva instancia de CallClient
, puede configurarla con opciones personalizadas, como una instancia de Logger
.
Con la instancia de CallClient
, puede crear una instancia de CallAgent
llamando al createCallAgent
. Este método devuelve un objeto de instancia CallAgent
de manera asincrónica.
El método createCallAgent
utiliza CommunicationTokenCredential
como argumento. Acepta un token de acceso de usuario.
Puede usar el método getDeviceManager
en la instancia de CallClient
para acceder a deviceManager
.
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()
Administración de la conectividad del SDK a la infraestructura de Microsoft
La instancia de Call Agent
le ayuda a administrar llamadas (para unirse o iniciar llamadas). Para trabajar con el SDK de llamadas, debe conectarse a la infraestructura de Microsoft para obtener notificaciones de llamadas entrantes y coordinar otros detalles de la llamada.
Call Agent
tiene dos posibles estados:
Conectado: un valor connectionStatue Call Agent
con estado Connected
significa que el SDK de cliente está conectado y es capaz de recibir notificaciones de la infraestructura de Microsoft.
Desconectado: un valor connectionStatue de Call Agent
con estado Disconnected
indica que hay un problema que impide que el SDK se conecte correctamente.
Call Agent
se debe volver a crear.
-
invalidToken
: si un token ha expirado o no es válido, la instancia deCall Agent
se desconecta con este error. -
connectionIssue
: si hay un problema cuando el cliente se conecta a la infraestructura de Microsoft, después de muchos reintentos,Call Agent
expone el errorconnectionIssue
.
Para comprobar si el Call Agent
local está conectado a la infraestructura de Microsoft, inspeccione el valor actual de la propiedad connectionState
. Durante una llamada activa, puede escuchar el evento connectionStateChanged
para determinar si Call Agent
cambia de Conectado a estado Desconectado.
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);
El objeto Lobby
en Call
o la clase TeamsCall
permiten a los usuarios acceder a la información de la sala de espera de Teams. Incluye las API, admit
, reject
y admitAll
, lo que permite al usuario admitir y rechazar a los participantes de la sala de espera de Teams. El usuario también podría obtener la colección participants
y suscribirse al evento lobbyParticipantsUpdated
para recibir la notificación.
Obtener objeto de la sala de espera
Lo primero es obtener el objeto Call
o TeamsCall
de admitter: Aprender a unirse a la reunión de Teams.
Puede obtener el objeto Lobby
del objeto Call
o de TeamsCall
.
const lobby = call.lobby;
Obtener las propiedades de los participantes de la sala de espera
Para saber quién está en la sala de espera, puede obtener la colección participants
del objeto Lobby
. Es una colección de objetos RemoteParticipant
con el estado InLobby
. Para obtener la colección participants
:
let lobbyParticipants = lobby.participants; // [remoteParticipant, remoteParticipant....]
Obtener el identificador de este participante remoto
Antes de admitir o rechazar al participante de la sala de espera, puede obtener el identificador de un participante remoto:
if(lobbyParticipants.length !== 0){
let remoteParticipant = lobbyParticipants[0];
}
//You could get the identifier from the Lobby.participants collection
//You could also get the identifier from the lobbyParticipantsUpdated event
const identifier = remoteParticipant.identifier;
identifier
puede ser uno de los siguientes tipos de CommunicationIdentifier
:
-
{ communicationUserId: '<COMMUNICATION_SERVICES_USER_ID'> }
: objeto que representa al usuario de Azure Communication Services. -
{ phoneNumber: '<PHONE_NUMBER>' }
: objeto que representa el número de teléfono en formato E.164. -
{ microsoftTeamsUserId: '<MICROSOFT_TEAMS_USER_ID>', isAnonymous?: boolean; cloud?: "public" | "dod" | "gcch" }
: objeto que representa al usuario de Teams. -
{ id: string }
: objeto que representa el identificador que no se ajusta a ninguno de los otros tipos de identificadores.
Uso de admit, reject y admitAll para los participantes en la sala de espera
Para admitir, rechazar o admitir a todos los usuarios de la sala de espera, puede usar los métodos admit
, reject
y admitAll
.
Son API asincrónicas. Para comprobar los resultados, se pueden usar agentes de escucha lobbyParticipantsUpdated
.
Puede admitir o rechazar desde la sala de espera llamando al método admit
y reject
. El método acepta identificadores MicrosoftTeamsUserIdentifier
, CommunicationUserIdentifier
, PhoneNumberIdentifier
o UnknownIdentifier
como entrada. También puede admitir a todos los usuarios desde la sala de espera si llama al método admitAll
.
//admit
await lobby.admit(identifier);
//reject
await lobby.reject(identifier);
//admitAll
await lobby.admitAll();
Controlar el evento actualizado de la sala de espera
Puede suscribirse al evento lobbyParticipantsUpdated
para controlar los cambios de la colección participants
. Este evento se desencadenará cuando los participantes se agreguen o quiten de la sala de espera y proporcionará la lista de participantes agregados o eliminados.
subscribeToCall = (call) => {
try {
//Subscribe to lobby's 'lobbyParticipantsUpdated' event for lobbyParticipants update.
call.lobby.on('lobbyParticipantsUpdated', lobbyParticipantsUpdatedHandler);
} catch (error) {
console.error(error);
}
}
const lobbyParticipantsUpdatedHandler = (event) => {
event.added.forEach(remoteParticipant => {
console.log(`${remoteParticipant._displayName} joins the lobby`);
});
event.removed.forEach(remoteParticipant => {
console.log(`${remoteParticipant._displayName} leaves the lobby`);
})
};
Instalación del SDK
Busque el archivo build.gradle
de nivel de proyecto y agregue mavenCentral()
a la lista de repositorios en buildscript
y allprojects
:
buildscript {
repositories {
...
mavenCentral()
...
}
}
allprojects {
repositories {
...
mavenCentral()
...
}
}
Luego, en el archivo build.gradle
de nivel de módulo, agregue las siguientes líneas a la sección dependencies
:
dependencies {
...
implementation 'com.azure.android:azure-communication-calling:1.0.0'
...
}
Inicialización de los objetos necesarios
Para crear una instancia de CallAgent
, debe llamar al método createCallAgent
en una instancia de CallClient
. Esta llamada devuelve un objeto de instancia de CallAgent
de manera asincrónica.
El método createCallAgent
toma CommunicationUserCredential
como argumento, que encapsula un token de acceso.
Para acceder a DeviceManager
, primero debe crear una instancia de callAgent
. A continuación, puede usar el método CallClient.getDeviceManager
para obtener DeviceManager
.
String userToken = '<user token>';
CallClient callClient = new CallClient();
CommunicationTokenCredential tokenCredential = new CommunicationTokenCredential(userToken);
android.content.Context appContext = this.getApplicationContext(); // From within an activity, for instance
CallAgent callAgent = callClient.createCallAgent(appContext, tokenCredential).get();
DeviceManager deviceManager = callClient.getDeviceManager(appContext).get();
Para establecer un nombre para mostrar para el autor de la llamada, use este método alternativo:
String userToken = '<user token>';
CallClient callClient = new CallClient();
CommunicationTokenCredential tokenCredential = new CommunicationTokenCredential(userToken);
android.content.Context appContext = this.getApplicationContext(); // From within an activity, for instance
CallAgentOptions callAgentOptions = new CallAgentOptions();
callAgentOptions.setDisplayName("Alice Bob");
DeviceManager deviceManager = callClient.getDeviceManager(appContext).get();
CallAgent callAgent = callClient.createCallAgent(appContext, tokenCredential, callAgentOptions).get();
El objeto CallLobby
en Call
o la clase TeamsCall
permiten a los usuarios acceder a la información de la sala de espera de Teams. Incluye las API, admit
, reject
y admitAll
, lo que permite al usuario admitir y rechazar a los participantes de la sala de espera de Teams. El usuario también puede obtener la colección participants
y suscribir el agente de escucha de eventos addOnLobbyParticipantsUpdatedListener
para recibir la notificación.
Obtener el objeto CallLobby
Lo primero es obtener el objeto CallLobby
de la instancia de llamada:
private CallLobby callLobby;
callLobby = call.getCallLobby();
Obtener las propiedades de los participantes de la sala de espera
Para saber quién está en la sala de espera, puede obtener la colección participants
del objeto CallLobby
. Es una colección de objetos RemoteParticipant
con el estado InLobby
. Para obtener la colección participants
:
List<RemoteParticipant> lobbyParticipants = callLobby.getParticipants();
Obtener el identificador de este participante remoto
Antes de admitir o rechazar al participante de la sala de espera, debe obtener el identificador de un participante remoto:
//You could get the identifier from the lobby participants collection
//You could also get the identifier from the addOnLobbyParticipantsUpdatedListener event
List<CommunicationIdentifier> identifiers = new ArrayList<>();
CommunicationUserIdentifier acsUser = new CommunicationUserIdentifier(<USER_ID>);
MicrosoftTeamsUserIdentifier teamsUser = new MicrosoftTeamsUserIdentifier(<USER_ID>);
identifiers.add(new CommunicationUserIdentifier("<USER_ID>"));
identifiers.add(new MicrosoftTeamsUserIdentifier("<USER_ID>"));
Admitir participante de CallLobby
El objeto CallLobby permite al usuario con los roles de organizador, coorganizador y moderador admitir a participantes de CallLobby de Teams. El método admit
acepta la colección identifiers como entrada y devuelve el objeto AdmitParticipantsResult
como resultado.
AdmitParticipantsResult result = this.callLobby.admit(identifiers).get();
String failedParticipants = this.convertListToString("", result.getFailedParticipants());
Log.i(LOBBY_TAG, String.format("Admit result: success count: %s, failure count: %s, failure participants: %s", admitResult.getSuccessCount(), failedParticipants.length(), failedParticipants));
Rechazar participante de CallLobby
El objeto MeetingLobby permite al usuario con los roles de organizador, coorganizador y presentador rechazar a un participante del MeetingLobby de Teams. El método reject
acepta el identificador como entrada.
//To reject all participants from CallLobby:
for (CommunicationIdentifier identifier : identifiers)
{
this.callLobby.reject(lobbyParticipantsIdentifiers.get(0)).get();
}
Admitir a todos los participantes de CallLobby
El objeto MeetingLobby permite al usuario con los roles de organizador, coorganizador y moderador admitir a todos los participantes del Lobby de reunión de Teams. El método admitAll
devuelve el objeto AdmitAllParticipantsResult
como resultado.
AdmitAllParticipantsResult result = this.callLobby.admitAll().get();
Log.i(LOBBY_TAG, String.format("Admit result: success count: %s, failure count: %s, failure participants: %s", result.getSuccessCount(), result.getFailureCount()));
Gestionar el evento de actualización de CallLobby
Puede suscribirse al agente de escucha de eventos de addOnLobbyParticipantsUpdatedListener
para controlar los cambios de la colección de participants
. Este evento se desencadena cuando los participantes se agregan o quitan de CallLobby y proporciona la lista de participantes agregados o eliminados.
//To register listener:
this.callLobby.addOnLobbyParticipantsUpdatedListener(this::OnLobbyParticipantsUpdated);
private void OnLobbyParticipantsUpdated(ParticipantsUpdatedEvent args) {
if(!args.getAddedParticipants().isEmpty()){
for(RemoteParticipant addedParticipant : args.getAddedParticipants()){
Log.i(TAG, String.format("Participant %s joins lobby", addedParticipant.getDisplayName()));
}
}
if(!args.getRemovedParticipants().isEmpty()){
for(RemoteParticipant removedParticipant : args.getRemovedParticipants()){
Log.i(TAG, String.format("Participant %s leaves lobby", removedParticipant.getDisplayName()));
}
}
}
//To unregister listener:
lobby.removeOnLobbyParticipantsUpdatedListener(this::OnLobbyParticipantsUpdated);
Configuración del sistema
Siga estos pasos para configurar el sistema.
Creación del proyecto de Xcode
En Xcode, cree un nuevo proyecto de iOS y seleccione la plantilla aplicación de vista única. En este artículo se usa el marco SwiftUI, por lo que debe establecer el Lenguaje en Swift y la Interfaz en SwiftUI.
No va a crear pruebas en este artículo. Puede desactivar la casilla Incluir pruebas.
Instalación del paquete y las dependencias mediante CocoaPods
Cree un Podfile para la aplicación, como en este ejemplo:
platform :ios, '13.0' use_frameworks! target 'AzureCommunicationCallingSample' do pod 'AzureCommunicationCalling', '~> 1.0.0' end
Ejecute
pod install
.Abra
.xcworkspace
mediante Xcode.
Solicitud de acceso al micrófono
Para acceder al micrófono del dispositivo, debe actualizar la lista de propiedades de información de la aplicación mediante NSMicrophoneUsageDescription
. Establezca el valor asociado en una cadena que se incluye en el cuadro de diálogo empleado por el sistema para solicitar acceso al usuario.
Haga clic con el botón derecho en la entrada Info.plist del árbol del proyecto y seleccione Abrir como>Código fuente. Agregue las líneas siguientes a la sección <dict>
de nivel superior y guarde el archivo.
<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>
Instalación del marco de la aplicación
Abra el archivo ContentView.swift
del proyecto. Agregue una declaración import
a la parte superior del archivo para importar la biblioteca AzureCommunicationCalling
. Además, importe AVFoundation
. Necesitas esto para las solicitudes de permiso de audio en el código.
import AzureCommunicationCalling
import AVFoundation
Inicialización de CallAgent
Para crear una instancia de CallAgent
a partir de CallClient
, debe usar el método callClient.createCallAgent
, que devuelve de manera asincrónica un objeto CallAgent
después de que se inicializa.
Para crear un cliente de llamada, pase un objeto CommunicationTokenCredential
:
import AzureCommunication
let tokenString = "token_string"
var userCredential: CommunicationTokenCredential?
do {
let options = CommunicationTokenRefreshOptions(initialToken: token, refreshProactively: true, tokenRefresher: self.fetchTokenSync)
userCredential = try CommunicationTokenCredential(withOptions: options)
} catch {
updates("Couldn't created Credential object", false)
initializationDispatchGroup!.leave()
return
}
// tokenProvider needs to be implemented by Contoso, which fetches a new token
public func fetchTokenSync(then onCompletion: TokenRefreshOnCompletion) {
let newToken = self.tokenProvider!.fetchNewToken()
onCompletion(newToken, nil)
}
Pase el objeto CommunicationTokenCredential
que ha creado a CallClient
y establezca el nombre para mostrar:
self.callClient = CallClient()
let callAgentOptions = CallAgentOptions()
options.displayName = " iOS Azure Communication Services User"
self.callClient!.createCallAgent(userCredential: userCredential!,
options: callAgentOptions) { (callAgent, error) in
if error == nil {
print("Create agent succeeded")
self.callAgent = callAgent
} else {
print("Create agent failed")
}
})
El objeto CallLobby
en Call
o la clase TeamsCall
permiten a los usuarios acceder a la información de la sala de espera de Teams. Incluye las API, admit
, reject
y admitAll
, lo que permite al usuario admitir y rechazar a los participantes de la sala de espera de Teams. El usuario también puede obtener la colección participants
y suscribirse al agente de escucha de eventos para recibir notificaciones.
Obtener el objeto CallLobby
Lo primero es obtener el objeto CallLobby
de la instancia de llamada:
@State var callLobby: CallLobby?
callLobby = self.call!.callLobby
Obtener las propiedades de los participantes de la sala de espera
Para saber quién está en la sala de espera, puede obtener la colección participants
del objeto CallLobby
. Es una colección de objetos RemoteParticipant
con el estado InLobby
. Para obtener la colección participants
:
let lobbyParticipants = callLobby.participants
Obtener el identificador de este participante remoto
Antes de admitir o rechazar el participante de CallLobby, debe obtener el identificador de un participante remoto:
//You could get the identifier from the lobby participants collection
//You could also get the identifier from the addOnLobbyParticipantsUpdatedListener event
let identifiers = (call?.callLobby.participants.map {$0.identifier})!;
Admitir participante de CallLobby
El objeto CallLobby permite al usuario con los roles de organizador, coorganizador y moderador admitir a participantes de CallLobby de Teams. El método admit
acepta la colección identifiers como entrada y devuelve el objeto AdmitParticipantsResult
como resultado.
callLobby.admit(identifiers: identifiers, completionHandler: { result, error in
if error != nil {
print ("Admit participant is failed %@", error! as Error)
} else{
print ("Admit result. success count: %s , failure count: %s, failure participants: %s", result.successCount, result.failureCount, result.failureParticipants)
}
})
Rechazar participante de CallLobby
El objeto CallLobby permite al usuario con los roles de organizador, coorganizador y moderador rechazar al participante de Teams de CallLobby. El método reject
acepta el identificador.
//To reject participant from CallLobby:
callLobby.reject(identifiers.first!, completionHandler: { error in
if error != nil {
print ("Reject all participants is failed %@", error! as Error)
}
})
Admitir a todos los participantes de CallLobby
El objeto CallLobby permite al usuario con los roles de organizador, coorganizador y moderador admitir a todos los participantes de CallLobby de Teams. El método admitAll
devuelve el objeto AdmitAllParticipantsResult
como resultado.
callLobby.admitAll(completionHandler: { result, error in
if error != nil {
print ("Admit all participants is failed %@", error! as Error)
} else{
print ("AdmitAll result. success count: %s , failure count: %s", result.successCount, result.failureCount)
}
})
Gestionar el evento de actualización de CallLobby
Puede suscribirse al agente de escucha de eventos para controlar los cambios de la colección participants
. Este evento se desencadena cuando los participantes se agregan o quitan de CallLobby y proporciona la lista de participantes agregados o eliminados.
//To register listener:
self.callObserver = CallObserver(view:self)
callLobby = self.call!.callLobby
callLobby!.delegate = self.callObserver
public class CallObserver : NSObject, CallLobbyDelegate
{
public func callLobby(_ callLobby: CallLobby, didUpdateLobbyParticipants args: ParticipantsUpdatedEventArgs) {
args.removedParticipants.forEach { p in
let mri = Utilities.toMri(p.identifier)
os_log("==>Participants %d is removed from the lobby.", log:log, mri)
}
args.addedParticipants.forEach { p in
let mri = Utilities.toMri(p.identifier)
os_log("==>Participants %d is added to the lobby.", log:log, mri)
}
}
}
//To unregister listener, you can use the `off` method.
self.callLobby?.delegate = nil
Configuración del sistema
Siga estos pasos para configurar el sistema.
Creación del proyecto de Visual Studio
Para una aplicación de la Plataforma Universal de Windows, en Visual Studio 2022, cree un nuevo proyecto de Aplicación Vacía (Universal Windows). Después de escribir el nombre del proyecto, puede elegir cualquier Windows SDK posterior a 10.0.17763.0.
En el caso de una aplicación WinUI 3, cree un nuevo proyecto con la plantilla Aplicación vacía, empaquetada (WinUI 3 en escritorio) para configurar una aplicación WinUI 3 de una sola página. Se requiere la versión 1.3 o posterior del SDK de aplicaciones de Windows.
Instalación del paquete y las dependencias mediante el Administrador de paquetes NuGet
Las APIs y bibliotecas del SDK para llamadas están disponibles para el público a través de un paquete NuGet.
Para buscar, descargar e instalar el paquete NuGet del SDK de llamadas:
- Abra el Administrador de paquetes NuGet desde Herramientas>Administrador de paquetes NuGet>Administrar paquetes NuGet para la solución.
- Seleccione Explorar y, después, escriba Azure.Communication.Calling.WindowsClient en el cuadro de búsqueda.
- Asegúrese de que la casilla Incluir versión preliminar esté activada.
- Seleccione el paquete Azure.Communication.Calling.WindowsClient y, después, Azure.Communication.Calling.WindowsClient 1.4.0-beta.1 o una versión más reciente.
- Seleccione la casilla correspondiente al proyecto de Azure Communication Services en el panel derecho.
- Seleccione Instalar.
El objeto CallLobby
en Call
o la clase TeamsCall
permiten a los usuarios acceder a la información de la sala de espera de Teams. Incluye las API, AdmitAsync
, RejectAsync
y AdmitAllAsync
, lo que permite al usuario admitir y rechazar a los participantes de la sala de espera de Teams. El usuario también podría obtener la colección Participants
y suscribirse al evento LobbyParticipantsUpdated
para recibir la notificación.
Obtener el objeto CallLobby
Lo primero es obtener el objeto CallLobby
de la instancia de llamada:
private CallLobby callLobby;
callLobby = call.CallLobby;
Obtener las propiedades de los participantes de la sala de espera
Para saber quién está en la sala de espera, puede obtener la colección Participants
del objeto CallLobby
. Es una colección de objetos RemoteParticipant
con el estado InLobby
. Para obtener la colección Participants
:
var lobbyParticipants = callLobby.Participants;
Obtener el identificador de este participante remoto
Antes de admitir o rechazar el participante de CallLobby, debe obtener el identificador de un participante remoto:
//You could get the identifier from the CallLobby.Participants collection
//You could also get the identifier from the LobbyParticipantsUpdated event
var identifiers = lobbyParticipants.Select(p => p.Identifier).ToList().AsReadOnly();
Admitir participante de CallLobby
El objeto CallLobby permite al usuario con los roles de organizador, coorganizador y moderador admitir a participantes de CallLobby de Teams. El método AdmitAsync
acepta la colección identifiers como entrada y devuelve el objeto AdmitParticipantsResult
como resultado.
AdmitParticipantsResult result = await callLobby?.AdmitAsync(identifiers);
Trace.WriteLine("Admit result. success count: " + result.SuccessCount + ", failure count: " + result.FailedParticipants.Count + ", failure participants: " + result.FailedParticipants);
foreach (RemoteParticipant participant in result.FailureParticipants.ToList<RemoteParticipant>())
{
Trace.WriteLine("Admit participant: " + participant.DisplayName + " failed ");
}
Rechazar participante de CallLobby
El objeto CallLobby permite al usuario con los roles de organizador, coorganizador y moderador rechazar al participante de Teams de CallLobby. El método RejectAsync
acepta el identificador como entrada.
//To reject all participants from CallLobby:
foreach (CallIdentifier identifier in identifiers)
{
await callLobby?.RejectAsync(identifier);
}
Admitir a todos los participantes de CallLobby
El objeto CallLobby permite al usuario con los roles de organizador, coorganizador y moderador admitir a todos los participantes de CallLobby de Teams. El método AdmitAllAsync
devuelve el objeto AdmitAllParticipantsResult
como resultado.
AdmitAllParticipantsResult result = await callLobby?.AdmitAllAsync();
Trace.WriteLine("Admit all result. success count: " + result.SuccessCount + ", failure count: " + result.FailureCount);
Gestionar el evento de actualización de CallLobby
Puede suscribirse al evento LobbyParticipantsUpdated
para controlar los cambios de la colección Participants
. Este evento se desencadena cuando los participantes se agregan o quitan de CallLobby y proporciona la lista de participantes agregados o eliminados.
//When call.State == CallState.Connected
callLobby.LobbyParticipantsUpdated += CallLobby_OnLobbyParticipantsUpdated;
private async void CallLobby_OnLobbyParticipantsUpdated(object sender, ParticipantsUpdatedEventArgs args)
{
foreach (var remoteParticipant in args.AddedParticipants.ToList<RemoteParticipant>()){
Trace.WriteLine("Participant: " + participant.DisplayName + " joins lobby ");
}
foreach (var remoteParticipant in args.RemovedParticipants.ToList<RemoteParticipant>()){
Trace.WriteLine("Participant: " + participant.DisplayName + " leaves lobby ");
}
}