Snabbstart för samtalsinspelning
Den här snabbstarten kommer igång med 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. Se till att du är bekant med Att anropa klient-SDK och/eller Samtalsautomation för att skapa slutanvändarsamtalsupplevelsen.
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
Anropa inspelnings-API:er 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
:- När ett anrop har skapats returneras en
serverCallId
som en egenskap förCallConnected
händelsen efter att ett anrop har upprättats. Lär dig hur du hämtar samtal Anslut händelse från Call Automation SDK. - När du svarar på samtalet eller ett anrop har skapats
serverCallId
returneras som en egenskap förAnswerCallResult
api-svaren ellerCreateCallResult
.
- När ett anrop har skapats returneras en
Anropa SDK-scenarier
- När du använder SDK för anropande klient kan du hämta
serverCallId
med hjälpgetServerCallId
av metoden för 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 samtalsautomatiseringsklient använder du din Communication Services-anslutningssträng och skickar den till CallAutomationClient
objektet.
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.
- RecordingContent används för att skicka inspelningsinnehållstypen. Använda ljud
- RecordingChannel används för att skicka inspelningskanaltypen. Använd blandad eller omixad.
- RecordingFormat används för att skicka inspelningsformatet. Använd wav.
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 – Bring Your Own 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.
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
Kommentar
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 till en kanal när de talar. Om du använder RecordingChannel.Unmixed
men inte använder AudioChannelParticipantOrdering
tilldelar 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);
StartAsync
API-svaret innehåller inspelningssessionenrecordingId
.
3. Stoppa inspelningssessionen med hjälp av "StopAsync"-API:et
Använd det recordingId
mottagna svaret för StartAsync
.
var stopRecording = await callAutomationClient.GetCallRecording().StopAsync(recordingId);
4. Pausa inspelningssessionen med hjälp av API:et PauseAsync
Använd det recordingId
mottagna svaret för StartAsync
.
var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);
5. Återuppta inspelningssessionen med api:et "ResumeAsync"
Använd det recordingId
mottagna svaret för StartAsync
.
var resumeRecording = await callAutomationClient.GetCallRecording().ResumeAsync(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 avslutades mötet, inspelningen stoppades). Inspelningshändelsemeddelanden inkluderar contentLocation
och metadataLocation
, som används för att hämta både inspelade medier och en inspelningsmetadatafil.
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);
För downloadLocation
inspelningen kan hämtas från contentLocation
attributet för recordingChunk
. DownloadToAsync
-metoden laddar ned innehållet till det angivna filnamnet.
7. Ta bort inspelningsinnehåll med hjälp av API:et DeleteAsync
Använd DeleteAsync
API för att ta bort inspelningsinnehållet (till exempel inspelat media, 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
Anropa inspelnings-API:er 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
:- När ett anrop har skapats returneras en
serverCallId
som en egenskap förCallConnected
händelsen efter att ett anrop har upprättats. Lär dig hur du hämtar samtal Anslut händelse från Call Automation SDK. - När du svarar på samtalet eller ett anrop har skapats
serverCallId
returneras som en egenskap förAnswerCallResult
api-svaren ellerCreateCallResult
.
- När ett anrop har skapats returneras en
Anropa SDK-scenarier
- När du använder SDK för anropande klient kan du hämta
serverCallId
med hjälpgetServerCallId
av metoden för 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 samtalsautomatiseringsklient använder du din Communication Services-anslutningssträng och skickar den till CallAutomationClient
objektet.
CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
.connectionString("<acsConnectionString>")
.buildClient();
2. Starta inspelningssessionen med StartRecordingOptions med hjälp av API:et "startWithResponse"
Använd den mottagna serverCallId
under initieringen av anropet.
- RecordingContent används för att skicka inspelningsinnehållstypen. Använda LJUD
- RecordingChannel används för att skicka inspelningskanaltypen. Använd MIXED eller UNMIXED.
- RecordingFormat används för att skicka inspelningsformatet. Använd WAV.
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 – Bring Your Own Azure Blob Store
Starta inspelningssessionen med din egen Azure Blob Storage för att lagra inspelningsfilen 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:et
Kommentar
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 kommer att tilldelas till en kanal när de talar. Om du använder RecordingChannel.Unmixed
men inte använder AudioChannelParticipantOrdering
tilldelar 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);
startWithResponse
API-svaret innehåller inspelningssessionenrecordingId
.
3. Stoppa inspelningssessionen med api:et "stopWithResponse"
Använd det recordingId
mottagna svaret för startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.stopWithResponse(response.getValue().getRecordingId(), null);
4. Pausa inspelningssessionen med hjälp av API:et "pauseWithResponse"
Använd det recordingId
mottagna svaret för startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.pauseWithResponse(response.getValue().getRecordingId(), null);
5. Återuppta inspelningssessionen med api:et "resumeWithResponse"
Använd det recordingId
mottagna svaret för startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.resumeWithResponse(response.getValue().getRecordingId(), null);
6. Ladda ned inspelningsfilen med hjälp av "downloadToWithResponse"-API:et
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 avslutades mötet, inspelningen stoppades). Inspelningshändelsemeddelanden inkluderar contentLocation
och metadataLocation
, som används för att hämta både inspelade medier och en inspelningsmetadatafil.
Nedan visas 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 valfritt ParallelDownloadOptions-objekt för att ändra hur den parallella nedladdningen ska fungera.overwrite
: Sant att skriva över filen om den finns.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 API:et deleteWithResponse.
Använd deleteWithResponse
klassmetoden CallRecording
för att ta bort det inspelade mediet. Följande är parametrarna 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
Anropa inspelnings-API:er 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
:- När ett anrop har skapats returneras en
serverCallId
som en egenskap förCallConnected
händelsen efter att ett anrop har upprättats. Lär dig hur du hämtar samtal Anslut händelse från Call Automation SDK. - När du svarar på samtalet eller ett anrop har skapats
serverCallId
returneras som en egenskap förAnswerCallResult
api-svaren ellerCreateCallResult
.
- När ett anrop har skapats returneras en
Anropa SDK-scenarier
- När du använder SDK för anropande klient kan du hämta
serverCallId
med hjälp av variabelnserver_call_id
i 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 samtalsautomatiseringsklient använder du din Communication Services-anslutningssträng och skickar den till CallAutomationClient
objektet.
call_automation_client = CallAutomationClient.from_connection_string("<ACSConnectionString>")
2. Starta inspelningssessionen start_recording API
Använd den mottagna serverCallId
under initieringen av anropet.
- RecordingContent används för att skicka inspelningsinnehållstypen. Använda ljud
- RecordingChannel används för att skicka inspelningskanaltypen. Använd blandad eller omixad.
- RecordingFormat används för att skicka inspelningsformatet. Använd wav.
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 – Bring Your Own 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
Kommentar
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 kommer att tilldelas till en kanal när de talar. Om du använder RecordingChannel.Unmixed
men inte använder AudioChannelParticipantOrdering
tilldelar 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])
StartAsync
API-svaret innehåller inspelningssessionenrecordingId
.
3. Stoppa inspelningssessionen med api:et "stop_recording"
Använd det recording_id
mottagna svaret för 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 det recording_id
mottagna svaret för start_recording
.
pause_recording = call_automation_client.pause_recording(recording_id = recording_id)
5. Återuppta inspelningssessionen med api:et "resume_recording"
Använd det recording_id
mottagna svaret för 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 avslutades mötet, inspelningen stoppades). Inspelningshändelsemeddelanden inkluderar contentLocation
och metadataLocation
, som används för att hämta både inspelade medier och en inspelningsmetadatafil.
Nedan visas 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())
För downloadLocation
inspelningen kan hämtas från contentLocation
attributet för recordingChunk
. download_recording
-metoden laddar ned innehållet till byte.
7. Ta bort inspelningsinnehåll med api:et "delete_recording"
Använd delete_recording
API för att ta bort inspelningsinnehållet (till exempel inspelat media, 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
Anropa inspelnings-API:er 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
:- När ett anrop har skapats returneras en
serverCallId
som en egenskap förCallConnected
händelsen efter att ett anrop har upprättats. Lär dig hur du hämtar samtal Anslut händelse från Call Automation SDK. - När du svarar på samtalet eller ett anrop har skapats
serverCallId
returneras som en egenskap förAnswerCallResult
api-svaren ellerCreateCallResult
.
- När ett anrop har skapats returneras en
Anropa SDK-scenarier
- När du använder SDK för anropande klient kan du hämta
serverCallId
med hjälpgetServerCallId
av metoden för 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 samtalsautomatiseringsklient använder du din Communication Services-anslutningssträng och skickar den till CallAutomationClient
objektet.
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.
- RecordingContent används för att skicka inspelningsinnehållstypen. Använda ljud
- RecordingChannel används för att skicka inspelningskanaltypen. Använd blandad eller omixad.
- RecordingFormat används för att skicka inspelningsformatet. Använd wav.
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 – Bring Your Own 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.
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
Kommentar
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 kommer att tilldelas till en kanal när de talar. Om du använder RecordingChannel.Unmixed
men inte använder AudioChannelParticipantOrdering
tilldelar 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);
StartAsync
API-svaret innehåller inspelningssessionenrecordingId
.
3. Stoppa inspelningssessionen med hjälp av "stop"-API
Använd det recordingId
mottagna svaret för start
.
var stopRecording = await callAutomationClient.getCallRecording().stop(recordingId);
4. Pausa inspelningssessionen med hjälp av "pausa" API:et
Använd det recordingId
mottagna svaret för start
.
var pauseRecording = await callAutomationClient.getCallRecording().pause(recordingId);
5. Återuppta inspelningssessionen med api:et "ResumeAsync"
Använd det recordingId
mottagna svaret för 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 avslutades mötet, inspelningen stoppades). Inspelningshändelsemeddelanden inkluderar contentLocation
och metadataLocation
, som används för att hämta både inspelade medier och en inspelningsmetadatafil.
Nedan visas 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);
För downloadLocation
inspelningen kan hämtas från contentLocation
attributet för recordingChunk
. DownloadToAsync
metoden ladda ned innehållet till det angivna filnamnet.
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