Отображение состояния транскрибирования вызовов на клиенте
Прежде чем вы сможете транскрибировать их, необходимо получить согласие от всех участников звонка. Microsoft Teams позволяет пользователям запускать транскрибирование в собраниях или звонках. Вы получите событие при запуске транскрибирования. Состояние транскрибирования можно проверить, запущено ли транскрибирование перед присоединением к вызову или собранию. Вы можете предоставить явное согласие на транскрибирование, если требуется собрание или звонок, и вы уже собрали его.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Развернутый ресурс Служб коммуникации. Создайте ресурс Служб коммуникации.
- Маркер доступа пользователя для включения клиента для вызовов. Дополнительные сведения см. в статье о создании маркеров доступа и управлении ими.
- Необязательно. Выполните краткое руководство по добавлению голосовых вызовов в приложение
Поддержка
В следующих таблицах определяется поддержка транскрибирования вызовов в Службы коммуникации Azure.
Удостоверения и типы вызовов
В следующих таблицах показана поддержка транскрибирования для конкретного типа вызова и удостоверения.
Удостоверения | Собрание Teams | Комната | Вызов 1:1 | Групповой вызов | Вызов взаимодействия Teams 1:1 | Вызов взаимодействия с Группами Teams |
---|---|---|---|---|---|---|
Пользователь служб коммуникации | ✔️ | ✔️ | ✔️ | |||
Пользователь Microsoft 365 | ✔️ | ✔️ | ✔️ |
Операции
В следующих таблицах показана поддержка отдельных API при вызове пакета SDK для отдельных типов удостоверений.
Операции | Пользователь служб коммуникации | Пользователь Microsoft 365 |
---|---|---|
Получение события, которое началось транскрибирование | ✔️ | ✔️ |
Получение состояния транскрибирования | ✔️ | ✔️ |
Запуск или остановка транскрибирования | ||
Узнайте, требуется ли явное согласие | ✔️ [1] | ✔️ [1] |
Предоставление явного согласия для транскрибирования | ✔️ [1] | ✔️ [1] |
[1] Эта функция доступна только в собраниях Teams и групповых вызовах взаимодействия Teams.
Пакеты SDK
В следующих таблицах показана поддержка транскрибирования в отдельных пакетах SDK Службы коммуникации Azure.
Платформы | Интернет | Веб-интерфейс | iOS | Пользовательский интерфейс iOS | Android | Пользовательский интерфейс Android | Windows |
---|---|---|---|---|---|---|---|
Поддерживается | ✔️ | ✔️ [1] | ✔️ [1] | ✔️ [1] | ✔️ [1] | ✔️ [1] | ✔️ [1] |
[1] Эти пакеты SDK не поддерживают явное согласие.
Установка пакета 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);
Предупреждение
Из-за изменений в Microsoft Teams JavaScript вызывает пакеты SDK с версиями 1.21 и ниже останавливает транскрибирование Teams и блокирует запуск транскрибирования Teams пользователям Teams. Если вы хотите использовать транскрибирование Teams в звонках и собраниях, необходимо обновить пакет SDK для вызовов по крайней мере до версии 1.22.
Транскрибирование звонков
Transcription
— это расширенная функция класса Call
. Сначала необходимо получить объект API функций транскрибирования
const callTranscriptionFeature = call.feature(Features.Transcription);
Состояние транскрибирования можно проверить в свойстве isTranscriptionActive
. Если задано true
значение, то транскрибирование активно.
const isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive;
Вы можете подписаться на событие, которое активируется при изменении состояния транскрибирования:
const isTranscriptionActiveChangedHandler = () => {
console.log(callTranscriptionFeature.isTranscriptionActive);
};
callTranscriptionFeature.on('isTranscriptionActiveChanged', isTranscriptionActiveChangedHandler);
Вы можете отменить подписку из события с помощью следующего кода:
callTranscriptionFeature.off('isTranscriptionActiveChanged', isTranscriptionActiveChangedHandler);
Явное согласие
Если для собрания или вызова Teams настроено явное согласие для записи или транскрибирования, необходимо собрать явное согласие от пользователей, чтобы разрешить пользователям транскрибировать или записывать их. Вы можете заранее предоставить согласие при присоединении к собранию или реактивно при запуске записи или транскрибирования. Пока не будет предоставлено явное согласие, во время транскрибирования будут отключены аудио, видео и общий доступ к экранам участников.
Можно проверить, требуется ли транскрибирование собрания явным согласием по свойству isTeamsConsentRequired
. Если задано true
значение, для этого call
требуется явное согласие.
const isTranscriptionConsentRequired = callTranscriptionFeature.isTeamsConsentRequired;
Если вы уже получили согласие пользователя на транскрибирование, можно вызвать grantTeamsConsent()
метод, чтобы указать явное согласие на службу. Это согласие допустимо только для одного call
сеанса, и пользователям необходимо снова предоставить согласие, если они повторно присоединиться к собранию.
callTranscriptionFeature.grantTeamsConsent();
Попытки включить аудио, видео или общий доступ к экрану завершаются ошибкой при активном транскрибировании, явное согласие требуется, но пока не дано. Эту ситуацию можно распознать, проверив свойство класса для возможностей unmuteMic
turnVideoOn
и .shareScreen
ParticipantCapabilities
reason
Эти возможности можно найти в функции call.feature(Features.Capabilities)
. Эти возможности возвращают причину ExplicitConsentRequired
, так как пользователям необходимо предоставить явное согласие.
Установка пакета 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();
Предупреждение
До версии 1.1.0 и бета-версии версии 1.1.0-beta.1 пакета SDK для вызовов Android Службы коммуникации Azure содержит isTranscriptionActive
и addOnIsTranscriptionActiveChangedListener
входит Call
в объект. В новых бета-выпусках эти API представлены в виде расширенной функции Call
, как описано ниже.
Транскрибирование вызовов — это расширенная функция основного Call
объекта. Сначала необходимо получить объект функции транскрибирования:
TranscriptionCallFeature callTranscriptionFeature = call.feature(Features.TRANSCRIPTION);
Затем вы можете убедиться, что вызов транскрибируется, проверив свойство isTranscriptionActive
объекта callTranscriptionFeature
. Он возвращает boolean
.
boolean isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive();
Также можно подписаться на изменения в транскрибировании:
private void handleCallOnIsTranscriptionChanged(PropertyChangedEvent args) {
boolean isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive();
}
callTranscriptionFeature.addOnIsTranscriptionActiveChangedListener(handleCallOnIsTranscriptionChanged);
Настройка системы
Выполните следующие действия, чтобы настроить систему.
Создайте проект 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")
}
})
Предупреждение
До версии 1.1.0 и бета-версии версии 1.1.0-beta.Службы коммуникации Azure 1 пакета SDK для вызовов iOS имеется isTranscriptionActive
в составе Call
объекта и didChangeTranscriptionState
является частью делегатаCallDelegate
. В новых бета-выпусках эти API представлены в виде расширенной функции Call
, как описано ниже.
Транскрибирование вызовов — это расширенная функция основного Call
объекта. Сначала необходимо получить объект функции транскрибирования:
let callTranscriptionFeature = call.feature(Features.transcription)
Затем вы можете убедиться, что вызов транскрибируется, проверив свойство isTranscriptionActive
объекта callTranscriptionFeature
. Он возвращает Bool
.
let isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive;
Вы также можете подписаться на изменения транскрибирования, реализовав делегат TranscriptionCallFeatureDelegate
для своего класса с помощью события didChangeTranscriptionState
:
callTranscriptionFeature.delegate = self
// didChangeTranscriptionState is a member of TranscriptionCallFeatureDelegate
public func transcriptionCallFeature(_ transcriptionCallFeature: TranscriptionCallFeature, didChangeTranscriptionState args: PropertyChangedEventArgs) {
let isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive
}
Настройка системы
Выполните следующие действия, чтобы настроить систему.
Создание проекта 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 диспетчер пакетов, выбрав инструменты>NuGet диспетчер пакетов> Manage NuGet Packages for Solution.
- Выберите "Обзор" и введите Azure.Communication.Calling.WindowsClient в поле поиска.
- Убедитесь, что установлен флажок "Включить предварительную версию ".
- Выберите пакет Azure.Communication.Calling.WindowsClient, а затем выберите Azure.Communication.Calling.WindowsClient 1.4.0-beta.1 или более позднюю версию.
- Установите флажок, соответствующий проекту Службы коммуникации Azure на правой панели.
- Выберите Установить.
Транскрибирование вызовов — это расширенная функция основного Call
объекта. Сначала необходимо получить объект функции транскрибирования:
TranscriptionCallFeature transcriptionFeature = call.Features.Transcription;
Затем вы можете убедиться, что вызов транскрибируется, проверив свойство IsTranscriptionActive
объекта transcriptionFeature
. Он возвращает boolean
.
boolean isTranscriptionActive = transcriptionFeature.isTranscriptionActive;
Также можно подписаться на изменения в транскрибировании:
private async void Call__OnIsTranscriptionActiveChanged(object sender, PropertyChangedEventArgs args)
boolean isTranscriptionActive = transcriptionFeature.IsTranscriptionActive();
}
transcriptionFeature.IsTranscriptionActiveChanged += Call__OnIsTranscriptionActiveChanged;