Краткое руководство по записи вызовов
В этой статье описывается запись звонков для голосовых и видеозвонков. Чтобы начать использование API записи вызовов, необходимо выполнить вызов. Чтобы создать интерфейс вызова конечных пользователей, убедитесь, что вы знакомы с пакетом SDK для клиента вызовов и автоматизацией вызовов.
Пример кода
Пример приложения можно скачать в репозитории GitHub.
Необходимые компоненты
- Вам потребуется учетная запись Azure с активной подпиской.
- Развертывание ресурса службы коммуникации. Запишите строка подключения ресурса.
- Подпишитесь на события с помощью Сетка событий Azure.
- Скачивание пакета SDK для .NET
Перед началом работы
API записи вызовов используют исключительно serverCallId
для запуска записи. Существует несколько методов, которые можно использовать для получения serverCallId
в зависимости от вашего сценария:
Сценарии автоматизации вызовов
При использовании службы автоматизации вызовов можно получить два варианта:serverCallId
При установке вызова он возвращается
serverCallId
как свойствоCallConnected
события после установки вызова. Узнайте, как получить событие CallConnected из пакета SDK службы автоматизации вызовов.При ответе на вызов или вызов создается, он возвращается
serverCallId
в качестве свойстваAnswerCallResult
CreateCallResult
ответов ИЛИ API соответственно.
Вызов сценариев пакета SDK
При использовании пакета SDK для вызывающего клиента можно получить serverCallId
с помощью getServerCallId
метода в вызове.
Используйте этот пример, чтобы узнать , как получить serverCallId из пакета SDK для вызывающего клиента.
Давайте начнем с нескольких простых шагов.
1. Создание клиента автоматизации вызовов
API записи вызовов являются частью библиотек автоматизации вызовов Службы коммуникации Azure. Поэтому необходимо создать клиент службы автоматизации вызовов.
Чтобы создать клиент автоматизации вызовов, используйте строка подключения служб коммуникации и передайте его в CallAutomationClient
объект.
CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");
2. Запуск сеанса записи с помощью StartRecordingOptions с помощью API StartAsync
serverCallId
Используйте полученный во время запуска вызова.
- Используется
RecordingContent
для передачи типа контента записи. ИспользуйтеAUDIO
. - Используется
RecordingChannel
для передачи типа канала записи. ИспользованиеMIXED
илиUNMIXED
. - Используется
RecordingFormat
для передачи формата записи. Используйте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. Начало записи. Создание собственного хранилища BLOB-объектов Azure
Начните запись с помощью указанного Хранилище BLOB-объектов Azure для хранения записанного файла после завершения записи.
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. Запуск сеанса записи с включенным режимом приостановки с помощью API StartAsync
Примечание.
Записи должны быть возобновлены для создания файла записи.
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. Только для незамеченных. Укажите пользователя на канале 0
Чтобы создать неисправные файлы аудиозаписи, можно использовать AudioChannelParticipantOrdering
функцию, чтобы указать, какой пользователь требуется записать на канале 0. Остальные участники назначаются каналу, как они говорят. Если вы используете, но не используете RecordingChannel.Unmixed
AudioChannelParticipantOrdering
, запись звонков назначает канал 0 первому участнику.
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. Только для несмешанных данных— указание сходства каналов
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);
StartAsync
Ответ API содержит recordingId
сеанс записи.
3. Остановка сеанса записи с помощью StopAsync
API
recordingId
Используйте полученный в ответ на StartAsync
запрос .
var stopRecording = await callAutomationClient.GetCallRecording().StopAsync(recordingId);
4. Приостановка сеанса записи с помощью PauseAsync
API
recordingId
Используйте полученный в ответ на StartAsync
запрос .
var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);
5. Возобновление сеанса записи с помощью ResumeAsync
API
recordingId
Используйте полученный в ответ на StartAsync
запрос .
var resumeRecording = await callAutomationClient.GetCallRecording().ResumeAsync(recordingId);
6. Скачивание файла записи с помощью DownloadToAsync
API
Используйте Сетка событий Azure веб-перехватчик или другое активированное действие, чтобы уведомить службы о готовности записываемого носителя к загрузке.
Уведомление Microsoft.Communication.RecordingFileStatusUpdated
сетки событий публикуется, когда запись готова к получению, обычно через несколько минут после завершения обработки записи (например, при завершении собрания или остановке записи). Уведомления о событиях записей включают contentLocation
и metadataLocation
, которые можно использовать для получения записанных носителей и файла метаданных записи.
Пример схемы события:
{
"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
}
С помощью DownloadToAsync
API можно скачать записанный носитель.
var recordingDownloadUri = new Uri(contentLocation);
var response = await callAutomationClient.GetCallRecording().DownloadToAsync(recordingDownloadUri, fileName);
downloadLocation
Получение записи из contentLocation
атрибута recordingChunk
объекта .
DownloadToAsync
Используйте метод для скачивания содержимого в предоставленное имя файла.
7. Удаление содержимого записи с помощью DeleteAsync
API
Используйте DeleteAsync
API для удаления содержимого записи (например, записанных носителей и метаданных).
var recordingDeleteUri = new Uri(deleteLocation);
var response = await callAutomationClient.GetCallRecording().DeleteAsync(recordingDeleteUri);
Пример кода
Пример приложения можно скачать в репозитории GitHub.
Необходимые компоненты
- Вам потребуется учетная запись Azure с активной подпиской.
- Развертывание ресурса службы коммуникации. Запишите строка подключения ресурса.
- Подпишитесь на события с помощью Сетка событий Azure.
- Скачивание пакета SDK для Java
Перед началом работы
API записи вызовов используют serverCallId
исключительно для запуска записи. Существует несколько методов, которые можно использовать для получения serverCallId
в зависимости от вашего сценария:
Сценарии автоматизации вызовов
При использовании службы автоматизации вызовов можно получить два варианта:serverCallId
После создания
serverCallId
вызова возвращается как свойствоCallConnected
события после установки вызова. Узнайте, как получить событие CallConnected из пакета SDK службы автоматизации вызовов.После ответа на вызов или вызов
serverCallId
возвращается в качестве свойстваAnswerCallResult
CreateCallResult
ответов API соответственно.
Вызов сценариев пакета SDK
При использовании пакета SDK для вызывающего клиента можно получить serverCallId
с помощью getServerCallId
метода в вызове.
Используйте этот пример, чтобы узнать , как получить serverCallId из пакета SDK для вызывающего клиента.
Давайте начнем с нескольких простых шагов.
1. Создание клиента автоматизации вызовов
API записи вызовов являются частью библиотек автоматизации вызовов Службы коммуникации Azure. Поэтому необходимо создать клиент службы автоматизации вызовов.
Чтобы создать клиент автоматизации вызовов, используйте строка подключения служб коммуникации и передайте его в CallAutomationClient
объект.
CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
.connectionString("<acsConnectionString>")
.buildClient();
2. Запуск сеанса записи с помощью StartRecordingOptions с помощью startWithResponse
API
serverCallId
Используйте полученный во время запуска вызова.
- Используется
RecordingContent
для передачи типа контента записи. ИспользуйтеAUDIO
. - Используется
RecordingChannel
для передачи типа канала записи. ИспользованиеMIXED
илиUNMIXED
. - Используется
RecordingFormat
для передачи формата записи. Используйте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. Начало записи. Создание собственного хранилища BLOB-объектов Azure
Начните запись с помощью указанного Хранилище BLOB-объектов Azure для хранения записанного файла после завершения записи.
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. Запуск сеанса записи с включенным режимом приостановки с помощью StartAsync
API
Примечание.
Записи должны быть возобновлены для создания файла записи.
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. Только для незамеченных. Укажите пользователя на канале 0
Чтобы создать неисправные файлы аудиозаписи, можно использовать AudioChannelParticipantOrdering
функцию, чтобы указать, какой пользователь требуется записать на канале 0. Остальные участники назначаются каналу, как они говорят. Если вы используете, но не используете RecordingChannel.Unmixed
AudioChannelParticipantOrdering
, запись звонков назначает канал 0 первому участнику.
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. Только для несмешанных данных— указание сходства каналов
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);
startWithResponse
Ответ API содержит recordingId
сеанс записи.
3. Остановка сеанса записи с помощью stopWithResponse
API
recordingId
Используйте полученный в ответ на startWithResponse
запрос .
Response<Void> response = callAutomationClient.getCallRecording()
.stopWithResponse(response.getValue().getRecordingId(), null);
4. Приостановка сеанса записи с помощью pauseWithResponse
API
recordingId
Используйте полученный в ответ на startWithResponse
запрос .
Response<Void> response = callAutomationClient.getCallRecording()
.pauseWithResponse(response.getValue().getRecordingId(), null);
5. Возобновление сеанса записи с помощью resumeWithResponse
API
recordingId
Используйте полученный в ответ на startWithResponse
запрос .
Response<Void> response = callAutomationClient.getCallRecording()
.resumeWithResponse(response.getValue().getRecordingId(), null);
6. Скачивание файла записи с помощью downloadToWithResponse
API
Для уведомления служб о том, что записанный файл готов к скачиванию, используется веб-перехватчик службы Сетка событий Azure или другое инициируемое действие.
Уведомление Microsoft.Communication.RecordingFileStatusUpdated
сетки событий публикуется, когда запись готова к получению, обычно через несколько минут после завершения процесса записи (например, окончание собрания или остановка записи). Уведомления о событиях записей включают contentLocation
и metadataLocation
, которые можно использовать для получения записанных носителей и файла метаданных записи.
Следующий код является примером схемы события.
{
"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
}
Используйте downloadToWithResponse
метод CallRecording
класса, чтобы скачать записанный носитель. Ниже приведены поддерживаемые параметры для метода downloadToWithResponse
.
-
contentLocation
: Службы коммуникации Azure URL-адрес, в котором находится содержимое. -
destinationPath
— расположение файла. -
parallelDownloadOptions
: необязательныйParallelDownloadOptions
объект для изменения работы параллельного скачивания. -
overwrite
— значение true для перезаписи файла, если он существует. -
context
— контекст, представляющий контекст запроса.
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);
Расположение содержимого и идентификаторы документов для файлов записей можно получить из полей contentLocation
и documentId
соответственно для каждого элемента recordingChunk
.
7. Удаление содержимого записи с помощью deleteWithResponse
API
Используйте deleteWithResponse
метод CallRecording
класса для удаления записываемого носителя. Поддерживаемые параметры для deleteWithResponse
метода:
-
deleteLocation
: Службы коммуникации Azure URL-адрес, в котором находится содержимое для удаления. -
context
— контекст, представляющий контекст запроса.
Response<Void> deleteResponse = callAutomationClient.getCallRecording().deleteWithResponse(deleteLocation, context);
Расположение удаления записи можно получить из deleteLocation
поля события сетки событий.
Пример кода
Пример приложения можно скачать в репозитории GitHub.
Необходимые компоненты
- Вам потребуется учетная запись Azure с активной подпиской.
- Развертывание ресурса службы коммуникации. Запишите строка подключения ресурса.
- Подпишитесь на события с помощью Сетка событий Azure.
- Python версии 3.7 и выше.
Перед началом работы
API записи вызовов используют исключительно serverCallId
для запуска записи. Существует несколько методов, которые можно использовать для получения serverCallId
в зависимости от вашего сценария:
Сценарии автоматизации вызовов
- При использовании службы автоматизации вызовов можно получить два варианта:
serverCallId
- После создания
serverCallId
вызова возвращается как свойствоCallConnected
события после установки вызова. Узнайте, как получить событие CallConnected из пакета SDK службы автоматизации вызовов. - После создания вызова или вызова возвращается
serverCallId
свойствоAnswerCallResult
CreateCallResult
ответов API соответственно.
- После создания
Вызов сценариев пакета SDK
- При использовании пакета SDK для вызова клиента можно получить
serverCallId
с помощью переменнойserver_call_id
в вызове. Используйте этот пример, чтобы узнать , как получить serverCallId из пакета SDK для вызывающего клиента.
Давайте начнем с нескольких простых шагов!
1. Создание клиента автоматизации вызовов
API записи вызовов являются частью библиотек автоматизации вызовов Службы коммуникации Azure. Таким образом, необходимо создать клиент службы автоматизации вызовов.
Чтобы создать клиент автоматизации вызовов, используйте строка подключения служб коммуникации и передайте его в CallAutomationClient
объект.
call_automation_client = CallAutomationClient.from_connection_string("<ACSConnectionString>")
2. Запуск сеанса записи start_recording API
serverCallId
Используйте полученный во время запуска вызова.
- Используется
RecordingContent
для передачи типа контента записи. ИспользуйтеAUDIO
. - Используется
RecordingChannel
для передачи типа канала записи. ИспользованиеMIXED
илиUNMIXED
. - Используется
RecordingFormat
для передачи формата записи. Используйте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. Начало записи. Создание собственного хранилища BLOB-объектов Azure
Начните запись с собственной Хранилище BLOB-объектов Azure, определенной для хранения файла записи после завершения записи.
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. Запуск сеанса записи с включенным режимом приостановки с помощью API StartAsync
Примечание.
Записи должны быть возобновлены для создания файла записи.
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. Только для незамеченных. Укажите пользователя на канале 0
Чтобы создать неисправные файлы аудиозаписи, можно использовать AudioChannelParticipantOrdering
функцию, чтобы указать, какой пользователь требуется записать на канале 0. Остальные участники назначаются каналу, как они говорят. Если вы используете, но не используете RecordingChannel.Unmixed
AudioChannelParticipantOrdering
, запись звонков назначает канал 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>",
audio_channel_participant_ordering=[CommunicationUserIdentifier(id="<ACS_USER_MRI>")])
2.4. Только для несмешанных данных— указание сходства каналов
_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])
StartAsync
Ответ API содержит recordingId
сеанс записи.
3. Остановка сеанса записи с помощью API stop_recording
recording_id
Используйте полученный в ответ на start_recording
запрос .
stop_recording = call_automation_client.stop_recording(recording_id = recording_id)
4. Приостановка сеанса записи с помощью API pause_recording
recording_id
Используйте полученный в ответ на start_recording
запрос .
pause_recording = call_automation_client.pause_recording(recording_id = recording_id)
5. Возобновление сеанса записи с помощью API resume_recording
recording_id
Используйте полученный в ответ на start_recording
запрос .
resume_recording = call_automation_client.resume_recording(recording_id = recording_id)
6. Скачивание файла записи с помощью API download_recording
Для уведомления служб о том, что записанный файл готов к скачиванию, используется веб-перехватчик службы Сетка событий Azure или другое инициируемое действие.
Уведомление Microsoft.Communication.RecordingFileStatusUpdated
сетки событий публикуется, когда запись готова к получению, как правило, через несколько минут после завершения процесса записи (например, завершение собрания или остановка записи). Запись уведомлений о событиях включает значения contentLocation
и metadataLocation
, которые можно использовать для получения записанного носителя и файла метаданных записи.
Следующий код является примером схемы события.
{
"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
}
С помощью download_recording
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())
Запись downloadLocation
может быть получена из contentLocation
атрибута объекта recordingChunk
.
download_recording
Используйте метод для скачивания содержимого в байты.
7. Удаление содержимого записи с помощью API delete_recording
Используйте delete_recording
API для удаления содержимого записи, например записанных носителей и метаданных.
response = call_automation_client.delete_recording(delete_location);
Пример кода
Пример приложения можно скачать в репозитории GitHub.
Необходимые компоненты
- Вам потребуется учетная запись Azure с активной подпиской.
- Развертывание ресурса службы коммуникации. Запишите строка подключения ресурса.
- Подпишитесь на события с помощью Сетка событий Azure.
- Node.js версии LTS и обслуживания LTS (рекомендуется 8.11.1 и 10.14.1)
Перед началом работы
API записи вызовов используют исключительно serverCallId
для запуска записи. Существует несколько методов, которые можно использовать для получения serverCallId
в зависимости от вашего сценария:
Сценарии автоматизации вызовов
- При использовании службы автоматизации вызовов можно получить два варианта:
serverCallId
- После создания
serverCallId
вызова возвращается как свойствоCallConnected
события после установки вызова. Узнайте, как получить событие CallConnected из пакета SDK службы автоматизации вызовов. - После создания вызова или вызова возвращается
serverCallId
свойствоAnswerCallResult
CreateCallResult
ответов API соответственно.
- После создания
Вызов сценариев пакета SDK
При использовании пакета SDK для вызывающего клиента можно получить serverCallId
с помощью getServerCallId
метода в вызове.
Используйте этот пример, чтобы узнать , как получить serverCallId из пакета SDK для вызывающего клиента.
Давайте начнем с нескольких простых шагов!
1. Создание клиента автоматизации вызовов
API записи вызовов являются частью библиотек автоматизации вызовов Службы коммуникации Azure. Таким образом, необходимо создать клиент службы автоматизации вызовов.
Чтобы создать клиент автоматизации вызовов, используйте строка подключения служб коммуникации и передайте его в CallAutomationClient
объект.
const callAutomationClient = new CallAutomationClient.CallAutomationClient("<ACSConnectionString>");
2. Запуск сеанса записи с помощью StartRecordingOptions с помощью API StartAsync
serverCallId
Используйте полученный во время запуска вызова.
- Используется
RecordingContent
для передачи типа контента записи. ИспользуйтеAUDIO
. - Используется
RecordingChannel
для передачи типа канала записи. ИспользованиеMIXED
илиUNMIXED
. - Используется
RecordingFormat
для передачи формата записи. Используйте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. Начало записи. Создание собственного хранилища BLOB-объектов Azure
Начните запись с помощью указанного Хранилище BLOB-объектов Azure для хранения записанного файла после завершения записи.
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. Запуск сеанса записи с включенным режимом приостановки с помощью API StartAsync
Примечание.
Записи должны быть возобновлены для создания файла записи.
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. Только для незамеченных. Укажите пользователя на канале 0
Чтобы создать неисправные файлы аудиозаписи, можно использовать AudioChannelParticipantOrdering
функцию, чтобы указать, какой пользователь требуется записать на канале 0. Остальные участники назначаются каналу, как они говорят. Если вы используете, но не используете RecordingChannel.Unmixed
AudioChannelParticipantOrdering
, запись звонков назначает канал 0 первому участнику.
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. Только для несмешанных данных— указание сходства каналов
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);
StartAsync
Ответ API содержит recordingId
сеанс записи.
3. Остановка сеанса записи с помощью API stop
recordingId
Используйте полученный в ответ на start
запрос .
var stopRecording = await callAutomationClient.getCallRecording().stop(recordingId);
4. Приостановка сеанса записи с помощью API приостановки
recordingId
Используйте полученный в ответ на start
запрос .
var pauseRecording = await callAutomationClient.getCallRecording().pause(recordingId);
5. Возобновление сеанса записи с помощью API ResumeAsync
recordingId
Используйте полученный в ответ на start
запрос .
var resumeRecording = await callAutomationClient.getCallRecording().resume(recordingId);
6. Скачивание файла записи с помощью API DownloadToAsync
Для уведомления служб о том, что записанный файл готов к скачиванию, используется веб-перехватчик службы Сетка событий Azure или другое инициируемое действие.
Уведомление Microsoft.Communication.RecordingFileStatusUpdated
сетки событий публикуется, когда запись готова к получению, как правило, через несколько минут после завершения процесса записи (например, завершение собрания или остановка записи). Запись уведомлений о событиях включает значения contentLocation
и metadataLocation
, которые можно использовать для получения записанного носителя и файла метаданных записи.
Следующий код является примером схемы события.
{
"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
}
С помощью downloadToPath
API можно скачать записанный носитель.
var response = await callAutomationClient.getCallRecording().downloadToPath(contentLocation, fileName);
Запись downloadLocation
может быть получена из contentLocation
атрибута объекта recordingChunk
.
DownloadToAsync
Используйте метод для скачивания содержимого в предоставленное имя файла.
7. Удаление содержимого записи с помощью API DeleteAsync
Используйте delete
API для удаления содержимого записи (например, записанных носителей, метаданных)
var response = await callAutomationClient.getCallRecording().delete(deleteLocation);
Очистка ресурсов
Если вы хотите отменить и удалить подписку на Службы коммуникации, можно удалить ресурс или группу ресурсов. При удалении группы ресурсов также удаляются все связанные с ней ресурсы. См. сведения об очистке ресурсов.
Следующие шаги
Дополнительные сведения см. в следующих статьях:
- Скачайте примеры приложений для записи вызовов Java, Python и JavaScript .
- Дополнительные сведения о записи звонков.
- Дополнительные сведения об автоматизации вызовов.