Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här artikeln beskrivs samtalsinspelning för röst- och videosamtal. Om du vill börja använda API:erna för samtalsinspelning måste du ha ett anrop på plats. Om du vill skapa slutanvändarsamtalsupplevelsen kontrollerar du att du är bekant med SDK för samtalsklient och Samtalsautomation.
Exempelkod
Du kan ladda ned exempelappen från GitHub
Förutsättningar
- Du behöver ett Azure-konto med en aktiv prenumeration.
- Distribuera en kommunikationstjänstresurs. Registrera resursens anslutningssträng.
- Prenumerera på händelser via Azure Event Grid.
- Ladda ned .NET SDK
Innan du börjar
API:er för samtalsinspelning använder uteslutande serverCallId för att initiera inspelningen. Det finns några metoder som du kan använda för att hämta serverCallId beroende på ditt scenario:
Samtalsautomatiseringsscenarier
När du använder Samtalsautomation har du två alternativ för att hämta serverCallId:
When you establish a call, it returns a
serverCallIdas a property of theCallConnectedevent after a call is established. Lär dig hur du hämtar CallConnected-händelsen från Call Automation SDK.När du svarar på samtalet eller när ett anrop skapas, returneras
serverCallIdsom en egenskap i API-svaren förAnswerCallResultrespektiveCreateCallResult.
Calling SDK scenarios
När du använder anropsklientens SDK kan du hämta serverCallId genom att använda getServerCallId-metoden på anropet.
Använd det här exemplet om du vill lära dig hur du hämtar serverCallId från SDK:t för anropande klient.
Nu ska vi komma igång med några enkla steg.
1. Skapa en Call Automation-klient
API:er för samtalsinspelning är en del av Azure Communication Services Call Automation-biblioteken . Därför måste du skapa en Samtalsautomatiseringsklient.
Om du vill skapa en klient för samtalsautomatisering använder du din Communication Services-anslutningssträng och skickar den till CallAutomationClient objekt.
CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");
2. Starta inspelningssessionen med StartRecordingOptions med hjälp av "StartAsync"-API:et
Använd den mottagna serverCallId under initieringen av anropet.
- Använd
RecordingContentför att ange typen av inspelningsinnehåll. AnvändAUDIO. - Använd
RecordingChannelför att skicka inspelningskanaltypen. AnvändMIXEDellerUNMIXED. - Använd
RecordingFormatför att skicka inspelningsformatet. AnvändWAV.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>");
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);
2.1. Starta inspelning – Använd din egen Azure Blob Store
Börja spela in med din avsedda Azure Blob Storage för att lagra den inspelade filen när inspelningen är klar.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>"),
RecordingStorage = RecordingStorage.CreateAzureBlobContainerRecordingStorage(new Uri("<YOUR_STORAGE_CONTAINER_URL>"))
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);
2.2. Starta inspelningssessionen med pausläge aktiverat med hjälp av "StartAsync"-API:et
Anteckning
Inspelningar måste återupptas för att inspelningsfilen ska genereras.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
PauseOnStart = true,
RecordingStateCallbackUri = new Uri("<CallbackUri>");
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);
2.3. Endast för Unmixed – Ange en användare på kanal 0
Om du vill skapa omixade ljudinspelningsfiler kan du använda AudioChannelParticipantOrdering funktionen för att ange vilken användare du vill spela in på kanal 0. Resten av deltagarna tilldelas en kanal medan de talar. Om du använder RecordingChannel.Unmixed men inte använder AudioChannelParticipantOrderingtilldelar samtalsinspelning kanal 0 till den första deltagaren som talar.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>"),
AudioChannelParticipantOrdering = { new CommunicationUserIdentifier("<ACS_USER_MRI>") }
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording().StartAsync(recordingOptions);
2.4. Endast för Unmixed – Ange kanaltillhörighet
var channelAffinity = new ChannelAffinity(new CommunicationUserIdentifier("<ACS_USER_MRI>")) { Channel = 0};
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>"),
ChannelAffinity = new List<ChannelAffinity>{ channelAffinity }
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording().StartAsync(recordingOptions);
API-svaret StartAsync innehåller recordingId av inspelningssessionen.
3. Stoppa inspelningssessionen med HJÄLP av StopAsync API
Använd recordingId som mottagits som svar på StartAsync.
var stopRecording = await callAutomationClient.GetCallRecording().StopAsync(recordingId);
4. Pausa inspelningssessionen med hjälp av PauseAsync API
Använd recordingId som mottagits som svar på StartAsync.
var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);
5. Återuppta inspelningssessionen med hjälp av ResumeAsync API
Använd recordingId som mottagits som svar på StartAsync.
var resumeRecording = await callAutomationClient.GetCallRecording().ResumeAsync(recordingId);
6. Ladda ned inspelningsfil med HJÄLP av DownloadToAsync API
Använd en Azure Event Grid-webbkrok eller annan utlöst åtgärd för att meddela dina tjänster när det inspelade mediet är redo för nedladdning.
Ett Event Grid-meddelande Microsoft.Communication.RecordingFileStatusUpdated publiceras när en inspelning är redo för hämtning, vanligtvis några minuter efter att inspelningen har slutfört bearbetningen (till exempel när mötet slutar eller en inspelning stoppas). Händelsemeddelanden för inspelning inkluderar contentLocation och metadataLocation, som du kan använda för att hämta både inspelade medier och en metadatafil för inspelning.
Exempel på händelseschemat:
{
"id": string, // Unique guid for event
"topic": string, // /subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}
"subject": string, // /recording/call/{call-id}/serverCallId/{serverCallId}
"data": {
"recordingStorageInfo": {
"recordingChunks": [
{
"documentId": string, // Document id for the recording chunk
"contentLocation": string, //Azure Communication Services URL where the content is located
"metadataLocation": string, // Azure Communication Services URL where the metadata for this chunk is located
"deleteLocation": string, // Azure Communication Services URL to use to delete all content, including recording and metadata.
"index": int, // Index providing ordering for this chunk in the entire recording
"endReason": string, // Reason for chunk ending: "SessionEnded", "ChunkMaximumSizeExceeded”, etc.
}
]
},
"recordingStartTime": string, // ISO 8601 date time for the start of the recording
"recordingDurationMs": int, // Duration of recording in milliseconds
"sessionEndReason": string // Reason for call ending: "CallEnded", "InitiatorLeft”, etc.
},
"eventType": string, // "Microsoft.Communication.RecordingFileStatusUpdated"
"dataVersion": string, // "1.0"
"metadataVersion": string, // "1"
"eventTime": string // ISO 8601 date time for when the event was created
}
Använd DownloadToAsync API för att ladda ned det inspelade mediet.
var recordingDownloadUri = new Uri(contentLocation);
var response = await callAutomationClient.GetCallRecording().DownloadToAsync(recordingDownloadUri, fileName);
Fetch the downloadLocation for the recording from the contentLocation attribute of the recordingChunk.
DownloadToAsync Använd metoden för att ladda ned innehållet till ett angivet filnamn.
7. Ta bort inspelningsinnehåll med hjälp av DeleteAsync API
Använd DeleteAsync API för att ta bort inspelningsinnehållet (till exempel inspelat media och metadata).
var recordingDeleteUri = new Uri(deleteLocation);
var response = await callAutomationClient.GetCallRecording().DeleteAsync(recordingDeleteUri);
Exempelkod
Du kan ladda ned exempelappen från GitHub
Förutsättningar
- Du behöver ett Azure-konto med en aktiv prenumeration.
- Distribuera en kommunikationstjänstresurs. Registrera resursens anslutningssträng.
- Prenumerera på händelser via Azure Event Grid.
- Ladda ned Java SDK
Innan du börjar
API:er för samtalsinspelning använder serverCallId uteslutande för att initiera inspelningen. Det finns några metoder som du kan använda för att hämta serverCallId beroende på ditt scenario:
Samtalsautomatiseringsscenarier
När du använder Samtalsautomation har du två alternativ för att hämta serverCallId:
Once a call is created, a
serverCallIdis returned as a property of theCallConnectedevent after a call is established. Lär dig hur du hämtar CallConnected-händelsen från Call Automation SDK.När du svarar på ett samtal eller när ett samtal skapas returneras
serverCallIdsom en egenskap för API-svaren från antingenAnswerCallResultellerCreateCallResult.
Calling SDK scenarios
När du använder anropsklientens SDK kan du hämta serverCallId genom att använda getServerCallId-metoden på anropet.
Använd det här exemplet om du vill lära dig hur du hämtar serverCallId från SDK:t för anropande klient.
Nu ska vi komma igång med några enkla steg.
1. Skapa en Call Automation-klient
API:er för samtalsinspelning är en del av Azure Communication Services Call Automation-biblioteken . Därför måste du skapa en Samtalsautomatiseringsklient.
Om du vill skapa en klient för samtalsautomatisering använder du din Communication Services-anslutningssträng och skickar den till CallAutomationClient objekt.
CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
.connectionString("<acsConnectionString>")
.buildClient();
2. Starta inspelningssessionen med StartRecordingOptions med HJÄLP av startWithResponse API
Använd den mottagna serverCallId under initieringen av anropet.
- Använd
RecordingContentför att ange typen av inspelningsinnehåll. AnvändAUDIO. - Använd
RecordingChannelför att skicka inspelningskanaltypen. AnvändMIXEDellerUNMIXED. - Använd
RecordingFormatför att skicka inspelningsformatet. AnvändWAV.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<serverCallId>"))
.setRecordingChannel(RecordingChannel.UNMIXED)
.setRecordingFormat(RecordingFormat.WAV)
.setRecordingContent(RecordingContent.AUDIO)
.setRecordingStateCallbackUrl("<recordingStateCallbackUrl>");
Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startWithResponse(recordingOptions, null);
2.1. Starta inspelning – Använd din egen Azure Blob Store
Börja spela in med din avsedda Azure Blob Storage för att lagra den inspelade filen när inspelningen är klar.
StartRecordingOptions recordingOptions = new StartRecordingOptions(callLocator)
.setRecordingChannel(RecordingChannel.MIXED)
.setRecordingContent(RecordingContent.AUDIO_VIDEO)
.setRecordingFormat(RecordingFormat.MP4)
.setRecordingStorage(new AzureBlobContainerRecordingStorage("<YOUR_STORAGE_CONTAINER_URL>"));
// //start recording
RecordingStateResult result = callRecording.start(recordingOptions);
2.2. Starta inspelningssessionen med pausläge aktiverat med HJÄLP av StartAsync API
Anteckning
Inspelningar måste återupptas för att inspelningsfilen ska genereras.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<serverCallId>"))
.setRecordingChannel(RecordingChannel.UNMIXED)
.setRecordingFormat(RecordingFormat.WAV)
.setRecordingContent(RecordingContent.AUDIO)
.setRecordingStateCallbackUrl("<recordingStateCallbackUrl>")
.setPauseOnStart(true)
.setAudioChannelParticipantOrdering(List.of(new CommunicationUserIdentifier("<participantMri>")));
Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startWithResponse(recordingOptions, null);
2.3. Endast för Unmixed – Ange en användare på kanal 0
Om du vill skapa omixade ljudinspelningsfiler kan du använda AudioChannelParticipantOrdering funktionen för att ange vilken användare du vill spela in på kanal 0. Resten av deltagarna tilldelas en kanal medan de talar. Om du använder RecordingChannel.Unmixed men inte använder AudioChannelParticipantOrderingtilldelar samtalsinspelning kanal 0 till den första deltagaren som talar.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<serverCallId>"))
.setRecordingChannel(RecordingChannel.UNMIXED)
.setRecordingFormat(RecordingFormat.WAV)
.setRecordingContent(RecordingContent.AUDIO)
.setRecordingStateCallbackUrl("<recordingStateCallbackUrl>")
.setAudioChannelParticipantOrdering(List.of(new CommunicationUserIdentifier("<participantMri>")));
Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startWithResponse(recordingOptions, null);
2.4. Endast för Unmixed – Ange kanaltillhörighet
ChannelAffinity channelAffinity = new ChannelAffinity()
.setParticipant(new PhoneNumberIdentifier("RECORDING_ID"))
.setChannel(0);
List<ChannelAffinity> channelAffinities = Arrays.asList(channelAffinity);
StartRecordingOptions startRecordingOptions = new StartRecordingOptions(new ServerCallLocator(SERVER_CALL_ID))
.setRecordingChannel(RecordingChannel.UNMIXED)
.setRecordingFormat(RecordingFormat.WAV)
.setRecordingContent(RecordingContent.AUDIO)
.setRecordingStateCallbackUrl("<recordingStateCallbackUrl>")
.setChannelAffinity(channelAffinities);
Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startRecordingWithResponse(recordingOptions, null);
API-svaret startWithResponse innehåller recordingId av inspelningssessionen.
3. Stoppa inspelningssessionen med HJÄLP av stopWithResponse API
Använd recordingId som mottagits som svar på startWithResponse.
Response<Void> response = callAutomationClient.getCallRecording()
.stopWithResponse(response.getValue().getRecordingId(), null);
4. Pausa inspelningssessionen med hjälp av pauseWithResponse API
Använd recordingId som mottagits som svar på startWithResponse.
Response<Void> response = callAutomationClient.getCallRecording()
.pauseWithResponse(response.getValue().getRecordingId(), null);
5. Återuppta inspelningssessionen med hjälp av resumeWithResponse API
Använd recordingId som mottagits som svar på startWithResponse.
Response<Void> response = callAutomationClient.getCallRecording()
.resumeWithResponse(response.getValue().getRecordingId(), null);
6. Ladda ned inspelningsfil med HJÄLP av downloadToWithResponse API
Använd en Azure Event Grid-webbkrok eller en annan utlöst åtgärd som ska användas för att meddela dina tjänster när det inspelade mediet är redo för nedladdning.
Ett Event Grid-meddelande Microsoft.Communication.RecordingFileStatusUpdated publiceras när en inspelning är klar för hämtning, vanligtvis några minuter efter att inspelningsprocessen har slutförts (till exempel när mötet avslutas eller inspelningen stoppas). Händelsemeddelanden för inspelning inkluderar contentLocation och metadataLocation, som du kan använda för att hämta både inspelade medier och en metadatafil för inspelning.
Följande kod är ett exempel på händelseschemat.
{
"id": string, // Unique guid for event
"topic": string, // /subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}
"subject": string, // /recording/call/{call-id}/serverCallId/{serverCallId}
"data": {
"recordingStorageInfo": {
"recordingChunks": [
{
"documentId": string, // Document id for the recording chunk
"contentLocation": string, //Azure Communication Services URL where the content is located
"metadataLocation": string, // Azure Communication Services URL where the metadata for this chunk is located
"deleteLocation": string, // Azure Communication Services URL to use to delete all content, including recording and metadata.
"index": int, // Index providing ordering for this chunk in the entire recording
"endReason": string, // Reason for chunk ending: "SessionEnded", "ChunkMaximumSizeExceeded”, etc.
}
]
},
"recordingStartTime": string, // ISO 8601 date time for the start of the recording
"recordingDurationMs": int, // Duration of recording in milliseconds
"sessionEndReason": string // Reason for call ending: "CallEnded", "InitiatorLeft”, etc.
},
"eventType": string, // "Microsoft.Communication.RecordingFileStatusUpdated"
"dataVersion": string, // "1.0"
"metadataVersion": string, // "1"
"eventTime": string // ISO 8601 date time for when the event was created
}
Använd downloadToWithResponse klassmetoden CallRecording för att ladda ned det inspelade mediet. Följande är parametrarna som stöds för downloadToWithResponse metoden:
-
contentLocation: Url för Azure Communication Services där innehållet finns. -
destinationPath: Filplats. -
parallelDownloadOptions: Ett valfrittParallelDownloadOptionsobjekt för att ändra hur den parallella nedladdningen fungerar. -
overwrite: True to overwrite the file if it exists. -
context: En kontext som representerar begärandekontexten.
Boolean overwrite = true;
ParallelDownloadOptions parallelDownloadOptions = null;
Context context = null;
String filePath = String.format(".\\%s.%s", documentId, fileType);
Path destinationPath = Paths.get(filePath);
Response<Void> downloadResponse = callAutomationClient.getCallRecording().downloadToWithResponse(contentLocation, destinationPath, parallelDownloadOptions, overwrite, context);
Innehållsplatsen och dokument-ID:na för inspelningsfilerna kan hämtas från fälten contentLocation och documentId för varje recordingChunk.
7. Ta bort inspelningsinnehåll med hjälp av deleteWithResponse API
Använd deleteWithResponse klassmetoden CallRecording för att ta bort det inspelade mediet. Parametrar som stöds för deleteWithResponse metoden:
-
deleteLocation: Url för Azure Communication Services där innehållet som ska tas bort finns. -
context: En kontext som representerar begärandekontexten.
Response<Void> deleteResponse = callAutomationClient.getCallRecording().deleteWithResponse(deleteLocation, context);
Borttagningsplatsen för inspelningen kan hämtas från deleteLocation fältet för Event Grid-händelsen.
Exempelkod
Du kan ladda ned exempelappen från GitHub
Förutsättningar
- Du behöver ett Azure-konto med en aktiv prenumeration.
- Distribuera en kommunikationstjänstresurs. Registrera resursens anslutningssträng.
- Prenumerera på händelser via Azure Event Grid.
- Python 3.7+.
Innan du börjar
API:er för samtalsinspelning använder uteslutande serverCallId för att initiera inspelningen. Det finns några metoder som du kan använda för att hämta serverCallId beroende på ditt scenario:
Samtalsautomatiseringsscenarier
- När du använder Samtalsautomation har du två alternativ för att hämta
serverCallId:- Once a call is created, a
serverCallIdis returned as a property of theCallConnectedevent after a call is established. Lär dig hur du hämtar CallConnected-händelsen från Call Automation SDK. - När du har besvarat samtalet eller när ett anrop har skapats, returneras
serverCallIdsom en egenskap i api-svaren förAnswerCallResultrespektiveCreateCallResult.
- Once a call is created, a
Calling SDK scenarios
- När du använder SDK för anropande klient kan du hämta
serverCallIdmed hjälp av variabelnserver_call_idi anropet. Använd det här exemplet om du vill lära dig hur du hämtar serverCallId från SDK:t för anropande klient.
Nu ska vi komma igång med några enkla steg!
1. Skapa en Call Automation-klient
API:er för samtalsinspelning är en del av Azure Communication Services Call Automation-biblioteken . Därför är det nödvändigt att skapa en Call Automation-klient.
Om du vill skapa en klient för samtalsautomatisering använder du din Communication Services-anslutningssträng och skickar den till CallAutomationClient objekt.
call_automation_client = CallAutomationClient.from_connection_string("<ACSConnectionString>")
2. Starta inspelningssessionen start_recording API
Använd den mottagna serverCallId under initieringen av anropet.
- Använd
RecordingContentför att ange typen av inspelningsinnehåll. AnvändAUDIO. - Använd
RecordingChannelför att skicka inspelningskanaltypen. AnvändMIXEDellerUNMIXED. - Använd
RecordingFormatför att skicka inspelningsformatet. AnvändWAV.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(server_call_id),
recording_content_type = RecordingContent.Audio,
recording_channel_type = RecordingChannel.Unmixed,
recording_format_type = RecordingFormat.Wav,
recording_state_callback_url = "<CallbackUri>")
2.1. Starta inspelning – Använd din egen Azure Blob Store
Börja spela in med din egen Azure Blob Storage som definierats för att lagra inspelningsfilen när inspelningen är klar.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(server_call_id),
recording_content_type = RecordingContent.Audio,
recording_channel_type = RecordingChannel.Unmixed,
recording_format_type = RecordingFormat.Wav,
recording_state_callback_url = "<CallbackUri>",
recording_storage = AzureBlobContainerRecordingStorage(container_url="<YOUR_STORAGE_CONTAINER_URL>"))
2.2. Starta inspelningssessionen med pausläge aktiverat med hjälp av "StartAsync"-API:et
Anteckning
Inspelningar måste återupptas för att inspelningsfilen ska genereras.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(server_call_id),
recording_content_type = RecordingContent.Audio,
recording_channel_type = RecordingChannel.Unmixed,
recording_format_type = RecordingFormat.Wav,
pause_on_start = true,
recording_state_callback_url = "<CallbackUri>")
2.3. Endast för Unmixed – Ange en användare på kanal 0
Om du vill skapa omixade ljudinspelningsfiler kan du använda AudioChannelParticipantOrdering funktionen för att ange vilken användare du vill spela in på kanal 0. Resten av deltagarna tilldelas en kanal medan de talar. Om du använder RecordingChannel.Unmixed men inte använder AudioChannelParticipantOrderingtilldelar samtalsinspelning kanal 0 till den första deltagaren som talar.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(server_call_id),
recording_content_type = RecordingContent.Audio,
recording_channel_type = RecordingChannel.Unmixed,
recording_format_type = RecordingFormat.Wav,
recording_state_callback_url = "<CallbackUri>",
audio_channel_participant_ordering=[CommunicationUserIdentifier(id="<ACS_USER_MRI>")])
2.4. Endast för Unmixed – Ange kanaltillhörighet
_channel_affinity = ChannelAffinity(target_participant=CommunicationUserIdentifier("<ACS_USER_MRI>"), channel=0)
response = call_automation_client.start_recording(call_locator=ServerCallLocator(server_call_id),
recording_content_type = RecordingContent.Audio,
recording_channel_type = RecordingChannel.Unmixed,
recording_format_type = RecordingFormat.Wav,
recording_state_callback_url = "<CallbackUri>",
channel_affinity=[_channel_affinity])
API-svaret StartAsync innehåller recordingId av inspelningssessionen.
3. Stoppa inspelningssessionen med api:et "stop_recording"
Använd recording_id som mottagits som svar på start_recording.
stop_recording = call_automation_client.stop_recording(recording_id = recording_id)
4. Pausa inspelningssessionen med hjälp av API:et "pause_recording"
Använd recording_id som mottagits som svar på start_recording.
pause_recording = call_automation_client.pause_recording(recording_id = recording_id)
5. Återuppta inspelningssessionen med api:et "resume_recording"
Använd recording_id som mottagits som svar på start_recording.
resume_recording = call_automation_client.resume_recording(recording_id = recording_id)
6. Ladda ned inspelningsfilen med api:et "download_recording"
Använd en Azure Event Grid-webbkrok eller en annan utlöst åtgärd som ska användas för att meddela dina tjänster när det inspelade mediet är redo för nedladdning.
Ett Event Grid-meddelande Microsoft.Communication.RecordingFileStatusUpdated publiceras när en inspelning är klar för hämtning, vanligtvis några minuter efter att inspelningsprocessen har slutförts (till exempel att mötet avslutades eller inspelningen stoppades). Inspelningshändelsemeddelanden inkluderar contentLocation och metadataLocation, som används för att hämta både inspelade medier och en inspelningsmetadatafil.
Följande kod är ett exempel på händelseschemat.
{
"id": string, // Unique guid for event
"topic": string, // /subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}
"subject": string, // /recording/call/{call-id}/serverCallId/{serverCallId}
"data": {
"recordingStorageInfo": {
"recordingChunks": [
{
"documentId": string, // Document id for the recording chunk
"contentLocation": string, //Azure Communication Services URL where the content is located
"metadataLocation": string, // Azure Communication Services URL where the metadata for this chunk is located
"deleteLocation": string, // Azure Communication Services URL to use to delete all content, including recording and metadata.
"index": int, // Index providing ordering for this chunk in the entire recording
"endReason": string, // Reason for chunk ending: "SessionEnded", "ChunkMaximumSizeExceeded”, etc.
}
]
},
"recordingStartTime": string, // ISO 8601 date time for the start of the recording
"recordingDurationMs": int, // Duration of recording in milliseconds
"sessionEndReason": string // Reason for call ending: "CallEnded", "InitiatorLeft”, etc.
},
"eventType": string, // "Microsoft.Communication.RecordingFileStatusUpdated"
"dataVersion": string, // "1.0"
"metadataVersion": string, // "1"
"eventTime": string // ISO 8601 date time for when the event was created
}
Använd download_recording API för att ladda ned det inspelade mediet.
response = recording_data = call_automation_client.download_recording(content_location)
with open("<file_name>", "wb") as binary_file:
binary_file.write(recording_data.read())
Från downloadLocation-attributet av contentLocation kan recordingChunk för inspelningen hämtas. Använd download_recording-metoden för att ladda ned innehållet till byter.
7. Ta bort inspelningsinnehåll med api:et "delete_recording"
Använd delete_recording API för att ta bort inspelningsinnehållet, till exempel inspelade medier och metadata.
response = call_automation_client.delete_recording(delete_location);
Exempelkod
Du kan ladda ned exempelappen från GitHub
Förutsättningar
- Du behöver ett Azure-konto med en aktiv prenumeration.
- Distribuera en kommunikationstjänstresurs. Registrera resursens anslutningssträng.
- Prenumerera på händelser via Azure Event Grid.
- Node.js Active LTS- och Maintenance LTS-versioner (8.11.1 och 10.14.1 rekommenderas)
Innan du börjar
API:er för samtalsinspelning använder uteslutande serverCallId för att initiera inspelningen. Det finns några metoder som du kan använda för att hämta serverCallId beroende på ditt scenario:
Samtalsautomatiseringsscenarier
- När du använder Samtalsautomation har du två alternativ för att hämta
serverCallId:- Once a call is created, a
serverCallIdis returned as a property of theCallConnectedevent after a call is established. Lär dig hur du hämtar en CallConnected-händelse från Call Automation SDK. - När du har besvarat samtalet eller när ett anrop har skapats, returneras
serverCallIdsom en egenskap i api-svaren förAnswerCallResultrespektiveCreateCallResult.
- Once a call is created, a
Calling SDK scenarios
När du använder anropsklientens SDK kan du hämta serverCallId genom att använda getServerCallId-metoden på anropet.
Använd det här exemplet om du vill lära dig hur du hämtar ett serverCallId från SDK:t för anropande klient.
Nu ska vi komma igång med några enkla steg!
1. Skapa en Call Automation-klient
API:er för samtalsinspelning är en del av Azure Communication Services Call Automation-biblioteken . Därför är det nödvändigt att skapa en Call Automation-klient.
Om du vill skapa en klient för samtalsautomatisering använder du din Communication Services-anslutningssträng och skickar den till CallAutomationClient objekt.
const callAutomationClient = new CallAutomationClient.CallAutomationClient("<ACSConnectionString>");
2. Starta inspelningssessionen med StartRecordingOptions med hjälp av "StartAsync"-API:et
Använd den mottagna serverCallId under initieringen av anropet.
- Använd
RecordingContentför att ange typen av inspelningsinnehåll. AnvändAUDIO. - Använd
RecordingChannelför att skicka inspelningskanaltypen. AnvändMIXEDellerUNMIXED. - Använd
RecordingFormatför att skicka inspelningsformatet. AnvändWAV.
var locator: CallLocator = { id: "<ServerCallId>", kind: "serverCallLocator" };
var options: StartRecordingOptions =
{
callLocator: locator,
recordingContent: "audio",
recordingChannel:"unmixed",
recordingFormat: "wav",
recordingStateCallbackEndpointUrl: "<CallbackUri>"
};
var response = await callAutomationClient.getCallRecording().start(options);
2.1. Starta inspelning – Använd din egen Azure Blob Store
Börja spela in med din avsedda Azure Blob Storage för att lagra den inspelade filen när inspelningen är klar.
const recordingStorageKind: RecordingStorageKind = "azureBlobStorage"
const recordingStorage: RecordingStorage = {
recordingStorageKind: recordingStorageKind,
recordingDestinationContainerUrl: "<YOUR_STORAGE_CONTAINER_URL>"
}
var options: StartRecordingOptions = {
callLocator: callLocator,
recordingContent: "audio",
recordingChannel:"unmixed",
recordingFormat: "wav",
recordingStateCallbackEndpointUrl: "<CallbackUri>",
recordingStorage: recordingStorage
};
var response = await callAutomationClient.getCallRecording().start(options);
2.2. Starta inspelningssessionen med pausläge aktiverat med hjälp av "StartAsync"-API:et
Anteckning
Inspelningar måste återupptas för att inspelningsfilen ska genereras.
var locator: CallLocator = { id: "<ServerCallId>", kind: "serverCallLocator" };
var options: StartRecordingOptions =
{
callLocator: locator,
recordingContent: "audio",
recordingChannel:"unmixed",
recordingFormat: "wav",
pauseOnStart: true
recordingStateCallbackEndpointUrl: "<CallbackUri>",
audioChannelParticipantOrdering:[{communicationUserId: "<ACS_USER_MRI>"}]
};
var response = await callAutomationClient.getCallRecording().start(options);
2.3. Endast för Unmixed – Ange en användare på kanal 0
Om du vill skapa omixade ljudinspelningsfiler kan du använda AudioChannelParticipantOrdering funktionen för att ange vilken användare du vill spela in på kanal 0. Resten av deltagarna tilldelas en kanal medan de talar. Om du använder RecordingChannel.Unmixed men inte använder AudioChannelParticipantOrderingtilldelar samtalsinspelning kanal 0 till den första deltagaren som talar.
var locator: CallLocator = { id: "<ServerCallId>", kind: "serverCallLocator" };
var options: StartRecordingOptions =
{
callLocator: locator,
recordingContent: "audio",
recordingChannel:"unmixed",
recordingFormat: "wav",
recordingStateCallbackEndpointUrl: "<CallbackUri>",
audioChannelParticipantOrdering:[{communicationUserId: "<ACS_USER_MRI>"}]
};
var response = await callAutomationClient.getCallRecording().start(options);
2.4. Endast för Unmixed – Ange kanaltillhörighet
var options: StartRecordingOptions =
{
callLocator: locator,
recordingContent: "audio",
recordingChannel:"unmixed",
recordingFormat: "wav",
recordingStateCallbackEndpointUrl: "<CallbackUri>",
ChannelAffinity:
[
{
channel:0,
targetParticipant:{communicationUserId: "<ACS_USER_MRI>"}
}
]
};
var response = await callAutomationClient.getCallRecording().start(options);
API-svaret StartAsync innehåller recordingId av inspelningssessionen.
3. Stoppa inspelningssessionen med hjälp av "stop"-API
Använd recordingId som mottagits som svar på start.
var stopRecording = await callAutomationClient.getCallRecording().stop(recordingId);
4. Pausa inspelningssessionen med hjälp av "pausa" API:et
Använd recordingId som mottagits som svar på start.
var pauseRecording = await callAutomationClient.getCallRecording().pause(recordingId);
5. Återuppta inspelningssessionen med api:et "ResumeAsync"
Använd recordingId som mottagits som svar på start.
var resumeRecording = await callAutomationClient.getCallRecording().resume(recordingId);
6. Ladda ned inspelningsfilen med hjälp av API:et DownloadToAsync
Använd en Azure Event Grid-webbkrok eller en annan utlöst åtgärd som ska användas för att meddela dina tjänster när det inspelade mediet är redo för nedladdning.
Ett Event Grid-meddelande Microsoft.Communication.RecordingFileStatusUpdated publiceras när en inspelning är klar för hämtning, vanligtvis några minuter efter att inspelningsprocessen har slutförts (till exempel att mötet avslutades eller inspelningen stoppades). Inspelningshändelsemeddelanden inkluderar contentLocation och metadataLocation, som används för att hämta både inspelade medier och en inspelningsmetadatafil.
Följande kod är ett exempel på händelseschemat.
{
"id": string, // Unique guid for event
"topic": string, // /subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}
"subject": string, // /recording/call/{call-id}/serverCallId/{serverCallId}
"data": {
"recordingStorageInfo": {
"recordingChunks": [
{
"documentId": string, // Document id for the recording chunk
"contentLocation": string, //Azure Communication Services URL where the content is located
"metadataLocation": string, // Azure Communication Services URL where the metadata for this chunk is located
"deleteLocation": string, // Azure Communication Services URL to use to delete all content, including recording and metadata.
"index": int, // Index providing ordering for this chunk in the entire recording
"endReason": string, // Reason for chunk ending: "SessionEnded", "ChunkMaximumSizeExceeded”, etc.
}
]
},
"recordingStartTime": string, // ISO 8601 date time for the start of the recording
"recordingDurationMs": int, // Duration of recording in milliseconds
"sessionEndReason": string // Reason for call ending: "CallEnded", "InitiatorLeft”, etc.
},
"eventType": string, // "Microsoft.Communication.RecordingFileStatusUpdated"
"dataVersion": string, // "1.0"
"metadataVersion": string, // "1"
"eventTime": string // ISO 8601 date time for when the event was created
}
Använd downloadToPath API för att ladda ned det inspelade mediet.
var response = await callAutomationClient.getCallRecording().downloadToPath(contentLocation, fileName);
Från downloadLocation-attributet av contentLocation kan recordingChunk för inspelningen hämtas.
DownloadToAsync Använd metoden för att ladda ned innehållet till ett angivet filnamn.
7. Ta bort inspelningsinnehåll med hjälp av API:et DeleteAsync
Använd delete API för att ta bort inspelningsinnehållet (till exempel inspelat media, metadata)
var response = await callAutomationClient.getCallRecording().delete(deleteLocation);
Rensa resurser
Om du vill rensa och ta bort en Communication Services-prenumeration kan du ta bort resursen eller resursgruppen. Om du tar bort resursgruppen tas även alla andra resurser som är associerade med den bort. Läs mer om att rensa resurser.
Nästa steg
Mer information finns i följande artiklar:
- Ladda ned våra Exempelappar för Java-, Python- och JavaScript-anropsinspelning .
- Läs mer om samtalsinspelning.
- Läs mer om Samtalsautomation.