Hantera samtalsinspelning på klienten
Viktigt!
Funktioner som beskrivs i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.
Med samtalsinspelning kan användarna spela in samtal som de gör med Azure Communication Services. I den här artikeln får du lära dig hur du hanterar inspelning på klientsidan. Innan du börjar måste du konfigurera inspelning på serversidan.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- En distribuerad Communication Services-resurs. Skapa en Communication Services-resurs.
- En användaråtkomsttoken för att aktivera den anropande klienten. Mer information finns i Skapa och hantera åtkomsttoken.
- Valfritt: Slutförande av snabbstarten för att lägga till röstsamtal i ditt program.
Installera SDK:n
npm install
Använd kommandot för att installera Azure Communication Services Common och Calling SDK för JavaScript:
npm install @azure/communication-common --save
npm install @azure/communication-calling --save
Initiera nödvändiga objekt
En CallClient
instans krävs för de flesta anropsåtgärder. När du skapar en ny CallClient
instans kan du konfigurera den med anpassade alternativ som en Logger
instans.
Med instansen CallClient
kan du skapa en CallAgent
instans genom att anropa createCallAgent
. Den här metoden returnerar asynkront ett CallAgent
instansobjekt.
Metoden createCallAgent
använder CommunicationTokenCredential
som argument. Den accepterar en användaråtkomsttoken.
Du kan använda getDeviceManager
metoden på instansen CallClient
för att få åtkomst deviceManager
till .
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()
Så här hanterar du SDK-anslutning till Microsoft-infrastruktur på bästa sätt
Instansen Call Agent
hjälper dig att hantera anrop (för att ansluta eller starta samtal). För att kunna arbeta måste din anropande SDK ansluta till Microsofts infrastruktur för att få meddelanden om inkommande samtal och samordna annan samtalsinformation. Du Call Agent
har två möjliga tillstånd:
Anslut ed – Ett Call Agent
connectionStatue-värde Connected
innebär att klient-SDK:t är ansluten och kan ta emot meddelanden från Microsofts infrastruktur.
Frånkopplad – Ett Call Agent
connectionStatue-värde för Disconnected
tillstånd det finns ett problem som hindrar SDK:n från att ansluta korrekt. Call Agent
ska återskapas.
invalidToken
: Om en token har upphört att gälla eller om en ogiltigCall Agent
instans kopplas från med det här felet.connectionIssue
: Om det finns ett problem med att klienten ansluter till Microsoft-infrastrukturen, efter att många återförsökCall Agent
har exponeratconnectionIssue
felet.
Du kan kontrollera om din lokala Call Agent
är ansluten till Microsofts infrastruktur genom att granska det aktuella värdet för connectionState
egenskapen. Under ett aktivt anrop kan du lyssna på connectionStateChanged
händelsen för att avgöra om Call Agent
ändringar från Anslut till frånkopplat tillstånd.
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);
Kommentar
Det här API:et tillhandahålls som en förhandsversion för utvecklare och kan ändras baserat på feedback som vi får. Använd inte det här API:et i en produktionsmiljö. Om du vill använda det här API:et använder du betaversionen av Azure Communication Services Calling Web SDK.
Molninspelning
Samtalsinspelning är en utökad funktion i kärn-API:et för samtal. Du måste först importera samtalsfunktioner från Calling SDK:
import { Features} from "@azure/communication-calling";
Sedan kan du hämta inspelningsfunktionernas API-objekt från anropsinstansen:
const callRecordingApi = call.feature(Features.Recording);
Om du vill kontrollera om anropet registreras kontrollerar du isRecordingActive
egenskapen callRecordingApi
för . Den returnerar Boolean
.
const isRecordingActive = callRecordingApi.isRecordingActive;
Du kan också prenumerera på inspelningsändringar:
const isRecordingActiveChangedHandler = () => {
console.log(callRecordingApi.isRecordingActive);
};
callRecordingApi.on('isRecordingActiveChanged', isRecordingActiveChangedHandler);
Du kan hämta en lista över inspelningar med hjälp recordings
av callRecordingApi
egenskapen . Den returnerar RecordingInfo[]
, som har det aktuella tillståndet för molninspelningen.
const recordings = callRecordingApi.recordings;
recordings.forEach(r => {
console.log("State: ${r.state}");
Du kan också prenumerera recordingsUpdated
på och få en samling uppdaterade inspelningar. Den här händelsen utlöses när det finns en inspelningsuppdatering.
const cloudRecordingsUpdatedHandler = (args: { added: SDK.RecordingInfo[], removed: SDK.RecordingInfo[]}) => {
console.log('Recording started by: ');
args.added?.forEach(a => {
console.log('State: ${a.state}');
});
console.log('Recording stopped by: ');
args.removed?.forEach(r => {
console.log('State: ${r.state}');
});
};
callRecordingApi.on('recordingsUpdated', cloudRecordingsUpdatedHandler );
Installera SDK:n
Leta upp filen build.gradle på projektnivå och lägg till mavenCentral()
i listan med lagringsplatser under buildscript
och allprojects
:
buildscript {
repositories {
...
mavenCentral()
...
}
}
allprojects {
repositories {
...
mavenCentral()
...
}
}
I filen build.gradle på modulnivå lägger du sedan till följande rader i dependencies
avsnittet:
dependencies {
...
implementation 'com.azure.android:azure-communication-calling:1.0.0'
...
}
Initiera nödvändiga objekt
Om du vill skapa en CallAgent
instans måste du anropa createCallAgent
metoden på en CallClient
instans. Det här anropet returnerar asynkront ett CallAgent
instansobjekt.
Metoden createCallAgent
tar CommunicationUserCredential
som ett argument som kapslar in en åtkomsttoken.
Om du vill komma åt DeviceManager
måste du skapa en callAgent
instans först. Sedan kan du använda CallClient.getDeviceManager
metoden för att hämta 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();
Om du vill ange ett visningsnamn för anroparen använder du den här alternativa metoden:
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();
Spela in samtal
Kommentar
Det här API:et tillhandahålls som en förhandsversion för utvecklare och kan ändras baserat på feedback som vi får. Använd inte det här API:et i en produktionsmiljö. Om du vill använda det här API:et använder du betaversionen av Azure Communication Services Calling Android SDK.
Samtalsinspelning är en utökad funktion i kärnobjektet Call
.
Varning
Fram till version 1.1.0 och betaversionen version 1.1.0-beta.1 av Azure Communication Services Calling Android SDK isRecordingActive
och addOnIsRecordingActiveChangedListener
ingick i Call
objektet. För nya betaversioner flyttades dessa API:er som en utökad funktion i Call
.
Du måste först hämta inspelningsfunktionsobjektet:
RecordingCallFeature callRecordingFeature = call.feature(Features.RECORDING);
Kontrollera sedan om anropet registreras genom att granska isRecordingActive
egenskapen callRecordingFeature
för . Den returnerar boolean
.
boolean isRecordingActive = callRecordingFeature.isRecordingActive();
Du kan också prenumerera på inspelningsändringar:
private void handleCallOnIsRecordingChanged(PropertyChangedEvent args) {
boolean isRecordingActive = callRecordingFeature.isRecordingActive();
}
callRecordingFeature.addOnIsRecordingActiveChangedListener(handleCallOnIsRecordingChanged);
Om du vill börja spela in från ditt program följer du först Översikt över samtalsinspelning för stegen för att konfigurera samtalsinspelning.
När du har konfigurerat samtalsinspelning på servern, från ditt Android-program, måste du hämta ServerCallId
värdet från anropet och sedan skicka det till servern för att starta inspelningsprocessen. Du kan hitta värdet ServerCallId
med hjälp getServerCallId()
av från CallInfo
klassen. Du hittar CallInfo
klassen i klassobjektet med hjälp getInfo()
av .
try {
String serverCallId = call.getInfo().getServerCallId().get();
// Send serverCallId to your recording server to start the call recording.
} catch (ExecutionException | InterruptedException e) {
} catch (UnsupportedOperationException unsupportedOperationException) {
}
När du börjar spela in från servern utlöses händelsen handleCallOnIsRecordingChanged
och värdet callRecordingFeature.isRecordingActive()
för är true
.
Precis som när du startar samtalsinspelningen måste du hämta ServerCallId
och skicka den till inspelningsservern om du vill stoppa samtalsinspelningen så att den kan stoppa inspelningen:
try {
String serverCallId = call.getInfo().getServerCallId().get();
// Send serverCallId to your recording server to stop the call recording.
} catch (ExecutionException | InterruptedException e) {
} catch (UnsupportedOperationException unsupportedOperationException) {
}
När du slutar spela in från servern utlöses händelsen handleCallOnIsRecordingChanged
och värdet callRecordingFeature.isRecordingActive()
för är false
.
Konfigurera systemet
Skapa Xcode-projektet
I Xcode skapar du ett nytt iOS-projekt och väljer mallen Enkel vyapp . Den här snabbstarten använder SwiftUI-ramverket, så du bör ange Language till Swift och ange Gränssnitt till SwiftUI.
Du kommer inte att skapa tester under den här snabbstarten. Avmarkera kryssrutan Inkludera tester .
Installera paketet och beroenden med hjälp av CocoaPods
Skapa en Podfile för ditt program, som i det här exemplet:
platform :ios, '13.0' use_frameworks! target 'AzureCommunicationCallingSample' do pod 'AzureCommunicationCalling', '~> 1.0.0' end
Kör
pod install
.Öppna
.xcworkspace
med Xcode.
Begär åtkomst till mikrofonen
För att få åtkomst till enhetens mikrofon måste du uppdatera appens egenskapslista för information med hjälp NSMicrophoneUsageDescription
av . Du anger det associerade värdet till en sträng som ska ingå i dialogrutan som systemet använder för att begära åtkomst från användaren.
Högerklicka på posten Info.plist i projektträdet och välj sedan Öppna som>källkod. Lägg till följande rader i avsnittet på den översta nivån <dict>
och spara sedan filen.
<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>
Konfigurera appramverket
Öppna projektets ContentView.swift-fil . Lägg till en import
deklaration överst i filen för att importera AzureCommunicationCalling
biblioteket. Importera dessutom AVFoundation
. Du behöver den för begäranden om ljudbehörighet i koden.
import AzureCommunicationCalling
import AVFoundation
Initiera CallAgent
Om du vill skapa en CallAgent
instans från CallClient
måste du använda en callClient.createCallAgent
metod som asynkront returnerar ett CallAgent
objekt när det har initierats.
Skicka ett CommunicationTokenCredential
objekt för att skapa en anropsklient:
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)
}
Skicka objektet CommunicationTokenCredential
som du skapade till CallClient
och ange visningsnamnet:
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")
}
})
Spela in samtal
Kommentar
Det här API:et tillhandahålls som en förhandsversion för utvecklare och kan ändras baserat på feedback som vi får. Använd inte det här API:et i en produktionsmiljö. Om du vill använda det här API:et använder du betaversionen av Azure Communication Services Calling iOS SDK.
Samtalsinspelning är en utökad funktion i kärnobjektet Call
.
Varning
Fram till version 1.1.0 och betaversionen version 1.1.0-beta.1 av Azure Communication Services Calling iOS SDK var isRecordingActive
en del av Call
objektet och didChangeRecordingState
ingick i ombudet CallDelegate
. För nya betaversioner flyttades dessa API:er som en utökad funktion i Call
.
Du måste först hämta inspelningsfunktionsobjektet:
let callRecordingFeature = call.feature(Features.recording)
Kontrollera sedan om anropet registreras genom att granska isRecordingActive
egenskapen callRecordingFeature
för . Den returnerar Bool
.
let isRecordingActive = callRecordingFeature.isRecordingActive;
Du kan också prenumerera på inspelningsändringar genom att implementera ombudet RecordingCallFeatureDelegate
för klassen med händelsen didChangeRecordingState
:
callRecordingFeature.delegate = self
// didChangeRecordingState is a member of RecordingCallFeatureDelegate
public func recordingCallFeature(_ recordingCallFeature: RecordingCallFeature, didChangeRecordingState args: PropertyChangedEventArgs) {
let isRecordingActive = recordingFeature.isRecordingActive
}
Om du vill börja spela in från ditt program följer du först Översikt över samtalsinspelning för stegen för att konfigurera samtalsinspelning.
När du har konfigurerat samtalsinspelning på servern, från ditt iOS-program, måste du hämta ServerCallId
värdet från anropet och sedan skicka det till servern för att starta inspelningsprocessen. Du kan hitta värdet ServerCallId
med hjälp getServerCallId()
av från CallInfo
klassen. Du hittar CallInfo
klassen i klassobjektet med hjälp getInfo()
av .
// Send serverCallId to your recording server to start the call recording.
let serverCallId = call.info.getServerCallId(){ (serverId, error) in }
När du börjar spela in från servern utlöses händelsen didChangeRecordingState
och värdet recordingFeature.isRecordingActive
för är true
.
Precis som när du startar samtalsinspelningen måste du hämta ServerCallId
och skicka den till inspelningsservern om du vill stoppa samtalsinspelningen så att den kan stoppa inspelningen:
// Send serverCallId to your recording server to stop the call recording.
let serverCallId = call.info.getServerCallId(){ (serverId, error) in }
När du slutar spela in från servern utlöses händelsen didChangeRecordingState
och värdet recordingFeature.isRecordingActive
för är false
.
Konfigurera systemet
Skapa Visual Studio-projektet
För en UWP-app i Visual Studio 2022 skapar du ett nytt projekt för Tom app (Universell Windows). När du har angett projektnamnet kan du välja valfri Windows SDK senare än 10.0.17763.0.
För en WinUI 3-app skapar du ett nytt projekt med mallen Tom app, Paketerad (WinUI 3 i Desktop) för att konfigurera en WinUI 3-app med en enda sida. SDK för Windows-appar version 1.3 eller senare krävs.
Installera paketet och beroendena med hjälp av NuGet Package Manager
Anropande SDK-API:er och bibliotek är offentligt tillgängliga via ett NuGet-paket.
Följande steg illustrerar hur du hittar, laddar ned och installerar NuGet-paketet Calling SDK:
- Öppna NuGet Package Manager genom att välja Verktyg>NuGet Package Manager>Hantera NuGet-paket för lösning.
- Välj Bläddra och ange
Azure.Communication.Calling.WindowsClient
sedan i sökrutan. - Kontrollera att kryssrutan Inkludera förhandsversion är markerad.
- Välj paketet
Azure.Communication.Calling.WindowsClient
och väljAzure.Communication.Calling.WindowsClient
sedan 1.4.0-beta.1 eller en nyare version. - Markera kryssrutan som motsvarar Communication Services-projektet på den högra fliken.
- Välj knappen Installera.
Spela in samtal
Samtalsinspelning är en utökad funktion i kärnobjektet Call
. Du måste först hämta inspelningsfunktionsobjektet:
RecordingCallFeature recordingFeature = call.Features.Recording;
Kontrollera sedan om anropet registreras genom att granska IsRecordingActive
egenskapen recordingFeature
för . Den returnerar boolean
.
boolean isRecordingActive = recordingFeature.IsRecordingActive;
Du kan också prenumerera på inspelningsändringar:
private async void Call__OnIsRecordingActiveChanged(object sender, PropertyChangedEventArgs args)
boolean isRecordingActive = recordingFeature.IsRecordingActive;
}
recordingFeature.IsRecordingActiveChanged += Call__OnIsRecordingActiveChanged;
Kompatibilitetsinspelning
Efterlevnadsinspelningen spelas in som baseras på Microsoft Teams-principen. Du kan aktivera det med hjälp av den här självstudien: Introduktion till teams principbaserad inspelning för samtal.
Principbaserad inspelning startar automatiskt när en användare som har principen ansluter till ett anrop. Om du vill få ett meddelande från Azure Communication Services om inspelning använder du följande kod:
const callRecordingApi = call.feature(Features.Recording);
const isComplianceRecordingActive = callRecordingApi.isRecordingActive;
const isComplianceRecordingActiveChangedHandler = () => {
console.log(callRecordingApi.isRecordingActive);
};
callRecordingApi.on('isRecordingActiveChanged', isComplianceRecordingActiveChangedHandler);
Du kan också implementera efterlevnadsinspelning med hjälp av en anpassad inspelningsrobot. Se GitHub-exemplet.