Share via


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 serverCallIdopname 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 serverCallIdvolgende te verkrijgen:
    1. Zodra een aanroep is gemaakt, wordt er een serverCallId geretourneerd als een eigenschap van de CallConnected 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.
    2. Zodra u de aanroep of een aanroep hebt beantwoord, wordt deze serverCallId geretourneerd als een eigenschap van respectievelijk de AnswerCallResult of CreateCallResult API-antwoorden.

SDK-scenario's aanroepen

  • Wanneer u client-SDK aanroepen gebruikt, kunt u deze serverCallId ophalen met behulp van de getServerCallId 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.UnmixedAudioChannelParticipantOrdering, 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 serverCallIdopname 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 serverCallIdvolgende te verkrijgen:
    1. Zodra een aanroep is gemaakt, wordt er een serverCallId geretourneerd als een eigenschap van de CallConnected 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.
    2. Zodra u de aanroep of een aanroep hebt beantwoord, wordt deze serverCallId geretourneerd als een eigenschap van respectievelijk de AnswerCallResult of CreateCallResult API-antwoorden.

SDK-scenario's aanroepen

  • Wanneer u client-SDK aanroepen gebruikt, kunt u deze serverCallId ophalen met behulp van de getServerCallId 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 serverCallIdopname 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 serverCallIdvolgende te verkrijgen:
    1. Zodra een aanroep is gemaakt, wordt er een serverCallId geretourneerd als een eigenschap van de CallConnected 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.
    2. Zodra u de aanroep of een aanroep hebt beantwoord, wordt deze serverCallId geretourneerd als een eigenschap van respectievelijk de AnswerCallResult of CreateCallResult API-antwoorden.

SDK-scenario's aanroepen

  • Wanneer u client-SDK aanroepen gebruikt, kunt u de serverCallId variabele voor de aanroep ophalen met behulp van de server_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 serverCallIdopname 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 serverCallIdvolgende te verkrijgen:
    1. Zodra een aanroep is gemaakt, wordt er een serverCallId geretourneerd als een eigenschap van de CallConnected 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.
    2. Zodra u de aanroep of een aanroep hebt beantwoord, wordt deze serverCallId geretourneerd als een eigenschap van respectievelijk de AnswerCallResult of CreateCallResult API-antwoorden.

SDK-scenario's aanroepen

  • Wanneer u client-SDK aanroepen gebruikt, kunt u deze serverCallId ophalen met behulp van de getServerCallId 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: