Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 Calling client SDK a Call Automation.
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 řetězec pro připojení 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 záznam hovorů používají callConnectionId nebo serverCallId ke spuštění záznamu. Existuje několik metod, které můžete použít k načtení těchto ID v závislosti na vašem scénáři:
Jak načíst callConnectionId
Při použití automatizace volání obdržíte callConnectionId z události odpovědi z createCall, answer nebo connect žádostí při zahájení volání.
Jak získat serverCallId
Při používání automatizace volání máte dvě možnosti, jak serverCallId získat:
Když vytvoříte volání, vrátí se
serverCallIdjako vlastnost událostiCallConnectedpoté, co je volání navázáno. Zjistěte, jak získat událost CallConnected ze sady SDK pro automatizaci volání.Při odpovědi na volání nebo při vytvoření volání se
serverCallIdvrátí jako vlastnost odpovědí rozhraní APIAnswerCallResultneboCreateCallResult.
Při používání Calling Client SDK můžete načíst serverCallId pomocí metody getServerCallId u hovoru.
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 připojovací řetězec komunikačních služeb a předejte ho objektu CallAutomationClient.
CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");
2. Spuštění relace nahrávání pomocí StartRecordingOptions a API StartAsync
Použijte callConnectionId nebo serverCallId přijaté během inicializace hovoru.
- Slouží
RecordingContentk předání typu obsahu záznamu. PoužijteAUDIO. - Slouží
RecordingChannelk předání typu kanálu záznamu. PoužijteMIXEDneboUNMIXED. - Slouží
RecordingFormatk předání formátu nahrávky. PoužijteWAV.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<callConnectionId> or <ServerCallId>"))
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>");
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);
2.1. Začněte nahrávat – Použijte vlastní Azure Blob Storage
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("<CallConnectionId> or <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("<CallConnectionId> or <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 jsou přiřazeni ke kanálu, jakmile začnou mluvit. 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("<CallConnectionId> or <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í vazby kanálu
var channelAffinity = new ChannelAffinity(new CommunicationUserIdentifier("<ACS_USER_MRI>")) { Channel = 0};
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<CallConnectionId> or <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 údaje o nahrávací relaci recordingId.
3. Zastavte relaci nahrávání pomocí rozhraní API StopAsync
Použijte obdrženou recordingId v odpovědi na StartAsync.
var stopRecording = await callAutomationClient.GetCallRecording().StopAsync(recordingId);
4. Pozastavení relace nahrávání použitím rozhraní API PauseAsync
Použijte obdrženou recordingId v odpovědi na StartAsync.
var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);
5. Obnovte relaci nahrávání pomocí ResumeAsync rozhraní API
Použijte obdrženou 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 řetězec pro připojení 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 záznam hovorů používají callConnectionId nebo serverCallId k zahájení nahrávání. Existuje několik metod, které můžete použít k načtení těchto ID v závislosti na vašem scénáři:
Jak získat callConnectionId
Při použití automatizace volání obdržíte callConnectionId z události odpovědi z požadavků createCall, answer nebo connect při zahájení volání.
Jak načíst serverCallId
Při používání automatizace volání máte dvě možnosti, jak serverCallId získat:
Když vytvoříte volání, vrátí se
serverCallIdjako vlastnost událostiCallConnectedpoté, co je volání navázáno. Zjistěte, jak získat událost CallConnected ze sady SDK pro automatizaci volání.Při odpovědi na volání nebo při vytvoření volání se
serverCallIdvrátí jako vlastnost odpovědí rozhraní APIAnswerCallResultneboCreateCallResult.
Při používání Calling Client SDK můžete načíst serverCallId pomocí metody getServerCallId u hovoru.
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 připojovací řetězec komunikačních služeb a předejte ho objektu CallAutomationClient.
CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
.connectionString("<acsConnectionString>")
.buildClient();
2. Spusťte relaci nahrávání pomocí StartRecordingOptions a startWithResponse rozhraní API
Během inicializace hovoru použijte callConnectionId nebo serverCallId.
- Slouží
RecordingContentk předání typu obsahu záznamu. PoužijteAUDIO. - Slouží
RecordingChannelk předání typu kanálu záznamu. PoužijteMIXEDneboUNMIXED. - Slouží
RecordingFormatk předání formátu nahrávky. PoužijteWAV.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<callConnectionId> or <serverCallId>"))
.setRecordingChannel(RecordingChannel.UNMIXED)
.setRecordingFormat(RecordingFormat.WAV)
.setRecordingContent(RecordingContent.AUDIO)
.setRecordingStateCallbackUrl("<recordingStateCallbackUrl>");
Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startWithResponse(recordingOptions, null);
2.1. Začněte nahrávat – Použijte vlastní Azure Blob Storage
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>"));
// //start recording
RecordingStateResult result = callRecording.start(recordingOptions);
2.2. Spusťte relaci nahrávání se zapnutým režimem pozastavení pomocí rozhraní API StartAsync.
Poznámka:
Aby se vygeneroval soubor záznamu, musí být záznamy obnoveny.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<<callConnectionId> or 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 jsou přiřazeni ke kanálu, jakmile začnou mluvit. 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("<<callConnectionId> or 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í vazby 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 údaje o nahrávací relaci recordingId.
3. Zastavte relaci nahrávání pomocí rozhraní API stopWithResponse
Použijte obdrženou recordingId v odpovědi na startWithResponse.
Response<Void> response = callAutomationClient.getCallRecording()
.stopWithResponse(response.getValue().getRecordingId(), null);
4. Pozastavení relace nahrávání použitím rozhraní API pauseWithResponse
Použijte obdrženou recordingId v odpovědi na startWithResponse.
Response<Void> response = callAutomationClient.getCallRecording()
.pauseWithResponse(response.getValue().getRecordingId(), null);
5. Obnovte relaci nahrávání pomocí resumeWithResponse rozhraní API
Použijte obdrženou 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í webhooku Azure Event Grid nebo jiné aktivované akce upozorněte své služby, když je záznam média 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ýParallelDownloadOptionsobjekt 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 polí contentLocation a documentId pro každý 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 řetězec pro připojení prostředku.
- Přihlaste se k odběru událostí přes Azure Event Grid.
- Python 3.7+.
Než začnete
Rozhraní API pro záznam hovorů používají callConnectionId nebo serverCallId k inicializaci nahrávání. Existuje několik metod, které můžete použít k načtení těchto ID v závislosti na vašem scénáři:
Jak získat callConnectionId
Při použití automatizace volání obdržíte callConnectionId z události odpovědi ze žádostí createCall, answer nebo connect při zahájení volání.
Jak získat serverCallId
Při používání automatizace volání máte dvě možnosti, jak serverCallId získat:
Když vytvoříte volání, vrátí se
serverCallIdjako vlastnost událostiCallConnectedpoté, co je volání navázáno. Zjistěte, jak získat událost CallConnected ze sady SDK pro automatizaci volání.Při odpovědi na volání nebo při vytvoření volání se
serverCallIdvrátí jako vlastnost odpovědí rozhraní APIAnswerCallResultneboCreateCallResult.
Při používání Calling Client SDK můžete načíst serverCallId pomocí metody getServerCallId u hovoru.
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 připojovací řetězec komunikačních služeb a předejte ho objektu CallAutomationClient.
call_automation_client = CallAutomationClient.from_connection_string("<ACSConnectionString>")
2. Spuštění nahrávání pomocí API start_recording
Použijte callConnectionId nebo serverCallId, které byly přijaty během inicializace hovoru.
- Slouží
RecordingContentk předání typu obsahu záznamu. PoužijteAUDIO. - Slouží
RecordingChannelk předání typu kanálu záznamu. PoužijteMIXEDneboUNMIXED. - Slouží
RecordingFormatk předání formátu nahrávky. PoužijteWAV.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(callConnectionId or 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. Začněte nahrávat – Použijte vlastní Azure Blob Storage
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(callConnectionId or 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(callConnectionId or 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 jsou přiřazeni ke kanálu, jakmile začnou mluvit. 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(callConnectionId or 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í vazby kanálu
_channel_affinity = ChannelAffinity(target_participant=CommunicationUserIdentifier("<ACS_USER_MRI>"), channel=0)
response = call_automation_client.start_recording(call_locator=ServerCallLocator(callConnectionId or 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 údaje o nahrávací relaci recordingId.
3. Zastavení relace nahrávání pomocí rozhraní API stop_recording
Použijte obdrženou 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 obdrženou 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 obdrženou 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í webhooku Azure Event Grid nebo jiné aktivované akce upozorněte své služby, když je záznam média 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 získat z atributu contentLocation prvku recordingChunk. Použijte metodu download_recording ke stažení obsahu do bajtů.
7. Odstranění obsahu záznamu pomocí rozhraní API delete_recording
Rozhraní delete_recording API slouží k odstranění obsahu nahraného 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 řetězec pro připojení prostředku.
- Přihlaste se k odběru událostí přes Azure Event Grid.
- Node.js verze Aktivní LTS a Údržbové LTS (doporučené verze jsou 8.11.1 a 10.14.1)
Než začnete
Rozhraní API pro záznam hovorů používají callConnectionId nebo serverCallId ke spuštění nahrávání. Existuje několik metod, které můžete použít k načtení těchto ID v závislosti na vašem scénáři:
Jak načíst ID spojení hovoru
Při použití automatizace volání obdržíte callConnectionId z události odpovědi z createCall, answer nebo connect žádostí při zahájení volání.
Jak načíst serverCallId
Při používání automatizace volání máte dvě možnosti, jak serverCallId získat:
Když vytvoříte volání, vrátí se
serverCallIdjako vlastnost událostiCallConnectedpoté, co je volání navázáno. Zjistěte, jak získat událost CallConnected ze sady SDK pro automatizaci volání.Při odpovědi na volání nebo při vytvoření volání se
serverCallIdvrátí jako vlastnost odpovědí rozhraní APIAnswerCallResultneboCreateCallResult.
Při používání Calling Client SDK můžete načíst serverCallId pomocí metody getServerCallId u hovoru.
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 připojovací řetězec komunikačních služeb a předejte ho objektu CallAutomationClient.
const callAutomationClient = new CallAutomationClient.CallAutomationClient("<ACSConnectionString>");
2. Spuštění relace nahrávání pomocí StartRecordingOptions a API StartAsync
Použijte callConnectionId nebo serverCallId přijaté během inicializace hovoru.
- Slouží
RecordingContentk předání typu obsahu záznamu. PoužijteAUDIO. - Slouží
RecordingChannelk předání typu kanálu záznamu. PoužijteMIXEDneboUNMIXED. - Slouží
RecordingFormatk předání formátu nahrávky. PoužijteWAV.
var locator: CallLocator = { id: "<callConnectionId> or <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. Začněte nahrávat – Použijte vlastní Azure Blob Storage
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: "<callConnectionId> or <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 jsou přiřazeni ke kanálu, jakmile začnou mluvit. 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: "<callConnectionId> or <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í vazby 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 údaje o nahrávací relaci recordingId.
3. Zastavení relace nahrávání pomocí rozhraní API stop
Použijte obdrženou recordingId v odpovědi na start.
var stopRecording = await callAutomationClient.getCallRecording().stop(recordingId);
4. Pozastavení relace nahrávání pomocí API pauza
Použijte obdrženou 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 obdrženou 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í webhooku Azure Event Grid nebo jiné aktivované akce upozorněte své služby, když je záznam média 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 získat z atributu contentLocation prvku 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čistěte prostředky
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 .
- Přečtěte si další informace o záznamu hovoru.
- Přečtěte si další informace o automatizaci volání.