Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Внимание
Эта функция Службы коммуникации Azure сейчас доступна в предварительной версии. Функции в предварительной версии общедоступны и могут использоваться всеми новыми и существующими клиентами Майкрософт.
Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Ее не следует использовать для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или могут быть ограничены.
Дополнительные сведения см. в дополнительных условиях использования для предварительных версий Microsoft Azure.
Внимание
Эта функция Службы коммуникации Azure сейчас доступна в предварительной версии. Функции в предварительной версии общедоступны и могут использоваться всеми новыми и существующими клиентами Майкрософт.
Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Ее не следует использовать для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или могут быть ограничены.
Дополнительные сведения см. в дополнительных условиях использования для предварительных версий Microsoft Azure.
Внимание
Эта функция Службы коммуникации Azure сейчас доступна в предварительной версии. Функции в предварительной версии общедоступны и могут использоваться всеми новыми и существующими клиентами Майкрософт.
Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Ее не следует использовать для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или могут быть ограничены.
Дополнительные сведения см. в дополнительных условиях использования для предварительных версий Microsoft Azure.
В этой статье описывается, как реализовать возможность использования вестибюля для собраний Teams с помощью SDK для вызовов службы коммуникации Azure. Эта возможность позволяет пользователям принимать и отклонять участников в зале ожидания Teams, получать уведомление о присоединении к залу ожидания и получать список участников зала ожидания.
Предварительные условия
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно.
- Развернутый ресурс служб связи. Создайте ресурс служб коммуникации.
- Токен доступа пользователя для активации клиента, осуществляющего вызов. Дополнительные сведения см. в статье "Создание маркеров доступа и управление ими".
- Необязательно: Выполните быстрый старт, чтобы добавить функцию голосового вызова в ваше приложение.
Пользователь попадает в лобби в зависимости от конфигурации Microsoft Teams. Элементы управления описаны в разделе "Дополнительные сведения о конфигурации Teams ".
Пользователи Служб коммуникации Microsoft 365 или Azure могут признать или отклонить пользователей из лобби, если они подключены к собранию Teams и имеют роль организатора, соорганизатора или докладчика. Узнайте больше о ролях на собраниях.
Чтобы обновить или проверить текущие политики присоединения к собранию и лобби в Центре администрирования Teams, см. дополнительные сведения о политиках Teams.
Поддержка
В следующих таблицах определяется поддержка лобби в пакете SDK для вызовов служб коммуникации Azure.
Идентичности и типы вызовов
Идентичности | Совещание в "Teams" | Комната | Личный разговор 1:1 | Групповой звонок | Вызов для взаимодействия команд в режиме 1:1 | Вызов взаимодействия в группах Teams |
---|---|---|---|---|---|---|
пользователь Служб связи | ✔️ | |||||
Пользователь Microsoft 365 | ✔️ |
Операции
Возможности "Лобби пакета SDK для вызовов" поддерживают следующие операции API как для служб коммуникации, так и для пользователей Microsoft 365.
Операции | пользователь Служб связи | Пользователь Microsoft 365 |
---|---|---|
признавать | ✔️* | ✔️* |
отклонять | ✔️* | ✔️* |
разрешитьВсе | ✔️* | ✔️* |
getParticipants | ✔️ | ✔️ |
обновленыУчастникиЛобби | ✔️ | ✔️ |
Пакеты SDK
Способность | Интернет | Веб-интерфейс | iOS | Пользовательский интерфейс iOS | Андроид | Пользовательский интерфейс Android | Виндоус |
---|---|---|---|---|---|---|---|
Поддерживается | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
* Только пользователь служб коммуникации и пользователь Microsoft 365 назначил роль организатора, соорганизатора или докладчика.
Внимание
Примеры доступны в версии 1.15.1-beta.1 пакета SDK для JavaScript. Не забудьте использовать эту версию или более новую, выполняя это краткое руководство.
Установка пакета SDK
npm install
Используйте команду для установки пакета SDK Службы коммуникации Azure Common and Calling SDK для JavaScript:
npm install @azure/communication-common --save
npm install @azure/communication-calling --save
Инициализация обязательных объектов
Экземпляр CallClient
необходим для большинства операций вызова. При создании нового экземпляра CallClient
вы можете настроить его, используя такие пользовательские параметры, как экземпляр Logger
.
С помощью экземпляра CallClient
вы можете создать экземпляр CallAgent
, вызвав createCallAgent
. Этот метод асинхронно возвращает объект экземпляра CallAgent
.
Метод createCallAgent
использует CommunicationTokenCredential
в качестве аргумента. Он принимает маркер доступа пользователя.
Можно применить метод getDeviceManager
для экземпляра CallClient
, чтобы получить доступ к 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()
Управление подключением пакета SDK к инфраструктуре Майкрософт
Экземпляр Call Agent
помогает управлять вызовами (для присоединения или запуска вызовов). Для работы пакета SDK для вызова необходимо подключиться к инфраструктуре Майкрософт для получения уведомлений о входящих звонках и координации других сведений о вызове. У вашего Call Agent
два возможных состояния:
Подключено — Call Agent
значение Connected
connectionStatue означает, что клиентский пакет SDK подключен и способен получать уведомления из инфраструктуры Майкрософт.
Отключено — Call Agent
значение connectionStatue из Disconnected
указывает на проблему, которая мешает правильному подключению SDK.
Call Agent
необходимо повторно создать.
-
invalidToken
: если срок действия токена истек или он недействителен,Call Agent
экземпляр отключается с этой ошибкой. -
connectionIssue
: если у клиента возникла проблема с подключением к инфраструктуре Майкрософт, после многочисленных повторных попытокCall Agent
возникаетconnectionIssue
ошибка.
Вы можете проверить, подключен ли локальный сервер Call Agent
к инфраструктуре Майкрософт, проверив текущее значение connectionState
свойства. Во время активного вызова вы можете прослушивать событие connectionStateChanged
, чтобы определить, меняется ли Call Agent
состояние с Подключено на Отключено.
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);
Объект Lobby
, на классе Call
или TeamsCall
, позволяет пользователям получать доступ к информации о лобби для собраний Teams. Он включает API, admit
, reject
и admitAll
, позволяющие пользователю допустить или отклонить участников из лобби собрания в Teams. Пользователь также может получить коллекцию participants
и подписаться на lobbyParticipantsUpdated
событие для получения уведомления.
Получение объекта лобби
Первое, что нужно сделать, — это получить объект Call
или TeamsCall
от допускающего: Узнайте, как присоединиться к собранию в Teams.
Объект можно получить Lobby
из Call
или TeamsCall
объекта.
const lobby = call.lobby;
Получение свойств участников лобби
Чтобы узнать, кто находится в лобби, вы можете получить коллекцию participants
из Lobby
объекта. Это коллекция RemoteParticipant
объекта с InLobby
состоянием. Чтобы получить коллекцию participants
, выполните следующие действия.
let lobbyParticipants = lobby.participants; // [remoteParticipant, remoteParticipant....]
Получение идентификатора удаленного участника
Перед признанием или отклонением участника из лобби можно получить идентификатор удаленного участника:
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
может быть один из следующих CommunicationIdentifier
типов:
-
{ communicationUserId: '<COMMUNICATION_SERVICES_USER_ID'> }
: объект, представляющий пользователя Службы коммуникации Azure. -
{ phoneNumber: '<PHONE_NUMBER>' }
: объект, представляющий номер телефона в формате E.164. -
{ microsoftTeamsUserId: '<MICROSOFT_TEAMS_USER_ID>', isAnonymous?: boolean; cloud?: "public" | "dod" | "gcch" }
: объект, представляющий пользователя Teams. -
{ id: string }
: объект, представляющий идентификатор, который не соответствует ни одному из других типов идентификаторов.
Прием, отклонение и признание участника из лобби
Чтобы впустить, отклонить или впустить всех пользователей из лобби, можно использовать методы admit
, reject
и admitAll
.
Асинхронные API могут использоваться прослушивателями для проверки результатов lobbyParticipantsUpdated
.
Вы можете допустить или отклонить в лобби, вызвав методы admit
и reject
. Метод принимает идентификаторы MicrosoftTeamsUserIdentifier
, CommunicationUserIdentifier
, PhoneNumberIdentifier
или UnknownIdentifier
в качестве входных данных. Вы также можете допустить всех пользователей из лобби, вызвав метод admitAll
.
//admit
await lobby.admit(identifier);
//reject
await lobby.reject(identifier);
//admitAll
await lobby.admitAll();
Обработка события обновления лобби
Вы можете подписаться на событие lobbyParticipantsUpdated
для обработки изменений в коллекции participants
. Это событие будет активировано при добавлении или удалении участников из лобби, и он предоставит добавленный или удаленный список участников.
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`);
})
};
Установка пакета SDK
Найдите файл build.gradle
на уровне проекта и добавьте mavenCentral()
в список репозиториев в разделах buildscript
и allprojects
:
buildscript {
repositories {
...
mavenCentral()
...
}
}
allprojects {
repositories {
...
mavenCentral()
...
}
}
Затем в файле вашего модуля build.gradle
добавьте следующие строки в раздел dependencies
:
dependencies {
...
implementation 'com.azure.android:azure-communication-calling:1.0.0'
...
}
Инициализируйте требуемые объекты
Чтобы создать CallAgent
экземпляр, необходимо вызвать метод createCallAgent
на экземпляре CallClient
. Этот вызов асинхронно возвращает объект экземпляра CallAgent
.
Метод createCallAgent
принимает CommunicationUserCredential
в качестве аргумента, который инкапсулирует маркер доступа.
Чтобы получить доступ к DeviceManager
, сначала необходимо создать callAgent
объект. Затем можно использовать CallClient.getDeviceManager
метод для получения 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();
Чтобы задать отображаемое имя для вызывающей стороны, используйте следующий альтернативный метод:
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();
Объект CallLobby
, на классе Call
или TeamsCall
, позволяет пользователям получать доступ к информации о лобби для собраний Teams. Он включает API, admit
, reject
и admitAll
, позволяющие пользователю допустить или отклонить участников из лобби собрания в Teams. Пользователь также может получить коллекцию participants
и подписаться на addOnLobbyParticipantsUpdatedListener
прослушиватель событий для получения уведомлений.
Получение объекта CallLobby
Первое — это получить объект CallLobby
из экземпляра вызова.
private CallLobby callLobby;
callLobby = call.getCallLobby();
Получение свойств участников лобби
Чтобы узнать, кто находится в лобби, вы можете получить коллекцию participants
из CallLobby
объекта. Это коллекция RemoteParticipant
объекта с InLobby
состоянием. Чтобы получить коллекцию participants
, выполните следующие действия.
List<RemoteParticipant> lobbyParticipants = callLobby.getParticipants();
Получение идентификатора удаленного участника
Прежде чем признать или отклонить участника из лобби, необходимо получить идентификатор удаленного участника:
//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>"));
Допустить участника из CallLobby
Объект CallLobby позволяет пользователю с ролью организатора, докладчика и соорганизатора допустить участников из Teams CallLobby. Метод admit
принимает коллекцию идентификаторов в качестве входных данных и возвращает AdmitParticipantsResult
объект в результате.
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));
Отклонение участника из CallLobby
Объект MeetingLobby позволяет пользователю с ролью организатора, соорганизатора и докладчика отклонять участников из Teams MeetingLobby. Метод reject
принимает идентификатор в качестве входных данных.
//To reject all participants from CallLobby:
for (CommunicationIdentifier identifier : identifiers)
{
this.callLobby.reject(lobbyParticipantsIdentifiers.get(0)).get();
}
Допустить всех участников из CallLobby
Объект MeetingLobby позволяет пользователю с ролью организатора, соорганизатора и докладчика признать всех участников из Teams MeetingLobby. Метод admitAll
возвращает AdmitAllParticipantsResult
объект в результате.
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()));
Обработка обновленного события CallLobby
Вы можете подписаться на addOnLobbyParticipantsUpdatedListener
прослушиватель событий для обработки изменений в participants
коллекции. Это событие активируется при добавлении или удалении участников из CallLobby и предоставляет добавленный или удаленный список участников.
//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);
Настройка системы
Выполните следующие действия, чтобы настроить систему.
Создайте проект Xcode
В Xcode создайте проект iOS и выберите шаблон приложения с одним представлением . В этой статье используется платформа SwiftUI, поэтому необходимо задать для языка значениеSwift и задать для интерфейсазначение SwiftUI.
Вы не собираетесь создавать тесты в этой статье. Снимите флажок "Включить тесты ".
Установка пакета и зависимостей с помощью CocoaPods
Создайте Podfile для приложения, как показано в следующем примере:
platform :ios, '13.0' use_frameworks! target 'AzureCommunicationCallingSample' do pod 'AzureCommunicationCalling', '~> 1.0.0' end
Запустите
pod install
.Откройте
.xcworkspace
с помощью Xcode.
Запрос доступа к микрофону
Чтобы получить доступ к микрофону устройства, необходимо обновить список свойств приложения с помощью NSMicrophoneUsageDescription
. Задайте связанное значение строке, включенной в диалоговое окно, которое система использует для запроса доступа от пользователя.
Щелкните правой кнопкой мыши запись Info.plist дерева проекта и выберите "Открыть как>исходный код". Добавьте в раздел верхнего уровня <dict>
следующие строки, а затем сохраните файл.
<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>
Настройка платформы приложения
Откройте файл проекта ContentView.swift
. Добавьте объявление import
в начало файла для импорта библиотеки AzureCommunicationCalling
. Кроме того, импортируйте AVFoundation
. Он необходим для запросов на разрешение звука в коде.
import AzureCommunicationCalling
import AVFoundation
Инициализация CallAgent
Чтобы создать экземпляр CallAgent
из CallClient
, необходимо использовать метод callClient.createCallAgent
, который асинхронно возвращает объект CallAgent
после его инициализации.
Чтобы создать клиент вызова, передайте 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)
}
CommunicationTokenCredential
Передайте созданный CallClient
объект и задайте отображаемое имя:
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")
}
})
Объект CallLobby
, на классе Call
или TeamsCall
, позволяет пользователям получать доступ к информации о лобби для собраний Teams. Он включает API, admit
, reject
и admitAll
, позволяющие пользователю допустить или отклонить участников из лобби собрания в Teams. Пользователь также может получить коллекцию participants
и подключить прослушиватель событий, чтобы получать уведомления.
Получение объекта CallLobby
Первое — это получить объект CallLobby
из экземпляра вызова.
@State var callLobby: CallLobby?
callLobby = self.call!.callLobby
Получение свойств участников лобби
Чтобы узнать, кто находится в лобби, вы можете получить коллекцию participants
из CallLobby
объекта. Это коллекция RemoteParticipant
объекта с InLobby
состоянием. Чтобы получить коллекцию participants
, выполните следующие действия.
let lobbyParticipants = callLobby.participants
Получение идентификатора удаленного участника
Прежде чем признать или отклонить участника из CallLobby, необходимо получить идентификатор удаленного участника:
//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})!;
Допустить участника из CallLobby
Объект CallLobby позволяет пользователю с ролью организатора, докладчика и соорганизатора допустить участников из Teams CallLobby. Метод admit
принимает коллекцию идентификаторов в качестве входных данных и возвращает AdmitParticipantsResult
объект в результате.
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)
}
})
Отклонение участника из CallLobby
Объект CallLobby позволяет пользователю с ролью организатора, соорганизатора и докладчика отклонять участников из Teams CallLobby. Метод reject
принимает идентификатор.
//To reject participant from CallLobby:
callLobby.reject(identifiers.first!, completionHandler: { error in
if error != nil {
print ("Reject all participants is failed %@", error! as Error)
}
})
Допустить всех участников из CallLobby
Объект CallLobby позволяет пользователю с ролью организатора, соорганизатора и докладчика признать всех участников из Teams CallLobby. Метод admitAll
возвращает AdmitAllParticipantsResult
объект в результате.
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)
}
})
Обработка обновленного события CallLobby
Вы можете подписаться на прослушиватель событий для обработки изменений в participants
коллекции. Это событие активируется при добавлении или удалении участников из CallLobby и предоставляет добавленный или удаленный список участников.
//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
Настройка системы
Выполните следующие действия, чтобы настроить систему.
Создание проекта Visual Studio
В Visual Studio 2022 для приложения универсальной платформы Windows создайте новый проект Пустое приложение (универсальная платформа Windows). После ввода имени проекта вы можете выбрать любой пакет SDK для Windows позже 10.0.17763.0.
Для приложения WinUI 3 создайте новый проект с шаблоном "Пустое приложение", упакованное (WinUI 3 в настольном ПК) для создания одностраничного приложения WinUI 3. Требуется пакет SDK для приложений Windows версии 1.3 или более поздней.
Установите пакет и зависимости с помощью диспетчера пакетов NuGet.
API и библиотеки для вызовов в составе SDK доступны через публичный пакет NuGet.
Чтобы найти, скачать и установить пакет NuGet SDK для вызовов:
- Откройте диспетчер пакетов NuGet, выбрав Средства>Диспетчер пакетов NuGet>Управление пакетами NuGet для решения.
- Выберите "Обзор" и введите Azure.Communication.Calling.WindowsClient в поле поиска.
- Убедитесь, что установлен флажок "Включить предварительную версию ".
- Выберите пакет Azure.Communication.Calling.WindowsClient , а затем выберите Azure.Communication.Calling.WindowsClient1.4.0-beta.1 или более позднюю версию.
- Установите флажок, соответствующий проекту Службы коммуникации Azure на правой панели.
- Выберите "Установить".
Объект CallLobby
, на классе Call
или TeamsCall
, позволяет пользователям получать доступ к информации о лобби для собраний Teams. Он включает API, AdmitAsync
, RejectAsync
и AdmitAllAsync
, позволяющие пользователю допустить или отклонить участников из лобби собрания в Teams. Пользователь также может получить коллекцию Participants
и подписаться на LobbyParticipantsUpdated
событие для получения уведомления.
Получение объекта CallLobby
Первое — это получить объект CallLobby
из экземпляра вызова.
private CallLobby callLobby;
callLobby = call.CallLobby;
Получение свойств участников лобби
Чтобы узнать, кто находится в лобби, вы можете получить коллекцию Participants
из CallLobby
объекта. Это коллекция RemoteParticipant
объекта с InLobby
состоянием. Чтобы получить коллекцию Participants
, выполните следующие действия.
var lobbyParticipants = callLobby.Participants;
Получение идентификатора удаленного участника
Прежде чем признать или отклонить участника из CallLobby, необходимо получить идентификатор удаленного участника:
//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();
Допустить участника из CallLobby
Объект CallLobby позволяет пользователю с ролью организатора, докладчика и соорганизатора допустить участников из Teams CallLobby. Метод AdmitAsync
принимает коллекцию идентификаторов в качестве входных данных и возвращает AdmitParticipantsResult
объект в результате.
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 ");
}
Отклонение участника из CallLobby
Объект CallLobby позволяет пользователю с ролью организатора, соорганизатора и докладчика отклонять участников из Teams CallLobby. Метод RejectAsync
принимает идентификатор в качестве входных данных.
//To reject all participants from CallLobby:
foreach (CallIdentifier identifier in identifiers)
{
await callLobby?.RejectAsync(identifier);
}
Допустить всех участников из CallLobby
Объект CallLobby позволяет пользователю с ролью организатора, соорганизатора и докладчика признать всех участников из Teams CallLobby. Метод AdmitAllAsync
возвращает AdmitAllParticipantsResult
объект в результате.
AdmitAllParticipantsResult result = await callLobby?.AdmitAllAsync();
Trace.WriteLine("Admit all result. success count: " + result.SuccessCount + ", failure count: " + result.FailureCount);
Обработка обновленного события CallLobby
Вы можете подписаться на событие LobbyParticipantsUpdated
для обработки изменений в коллекции Participants
. Это событие активируется при добавлении или удалении участников из CallLobby и предоставляет добавленный или удаленный список участников.
//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 ");
}
}