Udostępnij za pośrednictwem


Wyświetlanie stanu transkrypcji wywołań na kliencie

Przed ich transkrypcją należy zebrać zgodę wszystkich uczestników wywołania. Usługa Microsoft Teams umożliwia użytkownikom rozpoczęcie transkrypcji w spotkaniach lub połączeniach. Zdarzenie będzie wyświetlane po rozpoczęciu transkrypcji. Możesz sprawdzić stan transkrypcji, jeśli transkrypcja została uruchomiona przed dołączeniem do rozmowy lub spotkania. Możesz wyrazić jawną zgodę na transkrypcję, jeśli spotkanie lub wywołanie go wymaga, i zostały już zebrane.

Wymagania wstępne

Pomoc techniczna

W poniższych tabelach zdefiniowano obsługę transkrypcji wywołań w usługach Azure Communication Services.

Tożsamości i typy wywołań

W poniższych tabelach przedstawiono obsługę transkrypcji dla określonego typu wywołania i tożsamości.

Tożsamości Spotkanie w aplikacji Teams Pokój Połączenie 1:1 Rozmowa grupowa 1:1 Połączenie międzyoperacowe usługi Teams Połączenie międzyoperacowe usługi Group Teams
Użytkownik usług komunikacyjnych ✔️ ✔️ ✔️
Użytkownik platformy Microsoft 365 ✔️ ✔️ ✔️

Operacje

W poniższych tabelach przedstawiono obsługę poszczególnych interfejsów API w wywoływaniu zestawu SDK do poszczególnych typów tożsamości.

Operacje Użytkownik usług komunikacyjnych Użytkownik platformy Microsoft 365
Rozpoczynanie transkrypcji zdarzenia ✔️ ✔️
Uzyskiwanie stanu transkrypcji ✔️ ✔️
Uruchamianie lub zatrzymywanie transkrypcji
Dowiedz się, czy wymagana jest jawna zgoda ✔️ [1] ✔️ [1]
Wyrażanie wyraźnej zgody na transkrypcja ✔️ [1] ✔️ [1]

[1] Ta funkcja jest dostępna tylko w przypadku spotkań usługi Teams i grupowych wywołań współdziałania usługi Teams.

Zestawy SDK

W poniższych tabelach przedstawiono obsługę transkrypcji w poszczególnych zestawach SDK usług Azure Communication Services.

Platformy Internet Interfejs użytkownika sieci Web iOS Interfejs użytkownika systemu iOS Android Interfejs użytkownika systemu Android Windows
Jest obsługiwana ✔️ ✔️ [1] ✔️ [1] ✔️ [1] ✔️ [1] ✔️ [1] ✔️ [1]

[1] Te zestawy SDK nie obsługują jawnej zgody.

Instalacja zestawu SDK

Użyj polecenia , npm install aby zainstalować wspólny zestaw SDK usług Azure Communication Services i wywołujący dla języka JavaScript:

npm install @azure/communication-common --save
npm install @azure/communication-calling --save

Inicjowanie wymaganych obiektów

Wystąpienie CallClient jest wymagane w przypadku większości operacji wywołania. Podczas tworzenia nowego CallClient wystąpienia można skonfigurować je za pomocą opcji niestandardowych, takich jak Logger wystąpienie.

CallClient Za pomocą wystąpienia można utworzyć CallAgent wystąpienie, wywołując element createCallAgent. Ta metoda asynchronicznie zwraca CallAgent obiekt wystąpienia.

Metoda createCallAgent używa CommunicationTokenCredential jako argumentu. Akceptuje token dostępu użytkownika.

Aby uzyskać dostęp deviceManagerdo obiektu , możesz użyć getDeviceManager metody w wystąpieniu CallClient .

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()

Jak najlepiej zarządzać łącznością zestawu SDK z infrastrukturą firmy Microsoft

Wystąpienie Call Agent pomaga zarządzać wywołaniami (aby dołączyć lub uruchomić wywołania). Aby można było pracować z zestawem SDK wywołującym, należy połączyć się z infrastrukturą firmy Microsoft, aby otrzymywać powiadomienia o połączeniach przychodzących i koordynować inne szczegóły połączeń. Istnieją Call Agent dwa możliwe stany:

PołączonoCall Agent wartość Connected connectionStatue oznacza, że zestaw SDK klienta jest połączony i może odbierać powiadomienia z infrastruktury firmy Microsoft.

RozłączoneCall Agent wartość Disconnected connectionStatue stanów występuje problem uniemożliwiający prawidłowe nawiązywanie połączenia z zestawem SDK. Call Agent należy utworzyć ponownie.

  • invalidToken: Jeśli token wygasł lub jest nieprawidłowe Call Agent wystąpienie rozłącza się z tym błędem.
  • connectionIssue: Jeśli występuje problem z połączeniem klienta z infrastrukturą firmy Microsoft, po wielu ponownych próbach Call Agent connectionIssue wystąpi błąd.

Możesz sprawdzić, czy środowisko lokalne Call Agent jest połączone z infrastrukturą firmy Microsoft, sprawdzając bieżącą connectionState wartość właściwości. Podczas aktywnego wywołania można nasłuchiwać zdarzenia, connectionStateChanged aby określić, czy Call Agent zmiany ze stanu Połączono z Odłączone .

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);

Ostrzeżenie

Ze względu na zmiany w usłudze Microsoft Teams zestawy SDK wywołujące język JavaScript w wersjach 1.21 i niższe zatrzymuje transkrypcję usługi Teams i blokuje użytkownikom usługi Teams rozpoczęcie transkrypcji. Jeśli chcesz korzystać z transkrypcji usługi Teams w wywołaniach i spotkaniach, musisz uaktualnić zestaw SDK połączeń do co najmniej wersji 1.22.

Transkrypcja rozmowy telefonicznej

Transcription jest rozszerzoną funkcją klasy Call. Najpierw należy uzyskać obiekt interfejsu API funkcji transkrypcji

const callTranscriptionFeature = call.feature(Features.Transcription);

Stan transkrypcji można sprawdzić we właściwości isTranscriptionActive. Jeśli wartość jest ustawiona na true, transkrypcja jest aktywna.

const isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive;

Możesz subskrybować zdarzenie, które jest wyzwalane po zmianie stanu transkrypcji:

const isTranscriptionActiveChangedHandler = () => {
  console.log(callTranscriptionFeature.isTranscriptionActive);
};
callTranscriptionFeature.on('isTranscriptionActiveChanged', isTranscriptionActiveChangedHandler);

Możesz anulować subskrypcję zdarzenia przy użyciu następującego kodu:

callTranscriptionFeature.off('isTranscriptionActiveChanged', isTranscriptionActiveChangedHandler);

Jeśli spotkanie lub połączenie usługi Teams jest skonfigurowane tak, aby wymagać wyraźnej zgody na nagrywanie lub transkrypcję, musisz zebrać jawną zgodę od użytkowników, aby umożliwić użytkownikom transkrypcję lub rejestrowanie. Możesz aktywnie wyrazić zgodę podczas dołączania do spotkania lub reaktywnie po rozpoczęciu nagrywania lub transkrypcji. Dopóki nie zostanie udzielona jawna zgoda, udostępnianie dźwięku, wideo i ekranu uczestników zostanie wyłączone podczas transkrypcji.

Możesz sprawdzić, czy transkrypcja spotkania wymaga jawnej zgody według właściwości isTeamsConsentRequired. Jeśli wartość jest ustawiona na truewartość , wymagana jest jawna zgoda dla elementu call.

const isTranscriptionConsentRequired = callTranscriptionFeature.isTeamsConsentRequired;

Jeśli masz już zgodę użytkownika na transkrypcję, możesz wywołać metodę grantTeamsConsent() , aby wskazać jawną zgodę na usługę. Ta zgoda jest ważna tylko dla jednej call sesji, a użytkownicy muszą ponownie wyrazić zgodę, jeśli ponownie dołączą do spotkania.

callTranscriptionFeature.grantTeamsConsent();

Próby włączenia udostępniania dźwięku, wideo lub ekranu kończą się niepowodzeniem, gdy transkrypcja jest aktywna, wymagana jest jawna zgoda, ale nie jest jeszcze podana. Tę sytuację można rozpoznać, sprawdzając właściwość reason klasy pod kątem możliwości turnVideoOni unmuteMic shareScreen.ParticipantCapabilities Te możliwości można znaleźć w funkcji call.feature(Features.Capabilities). Te możliwości będą zwracać przyczynę ExplicitConsentRequired , ponieważ użytkownicy muszą wyrazić jawną zgodę.

Instalacja zestawu SDK

Znajdź plik na poziomie build.gradle projektu i dodaj mavenCentral() go do listy repozytoriów w obszarze buildscript i allprojects:

buildscript {
    repositories {
    ...
        mavenCentral()
    ...
    }
}
allprojects {
    repositories {
    ...
        mavenCentral()
    ...
    }
}

Następnie w pliku na poziomie build.gradle modułu dependencies dodaj następujące wiersze do sekcji:

dependencies {
    ...
    implementation 'com.azure.android:azure-communication-calling:1.0.0'
    ...
}

Inicjowanie wymaganych obiektów

Aby utworzyć CallAgent wystąpienie, należy wywołać createCallAgent metodę w wystąpieniu CallClient . To wywołanie asynchroniczne zwraca CallAgent obiekt wystąpienia.

Metoda createCallAgent przyjmuje CommunicationUserCredential jako argument, który hermetyzuje token dostępu.

Aby uzyskać dostęp, DeviceManagernależy najpierw utworzyć callAgent wystąpienie. Następnie możesz użyć metody , aby pobrać metodę 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();

Aby ustawić nazwę wyświetlaną elementu wywołującego, użyj tej alternatywnej metody:

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();

Ostrzeżenie

Do wersji 1.1.0 i beta w wersji 1.1.0-beta.1 usługi Azure Communication Services wywołujących zestaw Android SDK ma isTranscriptionActive element i addOnIsTranscriptionActiveChangedListener jest częścią Call obiektu . W przypadku nowych wersji beta te interfejsy API zostały przeniesione jako rozszerzona funkcja podobna do opisanej Call poniżej.

Transkrypcja wywołań jest rozszerzoną funkcją obiektu podstawowego Call . Najpierw należy uzyskać obiekt funkcji transkrypcji:

TranscriptionCallFeature callTranscriptionFeature = call.feature(Features.TRANSCRIPTION);

Następnie, aby sprawdzić, czy wywołanie jest transkrybowane, sprawdź isTranscriptionActive właściwość callTranscriptionFeature. Zwraca wartość boolean.

boolean isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive();

Możesz również subskrybować zmiany w transkrypcji:

private void handleCallOnIsTranscriptionChanged(PropertyChangedEvent args) {
    boolean isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive();
}

callTranscriptionFeature.addOnIsTranscriptionActiveChangedListener(handleCallOnIsTranscriptionChanged);

Konfigurowanie systemu

Wykonaj następujące kroki, aby skonfigurować system.

Tworzenie projektu Xcode

W programie Xcode utwórz nowy projekt systemu iOS i wybierz szablon Aplikacja z jednym widokiem. W tym artykule jest używana struktura SwiftUI, dlatego należy ustawić wartość Language na Swift i ustawić wartość Interface na SwiftUI.

Nie zamierzasz tworzyć testów w tym artykule. Możesz wyczyścić pole wyboru Uwzględnij testy .

Zrzut ekranu przedstawiający okno tworzenia projektu w programie Xcode.

Instalowanie pakietu i zależności przy użyciu narzędzia CocoaPods

  1. Utwórz plik Podfile dla aplikacji, podobnie jak w tym przykładzie:

    platform :ios, '13.0'
    use_frameworks!
    target 'AzureCommunicationCallingSample' do
        pod 'AzureCommunicationCalling', '~> 1.0.0'
    end
    
  2. Uruchom program pod install.

  3. Otwórz .xcworkspace za pomocą programu Xcode.

Żądanie dostępu do mikrofonu

Aby uzyskać dostęp do mikrofonu urządzenia, należy zaktualizować listę właściwości informacji aplikacji przy użyciu polecenia NSMicrophoneUsageDescription. Ustaw skojarzona wartość na ciąg zawarty w oknie dialogowym używanym przez system do żądania dostępu od użytkownika.

Kliknij prawym przyciskiem myszy wpis Info.plist drzewa projektu, a następnie wybierz pozycję Otwórz jako>kod źródłowy. Dodaj następujące wiersze w sekcji najwyższego poziomu <dict> , a następnie zapisz plik.

<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>

Konfigurowanie struktury aplikacji

Otwórz plik projektu ContentView.swift . Dodaj deklarację import na początku pliku, aby zaimportować bibliotekę AzureCommunicationCalling . Ponadto zaimportuj plik AVFoundation. Potrzebne są żądania uprawnień dźwięku w kodzie.

import AzureCommunicationCalling
import AVFoundation

Inicjowanie klasy CallAgent

Aby utworzyć CallAgent wystąpienie z CallClientklasy , należy użyć callClient.createCallAgent metody, która asynchronicznie zwraca CallAgent obiekt po zainicjowaniu.

Aby utworzyć klienta wywołania, przekaż CommunicationTokenCredential obiekt:

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 Przekaż utworzony obiekt do CallClient, a następnie ustaw nazwę wyświetlaną:

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")
        }
})

Ostrzeżenie

Do wersji 1.1.0 i beta w wersji 1.1.0-beta.1 zestawu AZURE Communication Services Calling iOS SDK jest isTranscriptionActive częścią obiektu i didChangeTranscriptionState jest częścią Call delegataCallDelegate. W przypadku nowych wersji beta te interfejsy API zostały przeniesione jako rozszerzona funkcja podobna do opisanej Call poniżej.

Transkrypcja wywołań jest rozszerzoną funkcją obiektu podstawowego Call . Najpierw należy uzyskać obiekt funkcji transkrypcji:

let callTranscriptionFeature = call.feature(Features.transcription)

Następnie, aby sprawdzić, czy wywołanie jest transkrypowane, sprawdź isTranscriptionActive właściwość callTranscriptionFeature. Zwraca wartość Bool.

let isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive;

Możesz również subskrybować zmiany transkrypcji, implementując TranscriptionCallFeatureDelegate delegata w klasie za pomocą zdarzenia didChangeTranscriptionState:

callTranscriptionFeature.delegate = self

// didChangeTranscriptionState is a member of TranscriptionCallFeatureDelegate
public func transcriptionCallFeature(_ transcriptionCallFeature: TranscriptionCallFeature, didChangeTranscriptionState args: PropertyChangedEventArgs) {
    let isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive
}

Konfigurowanie systemu

Wykonaj następujące kroki, aby skonfigurować system.

Tworzenie projektu programu Visual Studio

W przypadku aplikacji platforma uniwersalna systemu Windows w programie Visual Studio 2022 utwórz nowy projekt Pusta aplikacja (uniwersalny system Windows). Po wprowadzeniu nazwy projektu możesz wybrać dowolny zestaw Windows SDK nowszy niż 10.0.17763.0.

W przypadku aplikacji WinUI 3 utwórz nowy projekt z pustą aplikacją, spakowanym szablonem (WinUI 3 w programie Desktop), aby skonfigurować jednostronicową aplikację WinUI 3. Wymagany jest zestaw Windows App SDK w wersji 1.3 lub nowszej.

Instalowanie pakietu i zależności przy użyciu Menedżer pakietów NuGet

Interfejsy API i biblioteki zestawu SDK wywołujących są publicznie dostępne za pośrednictwem pakietu NuGet.

Aby znaleźć, pobrać i zainstalować pakiet NuGet zestawu SDK wywołującego:

  1. Otwórz Menedżer pakietów NuGet, wybierając pozycję Narzędzia>NuGet Menedżer pakietów> Zarządzanie pakietami NuGet dla rozwiązania.
  2. Wybierz pozycję Przeglądaj, a następnie wprowadź ciąg Azure.Communication.Calling.WindowsClient w polu wyszukiwania.
  3. Upewnij się, że pole wyboru Uwzględnij wersję wstępną zostało zaznaczone.
  4. Wybierz pakiet Azure.Communication.Calling.WindowsClient, a następnie wybierz pozycję Azure.Communication.Calling.WindowsClient 1.4.0-beta.1 lub nowszą wersję.
  5. Zaznacz pole wyboru odpowiadające projektowi usług Azure Communication Services w okienku po prawej stronie.
  6. Wybierz Zainstaluj.

Transkrypcja wywołań jest rozszerzoną funkcją obiektu podstawowego Call . Najpierw należy uzyskać obiekt funkcji transkrypcji:

TranscriptionCallFeature transcriptionFeature = call.Features.Transcription;

Następnie, aby sprawdzić, czy wywołanie jest transkrybowane, sprawdź IsTranscriptionActive właściwość transcriptionFeature. Zwraca wartość boolean.

boolean isTranscriptionActive = transcriptionFeature.isTranscriptionActive;

Możesz również subskrybować zmiany w transkrypcji:

private async void Call__OnIsTranscriptionActiveChanged(object sender, PropertyChangedEventArgs args)
    boolean isTranscriptionActive = transcriptionFeature.IsTranscriptionActive();
}

transcriptionFeature.IsTranscriptionActiveChanged += Call__OnIsTranscriptionActiveChanged;

Następne kroki