Snelstartgids voor het opnemen van gesprekken

Met deze snelstartgids kunt u aan de slag met Oproepopname voor spraak- en videogesprekken. Als u de API's voor het opnemen van gesprekken wilt gaan gebruiken, moet u een oproep hebben. Zorg ervoor dat u bekend bent met de SDK voor aanroepende client en/of oproepautomatisering om de ervaring voor het bellen door 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-connection string.
  • Abonneer u op gebeurtenissen via Azure Event Grid.
  • De .NET SDK downloaden

Voordat u begint

Oproepopname-API's gebruiken uitsluitend de om de serverCallIdopname te initiëren. Er zijn een aantal methoden die u kunt gebruiken om de serverCallId op te halen, afhankelijk van uw scenario:

Scenario's voor gespreksautomatisering

  • Wanneer u Gespreksautomatisering gebruikt, hebt u twee opties om het serverCallIdvolgende op te halen:
    1. Zodra een aanroep is gemaakt, wordt een serverCallId geretourneerd als een eigenschap van de CallConnected gebeurtenis nadat een aanroep tot stand is gebracht. Meer informatie over de gebeurtenis CallConnected ophalen uit de Call Automation SDK.
    2. Zodra u de aanroep beantwoordt of een aanroep is gemaakt, wordt de serverCallId geretourneerd als een eigenschap van respectievelijk de AnswerCallResultCreateCallResult OF API-antwoorden.

SDK-scenario's aanroepen

  • Wanneer u client-SDK aanroepen gebruikt, kunt u de serverCallId ophalen met behulp van de getServerCallId methode voor de aanroep. Gebruik dit voorbeeld voor meer informatie over het ophalen van serverCallId van de Client-SDK voor oproepen.

Laten we aan de slag gaan met een paar eenvoudige stappen.

1. Een gespreksautomatiseringsclient maken

Api's voor het opnemen van gesprekken maken deel uit van de Azure Communication Services Call Automation-bibliotheken. Daarom is het noodzakelijk om een Call Automation-client te maken. Als u een aanroepautomatiseringsclient wilt maken, gebruikt u uw Communication Services-connection string en geeft u deze door aan CallAutomationClient object.

CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");

2. Start een 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 niet-gemengd.
  • RecordingFormat wordt gebruikt om de indeling van de opname door te geven. Wav gebruiken.
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. Alleen voor unmixed- Geef een gebruiker op kanaal 0 op

Als u niet-gemengd audio-opnamebestanden wilt maken, kunt u de AudioChannelParticipantOrdering functionaliteit gebruiken om op te geven welke gebruiker u wilt opnemen op kanaal 0. De rest van de deelnemers wordt toegewezen aan een kanaal terwijl ze spreken. Als u gebruikt RecordingChannel.Unmixed maar niet gebruikt 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.2. 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 van de opnamesessie.

3. Stop de opnamesessie met behulp van de 'StopAsync'-API

Gebruik de recordingId ontvangen als antwoord van StartAsync.

var stopRecording = await callAutomationClient.GetCallRecording().StopAsync(recordingId);

4. Opnamesessie onderbreken met behulp van de API 'PauseAsync'

Gebruik de recordingId ontvangen als antwoord van StartAsync.

var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);

5. Opnamesessie hervatten met behulp van de API 'ResumeAsync'

Gebruik de recordingId ontvangen als antwoord van StartAsync.

var resumeRecording = await callAutomationClient.GetCallRecording().ResumeAsync(recordingId);

6. Download het opnamebestand met behulp van de API 'DownloadToAsync'

Gebruik een Azure Event Grid webhook of een andere geactiveerde actie moet worden gebruikt om uw services op de hoogte te stellen wanneer de opgenomen media klaar zijn om te worden gedownload.

Er wordt een Event Grid-melding Microsoft.Communication.RecordingFileStatusUpdated gepubliceerd wanneer een opname gereed is om op te halen, meestal een paar minuten nadat het opnameproces is voltooid (bijvoorbeeld de vergadering is beëindigd, de opname is gestopt). Opname van gebeurtenismeldingen omvatten contentLocation en metadataLocation, die worden gebruikt om zowel opgenomen media als een metagegevensbestand voor opname 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
}

Api gebruiken DownloadToAsync 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 de recordingChunk. DownloadToAsync methode downloadt de inhoud naar de opgegeven bestandsnaam.

7. Opname-inhoud verwijderen met de 'DeleteAsync'-API

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-connection string.
  • Abonneer u op gebeurtenissen via Azure Event Grid.
  • De Java SDK downloaden

Voordat u begint

Oproepopname-API's gebruiken uitsluitend de om de serverCallIdopname te initiëren. Er zijn een aantal methoden die u kunt gebruiken om de serverCallId op te halen, afhankelijk van uw scenario:

Scenario's voor gespreksautomatisering

  • Wanneer u Gespreksautomatisering gebruikt, hebt u twee opties om het serverCallIdvolgende op te halen:
    1. Zodra een aanroep is gemaakt, wordt een serverCallId geretourneerd als een eigenschap van de CallConnected gebeurtenis nadat een aanroep tot stand is gebracht. Meer informatie over de gebeurtenis CallConnected ophalen uit de Call Automation SDK.
    2. Zodra u de aanroep beantwoordt of een aanroep is gemaakt, wordt de serverCallId geretourneerd als een eigenschap van respectievelijk de AnswerCallResultCreateCallResult OF API-antwoorden.

SDK-scenario's aanroepen

  • Wanneer u client-SDK aanroepen gebruikt, kunt u de serverCallId ophalen met behulp van de getServerCallId methode voor de aanroep. Gebruik dit voorbeeld voor meer informatie over het ophalen van serverCallId van de Client-SDK voor oproepen.

Laten we aan de slag gaan met een paar eenvoudige stappen.

1. Een gespreksautomatiseringsclient maken

Api's voor het opnemen van gesprekken maken deel uit van de Azure Communication Services Call Automation-bibliotheken. Daarom is het noodzakelijk om een Call Automation-client te maken. Als u een gespreksautomatiseringsclient wilt maken, gebruikt u uw Communication Services-connection string en geeft u deze door aan CallAutomationClient object.

CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
            .connectionString("<acsConnectionString>")
            .buildClient();

2. Opnamesessie starten 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. Alleen voor unmixed- Geef een gebruiker op kanaal 0 op

Als u niet-gemengd audio-opnamebestanden wilt maken, kunt u de AudioChannelParticipantOrdering functionaliteit gebruiken om op te geven welke gebruiker u wilt opnemen op kanaal 0. De rest van de deelnemers wordt toegewezen aan een kanaal terwijl ze spreken. Als u gebruikt RecordingChannel.Unmixed , maar 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.2. 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 van de opnamesessie.

3. Stop de opnamesessie met behulp van de API stopWithResponse

Gebruik de recordingId ontvangen als antwoord van startWithResponse.

Response<Void> response = callAutomationClient.getCallRecording()
               .stopWithResponse(response.getValue().getRecordingId(), null);

4. Opnamesessie onderbreken met behulp van de API pauseWithResponse

Gebruik de recordingId ontvangen als antwoord van startWithResponse.

Response<Void> response = callAutomationClient.getCallRecording()
              .pauseWithResponse(response.getValue().getRecordingId(), null);

5. Opnamesessie hervatten met behulp van de API 'resumeWithResponse'

Gebruik de recordingId ontvangen als antwoord van startWithResponse.

Response<Void> response = callAutomationClient.getCallRecording()
               .resumeWithResponse(response.getValue().getRecordingId(), null);

6. Download het opnamebestand met behulp van de API downloadToWithResponse

Gebruik een Azure Event Grid webhook of een andere geactiveerde actie moet worden gebruikt om uw services op de hoogte te stellen wanneer de opgenomen media klaar zijn om te worden gedownload.

Er wordt een Event Grid-melding Microsoft.Communication.RecordingFileStatusUpdated gepubliceerd wanneer een opname gereed is om op te halen, meestal een paar minuten nadat het opnameproces is voltooid (bijvoorbeeld de vergadering is beëindigd, de opname is gestopt). Opname van gebeurtenismeldingen omvatten contentLocation en metadataLocation, die worden gebruikt om zowel opgenomen media als een metagegevensbestand voor opname 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. Hier volgen de ondersteunde parameters voor downloadToWithResponse de methode:

  • contentLocation: Azure Communication Services URL 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 worden opgehaald uit respectievelijk de contentLocation velden en documentId voor elke recordingChunk.

7. Verwijder opname-inhoud met de API deleteWithResponse.

Gebruik deleteWithResponse de klassemethode CallRecording voor het verwijderen van de opgenomen media. Hier volgen de ondersteunde parameters voor deleteWithResponse de methode:

  • deleteLocation: Azure Communication Services URL waar de inhoud zich bevindt die u wilt verwijderen.
  • context: Een context die de aanvraagcontext vertegenwoordigt.
Response<Void> deleteResponse = callAutomationClient.getCallRecording().deleteWithResponse(deleteLocation, context);

De verwijderingslocatie 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-connection string.
  • Abonneer u op gebeurtenissen via Azure Event Grid.
  • Python 3.7+.

Voordat u begint

Oproepopname-API's gebruiken uitsluitend de om de serverCallIdopname te initiëren. Er zijn een aantal methoden die u kunt gebruiken om de serverCallId op te halen, afhankelijk van uw scenario:

Scenario's voor gespreksautomatisering

  • Wanneer u Gespreksautomatisering gebruikt, hebt u twee opties om het serverCallIdvolgende op te halen:
    1. Zodra een aanroep is gemaakt, wordt een serverCallId geretourneerd als een eigenschap van de CallConnected gebeurtenis nadat een aanroep tot stand is gebracht. Meer informatie over de gebeurtenis CallConnected ophalen uit de Call Automation SDK.
    2. Zodra u de aanroep beantwoordt of een aanroep is gemaakt, wordt de serverCallId geretourneerd als een eigenschap van respectievelijk de AnswerCallResultCreateCallResult OF API-antwoorden.

SDK-scenario's aanroepen

  • Wanneer u client-SDK aanroepen gebruikt, kunt u de serverCallId ophalen met behulp van de server_call_id variabele in de aanroep. Gebruik dit voorbeeld voor meer informatie over het ophalen van serverCallId van de Client-SDK voor oproepen.

Laten we aan de slag gaan met een paar eenvoudige stappen.

1. Een gespreksautomatiseringsclient maken

Api's voor het opnemen van gesprekken maken deel uit van de Azure Communication Services Call Automation-bibliotheken. Daarom is het noodzakelijk om een Call Automation-client te maken. Als u een gespreksautomatiseringsclient wilt maken, gebruikt u uw Communication Services-connection string 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 niet-gemengd.
  • RecordingFormat wordt gebruikt om de indeling van de opname door te geven. Wav gebruiken.
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. Alleen voor unmixed- Geef een gebruiker op kanaal 0 op

Als u niet-gemengd audio-opnamebestanden wilt maken, kunt u de AudioChannelParticipantOrdering functionaliteit gebruiken om op te geven welke gebruiker u wilt opnemen op kanaal 0. De rest van de deelnemers wordt toegewezen aan een kanaal terwijl ze spreken. Als u gebruikt RecordingChannel.Unmixed , maar 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.2. 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 van de opnamesessie.

3. Stop de opnamesessie met behulp van de API 'stop_recording'

Gebruik de recording_id ontvangen als antwoord van start_recording.

stop_recording = call_automation_client.stop_recording(recording_id = recording_id)

4. Opnamesessie onderbreken met behulp van pause_recording API

Gebruik de recording_id ontvangen als antwoord van start_recording.

pause_recording = call_automation_client.pause_recording(recording_id = recording_id)

5. Opnamesessie hervatten met behulp van resume_recording API

Gebruik de recording_id ontvangen als antwoord van start_recording.

resume_recording = call_automation_client.resume_recording(recording_id = recording_id)

6. Download het opnamebestand met behulp van download_recording API

Gebruik een Azure Event Grid webhook of een andere geactiveerde actie moet worden gebruikt om uw services op de hoogte te stellen wanneer de opgenomen media klaar zijn om te worden gedownload.

Er wordt een Event Grid-melding Microsoft.Communication.RecordingFileStatusUpdated gepubliceerd wanneer een opname gereed is om op te halen, meestal een paar minuten nadat het opnameproces is voltooid (bijvoorbeeld de vergadering is beëindigd, de opname is gestopt). Opname van gebeurtenismeldingen omvatten contentLocation en metadataLocation, die worden gebruikt om zowel opgenomen media als een metagegevensbestand voor opname 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
}

Api gebruiken download_recording 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 de recordingChunk. download_recording 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-connection string.
  • Abonneer u op gebeurtenissen via Azure Event Grid.
  • Node.js Actieve LTS- en onderhoudsversies van LTS (8.11.1 en 10.14.1 aanbevolen)

Voordat u begint

Oproepopname-API's gebruiken uitsluitend de om de serverCallIdopname te initiëren. Er zijn een aantal methoden die u kunt gebruiken om de serverCallId op te halen, afhankelijk van uw scenario:

Scenario's voor gespreksautomatisering

  • Wanneer u Gespreksautomatisering gebruikt, hebt u twee opties om het serverCallIdvolgende op te halen:
    1. Zodra een aanroep is gemaakt, wordt een serverCallId geretourneerd als een eigenschap van de CallConnected gebeurtenis nadat een aanroep tot stand is gebracht. Meer informatie over de gebeurtenis CallConnected ophalen uit de Call Automation SDK.
    2. Zodra u de aanroep beantwoordt of een aanroep is gemaakt, wordt de serverCallId geretourneerd als een eigenschap van respectievelijk de AnswerCallResultCreateCallResult OF API-antwoorden.

SDK-scenario's aanroepen

  • Wanneer u client-SDK aanroepen gebruikt, kunt u de serverCallId ophalen met behulp van de getServerCallId methode voor de aanroep. Gebruik dit voorbeeld voor meer informatie over het ophalen van serverCallId van de Client-SDK voor oproepen.

Laten we aan de slag gaan met een paar eenvoudige stappen.

1. Een gespreksautomatiseringsclient maken

Api's voor het opnemen van gesprekken maken deel uit van de Azure Communication Services Call Automation-bibliotheken. Daarom is het noodzakelijk om een Call Automation-client te maken. Als u een gespreksautomatiseringsclient wilt maken, gebruikt u uw Communication Services-connection string en geeft u deze door aan CallAutomationClient object.

const callAutomationClient = new CallAutomationClient.CallAutomationClient("<ACSConnectionString>");

2. Start een 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 niet-gemengd.
  • RecordingFormat wordt gebruikt om de indeling van de opname door te geven. Wav gebruiken.
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. Alleen voor unmixed- Geef een gebruiker op kanaal 0 op

Als u niet-gemengd audio-opnamebestanden wilt maken, kunt u de AudioChannelParticipantOrdering functionaliteit gebruiken om op te geven welke gebruiker u wilt opnemen op kanaal 0. De rest van de deelnemers wordt toegewezen aan een kanaal terwijl ze spreken. Als u gebruikt RecordingChannel.Unmixed , maar 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.2. 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 van de opnamesessie.

3. Stop de opnamesessie met behulp van de 'stop'-API

Gebruik de recordingId ontvangen als antwoord van start.

var stopRecording = await callAutomationClient.getCallRecording().stop(recordingId);

4. Opnamesessie onderbreken met behulp van de 'pause'-API

Gebruik de recordingId ontvangen als antwoord van start.

var pauseRecording = await callAutomationClient.getCallRecording().pause(recordingId);

5. Opnamesessie hervatten met behulp van de API 'ResumeAsync'

Gebruik de recordingId ontvangen als antwoord van start.

var resumeRecording = await callAutomationClient.getCallRecording().resume(recordingId);

6. Download het opnamebestand met behulp van de API 'DownloadToAsync'

Gebruik een Azure Event Grid webhook of een andere geactiveerde actie moet worden gebruikt om uw services op de hoogte te stellen wanneer de opgenomen media klaar zijn om te worden gedownload.

Er wordt een Event Grid-melding Microsoft.Communication.RecordingFileStatusUpdated gepubliceerd wanneer een opname gereed is om op te halen, meestal een paar minuten nadat het opnameproces is voltooid (bijvoorbeeld de vergadering is beëindigd, de opname is gestopt). Opname van gebeurtenismeldingen omvatten contentLocation en metadataLocation, die worden gebruikt om zowel opgenomen media als een metagegevensbestand voor opname 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
}

Api gebruiken downloadToPath 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 de recordingChunk. DownloadToAsync download de inhoud in de opgegeven bestandsnaam.

7. Opname-inhoud verwijderen met de 'DeleteAsync'-API

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: