Запись звонков. Краткое руководство по созданию собственного хранилища Azure
В этом кратком руководстве описано, как приступить к работе с собственным хранилищем 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);
Уведомление об успешном экспорте
Используйте Сетка событий 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
}
Структура папок для записи звонков
Записи хранятся в следующем формате, как показано на схеме.
- /YYYYMMDDD/callId/first_8_of_recordingId + "-" + уникальный guid/[chunk-id]-acsmetadata.documentId.json
- /YYYYMMDDD/callId/first_8_of_recordingId + "-" + уникальный guid/[chunk-id]-audiomp3.documentId.mp3
Следующие шаги
Дополнительные сведения см. в следующих статьях:
- Скачивание примера приложения записи вызовов Java
- Дополнительные сведения о записи звонков
- Дополнительные сведения об автоматизации вызовов