Sdílet prostřednictvím


Rychlý start pro záznam hovorů

Tento článek popisuje záznam hovorů pro hlasové hovory a videohovory. Pokud chcete začít používat rozhraní API pro záznam hovoru, musíte mít zavedený hovor. Pokud chcete vytvořit prostředí pro volání koncového uživatele, ujistěte se, že znáte volání klientské sady SDK a automatizace volání.

Ukázka kódu

Ukázkovou aplikaci si můžete stáhnout z GitHubu.

Požadavky

  • Potřebujete účet Azure s aktivním předplatným.
  • Nasaďte prostředek komunikační služby. Poznamenejte si připojovací řetězec prostředku.
  • Přihlaste se k odběru událostí přes Azure Event Grid.
  • Stažení sady .NET SDK

Než začnete

Rozhraní API pro nahrávání hovorů používají k zahájení nahrávání výhradně serverCallIdrozhraní API. Existuje několik metod, které můžete použít k načtení serverCallId v závislosti na vašem scénáři:

Scénáře automatizace volání

Pokud používáte automatizaci volání, máte dvě možnosti, jak získat serverCallId:

  1. Když vytvoříte volání, vrátí serverCallId se jako vlastnost CallConnected události po vytvoření volání. Zjistěte, jak získat událost CallConnected ze sady SDK pro automatizaci volání.

  2. Při odpovídání na volání nebo volání se vrátí serverCallId jako vlastnost AnswerCallResult odpovědí rozhraní API.CreateCallResult

Scénáře volání sady SDK

Při volání klientské sady SDK můžete načíst serverCallId metodu getServerCallId volání. V tomto příkladu se dozvíte, jak získat serverCallId ze sady SDK volajícího klienta.

Začněme několika jednoduchými kroky.

1. Vytvoření klienta automatizace volání

Rozhraní API pro záznam hovorů jsou součástí knihoven automatizace volání ve službě Azure Communication Services. Proto potřebujete vytvořit klienta automatizace volání.

Chcete-li vytvořit klienta automatizace volání, použijte komunikační služby připojovací řetězec a předejte ho objektuCallAutomationClient.

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

2. Spuštění relace nahrávání pomocí startRecordingOptions pomocí rozhraní API StartAsync

serverCallId Použijte přijatou během zahájení volání.

  • Slouží RecordingContent k předání typu obsahu záznamu. Použijte AUDIO.
  • Slouží RecordingChannel k předání typu kanálu záznamu. Použití MIXED nebo UNMIXED.
  • Slouží RecordingFormat k předání formátu nahrávky. Použijte 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. Zahájení nahrávání – Používání vlastního úložiště objektů blob v Azure

Začněte nahrávat pomocí určené služby Azure Blob Storage k uložení nahraného souboru po dokončení nahrávání.

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>"))
    ExternalStorage = new BlobStorage(new Uri("<Insert Container / Blob Uri>"))
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);

2.2. Spuštění relace nahrávání s povoleným režimem pozastavení pomocí rozhraní API StartAsync

Poznámka:

Aby se vygeneroval soubor záznamu, bude potřeba pokračovat v nahrávání.

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. Pouze pro nemixované – zadejte uživatele v kanálu 0.

Pokud chcete vytvářet nemixované zvukové záznamy souborů, můžete pomocí AudioChannelParticipantOrdering funkce určit, který uživatel chcete nahrát na kanálu 0. Zbývající účastníci se přiřazují ke kanálu, když mluví. Pokud použijete RecordingChannel.Unmixed , ale nepoužíváte AudioChannelParticipantOrdering, funkce Záznam hovoru přiřadí kanálu 0 prvnímu účastníkovi, který mluví.

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. Pouze pro nemixované – Určení spřažení kanálu

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);

Odpověď StartAsync rozhraní API obsahuje recordingId relaci nahrávání.

3. Zastavení relace nahrávání pomocí StopAsync rozhraní API

Použijte přijatou recordingId v odpovědi na StartAsync.

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

4. Pozastavení relace nahrávání pomocí PauseAsync rozhraní API

Použijte přijatou recordingId v odpovědi na StartAsync.

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

5. Obnovení relace nahrávání pomocí ResumeAsync rozhraní API

Použijte přijatou recordingId v odpovědi na StartAsync.

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

6. Stažení záznamového souboru pomocí DownloadToAsync rozhraní API

Pomocí webového háku služby Azure Event Grid nebo jiné aktivované akce upozorněte své služby, když je nahrané médium připravené ke stažení.

Oznámení Microsoft.Communication.RecordingFileStatusUpdated Event Gridu se publikuje, když je záznam připravený k načtení, obvykle několik minut po dokončení zpracování záznamu (například při ukončení schůzky nebo zastavení záznamu). Mezi oznámení událostí záznamu patří contentLocation a metadataLocationkteré můžete použít k načtení nahraného média i souboru metadat záznamu.

Příklad schématu událostí:

{
    "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
}

Pomocí DownloadToAsync rozhraní API si můžete stáhnout zaznamenané médium.

var recordingDownloadUri = new Uri(contentLocation);
var response = await callAutomationClient.GetCallRecording().DownloadToAsync(recordingDownloadUri, fileName);

Načtení downloadLocation záznamu z contentLocation atributu recordingChunk. Použijte metodu DownloadToAsync ke stažení obsahu do zadaného názvu souboru.

7. Odstranění nahrávacího obsahu pomocí DeleteAsync rozhraní API

Pomocí DeleteAsync rozhraní API můžete odstranit obsah záznamu (například nahrané médium a metadata).

var recordingDeleteUri = new Uri(deleteLocation);
var response = await callAutomationClient.GetCallRecording().DeleteAsync(recordingDeleteUri);

Ukázka kódu

Ukázkovou aplikaci si můžete stáhnout z GitHubu.

Požadavky

  • Potřebujete účet Azure s aktivním předplatným.
  • Nasaďte prostředek komunikační služby. Poznamenejte si připojovací řetězec prostředku.
  • Přihlaste se k odběru událostí přes Azure Event Grid.
  • Stažení sady Java SDK

Než začnete

Rozhraní API pro nahrávání hovorů používají serverCallId k zahájení nahrávání výhradně rozhraní API. Existuje několik metod, které můžete použít k načtení serverCallId v závislosti na vašem scénáři:

Scénáře automatizace volání

Pokud používáte automatizaci volání, máte dvě možnosti, jak získat serverCallId:

  1. Po vytvoření serverCallId volání se vrátí jako vlastnost CallConnected události po vytvoření volání. Zjistěte, jak získat událost CallConnected ze sady SDK pro automatizaci volání.

  2. Jakmile přijmete hovor nebo se vytvoří volání, serverCallId vrátí se jako vlastnost AnswerCallResult odpovědí rozhraní API nebo CreateCallResult rozhraní API.

Scénáře volání sady SDK

Při volání klientské sady SDK můžete načíst serverCallId metodu getServerCallId volání.

V tomto příkladu se dozvíte, jak získat serverCallId ze sady SDK volajícího klienta.

Začněme několika jednoduchými kroky.

1. Vytvoření klienta automatizace volání

Rozhraní API pro záznam hovorů jsou součástí knihoven automatizace volání ve službě Azure Communication Services. Proto potřebujete vytvořit klienta automatizace volání.

Chcete-li vytvořit klienta automatizace volání, použijte komunikační služby připojovací řetězec a předejte ho objektuCallAutomationClient.

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

2. Spuštění relace nahrávání pomocí StartRecordingOptions pomocí startWithResponse rozhraní API

serverCallId Použijte přijatou během zahájení volání.

  • Slouží RecordingContent k předání typu obsahu záznamu. Použijte AUDIO.
  • Slouží RecordingChannel k předání typu kanálu záznamu. Použití MIXED nebo UNMIXED.
  • Slouží RecordingFormat k předání formátu nahrávky. Použijte 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. Zahájení nahrávání – Používání vlastního úložiště objektů blob v Azure

Začněte nahrávat pomocí určené služby Azure Blob Storage k uložení nahraného souboru po dokončení nahrávání.

        StartRecordingOptions recordingOptions = new StartRecordingOptions(callLocator)
        .setRecordingChannel(RecordingChannel.MIXED)
        .setRecordingContent(RecordingContent.AUDIO_VIDEO)
        .setRecordingFormat(RecordingFormat.MP4)
        .setRecordingStorage(new AzureBlobContainerRecordingStorage("<YOUR_STORAGE_CONTAINER_URL>"))
        .setExternalStorage(new BlobStorage("<Insert Container / Blob Uri>"));
 
       // //start recording
       RecordingStateResult result = callRecording.start(recordingOptions);

2.2. Spuštění relace nahrávání s povoleným režimem pozastavení pomocí StartAsync rozhraní API

Poznámka:

Aby se vygeneroval soubor záznamu, musí být záznamy obnoveny.

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. Pouze pro nemixované – zadejte uživatele v kanálu 0.

Pokud chcete vytvářet nemixované zvukové záznamy souborů, můžete pomocí AudioChannelParticipantOrdering funkce určit, který uživatel chcete nahrát na kanálu 0. Zbývající účastníci se přiřazují ke kanálu, když mluví. Pokud použijete RecordingChannel.Unmixed , ale nepoužíváte AudioChannelParticipantOrdering, funkce Záznam hovoru přiřadí kanálu 0 prvnímu účastníkovi, který mluví.

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. Pouze pro nemixované – Určení spřažení kanálu

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);

Odpověď startWithResponse rozhraní API obsahuje recordingId relaci nahrávání.

3. Zastavení relace nahrávání pomocí stopWithResponse rozhraní API

Použijte přijatou recordingId v odpovědi na startWithResponse.

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

4. Pozastavení relace nahrávání pomocí pauseWithResponse rozhraní API

Použijte přijatou recordingId v odpovědi na startWithResponse.

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

5. Obnovení relace nahrávání pomocí resumeWithResponse rozhraní API

Použijte přijatou recordingId v odpovědi na startWithResponse.

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

6. Stažení záznamového souboru pomocí downloadToWithResponse rozhraní API

Pomocí webového háku služby Azure Event Grid nebo jiné aktivované akce by se měly používat k upozorňovat služby, když je nahrané médium připravené ke stažení.

Oznámení Microsoft.Communication.RecordingFileStatusUpdated Event Gridu se publikuje, když je záznam připravený k načtení, obvykle několik minut po dokončení procesu nahrávání (například ukončení schůzky nebo zastavení nahrávání). Mezi oznámení událostí záznamu patří contentLocation a metadataLocationkteré můžete použít k načtení nahraného média i souboru metadat záznamu.

Následující kód je příkladem schématu událostí.

{
    "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
}

Ke stažení nahraného média použijte downloadToWithResponse metodu CallRecording třídy. Pro metodu jsou uvedené následující podporované parametry downloadToWithResponse :

  • contentLocation: Adresa URL služby Azure Communication Services, kde se nachází obsah.
  • destinationPath : Umístění souboru.
  • parallelDownloadOptions: Volitelný ParallelDownloadOptions objekt pro úpravu fungování paralelního stahování.
  • overwrite: Hodnota True pro přepsání souboru, pokud existuje.
  • context: Kontext představující kontext požadavku.
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);

Umístění obsahu a ID dokumentu pro nahrávací soubory lze načíst z contentLocation polí a documentId polí pro každý z nich recordingChunk.

7. Odstranění nahrávacího obsahu pomocí deleteWithResponse rozhraní API

K odstranění zaznamenaného média použijte deleteWithResponse metodu CallRecording třídy. Podporované parametry pro deleteWithResponse metodu:

  • deleteLocation: Adresa URL služby Azure Communication Services, kde se nachází obsah k odstranění.
  • context: Kontext představující kontext požadavku.
Response<Void> deleteResponse = callAutomationClient.getCallRecording().deleteWithResponse(deleteLocation, context);

Umístění odstranění nahrávky lze načíst z deleteLocation pole události Event Gridu.

Ukázka kódu

Ukázkovou aplikaci si můžete stáhnout z GitHubu.

Požadavky

  • Potřebujete účet Azure s aktivním předplatným.
  • Nasaďte prostředek komunikační služby. Poznamenejte si připojovací řetězec prostředku.
  • Přihlaste se k odběru událostí přes Azure Event Grid.
  • Python 3.7+.

Než začnete

Rozhraní API pro nahrávání hovorů používají k zahájení nahrávání výhradně serverCallIdrozhraní API. Existuje několik metod, které můžete použít k načtení serverCallId v závislosti na vašem scénáři:

Scénáře automatizace volání

  • Pokud používáte automatizaci volání, máte dvě možnosti, jak získat serverCallId:
    1. Po vytvoření serverCallId volání se vrátí jako vlastnost CallConnected události po vytvoření volání. Zjistěte, jak získat událost CallConnected ze sady SDK pro automatizaci volání.
    2. Jakmile odpovíte na volání nebo volání, vrátí serverCallId se jako vlastnost AnswerCallResult odpovědí rozhraní API.CreateCallResult

Scénáře volání sady SDK

  • Při použití sady SDK volajícího klienta můžete načíst serverCallId proměnnou server_call_id ve volání. V tomto příkladu se dozvíte, jak získat serverCallId ze sady SDK volajícího klienta.

Začněme několika jednoduchými kroky.

1. Vytvoření klienta automatizace volání

Rozhraní API pro záznam hovorů jsou součástí knihoven automatizace volání ve službě Azure Communication Services. Proto je nutné vytvořit klienta automatizace volání.

Chcete-li vytvořit klienta automatizace volání, použijte komunikační služby připojovací řetězec a předejte ho objektuCallAutomationClient.

call_automation_client = CallAutomationClient.from_connection_string("<ACSConnectionString>")

2. Spuštění záznamu relace start_recording rozhraní API

serverCallId Použijte přijatou během zahájení volání.

  • Slouží RecordingContent k předání typu obsahu záznamu. Použijte AUDIO.
  • Slouží RecordingChannel k předání typu kanálu záznamu. Použití MIXED nebo UNMIXED.
  • Slouží RecordingFormat k předání formátu nahrávky. Použijte 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. Zahájení nahrávání – Používání vlastního úložiště objektů blob v Azure

Po dokončení nahrávání začněte nahrávat pomocí vlastní služby Azure Blob Storage definované pro uložení souboru záznamu.

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. Spuštění relace nahrávání s povoleným režimem pozastavení pomocí rozhraní API StartAsync

Poznámka:

Aby se vygeneroval soubor záznamu, bude potřeba pokračovat v nahrávání.

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. Pouze pro nemixované – zadejte uživatele v kanálu 0.

Pokud chcete vytvářet nemixované zvukové záznamy souborů, můžete pomocí AudioChannelParticipantOrdering funkce určit, který uživatel chcete nahrát na kanálu 0. Zbývající účastníci se přiřazují ke kanálu, když mluví. Pokud použijete RecordingChannel.Unmixed , ale nepoužíváte AudioChannelParticipantOrdering, funkce Záznam hovoru přiřadí kanálu 0 prvnímu účastníkovi, který mluví.

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. Pouze pro nemixované – Určení spřažení kanálu

_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])

Odpověď StartAsync rozhraní API obsahuje recordingId relaci nahrávání.

3. Zastavení relace nahrávání pomocí rozhraní API stop_recording

Použijte přijatou recording_id v odpovědi na start_recording.

stop_recording = call_automation_client.stop_recording(recording_id = recording_id)

4. Pozastavení relace nahrávání pomocí rozhraní API pause_recording

Použijte přijatou recording_id v odpovědi na start_recording.

pause_recording = call_automation_client.pause_recording(recording_id = recording_id)

5. Obnovení relace nahrávání pomocí rozhraní API resume_recording

Použijte přijatou recording_id v odpovědi na start_recording.

resume_recording = call_automation_client.resume_recording(recording_id = recording_id)

6. Stáhněte si záznamový soubor pomocí rozhraní API download_recording

Pomocí webového háku služby Azure Event Grid nebo jiné aktivované akce by se měly používat k upozorňovat služby, když je nahrané médium připravené ke stažení.

Oznámení Microsoft.Communication.RecordingFileStatusUpdated Event Gridu se publikuje, když je záznam připravený k načtení, obvykle několik minut po dokončení procesu nahrávání (například ukončení schůzky nebo zastavení záznamu). Mezi oznámení událostí záznamu patří contentLocation a metadataLocationkteré se používají k načtení nahraného média i souboru metadat záznamu.

Následující kód je příkladem schématu událostí.

{
    "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
}

Pomocí download_recording rozhraní API si můžete stáhnout zaznamenané médium.

response = recording_data = call_automation_client.download_recording(content_location)

with open("<file_name>", "wb") as binary_file:
    binary_file.write(recording_data.read())

Záznam downloadLocation lze načíst z contentLocation atributu recordingChunk. Použijte metodu download_recording ke stažení obsahu do bajtů.

7. Odstranění obsahu záznamu pomocí rozhraní API delete_recording

Rozhraní API slouží delete_recording k odstranění obsahu záznamu, jako jsou nahraná média a metadata.

response = call_automation_client.delete_recording(delete_location);

Ukázka kódu

Ukázkovou aplikaci si můžete stáhnout z GitHubu.

Požadavky

  • Potřebujete účet Azure s aktivním předplatným.
  • Nasaďte prostředek komunikační služby. Poznamenejte si připojovací řetězec prostředku.
  • Přihlaste se k odběru událostí přes Azure Event Grid.
  • Node.js verze LTS a údržba LTS (doporučuje se verze 8.11.1 a 10.14.1)

Než začnete

Rozhraní API pro nahrávání hovorů používají k zahájení nahrávání výhradně serverCallIdrozhraní API. Existuje několik metod, které můžete použít k načtení serverCallId v závislosti na vašem scénáři:

Scénáře automatizace volání

  • Pokud používáte automatizaci volání, máte dvě možnosti, jak získat serverCallId:
    1. Po vytvoření serverCallId volání se vrátí jako vlastnost CallConnected události po vytvoření volání. Zjistěte, jak získat událost CallConnected ze sady SDK pro automatizaci volání.
    2. Jakmile odpovíte na volání nebo volání, vrátí serverCallId se jako vlastnost AnswerCallResult odpovědí rozhraní API.CreateCallResult

Scénáře volání sady SDK

Při volání klientské sady SDK můžete načíst serverCallId metodu getServerCallId volání.

V tomto příkladu se dozvíte, jak získat serverCallId ze sady SDK volajícího klienta.

Začněme několika jednoduchými kroky.

1. Vytvoření klienta automatizace volání

Rozhraní API pro záznam hovorů jsou součástí knihoven automatizace volání ve službě Azure Communication Services. Proto je nutné vytvořit klienta automatizace volání.

Chcete-li vytvořit klienta automatizace volání, použijte komunikační služby připojovací řetězec a předejte ho objektuCallAutomationClient.

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

2. Spuštění relace nahrávání pomocí startRecordingOptions pomocí rozhraní API StartAsync

serverCallId Použijte přijatou během zahájení volání.

  • Slouží RecordingContent k předání typu obsahu záznamu. Použijte AUDIO.
  • Slouží RecordingChannel k předání typu kanálu záznamu. Použití MIXED nebo UNMIXED.
  • Slouží RecordingFormat k předání formátu nahrávky. Použijte 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. Zahájení nahrávání – Používání vlastního úložiště objektů blob v Azure

Začněte nahrávat pomocí určené služby Azure Blob Storage k uložení nahraného souboru po dokončení nahrávání.

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. Spuštění relace nahrávání s povoleným režimem pozastavení pomocí rozhraní API StartAsync

Poznámka:

Aby se vygeneroval soubor záznamu, bude potřeba pokračovat v nahrávání.

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. Pouze pro nemixované – zadejte uživatele v kanálu 0.

Pokud chcete vytvářet nemixované zvukové záznamy souborů, můžete pomocí AudioChannelParticipantOrdering funkce určit, který uživatel chcete nahrát na kanálu 0. Zbývající účastníci se přiřazují ke kanálu, když mluví. Pokud použijete RecordingChannel.Unmixed , ale nepoužíváte AudioChannelParticipantOrdering, funkce Záznam hovoru přiřadí kanálu 0 prvnímu účastníkovi, který mluví.

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. Pouze pro nemixované – Určení spřažení kanálu

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);

Odpověď StartAsync rozhraní API obsahuje recordingId relaci nahrávání.

3. Zastavení relace nahrávání pomocí rozhraní API stop

Použijte přijatou recordingId v odpovědi na start.

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

4. Pozastavení relace nahrávání pomocí rozhraní API pro pozastavení

Použijte přijatou recordingId v odpovědi na start.

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

5. Obnovení relace nahrávání pomocí rozhraní API ResumeAsync

Použijte přijatou recordingId v odpovědi na start.

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

6. Stažení záznamového souboru pomocí rozhraní API DownloadToAsync

Pomocí webového háku služby Azure Event Grid nebo jiné aktivované akce by se měly používat k upozorňovat služby, když je nahrané médium připravené ke stažení.

Oznámení Microsoft.Communication.RecordingFileStatusUpdated Event Gridu se publikuje, když je záznam připravený k načtení, obvykle několik minut po dokončení procesu nahrávání (například ukončení schůzky nebo zastavení záznamu). Mezi oznámení událostí záznamu patří contentLocation a metadataLocationkteré se používají k načtení nahraného média i souboru metadat záznamu.

Následující kód je příkladem schématu událostí.

{
    "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
}

Pomocí downloadToPath rozhraní API si můžete stáhnout zaznamenané médium.

var response = await callAutomationClient.getCallRecording().downloadToPath(contentLocation, fileName);

Záznam downloadLocation lze načíst z contentLocation atributu recordingChunk. Použijte metodu DownloadToAsync ke stažení obsahu do zadaného názvu souboru.

7. Odstranění obsahu záznamu pomocí rozhraní API DeleteAsync

Použití delete rozhraní API k odstranění obsahu záznamu (například nahraného média, metadata)

var response = await callAutomationClient.getCallRecording().delete(deleteLocation);

Vyčištění prostředků

Pokud chcete vyčistit a odebrat předplatné služby Communication Services, můžete odstranit prostředek nebo skupinu prostředků. Odstraněním skupiny prostředků se odstraní také všechny ostatní prostředky, které jsou k ní přidružené. Přečtěte si další informace o čištění prostředků.

Další kroky

Další informace najdete v následujících článcích: