Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Во время звонка участник имеет разрешение на включение видео, включение микрофона или общий экран?
Эти разрешения служат примерами возможностей участников, которые можно получить с помощью операции API возможностей. Вы можете использовать возможности для создания пользовательского интерфейса, отображающего только кнопки, связанные с действиями локального пользователя.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Развернутый ресурс Служб коммуникации. Создайте ресурс Служб коммуникации.
- Маркер доступа пользователя для включения клиента для вызовов. Дополнительные сведения см. в статье о создании маркеров доступа и управлении ими.
- Необязательно. Выполните краткое руководство по добавлению голосовых вызовов в приложение.
Установка пакета 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);
Возможность просмотра возможностей — это расширенная функция основного Call
API. Он позволяет получить возможности локального участника в текущем вызове.
Эта функция позволяет зарегистрировать прослушиватель событий для мониторинга изменений возможностей.
Получение функции возможностей
const capabilitiesFeature = this.call.feature(Features.Capabilities);
Получение возможностей локального участника
Объект возможностей имеет возможности локальных участников и имеет тип ParticipantCapabilities
. Ниже перечислены свойства возможностей:
- isPresent указывает, присутствует ли возможность.
- причина указывает причину разрешения возможностей.
const capabilities = capabilitiesFeature.capabilities;
Подписка на capabilitiesChanged
событие:
capabilitiesFeature.on('capabilitiesChanged', (capabilitiesChangeInfo) => {
for (const [key, value] of Object.entries(capabilitiesChangeInfo.newValue)) {
if(key === 'turnVideoOn' && value.reason != 'FeatureNotSupported') {
(value.isPresent) ? this.setState({ canOnVideo: true }) : this.setState({ canOnVideo: false });
continue;
}
if(key === 'unmuteMic' && value.reason != 'FeatureNotSupported') {
(value.isPresent) ? this.setState({ canUnMuteMic: true }) : this.setState({ canUnMuteMic: false });
continue;
}
if(key === 'shareScreen' && value.reason != 'FeatureNotSupported') {
(value.isPresent) ? this.setState({ canShareScreen: true }) : this.setState({ canShareScreen: false });
continue;
}
if(key === 'spotlightParticipant' && value.reason != 'FeatureNotSupported') {
(value.isPresent) ? this.setState({ canSpotlight: true }) : this.setState({ canSpotlight: false });
continue;
}
if(key === 'raiseHand' && value.reason != 'FeatureNotSupported') {
(value.isPresent) ? this.setState({ canRaiseHands: true }) : this.setState({ canRaiseHands: false });
continue;
}
if(key === 'muteOthers' && value.reason != 'FeatureNotSupported') {
(value.isPresent) ? this.setState({ canMuteOthers: true }) : this.setState({ canMuteOthers: false });
continue;
}
if(key === 'reaction' && value.reason != 'FeatureNotSupported') {
(value.isPresent) ? this.setState({ canReact: true }) : this.setState({ canReact: false });
continue;
}
if(key === 'forbidOthersAudio' && value.reason != 'FeatureNotSupported') {
(value.isPresent) ? this.setState({ canForbidOthersAudio: true }) : this.setState({ canForbidOthersAudio: false });
continue;
}
if(key === 'forbidOthersVideo' && value.reason != 'FeatureNotSupported') {
(value.isPresent) ? this.setState({ canForbidOthersVideo: true }) : this.setState({ canForbidOthersVideo: false });
continue;
}
}
});
Доступные возможности
- turnVideoOn: возможность включения видео
- unmuteMic: возможность отправки звука
- shareScreen: возможность совместного использования экрана
- removeParticipant: возможность удаления участника
- hangUpForEveryOne: возможность повесить для всех
- addCommunicationUser: возможность добавления пользователя связи
- addTeamsUser: возможность добавления пользователя Teams
- addPhoneNumber: возможность добавления номера телефона
- manageLobby: возможность управления лобби (только бета-версия)
- spotlightParticipant: возможность внимания участника (только бета-версия)
- removeParticipantsSpotlight: возможность удаления внимания участника (только бета-версия)
- startLiveCaptions: возможность запуска субтитров в реальном времени (только бета-версия)
- stopLiveCaptions: возможность остановить динамические субтитры (только бета-версия)
- raiseHand: возможность поднять руку (только бета-версия)
- muteOthers: функция временного отключения звука у удаленных участников встречи
- реакция: способность реагировать на собрание (только бета-версия)
- viewAttendeeNames: возможность просматривать имена участников в собрании
- forbidOthersAudio: возможность запретить участникам звук в вызове собрания или группы
- forbidOthersVideo: возможность запретить участникам видео в вызове собрания или группы
Установка пакета 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();
Возможность просмотра возможностей — это расширенная функция основного Call
API. Он позволяет получить возможности локального участника в текущем вызове.
Эта функция позволяет зарегистрировать прослушиватель событий для мониторинга изменений возможностей.
Чтобы использовать функцию вызова возможностей для Windows, первым шагом является получение объекта API функций возможностей:
Получение функции возможностей
private CapabilitiesCallFeature capabilitiesCallFeature;
capabilitiesCallFeature = call.feature(Features.CAPABILITIES);
Получение возможностей локального участника
Объект возможностей имеет возможности локальных участников и имеет тип ParticipantCapability
. Ниже перечислены свойства возможностей:
- IsAllowed указывает, можно ли использовать возможность.
- причина указывает причину разрешения возможностей.
List<ParticipantCapability> capabilities = capabilitiesCallFeature.getCapabilities();
Подписка на capabilitiesChanged
событие
capabilitiesCallFeature.addOnCapabilitiesChangedListener(this::OnCapabilitiesChanged);
private void OnCapabilitiesChanged(CapabilitiesChangedEvent args)
{
String event = String.format("Capabilities Event: %s", args.getReason().toString());
Log.i("CapabilitiesInfo", event);
for (ParticipantCapability capability : args.getChangedCapabilities())
{
Log.i("CapabilitiesInfo", capability.getType().toString() + " is " capability.getReason().toString());
}
}
Доступные возможности
- TurnVideoOn: возможность включения видео
- UnmuteMicrophone: возможность отменить микрофон
- ShareScreen: возможность совместного использования экрана
- RemoveParticipant: возможность удаления участника
- HangUpForEveryone: возможность повесить для всех
- AddCommunicationUser: возможность добавления пользователя связи
- AddTeamsUser: возможность добавления пользователя Teams
- AddPhoneNumber: возможность добавления номера телефона
- ManageLobby: возможность управления лоббировать
- SpotlightParticipant: возможность внимания участника
- RemoveParticipantSpotlight: возможность удаления внимания участника
- BlurBackground: возможность размытия фона
- CustomBackground: возможность применения пользовательского фона
- StartLiveCaptions: возможность запуска динамических подписей
- RaiseHand: способность поднять руку
- Функция ВременноеОтключениеДругих: возможность временного ограничения звука для участников удаленных собраний
Настройка системы
Выполните следующие действия, чтобы настроить систему.
Создание проекта Visual Studio
Для приложения универсальная платформа Windows в Visual Studio 2022 создайте проект пустого приложения (универсального приложения Windows). После ввода имени проекта вы можете выбрать любой пакет SDK для Windows позже 10.0.17763.0.
Для приложения WinUI 3 создайте проект с шаблоном "Пустое приложение" (WinUI 3 в классическом приложении) для настройки одностраничного приложения WinUI 3. Требуется пакет SDK для приложений Windows версии 1.3 или более поздней.
Установка пакета и зависимостей с помощью NuGet диспетчер пакетов
Api и библиотеки пакета SDK для вызовов общедоступны через пакет NuGet.
Чтобы найти, скачать и установить пакет NuGet пакета Sdk для вызовов:
- Откройте nuGet диспетчер пакетов, выбрав > Manage NuGet Packages for Solution.
- Выберите "Обзор" и введите Azure.Communication.Calling.WindowsClient в поле поиска.
- Убедитесь, что установлен флажок "Включить предварительную версию ".
- Выберите пакет Azure.Communication.Calling.WindowsClient, а затем выберите Azure.Communication.Calling.WindowsClient1.4.0-beta.1 или более позднюю версию.
- Установите флажок, соответствующий проекту Службы коммуникации Azure на правой панели.
- Выберите Установить.
Возможность просмотра возможностей — это расширенная функция основного Call
API. Он позволяет получить возможности локального участника в текущем вызове.
Эта функция позволяет зарегистрировать прослушиватель событий для мониторинга изменений возможностей.
Чтобы использовать функцию вызова возможностей для Windows, сначала необходимо получить объект API функций возможностей:
Получение функции возможностей
private CapabilitiesCallFeature capabilitiesCallFeature;
capabilitiesCallFeature = call.Features.Capabilities;
Получение возможностей локального участника
Объект возможностей имеет возможности локальных участников и имеет тип ParticipantCapability
. Ниже перечислены свойства возможностей:
- IsAllowed указывает, можно ли использовать возможность.
- причина указывает причину разрешения возможностей.
var capabilities = capabilitiesCallFeature.Capabilities;
Подписка на capabilitiesChanged
событие
capabilitiesCallFeature.CapabilitiesChanged += Call__OnCapabilitiesChangedAsync;
private async void Call__OnCapabilitiesChangedAsync(object sender, CapabilitiesChangedEventArgs args)
{
Trace.WriteLine(args.Reason.ToString());
foreach (var capability in args.ChangedCapabilities)
{
//Prints out capability kind and resolution reason in console
Trace.WriteLine(capability.Kind.ToString() + " is " + capability.Reason.ToString());
}
}
Доступные возможности
- TurnVideoOn: возможность включения видео
- UnmuteMicrophone: возможность отменить микрофон
- ShareScreen: возможность совместного использования экрана
- RemoveParticipant: возможность удаления участника
- HangUpForEveryone: возможность повесить для всех
- AddCommunicationUser: возможность добавления пользователя связи
- AddTeamsUser: возможность добавления пользователя Teams
- AddPhoneNumber: возможность добавления номера телефона
- ManageLobby: возможность управления лоббировать
- SpotlightParticipant: возможность внимания участника
- RemoveParticipantSpotlight: возможность удаления внимания участника
- BlurBackground: возможность размытия фона
- CustomBackground: возможность применения пользовательского фона
- StartLiveCaptions: возможность запуска динамических подписей
- RaiseHand: способность поднять руку
- Функция ВременноеОтключениеДругих: возможность временного ограничения звука для участников удаленных собраний
Настройка системы
Выполните следующие действия, чтобы настроить систему.
Создайте проект Xcode
В Xcode создайте новый проект iOS и выберите шаблон Single View App (Приложение с одним представлением). В этой статье используется платформа 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")
}
})
Возможность просмотра возможностей — это расширенная функция основного Call
API. Он позволяет получить возможности локального участника в текущем вызове.
Эта функция позволяет зарегистрировать прослушиватель событий для мониторинга изменений возможностей.
Чтобы использовать функцию вызова возможностей для Windows, первым шагом является получение объекта API функций возможностей:
Получение функции возможностей
let capabilitiesCallFeature =call.feature(Features.capabilities)
Получение возможностей локального участника
Объект возможностей имеет возможности локальных участников и имеет тип ParticipantCapability
. Ниже перечислены свойства возможностей:
- IsAllowed указывает, можно ли использовать возможность.
- причина указывает причину разрешения возможностей.
var capabilities = capabilitiesCallFeature.capabilities
Подписка на capabilitiesChanged
событие
capabilitiesCallFeature.delegate = CapabilitiesCallDelegate()
public class CapabilitiesCallDelegate : CapabilitiesCallFeatureDelegate
{
public func capabilitiesCallFeature(_ capabilitiesCallFeature: CapabilitiesCallFeature, didChangeCapabilities args: CapabilitiesChangedEventArgs) {
let changedReason = args.reason
let changedCapabilities = args.changedCapabilities
}
}
Доступные возможности
- TurnVideoOn: возможность включения видео
- UnmuteMicrophone: возможность отменить микрофон
- ShareScreen: возможность совместного использования экрана
- RemoveParticipant: возможность удаления участника
- HangUpForEveryone: возможность повесить для всех
- AddCommunicationUser: возможность добавления пользователя связи
- AddTeamsUser: возможность добавления пользователя Teams
- AddPhoneNumber: возможность добавления номера телефона
- ManageLobby: возможность управления лоббировать
- SpotlightParticipant: возможность внимания участника
- RemoveParticipantSpotlight: возможность удаления внимания участника
- BlurBackground: возможность размытия фона
- CustomBackground: возможность применения пользовательского фона
- StartLiveCaptions: возможность запуска динамических подписей
- RaiseHand: способность поднять руку
- Функция ВременноеОтключениеДругих: возможность временного ограничения звука для участников удаленных собраний
Поддерживаемые типы вызовов
В следующих таблицах определяется возможность получения возможностей с помощью пакета SDK для вызовов служб коммуникации Azure.
Идентичности и типы вызовов
Идентичности | Совещание в "Teams" | Комната | Личный разговор 1:1 | Групповой звонок | Вызов для взаимодействия команд в режиме 1:1 | Вызов взаимодействия в группах Teams |
---|---|---|---|---|---|---|
пользователь Служб связи | ✔️ | ✔️ | ||||
Пользователь Microsoft 365 | ✔️ | ✔️ |
Причины
В следующей таблице приведены дополнительные сведения о том, почему действие недоступно и содержит советы по созданию действия.
Причина | Описание | Решение |
---|---|---|
Способный | Действие включено. | |
Возможность не применима для типа вызова | Тип вызова блокирует действие. | Рассмотрите другой тип вызова, если вам потребуется это действие. Типы вызовов: 1:1, групповой звонок, вызов взаимодействия 1:1 Teams, вызов группы взаимодействия 1:1 Teams, комната и собрание. |
Клиент ограничен | Среда выполнения блокирует это действие. | Разблокируйте действие на устройстве, изменив операционную систему, браузеры, платформу или оборудование. В нашей документации можно найти поддерживаемую среду. |
ПолитикаПользователяОграничена | Политика пользователя Microsoft 365 блокирует действие. | Включите это действие, изменив политику, назначенную организатору собрания, инициатору вызова или пользователя Microsoft 365 с помощью пакета SDK ACS. Целевой пользователь зависит от типа действия. Дополнительные сведения о политике Teams в Teams. Администратор Teams может изменять политики. |
Ограничено по роли | Назначенная роль блокирует действие. | Продвигайте пользователей на другую роль, чтобы сделать действие доступным. |
Функция не поддерживается | Функция возможностей не поддерживается в этом типе вызова. | Сообщите нам в канале отзывов Azure, который вы хотите предоставить этой функции для этого типа вызова. |
ОграниченнаяВстреча | Параметр собрания Teams блокирует действие. | Организатор собрания Teams или соорганизатор должны изменить параметр собрания, чтобы включить это действие. |
Неинициализировано | Функция возможностей еще не инициализирована. | Подпишитесь на событие capabilitiesChanged this.call.feature(Features.Capabilities) , чтобы узнать, когда инициализирована возможность. |
Непригодный | Тип пользователя блокирует действие. | Действие включено только для определенных идентичностей. Включите это действие с помощью удостоверения Microsoft 365. |
Лицензия Teams Premium Ограничена | Пользователю Microsoft 365 необходимо назначить Teams премиум лицензию. | Включите это действие, назначив Teams премиум лицензию организатору собраний Teams или пользователю Microsoft 365 с помощью пакета SDK. Целевой пользователь зависит от типа действия. Администратор Microsoft 365 может назначить необходимую лицензию. |
Требуется Явное Согласие | Для разрешения действия требуется согласие. | Предоставьте согласие на запись или транскрибирование путем вызова метода grantTeamsConsent() в this.call.feature(Features.Recording) или this.call.feature(Features.Transcription) . |