Rychlý start pro záznam hovoru
Tento rychlý start vám pomůže začít se záznamem hovoru pro hlasové hovory a videohovory. Pokud chcete začít používat rozhraní API pro záznam hovoru, musíte mít zavedený hovor. Ujistěte se, že znáte volání klientské sady SDK nebo automatizace volání, abyste vytvořili prostředí pro volání koncového uživatele.
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ě serverCallId
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
:- Po vytvoření
serverCallId
volání se vrátí jako vlastnostCallConnected
události po vytvoření volání. Zjistěte, jak získat volání Připojení události ze sady SDK pro automatizaci volání. - Jakmile přijmete hovor nebo se vytvoří volání,
serverCallId
vrátí se jako vlastnostAnswerCallResult
odpovědí rozhraní API neboCreateCallResult
rozhraní API.
- Po vytvoření
Scénáře volání sady SDK
- Při volání klientské sady SDK můžete načíst
serverCallId
metodugetServerCallId
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žijete komunikační služby připojovací řetězec a předáte 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í.
- RecordingContent slouží k předání typu obsahu záznamu. Použití zvuku
- RecordingChannel se používá k předání typu kanálu záznamu. Použijte smíšené nebo nemixované.
- RecordingFormat slouží k předání formátu nahrávky. Použijte vlnovku.
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
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.
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. 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í rozhraní API StopAsync
Použijte přijatou recordingId
v odpovědi .StartAsync
var stopRecording = await callAutomationClient.GetCallRecording().StopAsync(recordingId);
4. Pozastavení relace nahrávání pomocí rozhraní API PauseAsync
Použijte přijatou recordingId
v odpovědi .StartAsync
var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);
5. Obnovení relace nahrávání pomocí rozhraní API ResumeAsync
Použijte přijatou recordingId
v odpovědi .StartAsync
var resumeRecording = await callAutomationClient.GetCallRecording().ResumeAsync(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 schůzka skončila, nahrávání se zastavilo). Mezi oznámení událostí záznamu patří contentLocation
a metadataLocation
které se používají 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
}
Ke stažení nahraného média použijte DownloadToAsync
rozhraní API.
var recordingDownloadUri = new Uri(contentLocation);
var response = await callAutomationClient.GetCallRecording().DownloadToAsync(recordingDownloadUri, fileName);
Záznam downloadLocation
lze načíst z contentLocation
atributu recordingChunk
. DownloadToAsync
metoda stáhne obsah do zadaného názvu souboru.
7. Odstranění obsahu záznamu pomocí rozhraní API DeleteAsync
Použití DeleteAsync
rozhraní API k odstranění obsahu záznamu (například nahraného média, 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í k zahájení nahrávání výhradně serverCallId
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
:- Po vytvoření
serverCallId
volání se vrátí jako vlastnostCallConnected
události po vytvoření volání. Zjistěte, jak získat volání Připojení události ze sady SDK pro automatizaci volání. - Jakmile přijmete hovor nebo se vytvoří volání,
serverCallId
vrátí se jako vlastnostAnswerCallResult
odpovědí rozhraní API neboCreateCallResult
rozhraní API.
- Po vytvoření
Scénáře volání sady SDK
- Při volání klientské sady SDK můžete načíst
serverCallId
metodugetServerCallId
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í.
K vytvoření klienta automatizace volání použijete komunikační služby připojovací řetězec a předáte ho do objektuCallAutomationClient
.
CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
.connectionString("<acsConnectionString>")
.buildClient();
2. Spuštění relace nahrávání pomocí startRecordingOptions pomocí rozhraní API startWithResponse
serverCallId
Použijte přijatou během zahájení volání.
- RecordingContent slouží k předání typu obsahu záznamu. Použití zvuku
- RecordingChannel se používá k předání typu kanálu záznamu. Použijte KOMBINACI NEBO UNMIXED.
- RecordingFormat slouží 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
Po dokončení záznamu spusťte relaci nahrávání s vlastní službou Azure Blob Storage, do které se uloží soubor záznamu.
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. 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>"))
.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 budou přiřazeni ke kanálu, když mluví. Pokud použijete RecordingChannel.Unmixed
, ale nepoužíváte AudioChannelParticipantOrdering
, 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í rozhraní API stopWithResponse
Použijte přijatou recordingId
v odpovědi .startWithResponse
Response<Void> response = callAutomationClient.getCallRecording()
.stopWithResponse(response.getValue().getRecordingId(), null);
4. Pozastavení relace nahrávání pomocí rozhraní API pauseWithResponse
Použijte přijatou recordingId
v odpovědi .startWithResponse
Response<Void> response = callAutomationClient.getCallRecording()
.pauseWithResponse(response.getValue().getRecordingId(), null);
5. Obnovení relace nahrávání pomocí rozhraní API resumeWithResponse
Použijte přijatou recordingId
v odpovědi .startWithResponse
Response<Void> response = callAutomationClient.getCallRecording()
.resumeWithResponse(response.getValue().getRecordingId(), null);
6. Stáhněte si soubor nahrávání pomocí rozhraní API downloadToWithResponse.
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 schůzka skončila, nahrávání se zastavilo). Mezi oznámení událostí záznamu patří contentLocation
a metadataLocation
které se používají k načtení nahraného média i souboru metadat záznamu.
Níže je 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
}
Použijte downloadToWithResponse
metodu CallRecording
třídy pro stažení nahraného média. 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ý objekt ParallelDownloadOptions pro úpravu způsobu 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. Odstraňte obsah záznamu pomocí rozhraní API deleteWithResponse.
Použijte deleteWithResponse
metodu CallRecording
třídy pro odstranění zaznamenaného média. Pro metodu jsou uvedené následující podporované parametry deleteWithResponse
:
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ě serverCallId
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
:- Po vytvoření
serverCallId
volání se vrátí jako vlastnostCallConnected
události po vytvoření volání. Zjistěte, jak získat volání Připojení události ze sady SDK pro automatizaci volání. - Jakmile přijmete hovor nebo se vytvoří volání,
serverCallId
vrátí se jako vlastnostAnswerCallResult
odpovědí rozhraní API neboCreateCallResult
rozhraní API.
- Po vytvoření
Scénáře volání sady SDK
- Při použití sady SDK volajícího klienta můžete načíst
serverCallId
proměnnouserver_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í.
K vytvoření klienta automatizace volání použijete komunikační služby připojovací řetězec a předáte ho do 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í.
- RecordingContent slouží k předání typu obsahu záznamu. Použití zvuku
- RecordingChannel se používá k předání typu kanálu záznamu. Použijte smíšené nebo nemixované.
- RecordingFormat slouží k předání formátu nahrávky. Použijte vlnovku.
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 budou přiřazeni ke kanálu, když mluví. Pokud použijete RecordingChannel.Unmixed
, ale nepoužíváte AudioChannelParticipantOrdering
, 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 .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 .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 .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 schůzka skončila, nahrávání se zastavilo). Mezi oznámení událostí záznamu patří contentLocation
a metadataLocation
které se používají k načtení nahraného média i souboru metadat záznamu.
Níže je 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
}
Ke stažení nahraného média použijte download_recording
rozhraní API.
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
. download_recording
metoda stáhne obsah do bajtů.
7. Odstranění obsahu záznamu pomocí rozhraní API delete_recording
Použití delete_recording
rozhraní API k odstranění obsahu záznamu (například nahraného média, 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ě serverCallId
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
:- Po vytvoření
serverCallId
volání se vrátí jako vlastnostCallConnected
události po vytvoření volání. Zjistěte, jak získat volání Připojení události ze sady SDK pro automatizaci volání. - Jakmile přijmete hovor nebo se vytvoří volání,
serverCallId
vrátí se jako vlastnostAnswerCallResult
odpovědí rozhraní API neboCreateCallResult
rozhraní API.
- Po vytvoření
Scénáře volání sady SDK
- Při volání klientské sady SDK můžete načíst
serverCallId
metodugetServerCallId
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í.
K vytvoření klienta automatizace volání použijete komunikační služby připojovací řetězec a předáte ho do 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í.
- RecordingContent slouží k předání typu obsahu záznamu. Použití zvuku
- RecordingChannel se používá k předání typu kanálu záznamu. Použijte smíšené nebo nemixované.
- RecordingFormat slouží k předání formátu nahrávky. Použijte vlnovku.
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
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.
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 budou přiřazeni ke kanálu, když mluví. Pokud použijete RecordingChannel.Unmixed
, ale nepoužíváte AudioChannelParticipantOrdering
, 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 .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 .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 .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 schůzka skončila, nahrávání se zastavilo). Mezi oznámení událostí záznamu patří contentLocation
a metadataLocation
které se používají k načtení nahraného média i souboru metadat záznamu.
Níže je 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
}
Ke stažení nahraného média použijte downloadToPath
rozhraní API.
var response = await callAutomationClient.getCallRecording().downloadToPath(contentLocation, fileName);
Záznam downloadLocation
lze načíst z contentLocation
atributu recordingChunk
. DownloadToAsync
metoda stáhne obsah 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:
- Stáhněte si ukázkové aplikace pro nahrávání volání v Javě, Pythonu a JavaScriptu .
- Další informace o záznamu hovoru
- Další informace o automatizaci volání