Quickstart voor gespreksopname
Deze quickstart helpt u aan de slag te gaan met Gespreksopname voor spraak- en videogesprekken. Als u de OPNAME-API's voor gesprekken wilt gaan gebruiken, moet u een aanroep hebben. Zorg ervoor dat u bekend bent met de client-SDK voor aanroepen en/of gespreksautomatisering om de ervaring voor het aanroepen van eindgebruikers te bouwen.
Voorbeeldcode
U kunt de voorbeeld-app downloaden uit GitHub.
Vereisten
- U hebt een Azure-account met een actief abonnement nodig.
- Implementeer een Communication Service-resource. Noteer uw resource verbindingsreeks.
- Abonneer u op gebeurtenissen via Azure Event Grid.
- De .NET SDK downloaden
Voordat u begint
Call Recording-API's maken uitsluitend gebruik van de serverCallId
opname om opname te initiëren. Er zijn een aantal methoden die u kunt gebruiken om het serverCallId
op te halen, afhankelijk van uw scenario:
Scenario's voor gespreksautomatisering
- Wanneer u gespreksautomatisering gebruikt, hebt u twee opties om het
serverCallId
volgende te verkrijgen:- Zodra een aanroep is gemaakt, wordt er een
serverCallId
geretourneerd als een eigenschap van deCallConnected
gebeurtenis nadat een oproep tot stand is gebracht. Meer informatie over het ophalen van een aanroep Verbinding maken ed-gebeurtenis vanuit de Call Automation SDK. - Zodra u de aanroep of een aanroep hebt beantwoord, wordt deze
serverCallId
geretourneerd als een eigenschap van respectievelijk deAnswerCallResult
ofCreateCallResult
API-antwoorden.
- Zodra een aanroep is gemaakt, wordt er een
SDK-scenario's aanroepen
- Wanneer u client-SDK aanroepen gebruikt, kunt u deze
serverCallId
ophalen met behulp van degetServerCallId
methode voor de aanroep. Gebruik dit voorbeeld om te leren hoe u serverCallId op te halen uit de client-SDK voor aanroepen.
Laten we aan de slag gaan met een paar eenvoudige stappen.
1. Een Call Automation-client maken
Call Recording-API's maken deel uit van de Azure Communication Services Call Automation-bibliotheken . Daarom is het nodig om een Call Automation-client te maken.
Als u een gespreksautomatiseringsclient wilt maken, gebruikt u uw Communication Services-verbindingsreeks en geeft u deze door aan CallAutomationClient
object.
CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");
2. Start de opnamesessie met StartRecordingOptions met behulp van de API StartAsync
Gebruik de serverCallId
ontvangen tijdens het starten van het gesprek.
- RecordingContent wordt gebruikt om het inhoudstype van de opname door te geven. Audio gebruiken
- RecordingChannel wordt gebruikt om het type opnamekanaal door te geven. Gebruik gemengd of ongemixt.
- RecordingFormat wordt gebruikt om de indeling van de opname door te geven. Gebruik 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. Opname starten - Bring Your Own Azure Blob Store
Begin met opnemen met uw eigen Azure Blob Storage die is gedefinieerd om het opnamebestand op te slaan zodra de opname is voltooid.
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. Opnamesessie starten met de pauzemodus ingeschakeld met de API 'StartAsync'
Notitie
Opnamen moeten worden hervat om het opnamebestand te kunnen genereren.
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. Alleen voor Niet-gemengd - Geef een gebruiker op kanaal 0 op
Als u niet-vermengde audio-opnamebestanden wilt produceren, kunt u de AudioChannelParticipantOrdering
functionaliteit gebruiken om op te geven welke gebruiker u wilt opnemen op kanaal 0. De rest van de deelnemers worden toegewezen aan een kanaal terwijl ze spreken. Als u maar niet gebruikt RecordingChannel.Unmixed
AudioChannelParticipantOrdering
, wijst Gespreksopname kanaal 0 toe aan de eerste deelnemer die spreekt.
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. Alleen voor Unmixed - Kanaalaffiniteit opgeven
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);
Het StartAsync
API-antwoord bevat de recordingId
opnamesessie.
3. Opnamesessie stoppen met 'StopAsync' API
Gebruik de recordingId
ontvangen reactie van StartAsync
.
var stopRecording = await callAutomationClient.GetCallRecording().StopAsync(recordingId);
4. Opnamesessie onderbreken met de API 'PauseAsync'
Gebruik de recordingId
ontvangen reactie van StartAsync
.
var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);
5. Opnamesessie hervatten met de API ResumeAsync
Gebruik de recordingId
ontvangen reactie van StartAsync
.
var resumeRecording = await callAutomationClient.GetCallRecording().ResumeAsync(recordingId);
6. Opnamebestand downloaden met de API 'DownloadToAsync'
Gebruik een Azure Event Grid-webhook of een andere geactiveerde actie om uw services op de hoogte te stellen wanneer de opgenomen media gereed zijn om te worden gedownload.
Een Event Grid-melding Microsoft.Communication.RecordingFileStatusUpdated
wordt gepubliceerd wanneer een opname gereed is voor het ophalen, meestal een paar minuten nadat het opnameproces is voltooid (bijvoorbeeld een vergadering is beëindigd, de opname is gestopt). Opname van gebeurtenismeldingen zijn onder andere contentLocation
en metadataLocation
, die worden gebruikt om zowel opgenomen media als een bestand met opnamemetagegevens op te halen.
Voorbeeld van het gebeurtenisschema:
{
"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
}
Gebruik DownloadToAsync
de API voor het downloaden van de opgenomen media.
var recordingDownloadUri = new Uri(contentLocation);
var response = await callAutomationClient.GetCallRecording().DownloadToAsync(recordingDownloadUri, fileName);
De downloadLocation
voor de opname kan worden opgehaald uit het contentLocation
kenmerk van het recordingChunk
. DownloadToAsync
de methode downloadt de inhoud naar de opgegeven bestandsnaam.
7. Opname-inhoud verwijderen met de API DeleteAsync
Api gebruiken DeleteAsync
voor het verwijderen van de opname-inhoud (bijvoorbeeld opgenomen media, metagegevens)
var recordingDeleteUri = new Uri(deleteLocation);
var response = await callAutomationClient.GetCallRecording().DeleteAsync(recordingDeleteUri);
Voorbeeldcode
U kunt de voorbeeld-app downloaden uit GitHub.
Vereisten
- U hebt een Azure-account met een actief abonnement nodig.
- Implementeer een Communication Service-resource. Noteer uw resource verbindingsreeks.
- Abonneer u op gebeurtenissen via Azure Event Grid.
- De Java SDK downloaden
Voordat u begint
Call Recording-API's maken uitsluitend gebruik van de serverCallId
opname om opname te initiëren. Er zijn een aantal methoden die u kunt gebruiken om het serverCallId
op te halen, afhankelijk van uw scenario:
Scenario's voor gespreksautomatisering
- Wanneer u gespreksautomatisering gebruikt, hebt u twee opties om het
serverCallId
volgende te verkrijgen:- Zodra een aanroep is gemaakt, wordt er een
serverCallId
geretourneerd als een eigenschap van deCallConnected
gebeurtenis nadat een oproep tot stand is gebracht. Meer informatie over het ophalen van een aanroep Verbinding maken ed-gebeurtenis vanuit de Call Automation SDK. - Zodra u de aanroep of een aanroep hebt beantwoord, wordt deze
serverCallId
geretourneerd als een eigenschap van respectievelijk deAnswerCallResult
ofCreateCallResult
API-antwoorden.
- Zodra een aanroep is gemaakt, wordt er een
SDK-scenario's aanroepen
- Wanneer u client-SDK aanroepen gebruikt, kunt u deze
serverCallId
ophalen met behulp van degetServerCallId
methode voor de aanroep. Gebruik dit voorbeeld om te leren hoe u serverCallId op te halen uit de client-SDK voor aanroepen.
Laten we aan de slag gaan met een paar eenvoudige stappen.
1. Een Call Automation-client maken
Call Recording-API's maken deel uit van de Azure Communication Services Call Automation-bibliotheken . Daarom is het nodig om een Call Automation-client te maken.
Als u een gespreksautomatiseringsclient wilt maken, gebruikt u uw Communication Services-verbindingsreeks en geeft u deze door aan CallAutomationClient
object.
CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
.connectionString("<acsConnectionString>")
.buildClient();
2. Start de opnamesessie met StartRecordingOptions met behulp van de API 'startWithResponse'
Gebruik de serverCallId
ontvangen tijdens het starten van het gesprek.
- RecordingContent wordt gebruikt om het inhoudstype van de opname door te geven. AUDIO gebruiken
- RecordingChannel wordt gebruikt om het type opnamekanaal door te geven. Gebruik MIXED of UNMIXED.
- RecordingFormat wordt gebruikt om de indeling van de opname door te geven. Gebruik 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. Opname starten - Bring Your Own Azure Blob Store
Start de opnamesessie met uw eigen Azure Blob Storage om het opnamebestand op te slaan zodra de opname is voltooid.
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. Opnamesessie starten met de pauzemodus ingeschakeld met de API 'StartAsync'
Notitie
Opnamen moeten worden hervat om het opnamebestand te kunnen genereren.
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. Alleen voor Niet-gemengd - Geef een gebruiker op kanaal 0 op
Als u niet-vermengde audio-opnamebestanden wilt produceren, kunt u de AudioChannelParticipantOrdering
functionaliteit gebruiken om op te geven welke gebruiker u wilt opnemen op kanaal 0. De rest van de deelnemers wordt tijdens het spreken toegewezen aan een kanaal. Als u maar RecordingChannel.Unmixed
niet gebruikt AudioChannelParticipantOrdering
, wijst Gespreksopname kanaal 0 toe aan de eerste deelnemer die spreekt.
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. Alleen voor Unmixed - Kanaalaffiniteit opgeven
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);
Het startWithResponse
API-antwoord bevat de recordingId
opnamesessie.
3. Opnamesessie stoppen met 'stopWithResponse' API
Gebruik de recordingId
ontvangen reactie van startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.stopWithResponse(response.getValue().getRecordingId(), null);
4. Opnamesessie onderbreken met de API 'pauseWithResponse'
Gebruik de recordingId
ontvangen reactie van startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.pauseWithResponse(response.getValue().getRecordingId(), null);
5. Opnamesessie hervatten met de API 'resumeWithResponse'
Gebruik de recordingId
ontvangen reactie van startWithResponse
.
Response<Void> response = callAutomationClient.getCallRecording()
.resumeWithResponse(response.getValue().getRecordingId(), null);
6. Opnamebestand downloaden met de API 'downloadToWithResponse'
Gebruik een Azure Event Grid-webhook of een andere geactiveerde actie om uw services op de hoogte te stellen wanneer de opgenomen media gereed zijn om te worden gedownload.
Een Event Grid-melding Microsoft.Communication.RecordingFileStatusUpdated
wordt gepubliceerd wanneer een opname gereed is voor het ophalen, meestal een paar minuten nadat het opnameproces is voltooid (bijvoorbeeld een vergadering is beëindigd, de opname is gestopt). Opname van gebeurtenismeldingen zijn onder andere contentLocation
en metadataLocation
, die worden gebruikt om zowel opgenomen media als een bestand met opnamemetagegevens op te halen.
Hieronder ziet u een voorbeeld van het gebeurtenisschema.
{
"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
}
Gebruik downloadToWithResponse
de klassemethode voor het downloaden van CallRecording
de opgenomen media. Hieronder volgen de ondersteunde parameters voor downloadToWithResponse
de methode:
contentLocation
: URL van Azure Communication Services waar de inhoud zich bevindt.destinationPath
: Bestandslocatie.parallelDownloadOptions
: Een optioneel ParallelDownloadOptions-object om te wijzigen hoe de parallelle download werkt.overwrite
: Waar om het bestand te overschrijven als het bestaat.context
: Een context die de aanvraagcontext vertegenwoordigt.
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);
De inhoudslocatie en document-id's voor de opnamebestanden kunnen respectievelijk worden opgehaald uit respectievelijk de contentLocation
velden en documentId
velden.recordingChunk
7. Opname-inhoud verwijderen met de API deleteWithResponse.
Gebruik deleteWithResponse
de klassemethode voor het verwijderen van CallRecording
de opgenomen media. Hieronder volgen de ondersteunde parameters voor deleteWithResponse
de methode:
deleteLocation
: Url van Azure Communication Services waar de inhoud die moet worden verwijderd zich bevindt.context
: Een context die de aanvraagcontext vertegenwoordigt.
Response<Void> deleteResponse = callAutomationClient.getCallRecording().deleteWithResponse(deleteLocation, context);
De verwijderlocatie voor de opname kan worden opgehaald uit het deleteLocation
veld van de Event Grid-gebeurtenis.
Voorbeeldcode
U kunt de voorbeeld-app downloaden uit GitHub.
Vereisten
- U hebt een Azure-account met een actief abonnement nodig.
- Implementeer een Communication Service-resource. Noteer uw resource verbindingsreeks.
- Abonneer u op gebeurtenissen via Azure Event Grid.
- Python 3.7+.
Voordat u begint
Call Recording-API's maken uitsluitend gebruik van de serverCallId
opname om opname te initiëren. Er zijn een aantal methoden die u kunt gebruiken om het serverCallId
op te halen, afhankelijk van uw scenario:
Scenario's voor gespreksautomatisering
- Wanneer u gespreksautomatisering gebruikt, hebt u twee opties om het
serverCallId
volgende te verkrijgen:- Zodra een aanroep is gemaakt, wordt er een
serverCallId
geretourneerd als een eigenschap van deCallConnected
gebeurtenis nadat een oproep tot stand is gebracht. Meer informatie over het ophalen van een aanroep Verbinding maken ed-gebeurtenis vanuit de Call Automation SDK. - Zodra u de aanroep of een aanroep hebt beantwoord, wordt deze
serverCallId
geretourneerd als een eigenschap van respectievelijk deAnswerCallResult
ofCreateCallResult
API-antwoorden.
- Zodra een aanroep is gemaakt, wordt er een
SDK-scenario's aanroepen
- Wanneer u client-SDK aanroepen gebruikt, kunt u de
serverCallId
variabele voor de aanroep ophalen met behulp van deserver_call_id
variabele. Gebruik dit voorbeeld om te leren hoe u serverCallId op te halen uit de client-SDK voor aanroepen.
Laten we aan de slag gaan met een paar eenvoudige stappen.
1. Een Call Automation-client maken
Call Recording-API's maken deel uit van de Azure Communication Services Call Automation-bibliotheken . Daarom is het nodig om een Call Automation-client te maken.
Als u een gespreksautomatiseringsclient wilt maken, gebruikt u uw Communication Services-verbindingsreeks en geeft u deze door aan CallAutomationClient
object.
call_automation_client = CallAutomationClient.from_connection_string("<ACSConnectionString>")
2. Start de opnamesessie start_recording API
Gebruik de serverCallId
ontvangen tijdens het starten van het gesprek.
- RecordingContent wordt gebruikt om het inhoudstype van de opname door te geven. Audio gebruiken
- RecordingChannel wordt gebruikt om het type opnamekanaal door te geven. Gebruik gemengd of ongemixt.
- RecordingFormat wordt gebruikt om de indeling van de opname door te geven. Gebruik 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. Opname starten - Bring Your Own Azure Blob Store
Begin met opnemen met uw eigen Azure Blob Storage die is gedefinieerd om het opnamebestand op te slaan zodra de opname is voltooid.
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. Opnamesessie starten met de pauzemodus ingeschakeld met de API 'StartAsync'
Notitie
Opnamen moeten worden hervat om het opnamebestand te kunnen genereren.
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. Alleen voor Niet-gemengd - Geef een gebruiker op kanaal 0 op
Als u niet-vermengde audio-opnamebestanden wilt produceren, kunt u de AudioChannelParticipantOrdering
functionaliteit gebruiken om op te geven welke gebruiker u wilt opnemen op kanaal 0. De rest van de deelnemers wordt tijdens het spreken toegewezen aan een kanaal. Als u maar RecordingChannel.Unmixed
niet gebruikt AudioChannelParticipantOrdering
, wijst Gespreksopname kanaal 0 toe aan de eerste deelnemer die spreekt.
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. Alleen voor Unmixed - Kanaalaffiniteit opgeven
_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])
Het StartAsync
API-antwoord bevat de recordingId
opnamesessie.
3. Stop de opnamesessie met behulp van de API 'stop_recording'
Gebruik de recording_id
ontvangen reactie van start_recording
.
stop_recording = call_automation_client.stop_recording(recording_id = recording_id)
4. Opnamesessie onderbreken met de API 'pause_recording'
Gebruik de recording_id
ontvangen reactie van start_recording
.
pause_recording = call_automation_client.pause_recording(recording_id = recording_id)
5. Opnamesessie hervatten met de API 'resume_recording'
Gebruik de recording_id
ontvangen reactie van start_recording
.
resume_recording = call_automation_client.resume_recording(recording_id = recording_id)
6. Opnamebestand downloaden met de API 'download_recording'
Gebruik een Azure Event Grid-webhook of een andere geactiveerde actie om uw services op de hoogte te stellen wanneer de opgenomen media gereed zijn om te worden gedownload.
Een Event Grid-melding Microsoft.Communication.RecordingFileStatusUpdated
wordt gepubliceerd wanneer een opname gereed is voor het ophalen, meestal een paar minuten nadat het opnameproces is voltooid (bijvoorbeeld een vergadering is beëindigd, de opname is gestopt). Opname van gebeurtenismeldingen zijn onder andere contentLocation
en metadataLocation
, die worden gebruikt om zowel opgenomen media als een bestand met opnamemetagegevens op te halen.
Hieronder ziet u een voorbeeld van het gebeurtenisschema.
{
"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
}
Gebruik download_recording
de API voor het downloaden van de opgenomen media.
response = recording_data = call_automation_client.download_recording(content_location)
with open("<file_name>", "wb") as binary_file:
binary_file.write(recording_data.read())
De downloadLocation
voor de opname kan worden opgehaald uit het contentLocation
kenmerk van het recordingChunk
. download_recording
de methode download de inhoud in bytes.
7. Opname-inhoud verwijderen met de API 'delete_recording'
Api gebruiken delete_recording
voor het verwijderen van de opname-inhoud (bijvoorbeeld opgenomen media, metagegevens)
response = call_automation_client.delete_recording(delete_location);
Voorbeeldcode
U kunt de voorbeeld-app downloaden uit GitHub.
Vereisten
- U hebt een Azure-account met een actief abonnement nodig.
- Implementeer een Communication Service-resource. Noteer uw resource verbindingsreeks.
- Abonneer u op gebeurtenissen via Azure Event Grid.
- Node.js Active LTS- en Maintenance LTS-versies (aanbevolen 8.11.1 en 10.14.1)
Voordat u begint
Call Recording-API's maken uitsluitend gebruik van de serverCallId
opname om opname te initiëren. Er zijn een aantal methoden die u kunt gebruiken om het serverCallId
op te halen, afhankelijk van uw scenario:
Scenario's voor gespreksautomatisering
- Wanneer u gespreksautomatisering gebruikt, hebt u twee opties om het
serverCallId
volgende te verkrijgen:- Zodra een aanroep is gemaakt, wordt er een
serverCallId
geretourneerd als een eigenschap van deCallConnected
gebeurtenis nadat een oproep tot stand is gebracht. Meer informatie over het ophalen van een aanroep Verbinding maken ed-gebeurtenis vanuit de Call Automation SDK. - Zodra u de aanroep of een aanroep hebt beantwoord, wordt deze
serverCallId
geretourneerd als een eigenschap van respectievelijk deAnswerCallResult
ofCreateCallResult
API-antwoorden.
- Zodra een aanroep is gemaakt, wordt er een
SDK-scenario's aanroepen
- Wanneer u client-SDK aanroepen gebruikt, kunt u deze
serverCallId
ophalen met behulp van degetServerCallId
methode voor de aanroep. Gebruik dit voorbeeld om te leren hoe u serverCallId op te halen uit de client-SDK voor aanroepen.
Laten we aan de slag gaan met een paar eenvoudige stappen.
1. Een Call Automation-client maken
Call Recording-API's maken deel uit van de Azure Communication Services Call Automation-bibliotheken . Daarom is het nodig om een Call Automation-client te maken.
Als u een gespreksautomatiseringsclient wilt maken, gebruikt u uw Communication Services-verbindingsreeks en geeft u deze door aan CallAutomationClient
object.
const callAutomationClient = new CallAutomationClient.CallAutomationClient("<ACSConnectionString>");
2. Start de opnamesessie met StartRecordingOptions met behulp van de API StartAsync
Gebruik de serverCallId
ontvangen tijdens het starten van het gesprek.
- RecordingContent wordt gebruikt om het inhoudstype van de opname door te geven. Audio gebruiken
- RecordingChannel wordt gebruikt om het type opnamekanaal door te geven. Gebruik gemengd of ongemixt.
- RecordingFormat wordt gebruikt om de indeling van de opname door te geven. Gebruik 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. Opname starten - Bring Your Own Azure Blob Store
Begin met opnemen met uw eigen Azure Blob Storage die is gedefinieerd om het opnamebestand op te slaan zodra de opname is voltooid.
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. Opnamesessie starten met de pauzemodus ingeschakeld met de API 'StartAsync'
Notitie
Opnamen moeten worden hervat om het opnamebestand te kunnen genereren.
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. Alleen voor Niet-gemengd - Geef een gebruiker op kanaal 0 op
Als u niet-vermengde audio-opnamebestanden wilt produceren, kunt u de AudioChannelParticipantOrdering
functionaliteit gebruiken om op te geven welke gebruiker u wilt opnemen op kanaal 0. De rest van de deelnemers wordt tijdens het spreken toegewezen aan een kanaal. Als u maar RecordingChannel.Unmixed
niet gebruikt AudioChannelParticipantOrdering
, wijst Gespreksopname kanaal 0 toe aan de eerste deelnemer die spreekt.
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. Alleen voor Unmixed - Kanaalaffiniteit opgeven
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);
Het StartAsync
API-antwoord bevat de recordingId
opnamesessie.
3. Opnamesessie stoppen met 'stop' API
Gebruik de recordingId
ontvangen reactie van start
.
var stopRecording = await callAutomationClient.getCallRecording().stop(recordingId);
4. Opnamesessie onderbreken met de API onderbreken
Gebruik de recordingId
ontvangen reactie van start
.
var pauseRecording = await callAutomationClient.getCallRecording().pause(recordingId);
5. Opnamesessie hervatten met de API ResumeAsync
Gebruik de recordingId
ontvangen reactie van start
.
var resumeRecording = await callAutomationClient.getCallRecording().resume(recordingId);
6. Opnamebestand downloaden met de API 'DownloadToAsync'
Gebruik een Azure Event Grid-webhook of een andere geactiveerde actie om uw services op de hoogte te stellen wanneer de opgenomen media gereed zijn om te worden gedownload.
Een Event Grid-melding Microsoft.Communication.RecordingFileStatusUpdated
wordt gepubliceerd wanneer een opname gereed is voor het ophalen, meestal een paar minuten nadat het opnameproces is voltooid (bijvoorbeeld een vergadering is beëindigd, de opname is gestopt). Opname van gebeurtenismeldingen zijn onder andere contentLocation
en metadataLocation
, die worden gebruikt om zowel opgenomen media als een bestand met opnamemetagegevens op te halen.
Hieronder ziet u een voorbeeld van het gebeurtenisschema.
{
"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
}
Gebruik downloadToPath
de API voor het downloaden van de opgenomen media.
var response = await callAutomationClient.getCallRecording().downloadToPath(contentLocation, fileName);
De downloadLocation
voor de opname kan worden opgehaald uit het contentLocation
kenmerk van het recordingChunk
. DownloadToAsync
de methode download de inhoud in de opgegeven bestandsnaam.
7. Opname-inhoud verwijderen met de API DeleteAsync
Api gebruiken delete
voor het verwijderen van de opname-inhoud (bijvoorbeeld opgenomen media, metagegevens)
var response = await callAutomationClient.getCallRecording().delete(deleteLocation);
Resources opschonen
Als u een Communication Services-abonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd. Meer informatie over het opschonen van resources.
Volgende stappen
Raadpleeg voor meer informatie de volgende artikelen:
- Download onze voorbeeld-apps voor het opnemen van java-, Python- en JavaScript-aanroepen
- Meer informatie over gespreksopname
- Meer informatie over Gespreksautomatisering