Visualizzare lo stato di trascrizione delle chiamate nel client
È necessario raccogliere il consenso da tutti i partecipanti alla chiamata prima di poterli trascrivere. Microsoft Teams consente agli utenti di avviare la trascrizione nelle riunioni o nelle chiamate. Quando la trascrizione è stata avviata, è possibile controllarne lo stato, se è stata avviata prima di essere unita alla chiamata o alla riunione.
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Una risorsa di Servizi di comunicazione distribuita. Creare una risorsa di Servizi di comunicazione.
- Token di accesso utente per abilitare il client chiamante. Per altre informazioni, vedere Creare e gestire i token di accesso.
- Facoltativo: Completare la guida introduttiva per aggiungere chiamate vocali all'applicazione
Supporto tecnico
Le tabelle seguenti definiscono il supporto della trascrizione delle chiamate in Servizi di comunicazione di Azure.
Identità e tipi di chiamata
Le tabelle seguenti illustrano il supporto della trascrizione per un tipo di chiamata e un'identità specifici.
Identità | Riunione di Teams | Club | 1:1 Chiamata | Chiamata di gruppo | Chiamata di interoperabilità di Teams 1:1 | Chiamata di interoperabilità di Teams di gruppo |
---|---|---|---|---|---|---|
Utente di Servizi di comunicazione | ✔️ | ✔️ | ✔️ | |||
Utente di Microsoft 365 | ✔️ | ✔️ | ✔️ |
Operazioni
Le tabelle seguenti illustrano il supporto delle singole API nella chiamata dell'SDK ai singoli tipi di identità.
Operazioni | Utente di Servizi di comunicazione | Utente di Microsoft 365 |
---|---|---|
Ottenere un evento avviato dalla trascrizione | ✔️ | ✔️ |
Ottenere lo stato della trascrizione | ✔️ | ✔️ |
Avviare o arrestare la trascrizione |
SDK
Le tabelle seguenti illustrano il supporto della trascrizione nei singoli SDK di Servizi di comunicazione di Azure.
Piattaforme | Web | Interfaccia utente Web | iOS | Interfaccia utente iOS | Android | Interfaccia utente Android | Finestre |
---|---|---|---|---|---|---|---|
Supportato | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Installazione dell'SDK
Usare il comando npm install
per installare SDK comuni e di chiamata di Servizi di comunicazione di Azure per JavaScript:
npm install @azure/communication-common --save
npm install @azure/communication-calling --save
Inizializzare gli oggetti necessari
Per la maggior parte delle operazioni di chiamata è necessaria un'istanza di CallClient
. Quando si crea una nuova istanza di CallClient
, è possibile configurarla con opzioni personalizzate come un'istanza di Logger
.
Con l'istanza di CallClient
è possibile creare un'istanza di CallAgent
chiamando il createCallAgent
. Questo metodo restituisce in modo asincrono un oggetto istanza CallAgent
.
Il metodo createCallAgent
usa CommunicationTokenCredential
come argomento. Accetta un token di accesso utente.
È possibile usare il metodo getDeviceManager
nell'istanza di CallClient
per accedere a 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()
Come gestire al meglio la connettività dell'SDK all'infrastruttura Microsoft
L'istanza Call Agent
consente di gestire le chiamate (per partecipare o avviare le chiamate). Per lavorare con l'SDK per chiamate, è necessario connettersi all'infrastruttura Microsoft per ricevere notifiche delle chiamate in arrivo e coordinare altri dettagli delle chiamate. Call Agent
ha due possibili stati:
Connesso : un valore connectionStatue Call Agent
di Connected
indica che l'SDK client è connesso e in grado di ricevere notifiche dall'infrastruttura Microsoft.
Disconnesso : un valore connectionStatue Call Agent
di Disconnected
indica un problema che impedisce all'SDK di connettersi correttamente. Call Agent
deve essere ricreato.
invalidToken
: se un token è scaduto o non è valido l'istanzaCall Agent
si disconnette con questo errore.connectionIssue
: se si verifica un problema con il client che si connette a Microsoft infrascture, dopo molti tentativiCall Agent
espone l'erroreconnectionIssue
.
È possibile verificare se l'infrastruttura locale Call Agent
è connessa all'infrastruttura Microsoft controllando il valore corrente della proprietà connectionState
. Durante una chiamata attiva è possibile restare in ascolto dell'evento connectionStateChanged
per determinare se Call Agent
cambia dallo stato Connesso a Disconnesso.
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);
Avviso
A causa delle modifiche apportate a Microsoft Teams, gli SDK per chiamate JavaScript con le versioni 1.21 e precedenti arrestano la trascrizione di Teams e bloccano gli utenti di Teams per avviare la trascrizione. Se si vuole sfruttare la trascrizione di Teams nelle chiamate e nelle riunioni, è necessario aggiornare l'SDK per chiamate ad almeno la versione 1.22.
Trascrizione chiamata
Transcription
è una funzionalità estesa della classe Call
. È prima necessario ottenere l'oggetto API funzionalità di trascrizione
const callTranscriptionFeature = call.feature(Features.Transcription);
È possibile controllare lo stato della trascrizione nella proprietà isTranscriptionActive
. Se il valore è impostato su true
, la trascrizione è attiva.
const isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive;
È possibile sottoscrivere un evento che viene attivato quando lo stato della trascrizione cambia:
const isTranscriptionActiveChangedHandler = () => {
console.log(callTranscriptionFeature.isTranscriptionActive);
};
callTranscriptionFeature.on('isTranscriptionActiveChanged', isTranscriptionActiveChangedHandler);
È possibile annullare la sottoscrizione all'evento con il codice seguente:
callTranscriptionFeature.off('isTranscriptionActiveChanged', isTranscriptionActiveChangedHandler);
Installazione dell'SDK
Individuare il file a livello build.gradle
di progetto e aggiungere mavenCentral()
all'elenco dei repository in buildscript
e allprojects
:
buildscript {
repositories {
...
mavenCentral()
...
}
}
allprojects {
repositories {
...
mavenCentral()
...
}
}
Quindi, nel file a livello build.gradle
di modulo aggiungere le righe seguenti alla dependencies
sezione :
dependencies {
...
implementation 'com.azure.android:azure-communication-calling:1.0.0'
...
}
Inizializzare gli oggetti necessari
Per creare un'istanza CallAgent
, è necessario chiamare il metodo createCallAgent
in un'istanza CallClient
. Questa chiamata restituisce in modo asincrono un oggetto istanza CallAgent
.
Il metodo createCallAgent
accetta CommunicationUserCredential
come argomento, che incapsula un token di accesso.
Per accedere a DeviceManager
, è prima necessario creare un'istanza callAgent
. Quindi è possibile usare il metodo CallClient.getDeviceManager
per ottenere 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();
Per impostare nome visualizzato per il chiamante, usare questo metodo alternativo:
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();
Avviso
Fino alla versione 1.1.0 e alla versione beta 1.1.0-beta.1 di Servizi di comunicazione di Azure, la chiamata di Android SDK include isTranscriptionActive
e addOnIsTranscriptionActiveChangedListener
come parte dell'oggetto Call
. Per le nuove versioni beta, queste API sono state trasformate in una funzionalità estesa di Call
proprio come descritto di seguito.
La trascrizione delle chiamate è una funzionalità estesa dell'oggetto principale Call
. È prima necessario ottenere l'oggetto funzionalità di trascrizione:
TranscriptionCallFeature callTranscriptionFeature = call.feature(Features.TRANSCRIPTION);
Quindi, per verificare se la chiamata è in fase di trascrizione, controllare la proprietà isTranscriptionActive
di callTranscriptionFeature
. Restituisce boolean
.
boolean isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive();
È anche possibile sottoscrivere le modifiche nella trascrizione:
private void handleCallOnIsTranscriptionChanged(PropertyChangedEvent args) {
boolean isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive();
}
callTranscriptionFeature.addOnIsTranscriptionActiveChangedListener(handleCallOnIsTranscriptionChanged);
Configurare il sistema
Seguire questa procedura per configurare il sistema.
Creare il progetto Xcode
In Xcode creare un nuovo progetto iOS e selezionare il modello Single View Application. Questo articolo usa il framework SwiftUI, quindi è consigliabile impostare Language su Swift e impostare Interface su SwiftUI.
In questo articolo non verranno creati test. È possibile deselezionare la casella di controllo Includi i test.
Installare il pacchetto e le dipendenze usando CocoaPods
Creare un file Podfile per l'applicazione, come questo esempio:
platform :ios, '13.0' use_frameworks! target 'AzureCommunicationCallingSample' do pod 'AzureCommunicationCalling', '~> 1.0.0' end
Eseguire
pod install
.Aprire
.xcworkspace
con Xcode.
Richiedere l'accesso al microfono
Per accedere al microfono del dispositivo, è necessario aggiornare l'elenco delle proprietà informazioni dell'app usando NSMicrophoneUsageDescription
. Impostare il valore associato su una stringa inclusa nella finestra di dialogo usata dal sistema per richiedere l'accesso dall'utente.
Fare clic con il pulsante destro del mouse sulla voce info.plist dell'albero del progetto, quindi selezionare Apri come>codice sorgente. Aggiungere le righe seguenti nella sezione di primo livello <dict>
e quindi salvare il file.
<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>
Configurare il framework dell'app
Aprire il file del ContentView.swift
progetto. Aggiungere una dichiarazione import
all'inizio del file per importare la libreria AzureCommunicationCalling
. Inoltre, importare AVFoundation
: È necessario per le richieste di autorizzazione audio nel codice.
import AzureCommunicationCalling
import AVFoundation
Inizializzare CallAgent
Per creare un'istanza CallAgent
da CallClient
, è necessario usare un metodo callClient.createCallAgent
che restituisce in modo asincrono un oggetto CallAgent
dopo l'inizializzazione.
Per creare un client di chiamata, passare un oggetto 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)
}
Passare l'oggetto CommunicationTokenCredential
creato in CallClient
e impostare il nome visualizzato:
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")
}
})
Avviso
Fino alla versione 1.1.0 e alla versione beta 1.1.0-beta.1 di Servizi di comunicazione di Azure, la chiamata di iOS SDK ha isTranscriptionActive
come parte dell'oggetto Call
e didChangeTranscriptionState
fa parte del delegato CallDelegate
. Per le nuove versioni beta, queste API sono state trasformate in una funzionalità estesa di Call
proprio come descritto di seguito.
La trascrizione delle chiamate è una funzionalità estesa dell'oggetto principale Call
. È prima necessario ottenere l'oggetto funzionalità di trascrizione:
let callTranscriptionFeature = call.feature(Features.transcription)
Quindi, per verificare se la chiamata è trascritta, controllare la proprietà isTranscriptionActive
di callTranscriptionFeature
. Restituisce Bool
.
let isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive;
È anche possibile sottoscrivere le modifiche di trascrizione implementando TranscriptionCallFeatureDelegate
delegato nella classe con l'evento didChangeTranscriptionState
:
callTranscriptionFeature.delegate = self
// didChangeTranscriptionState is a member of TranscriptionCallFeatureDelegate
public func transcriptionCallFeature(_ transcriptionCallFeature: TranscriptionCallFeature, didChangeTranscriptionState args: PropertyChangedEventArgs) {
let isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive
}
Configurare il sistema
Seguire questa procedura per configurare il sistema.
Creare il progetto di Visual Studio
Per un'app piattaforma UWP (Universal Windows Platform), in Visual Studio 2022 creare un nuovo progetto App vuota (Windows universale). Dopo aver immesso il nome del progetto, è possibile scegliere qualsiasi Windows SDK successivo alla versione 10.0.17763.0.
Per un'app WinUI 3, creare un nuovo progetto con il modello App vuota, Incluso nel pacchetto (WinUI 3 in Desktop) per configurare un'app WinUI 3 a pagina singola. È necessario SDK per app di Windows in versione 1.3 o successiva.
Installare il pacchetto e le dipendenze usando Gestione pacchetti NuGet
Le API e le librerie di SDK Chiamata sono disponibili pubblicamente tramite un pacchetto NuGet.
Per trovare, scaricare e installare il pacchetto NuGet Calling SDK:
- Aprire Gestione pacchetti NuGet selezionando Strumenti>Gestione pacchetti NuGet> Gestisci pacchetti NuGet per la soluzione.
- Selezionare Sfoglia e quindi immettere Azure.Communication.Calling.WindowsClient nella casella di ricerca.
- Assicurarsi che la casella di controllo Includi versione preliminare sia selezionata.
- Selezionare il pacchetto Azure.Communication.Calling.WindowsClient e quindi selezionare Azure.Communication.Calling.WindowsClient 1.4.0-beta.1 o una versione più recente.
- Selezionare la casella di controllo corrispondente al progetto Servizi di comunicazione di Azure nel riquadro destro.
- Selezionare Installa.
La trascrizione delle chiamate è una funzionalità estesa dell'oggetto principale Call
. È prima necessario ottenere l'oggetto funzionalità di trascrizione:
TranscriptionCallFeature transcriptionFeature = call.Features.Transcription;
Quindi, per verificare se la chiamata è in fase di trascrizione, controllare la proprietà IsTranscriptionActive
di transcriptionFeature
. Restituisce boolean
.
boolean isTranscriptionActive = transcriptionFeature.isTranscriptionActive;
È anche possibile sottoscrivere le modifiche nella trascrizione:
private async void Call__OnIsTranscriptionActiveChanged(object sender, PropertyChangedEventArgs args)
boolean isTranscriptionActive = transcriptionFeature.IsTranscriptionActive();
}
transcriptionFeature.IsTranscriptionActiveChanged += Call__OnIsTranscriptionActiveChanged;