Поделиться через


Запись звонков. Краткое руководство по созданию собственного хранилища Azure

В этом кратком руководстве описано, как приступить к работе с собственным хранилищем Azure для записи звонков. Чтобы начать использовать собственные служба хранилища Azure функциональные возможности, убедитесь, что вы знакомы с API записи вызовов.

Предварительные требования. Настройка назначений ролей на основе управляемых удостоверений и ролей контроль доступа на основе ролей (RBAC)

1. Включение управляемого удостоверения, назначаемого системой для Службы коммуникации Azure

Схема с ресурсом службы коммуникации с отключенным управляемым удостоверением

  1. Откройте ресурс Службы коммуникации Azure. Перейдите к удостоверению слева.
  2. Включенное управляемое удостоверение, назначаемое системой, и нажмите кнопку "Сохранить".
  3. После завершения вы сможете просмотреть идентификатор субъекта-объекта только что созданного удостоверения.

Схема с ресурсом службы коммуникации с включенным управляемым удостоверением

  1. После успешного создания удостоверения щелкните назначения ролей Azure, чтобы начать добавление назначений ролей.

2. Добавление назначения ролей

  1. Щелкните "Добавить назначение ролей"

Схема, показывающая управляемое удостоверение службы коммуникации, добавляющее назначение ролей

  1. На панели "Добавление назначения ролей" выберите следующие значения.
    1. Область. Память
    2. Подписка: выбор подписки
    3. Ресурс. Выбор учетной записи хранения
    4. Роль: Службы коммуникации Azure требуется "участник данных BLOB-объектов служба хранилища", чтобы иметь возможность записи в учетную запись хранения.

Схема, показывающая управляемое удостоверение службы коммуникации, добавляющее сведения о назначении ролей

  1. Нажмите кнопку "Сохранить".
  2. После завершения вы увидите только что добавленное назначение ролей в окне "Назначение ролей 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

Схема, показывающая структуру папки записи вызовов

Следующие шаги

Дополнительные сведения см. в следующих статьях: