Sdílet prostřednictvím


Sledování možností uživatele

Mám oprávnění k zapnutí videa, mám oprávnění k zapnutí mikrofonu, mám oprávnění ke sdílení obrazovky? Tato oprávnění jsou příklady schopností účastníků, se kterými se můžete učit z rozhraní API pro funkce. Seznámení s možnostmi může pomoct vytvořit uživatelské rozhraní, které zobrazuje jenom tlačítka související s akcemi, ke kterým má místní uživatel oprávnění.

Požadavky

Nainstalujte sadu SDK .

npm install Pomocí příkazu nainstalujte sadu AZURE Communication Services Common and Calling SDK pro JavaScript:

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

Inicializace požadovaných objektů

Pro CallClient většinu operací volání se vyžaduje instance. Když vytvoříte novou CallClient instanci, můžete ji nakonfigurovat s vlastními možnostmi, jako je Logger instance.

CallClient S instancí můžete vytvořit CallAgent instanci voláním createCallAgent. Tato metoda asynchronně vrátí CallAgent objekt instance.

Metoda createCallAgent se používá CommunicationTokenCredential jako argument. Přijímá přístupový token uživatele.

K přístupu deviceManagermůžete použít metodu getDeviceManager v CallClient instanci .

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 nejlépe spravovat připojení sady SDK k infrastruktuře Microsoftu

Tato Call Agent instance vám pomůže spravovat hovory (pro připojení nebo zahájení hovorů). Aby bylo možné pracovat s vaší sadou SDK volání, musí se připojit k infrastruktuře Microsoftu, aby bylo možné dostávat oznámení o příchozích hovorech a koordinovat další podrobnosti volání. Máte Call Agent dva možné stavy:

PřipojenoCall Agent Hodnota connectionStatue znamená, Connected že klientská sada SDK je připojená a dokáže přijímat oznámení z infrastruktury Microsoftu.

OdpojenoCall Agent Hodnota Disconnected connectionStatue stavů existuje problém, který brání sadě SDK, aby se správně připojil. Call Agent by se mělo znovu vytvořit.

  • invalidToken: Pokud vypršela platnost tokenu nebo je neplatná Call Agent instance, odpojí se s touto chybou.
  • connectionIssue: Pokud došlo k problému s klientem, který se připojuje k infrascture Microsoftu, po mnoha opakovaných pokusech Call Agent connectionIssue se zobrazí chyba.

Zkontrolujte, jestli je vaše místní Call Agent infrastruktura připojená k infrastruktuře Microsoftu, a to kontrolou aktuální hodnoty connectionState vlastnosti. Během aktivního volání můžete naslouchat connectionStateChanged události a zjistit, jestli Call Agent se změny ze stavu Připojeno k Odpojeno .

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

Funkce funkcí je rozšířená funkce základního Call rozhraní API a umožňuje získat možnosti místního účastníka v aktuálním volání.

Tato funkce umožňuje zaregistrovat se k naslouchacímu procesu událostí, abyste mohli naslouchat změnám schopností.

Zaregistrovat se k funkcím:

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

Získejte možnosti místního účastníka: Objekt Capabilities má schopnosti místních účastníků a je typu ParticipantCapabilities. Mezi vlastnosti schopností patří:

  • isPresent označuje, jestli je k dispozici funkce.
  • důvod řešení schopností.
const capabilities =  capabilitiesFeature.capabilities;

Přihlášení k odběru capabilitiesChanged události:

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

Vystavené možnosti

  • turnVideoOn: Možnost zapnout video
  • zrušit ztlumení: Schopnost zapnout mikrofon
  • shareScreen: Schopnost sdílet obrazovku
  • removeParticipant: Možnost odebrat účastníka
  • hangUpForEveryOne: Schopnost zavěsit pro všechny
  • addCommunicationUser: Možnost přidat komunikačního uživatele
  • addTeamsUser: Možnost přidat uživatele Teams
  • addPhoneNumber: Možnost přidat telefonní číslo
  • manageLobby: Schopnost spravovat předsálí (jenom beta verze)
  • spotlightParticipant: Schopnost vybrat účastníka (pouze beta verze)
  • removeParticipantsSpotlight: Možnost odebrat spotlight účastníka (pouze beta verze)
  • startLiveCaptions: Možnost spustit živé titulky (pouze beta verze)
  • stopLiveCaptions: Schopnost zastavit živé titulky (pouze beta verze)
  • raiseHand: Schopnost zvednout ruku (pouze beta verze)
  • muteOthers: Schopnost ztlumit vzdálené účastníky schůzky
  • reakce: Schopnost reagovat na schůzce (pouze beta verze)
  • viewAttendeeNames: Možnost zobrazit jména účastníků ve schůzce

Nainstalujte sadu SDK .

Vyhledejte soubor na úrovni build.gradle projektu a přidejte mavenCentral() ho do seznamu úložišť v části buildscript a allprojects:

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

Potom do souboru na úrovni build.gradle modulu přidejte do oddílu dependencies následující řádky:

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

Inicializace požadovaných objektů

Pokud chcete vytvořit CallAgent instanci, musíte metodu createCallAgent CallClient volat v instanci. Toto volání asynchronně vrátí CallAgent objekt instance.

Metoda createCallAgent přebírá CommunicationUserCredential jako argument, který zapouzdřuje přístupový token.

Pokud chcete získat přístup DeviceManager, musíte nejprve vytvořit callAgent instanci. Pak můžete použít metodu CallClient.getDeviceManager získat 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();

Pokud chcete nastavit zobrazovaný název volajícího, použijte tuto alternativní metodu:

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

Funkce funkcí je rozšířená funkce základního Call rozhraní API a umožňuje získat možnosti místního účastníka v aktuálním volání.

Tato funkce umožňuje zaregistrovat se k naslouchacímu procesu událostí, abyste mohli naslouchat změnám schopností.

Pokud chcete použít funkci volání Schopností pro Windows, prvním krokem je získání objektu rozhraní API pro funkce Capabilities:

Získání funkcí

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

Získání možností místního účastníka

Objekt Capabilities má schopnosti místních účastníků a je typu ParticipantCapability. Mezi vlastnosti schopností patří:

  • isAllowed označuje, jestli je možné použít funkci.
  • důvod řešení schopností.
List<ParticipantCapability> capabilities = capabilitiesCallFeature.getCapabilities();

Přihlášení k odběru capabilitiesChanged události


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

Vystavené možnosti

  • TurnVideoOn: Možnost zapnout video
  • Zrušit ztlumeníMicrophone: Schopnost zrušit ztlumení mikrofonu
  • Obrazovka ShareScreen: Schopnost sdílet obrazovku
  • RemoveParticipant: Možnost odebrat účastníka
  • HangUpForEveryone: Schopnost zavěsit pro všechny
  • AddCommunicationUser: Možnost přidat komunikačního uživatele
  • AddTeamsUser: Možnost přidat uživatele Teams
  • AddPhoneNumber: Možnost přidat telefonní číslo
  • ManageLobby: Schopnost spravovat předsálí
  • SpotlightParticipant: Schopnost vybrat účastníka
  • RemoveParticipantSpotlight: Možnost odebrat spotlight účastníka
  • Rozostření pozadí: Možnost rozostřit pozadí
  • CustomBackground: Možnost použít vlastní pozadí
  • StartLiveCaptions: Schopnost spustit živé titulky
  • RaiseHand: Schopnost zvednout ruku
  • Ztlumení: Schopnost ztlumit vzdálené účastníky schůzky

Nastavení systému

Podle těchto kroků nastavte systém.

Vytvoření projektu sady Visual Studio

V případě Univerzální platforma Windows aplikace vytvořte v sadě Visual Studio 2022 nový projekt Prázdná aplikace (Universal Windows). Po zadání názvu projektu si můžete vybrat libovolnou sadu Windows SDK později než 10.0.17763.0.

V případě aplikace WinUI 3 vytvořte nový projekt pomocí šablony Prázdná aplikace zabalená (WinUI 3 v desktopové verzi) pro nastavení jednostráňové aplikace WinUI 3. Vyžaduje se sada Windows App SDK verze 1.3 nebo novější.

Instalace balíčku a závislostí pomocí Správce balíčků NuGet

Rozhraní API a knihovny volající sady SDK jsou veřejně dostupné prostřednictvím balíčku NuGet.

Vyhledání, stažení a instalace balíčku NuGet volající sady SDK:

  1. Otevřete Správce balíčků NuGet výběrem nástrojů>NuGet Správce balíčků> Nabídky NuGet pro řešení.
  2. Vyberte Procházet a do vyhledávacího pole zadejte Azure.Communication.Calling.WindowsClient .
  3. Ujistěte se, že je zaškrtnuté políčko Zahrnout předběžné verze .
  4. Vyberte balíček Azure.Communication.Calling.WindowsClient a pak vyberte Azure.Communication.Calling.WindowsClient 1.4.0-beta.1 nebo novější verzi.
  5. Zaškrtněte políčko odpovídající projektu Azure Communication Services v pravém podokně.
  6. Vyberte volbu Instalovat.

Funkce funkcí je rozšířená funkce základního Call rozhraní API a umožňuje získat možnosti místního účastníka v aktuálním volání.

Tato funkce umožňuje zaregistrovat se k naslouchacímu procesu událostí, abyste mohli naslouchat změnám schopností.

Pokud chcete použít funkci volání Schopností pro Windows, prvním krokem je získání objektu rozhraní API pro funkce Capabilities:

Získání funkcí

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

Získání možností místního účastníka

Objekt Capabilities má schopnosti místních účastníků a je typu ParticipantCapability. Mezi vlastnosti schopností patří:

  • isAllowed označuje, jestli je možné použít funkci.
  • důvod řešení schopností.
var capabilities = capabilitiesCallFeature.Capabilities;

Přihlášení k odběru capabilitiesChanged události

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

Vystavené možnosti

  • TurnVideoOn: Možnost zapnout video
  • Zrušit ztlumeníMicrophone: Schopnost zrušit ztlumení mikrofonu
  • Obrazovka ShareScreen: Schopnost sdílet obrazovku
  • RemoveParticipant: Možnost odebrat účastníka
  • HangUpForEveryone: Schopnost zavěsit pro všechny
  • AddCommunicationUser: Možnost přidat komunikačního uživatele
  • AddTeamsUser: Možnost přidat uživatele Teams
  • AddPhoneNumber: Možnost přidat telefonní číslo
  • ManageLobby: Schopnost spravovat předsálí
  • SpotlightParticipant: Schopnost vybrat účastníka
  • RemoveParticipantSpotlight: Možnost odebrat spotlight účastníka
  • Rozostření pozadí: Možnost rozostřit pozadí
  • CustomBackground: Možnost použít vlastní pozadí
  • StartLiveCaptions: Schopnost spustit živé titulky
  • RaiseHand: Schopnost zvednout ruku
  • Ztlumení: Schopnost ztlumit vzdálené účastníky schůzky

Nastavení systému

Podle těchto kroků nastavte systém.

Vytvoření projektu Xcode

V Xcode vytvořte nový projekt pro iOS a vyberte šablonu aplikace s jedním zobrazením . Tento článek používá architekturu SwiftUI, takže byste měli nastavit jazyk na Swift a nastavit rozhraní na SwiftUI.

V tomto článku nebudete vytvářet testy. Zrušte zaškrtnutí políčka Zahrnout testy .

Snímek obrazovky znázorňující okno pro vytvoření projektu v Xcode

Instalace balíčku a závislostí pomocí CocoaPods

  1. Vytvořte pro aplikaci soubor Podfile, například v tomto příkladu:

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

  3. Otevřete .xcworkspace pomocí Xcode.

Vyžádání přístupu k mikrofonu

Pokud chcete získat přístup k mikrofonu zařízení, musíte aktualizovat seznam vlastností informací aplikace pomocí NSMicrophoneUsageDescription. Nastavte přidruženou hodnotu na řetězec, který je součástí dialogového okna, který systém používá k vyžádání přístupu od uživatele.

Klikněte pravým tlačítkem myši na položku Info.plist stromu projektu a pak vyberte Open As>Source Code. Do oddílu nejvyšší úrovně <dict> přidejte následující řádky a pak soubor uložte.

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

Nastavení architektury aplikace

Otevřete soubor projektu ContentView.swift . import Přidejte deklaraci do horní části souboru pro import AzureCommunicationCalling knihovny. Kromě toho import AVFoundation. Potřebujete ho pro žádosti o zvuková oprávnění v kódu.

import AzureCommunicationCalling
import AVFoundation

Inicializace callagentu

Chcete-li vytvořit CallAgent instanci z CallClient, musíte použít metodu callClient.createCallAgent , která asynchronně vrátí CallAgent objekt po inicializaci.

Pokud chcete vytvořit klienta volání, předejte CommunicationTokenCredential objekt:

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 Předejte objekt, který jste vytvořiliCallClient, a nastavte zobrazovaný název:

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

Funkce funkcí je rozšířená funkce základního Call rozhraní API a umožňuje získat možnosti místního účastníka v aktuálním volání.

Tato funkce umožňuje zaregistrovat se k naslouchacímu procesu událostí, abyste mohli naslouchat změnám schopností.

Pokud chcete použít funkci volání Schopností pro Windows, prvním krokem je získání objektu rozhraní API pro funkce Capabilities:

Získání funkcí

let capabilitiesCallFeature =call.feature(Features.capabilities)

Získání možností místního účastníka

Objekt Capabilities má schopnosti místních účastníků a je typu ParticipantCapability. Mezi vlastnosti schopností patří:

  • isAllowed označuje, jestli je možné použít funkci.
  • důvod řešení schopností.
var capabilities = capabilitiesCallFeature.capabilities

Přihlášení k odběru capabilitiesChanged události


capabilitiesCallFeature.delegate = CapabilitiesCallDelegate()

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

Vystavené možnosti

  • TurnVideoOn: Možnost zapnout video
  • Zrušit ztlumeníMicrophone: Schopnost zrušit ztlumení mikrofonu
  • Obrazovka ShareScreen: Schopnost sdílet obrazovku
  • RemoveParticipant: Možnost odebrat účastníka
  • HangUpForEveryone: Schopnost zavěsit pro všechny
  • AddCommunicationUser: Možnost přidat komunikačního uživatele
  • AddTeamsUser: Možnost přidat uživatele Teams
  • AddPhoneNumber: Možnost přidat telefonní číslo
  • ManageLobby: Schopnost spravovat předsálí
  • SpotlightParticipant: Schopnost vybrat účastníka
  • RemoveParticipantSpotlight: Možnost odebrat spotlight účastníka
  • Rozostření pozadí: Možnost rozostřit pozadí
  • CustomBackground: Možnost použít vlastní pozadí
  • StartLiveCaptions: Schopnost spustit živé titulky
  • RaiseHand: Schopnost zvednout ruku
  • Ztlumení: Schopnost ztlumit vzdálené účastníky schůzky

Podporované typy volání

Tato funkce se v současné době podporuje jenom pro typ hovoru v místnostech Azure Communication Services a typ hovoru v týmech pro schůzky.

Důvody

Následující tabulka obsahuje další informace o tom, proč akce není dostupná, a obsahuje tipy, jak zpřístupnit akci.

Důvod Popis Rozlišení
Schopný Akce je povolená.
CapabilityNotApplicableForTheCallType Typ volání blokuje akci. Pokud tuto akci potřebujete, zvažte jiný typ volání. Typy hovorů jsou: 1:1 hovor, skupinový hovor, 1:1 zprostředkovatele komunikace teams, skupinový hovor 1:1 týmový hovor, místnost a schůzka.
ClientRestricted Toto prostředí runtime blokuje tuto akci. Odblokujte akci na zařízení změnou operačního systému, prohlížečů, platformy nebo hardwaru. Podporované prostředí najdete v naší dokumentaci.
UserPolicyRestricted Zásady uživatele Microsoftu 365 zablokuje akci. Tuto akci povolte změnou zásad přiřazených organizátorovi schůzky, iniciátorem hovoru nebo uživatelem Microsoftu 365 pomocí sady ACS SDK. Cílový uživatel závisí na typu akce. Přečtěte si další informace o zásadách Teams v Teams. Správce Teams může změnit zásady.
RoleRestricted Přiřazená role blokuje akci. Zvýšení úrovně uživatele na jinou roli, aby byla akce dostupná.
FeatureNotSupported Funkce funkce není v tomto typu volání podporovaná. Dejte nám vědět v kanálu Azure Feedback, že chcete mít tuto funkci k dispozici pro tento typ volání.
MeetingRestricted Možnost schůzky v Teams blokuje akci. Organizátor schůzky v Teams nebo spoluorganizátor musí změnit možnost schůzky, aby tuto akci povolili.
NotInitialized Funkce funkcí ještě není inicializována. Přihlaste se k odběru události capabilitiesChanged this.call.feature(Features.Capabilities) , abyste věděli, kdy se inicializuje schopnost.
NotCapable Typ uživatele blokuje akci. Akce je povolena pouze pro konkrétní typ identity. Tuto akci povolte pomocí identity Microsoftu 365.
TeamsPremiumLicenseRestricted Uživatel Microsoftu 365 musí mít přiřazenou licenci Teams Premium. Tuto akci povolíte přiřazením licence Teams Premium organizátorovi schůzky Teams nebo uživateli Microsoftu 365 pomocí sady SDK. Cílový uživatel závisí na typu akce. Správce Microsoftu 365 může přiřadit požadovanou licenci.
ExplicitConsentRequired K povolení akce se vyžaduje souhlas. Poskytnutí souhlasu se záznamem nebo přepisem voláním metody grantTeamsConsent() pod this.call.feature(Features.Recording) nebo this.call.feature(Features.Transcription) .

Další kroky