Condividi tramite


Osservare le funzionalità dell'utente

Ho l'autorizzazione per attivare il video, ho l'autorizzazione per attivare il microfono, ho l'autorizzazione per condividere lo schermo? Queste autorizzazioni sono alcuni esempi di funzionalità dei partecipanti che è possibile apprendere dall'API delle funzionalità. L'apprendimento delle funzionalità consente di creare un'interfaccia utente che mostra solo i pulsanti correlati alle azioni di cui l'utente locale dispone delle autorizzazioni.

Prerequisiti

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'istanza Call Agent si disconnette con questo errore.
  • connectionIssue: se si verifica un problema con il client che si connette a Microsoft infrascture, dopo molti tentativi Call Agent espone l'errore connectionIssue.

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

Funzionalità è una funzionalità estesa dell'API principale Call e consente di ottenere le funzionalità del partecipante locale nella chiamata corrente.

La funzionalità consente di eseguire la registrazione per un listener di eventi, per essere in ascolto delle modifiche alle funzionalità.

Registrarsi per le funzionalità:

const capabilitiesFeature = this.call.feature(Features.Capabilities);

Ottenere le funzionalità del partecipante locale: l'oggetto Funzionalità dispone delle funzionalità dei partecipanti locali ed è di tipo ParticipantCapabilities. Le proprietà delle Funzionalità includono:

  • isPresent indica se è presente una funzionalità.
  • reason indica il motivo della risoluzione della funzionalità.
const capabilities =  capabilitiesFeature.capabilities;

Sottoscrivere l'evento 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;
        }
    }
});

Funzionalità esposte

  • turnVideoOn: possibilità di attivare i video
  • unmuteMic: possibilità di attivare il microfono
  • shareScreen: possibilità di condividere lo schermo
  • removeParticipant: possibilità di rimuovere un partecipante
  • hangUpForEveryOne: possibilità di interrompere una chiamata per tutti
  • addCommunicationUser: possibilità di aggiungere un utente di comunicazione
  • addTeamsUser: possibilità di aggiungere un utente di Teams
  • addPhoneNumber: possibilità di aggiungere un numero di telefono
  • manageLobby: possibilità di gestire la sala di attesa (solo beta)
  • spotlightParticipant: possibilità di mettere in evidenza un partecipante (solo beta)
  • removeParticipantsSpotlight: possibilità di rimuovere i partecipanti in evidenza (solo beta)
  • startLiveCaptions: possibilità di avviare sottotitoli in tempo reale (solo beta)
  • stopLiveCaptions: possibilità di avviare sottotitoli in tempo reale (solo beta)
  • raiseHand: possibilità di alzare la mano (solo beta)
  • muteOthers: possibilità di disattivare il microfono temporaneamente ai partecipanti remoti della riunione
  • reaction: possibilità di reagire nella riunione (solo beta)
  • viewAttendeeNames: possibilità di visualizzare i nomi dei partecipanti alla riunione

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

Funzionalità è una funzionalità estesa dell'API principale Call e consente di ottenere le funzionalità del partecipante locale nella chiamata corrente.

La funzionalità consente di eseguire la registrazione per un listener di eventi, per essere in ascolto delle modifiche alle funzionalità.

Per usare la funzionalità di chiamata Funzionalità di Windows, il primo passaggio consiste nell'ottenere l'oggetto API di Funzionalità:

Ottenere le Funzionalità

private CapabilitiesCallFeature capabilitiesCallFeature;
capabilitiesCallFeature = call.feature(Features.CAPABILITIES);

Ottenere le funzionalità del partecipante locale

L'oggetto Funzionalità dispone delle funzionalità dei partecipanti locali ed è di tipo ParticipantCapability. Le proprietà delle Funzionalità includono:

  • isAllowed indica se è possibile usare una funzionalità.
  • reason indica il motivo della risoluzione della funzionalità.
List<ParticipantCapability> capabilities = capabilitiesCallFeature.getCapabilities();

Sottoscrivere l'evento 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());
    }
}

Funzionalità esposte

  • TurnVideoOn: possibilità di attivare i video
  • UnmuteMicrophone: possibilità di riattivare il microfono
  • ShareScreen: possibilità di condividere lo schermo
  • RemoveParticipant: possibilità di rimuovere un partecipante
  • HangUpForEveryOne: possibilità di interrompere una chiamata per tutti
  • AddCommunicationUser: possibilità di aggiungere un utente alla comunicazione
  • AddTeamsUser: possibilità di aggiungere un utente di Teams
  • AddPhoneNumber: possibilità di aggiungere un numero di telefono
  • ManageLobby: possibilità di gestire la sala di attesa
  • SpotlightParticipant: possibilità di mettere in evidenza un partecipante
  • RemoveParticipantsSpotlight: possibilità di rimuovere i partecipanti in evidenza
  • BlurBackground: possibilità di sfocatura dello sfondo
  • CustomBackground: possibilità di applicare uno sfondo personalizzato
  • StartLiveCaptions: possibilità di avviare sottotitoli in tempo reale
  • RaiseHand: possibilità di alzare la mano
  • MuteOthers: possibilità di disattivare il microfono temporaneamente ai partecipanti remoti della riunione

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:

  1. Aprire Gestione pacchetti NuGet selezionando Strumenti>Gestione pacchetti NuGet> Gestisci pacchetti NuGet per la soluzione.
  2. Selezionare Sfoglia e quindi immettere Azure.Communication.Calling.WindowsClient nella casella di ricerca.
  3. Assicurarsi che la casella di controllo Includi versione preliminare sia selezionata.
  4. Selezionare il pacchetto Azure.Communication.Calling.WindowsClient e quindi selezionare Azure.Communication.Calling.WindowsClient 1.4.0-beta.1 o una versione più recente.
  5. Selezionare la casella di controllo corrispondente al progetto Servizi di comunicazione di Azure nel riquadro destro.
  6. Selezionare Installa.

Funzionalità è una funzionalità estesa dell'API principale Call e consente di ottenere le funzionalità del partecipante locale nella chiamata corrente.

La funzionalità consente di eseguire la registrazione per un listener di eventi, per essere in ascolto delle modifiche alle funzionalità.

Per usare la funzionalità di chiamata Funzionalità di Windows, il primo passaggio consiste nell'ottenere l'oggetto API di Funzionalità:

Ottenere le Funzionalità

private CapabilitiesCallFeature capabilitiesCallFeature;
capabilitiesCallFeature = call.Features.Capabilities;

Ottenere le funzionalità del partecipante locale

L'oggetto Funzionalità dispone delle funzionalità dei partecipanti locali ed è di tipo ParticipantCapability. Le proprietà delle Funzionalità includono:

  • isAllowed indica se è possibile usare una funzionalità.
  • reason indica il motivo della risoluzione della funzionalità.
var capabilities = capabilitiesCallFeature.Capabilities;

Sottoscrivere l'evento 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());
    }
}

Funzionalità esposte

  • TurnVideoOn: possibilità di attivare i video
  • UnmuteMicrophone: possibilità di riattivare il microfono
  • ShareScreen: possibilità di condividere lo schermo
  • RemoveParticipant: possibilità di rimuovere un partecipante
  • HangUpForEveryOne: possibilità di interrompere una chiamata per tutti
  • AddCommunicationUser: possibilità di aggiungere un utente alla comunicazione
  • AddTeamsUser: possibilità di aggiungere un utente di Teams
  • AddPhoneNumber: possibilità di aggiungere un numero di telefono
  • ManageLobby: possibilità di gestire la sala di attesa
  • SpotlightParticipant: possibilità di mettere in evidenza un partecipante
  • RemoveParticipantsSpotlight: possibilità di rimuovere i partecipanti in evidenza
  • BlurBackground: possibilità di sfocatura dello sfondo
  • CustomBackground: possibilità di applicare uno sfondo personalizzato
  • StartLiveCaptions: possibilità di avviare sottotitoli in tempo reale
  • RaiseHand: possibilità di alzare la mano
  • MuteOthers: possibilità di disattivare il microfono temporaneamente ai partecipanti remoti della riunione

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.

Screenshot che mostra la finestra per la creazione di un progetto in Xcode.

Installare il pacchetto e le dipendenze usando CocoaPods

  1. 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
    
  2. Eseguire pod install.

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

Funzionalità è una funzionalità estesa dell'API principale Call e consente di ottenere le funzionalità del partecipante locale nella chiamata corrente.

La funzionalità consente di eseguire la registrazione per un listener di eventi, per essere in ascolto delle modifiche alle funzionalità.

Per usare la funzionalità di chiamata Funzionalità di Windows, il primo passaggio consiste nell'ottenere l'oggetto API di Funzionalità:

Ottenere le Funzionalità

let capabilitiesCallFeature =call.feature(Features.capabilities)

Ottenere le funzionalità del partecipante locale

L'oggetto Funzionalità dispone delle funzionalità dei partecipanti locali ed è di tipo ParticipantCapability. Le proprietà delle Funzionalità includono:

  • isAllowed indica se è possibile usare una funzionalità.
  • reason indica il motivo della risoluzione della funzionalità.
var capabilities = capabilitiesCallFeature.capabilities

Sottoscrivere l'evento capabilitiesChanged


capabilitiesCallFeature.delegate = CapabilitiesCallDelegate()

public class CapabilitiesCallDelegate : CapabilitiesCallFeatureDelegate
{
    public func capabilitiesCallFeature(_ capabilitiesCallFeature: CapabilitiesCallFeature, didChangeCapabilities args: CapabilitiesChangedEventArgs) {
        let changedReason = args.reason
        let changedCapabilities = args.changedCapabilities
    }
}

Funzionalità esposte

  • TurnVideoOn: possibilità di attivare i video
  • UnmuteMicrophone: possibilità di riattivare il microfono
  • ShareScreen: possibilità di condividere lo schermo
  • RemoveParticipant: possibilità di rimuovere un partecipante
  • HangUpForEveryOne: possibilità di interrompere una chiamata per tutti
  • AddCommunicationUser: possibilità di aggiungere un utente alla comunicazione
  • AddTeamsUser: possibilità di aggiungere un utente di Teams
  • AddPhoneNumber: possibilità di aggiungere un numero di telefono
  • ManageLobby: possibilità di gestire la sala di attesa
  • SpotlightParticipant: possibilità di mettere in evidenza un partecipante
  • RemoveParticipantsSpotlight: possibilità di rimuovere i partecipanti in evidenza
  • BlurBackground: possibilità di sfocatura dello sfondo
  • CustomBackground: possibilità di applicare uno sfondo personalizzato
  • StartLiveCaptions: possibilità di avviare sottotitoli in tempo reale
  • RaiseHand: possibilità di alzare la mano
  • MuteOthers: possibilità di disattivare il microfono temporaneamente ai partecipanti remoti della riunione

Tipi di chiamata supportati

La funzionalità è al momento supportata solo per il tipo di chiamata di Sale di Servizi di comunicazione di Azure e il tipo di chiamata riunione di Teams

Motivi

La tabella seguente fornisce informazioni aggiuntive sul motivo per cui l'azione non è disponibile e fornisce suggerimenti su come renderla disponibile.

Motivo Descrizione Risoluzione
Capable L'azione è consentita.
CapabilityNotApplicableForTheCallType Il tipo di chiamata blocca l'azione. Prendere in considerazione un altro tipo di chiamata se è necessaria questa azione. I tipi di chiamata sono: chiamata 1:1, chiamata di gruppo, chiamata 1:1 di interoperabilità di Teams, chiamata di gruppo di interoperabilità Teams 1:1, sala e riunione.
ClientRestricted L'ambiente di runtime blocca questa azione Sbloccare l'azione nel dispositivo modificando il sistema operativo, i browser, la piattaforma o l'hardware. È possibile trovare l'ambiente supportato nella documentazione.
UserPolicyRestricted I criteri dell'utente di Microsoft 365 bloccano l'azione. Abilitare questa azione modificando i criteri assegnati all'organizzatore della riunione, iniziatore della chiamata o dell'utente di Microsoft 365 tramite ACS SDK. L'utente di destinazione dipende dal tipo di azione. Altre informazioni sui criteri di Teams in Teams. L'amministratore di Teams può modificare i criteri.
RoleRestricted Il ruolo assegnato blocca l'azione. Alzare di livello l'utente a un ruolo diverso per rendere disponibile l'azione.
FeatureNotSupported La caratteristica delle funzionalità non è supportata in questo tipo di chiamata. Segnalare nel canale Feedback di Azure che si desidera avere questa funzionalità disponibile per questo tipo di chiamata.
MeetingRestricted L'opzione riunione di Teams blocca l'azione. L'organizzatore della riunione di Teams o il co-organizzatore devono modificare l'opzione riunione per abilitare questa azione.
NotInitialized La caratteristica delle funzionalità non è ancora inizializzata. Sottoscrivere l'evento capabilitiesChanged in this.call.feature(Features.Capabilities) per sapere quando viene inizializzata la funzionalità.
NotCapable Il tipo di utente blocca l'azione. L'azione è consentita solo per un tipo specifico di identità. Abilitare questa azione usando l'identità di Microsoft 365.
TeamsPremiumLicenseRestricted All'utente di Microsoft 365 deve essere assegnata la licenza di Teams Premium. Abilitare questa azione assegnando la licenza di Teams Premium all'organizzatore delle riunioni di Teams o all'utente di Microsoft 365 tramite SDK. L'utente di destinazione dipende dal tipo di azione. L'amministratore di Microsoft 365 può assegnare la licenza necessaria.
ExplicitConsentRequired Il consenso è necessario per consentire l'azione. Fornire il consenso per la registrazione o la trascrizione chiamando il metodo grantTeamsConsent() in this.call.feature(Features.Recording) o this.call.feature(Features.Transcription) .

Passaggi successivi