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
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Nasazený prostředek komunikační služby. Vytvořte prostředek komunikační služby.
- Přístupový token uživatele pro povolení volajícího klienta. Další informace najdete v tématu Vytváření a správa přístupových tokenů.
- Volitelné: Dokončením rychlého startu přidáte do aplikace hlasové hovory.
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 deviceManager
můž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řipojeno – Call Agent
Hodnota connectionStatue znamená, Connected
že klientská sada SDK je připojená a dokáže přijímat oznámení z infrastruktury Microsoftu.
Odpojeno – Call 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 pokusechCall 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:
- Otevřete Správce balíčků NuGet výběrem nástrojů>NuGet Správce balíčků> Nabídky NuGet pro řešení.
- Vyberte Procházet a do vyhledávacího pole zadejte Azure.Communication.Calling.WindowsClient .
- Ujistěte se, že je zaškrtnuté políčko Zahrnout předběžné verze .
- Vyberte balíček Azure.Communication.Calling.WindowsClient a pak vyberte Azure.Communication.Calling.WindowsClient 1.4.0-beta.1 nebo novější verzi.
- Zaškrtněte políčko odpovídající projektu Azure Communication Services v pravém podokně.
- 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 .
Instalace balíčku a závislostí pomocí CocoaPods
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
Spusťte
pod install
.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) . |