Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом кратком руководстве описано, как приступить к работе с собственным хранилищем Azure для записи звонков. Чтобы начать использовать собственные функции службы хранилища Azure, убедитесь, что вы знакомы с API записи вызовов.
Необходимые условия: Настройка управляемой идентификации и назначений ролей контроля доступа на основе ролей (RBAC)
1. Включение системно назначенного управляемого идентификатора для Служб связи Azure
- Откройте ресурс Службы коммуникации Azure. Перейдите к удостоверению слева.
- Включите управляемое удостоверение, назначаемое системой, и нажмите кнопку "Сохранить".
- После завершения вы сможете просмотреть идентификатор субъекта-объекта только что созданного удостоверения.
- После успешного создания удостоверения нажмите назначения ролей Azure, чтобы начать добавление назначений ролей.
2. Добавление назначения ролей
- Щелкните "Добавить назначение ролей"
- На панели "Добавление назначения ролей" выберите следующие значения.
- Область: Хранилище
- Подписка: выбор подписки
- Ресурс. Выбор учетной записи хранения
- Роль: Службам коммуникации Azure необходим "Участник данных BLOB-объектов хранилища" для того, чтобы записывать в учетную запись хранилища.
- Щелкните Сохранить.
- После завершения вы увидите только что добавленное назначение ролей в окне "Назначение ролей Azure".
Запуск сеанса записи с указанным внешним хранилищем
Используйте идентификатор вызова сервера, полученный во время запуска вызова.
Использование хранилища BLOB-объектов Azure для внешнего хранилища
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<serverCallId>"))
{
//...
ExternalStorage = new BlobStorage(new Uri("<Insert Container / Blob Uri>"))
};
Response<RecordingStateResult> startRecordingWithResponse = await callAutomationClient.GetCallRecording()
.StartRecordingAsync(options: recordingOptions);
Использование хранилища BLOB-объектов Azure для внешнего хранилища
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<serverCallId>"))
.setExternalStorage(new BlobStorage("<Insert Container / Blob Uri>"));
Response<StartCallRecordingResult> response = callAutomationClient.getCallRecording()
.startRecordingWithResponse(recordingOptions, null);
Уведомление об успешном экспорте
Чтобы уведомить службы о готовности записываемого носителя и экспорте во внешнее хранилище, используйте веб-хук службы Event Grid Azure или другое активируемое действие.
См. этот пример схемы события.
{
"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": {
"storageType": "string", // AzureBlob etc.
"recordingId": "string", // unique ID for recording
"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
}
Уведомление и действие для записи сбоя экспорта.
Сбой при экспорте файла записи может произойти из-за неправильных параметров конфигурации или сбоев служб. В обоих случаях уведомление о сбое включает URL-адрес скачивания для получения записей. Скачайте записи из места, указанного в уведомлении о сбое, в пределах 24 часов.
Структура папок для записи звонков
Записи хранятся в следующем формате, как показано на схеме.
- /YYYYMMDDD/callId/first_8_of_recordingId + '-' + уникальный guid/[chunk-id]-acsmetadata.documentId.json
- /YYYYMMDD/callId/first_8_of_recordingId + '-' + уникальный GUID/[chunk-id]-audiomp3.documentId.mp3
Дальнейшие действия
Дополнительные сведения см. в следующих статьях:
- Скачивание примера приложения записи вызовов Java
- Дополнительные сведения о записи звонков
- Дополнительные сведения об автоматизации вызовов