Отображение состояния транскрибирования вызовов на клиенте
Прежде чем вы сможете транскрибировать их, необходимо получить согласие от всех участников звонка. Microsoft Teams позволяет пользователям запускать транскрибирование в собраниях или звонках. Вы получите событие, когда транскрибирование началось с вы можете проверить состояние транскрибирования, если транскрибирование началось до присоединения к вызову или собранию.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Развернутый ресурс Служб коммуникации. Создайте ресурс Служб коммуникации.
- Маркер доступа пользователя для включения клиента для вызовов. Дополнительные сведения см. в статье о создании маркеров доступа и управлении ими.
- Необязательно. Выполните краткое руководство по добавлению голосовых вызовов в приложение
Поддержка
В следующих таблицах определяется поддержка транскрибирования вызовов в Службы коммуникации Azure.
Удостоверения и типы вызовов
В следующих таблицах показана поддержка транскрибирования для конкретного типа вызова и удостоверения.
Удостоверения | Собрание Teams | Комната | Вызов 1:1 | Групповой вызов | Вызов взаимодействия Teams 1:1 | Вызов взаимодействия с Группами Teams |
---|---|---|---|---|---|---|
Пользователь служб коммуникации | ✔️ | ✔️ | ✔️ | |||
Пользователь Microsoft 365 | ✔️ | ✔️ | ✔️ |
Операции
В следующих таблицах показана поддержка отдельных API при вызове пакета SDK для отдельных типов удостоверений.
Операции | Пользователь служб коммуникации | Пользователь Microsoft 365 |
---|---|---|
Получение события, которое началось транскрибирование | ✔️ | ✔️ |
Получение состояния транскрибирования | ✔️ | ✔️ |
Запуск или остановка транскрибирования |
Пакеты SDK
В следующих таблицах показана поддержка транскрибирования в отдельных пакетах SDK Службы коммуникации Azure.
Платформы | Интернет | Веб-интерфейс | iOS | Пользовательский интерфейс iOS | Android | Пользовательский интерфейс Android | Windows |
---|---|---|---|---|---|---|---|
Поддерживается | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Установка пакета 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);
Установка пакета 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;