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


Запись звонков: Быстрый старт с использованием собственного хранилища 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);

Уведомление об успешном экспорте

Чтобы уведомить службы о готовности записываемого носителя и экспорте во внешнее хранилище, используйте веб-хук службы 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

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

Дальнейшие действия

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