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


Обзор записи звонков

Запись звонков позволяет записывать несколько сценариев вызова, доступных в Службах коммуникации Azure, предоставляя набор API для запуска, остановки, приостановки и возобновления записи. Независимо от того, является ли это вызов ТСОП, WebRTC или SIP, вы можете использовать эти API в вашей серверной бизнес-логике. Кроме того, записи могут быть активированы действием пользователя, которое сообщает серверу приложению начать запись.

В зависимости от бизнес-потребностей можно использовать запись звонков для различных реализаций вызовов Служб коммуникации Azure.

Например, можно записать аудио- и видеозвонки 1:1 или 1:N:

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

Вы также можете использовать функцию записи звонков для записи сложных рабочих процессов входящих и исходящих вызовов по ТСОП или VoIP, управляемых службой автоматизации вызовов.

Независимо от того, как вы установили вызов, запись звонков позволяет создавать смешанные или несмешанные файлы мультимедиа, которые хранятся в течение 24 часов во встроенном временном хранилище. Вы можете получить файлы, переместить их в вашем собственном объектном хранилище Azure Blob Внесите собственное хранилище или выбрать другое решение для хранения. Запись звонков поддерживает все регионы данных Служб коммуникации Azure.

Схема, на которой показана архитектура записи вызовов.

Запись звонков, которая поддерживает бизнес-потребности

Запись звонков поддерживает различные мультимедийные выходные форматы и типы контента для удовлетворения бизнес-потребностей и вариантов использования. Вы можете использовать смешанные форматы для таких сценариев, как хранение записей, заметки о собраниях, коучинг и обучение, или даже соответствие и соблюдение. Кроме того, вы можете использовать несмешанный формат звука для регулирования использования в рамках обеспечения качества или более сложных сценариев, таких как расширенная аналитика или сложные процессы после вызова на базе ИИ (искусственного интеллекта).

Video

Тип канала Формат содержимого Резолюция Частота дискретизации Битрейт Скорость данных Выходные данные Description
смешанный mp4 1920x1080, 16 FPS (кадры в секунду) 16 кГц 1 мбит/с 7,5 МБ/мин* один файл, один канал смешанное видео в расположении плитки по умолчанию 3x3 (большинство активных динамиков) с поддержкой отображаемого имени

Аудио

Тип канала Формат содержимого Частота дискретизации Битрейт Скорость данных Выходные данные Description
смешанный MP3 16 кГц 48 кб/с 0,36 МБ/мин* один файл, один канал смешанный звук всех участников
смешанный WAV 16 кГц 256 Кбит/с 1,92 МБ/мин один файл, один канал смешанный звук всех участников
несмешанный WAV 16 кГц 256 Кбит/с 1,92 МБ/мин* на канал один файл, до 5 каналов wav несмешанный звук, один участник на канал, до пяти каналов

[*ПРИМЕЧАНИЕ] Форматы Mp3 и Mp4 используют сжатие потери, которое приводит к переменной скорости; Таким образом, значения скорости данных в предыдущих таблицах отражают теоретический максимум. Формат WAV распаковлен, а скорость передачи данных фиксирована, поэтому вычисления скорости данных точны.

Полный контроль над записями с помощью API записи звонков

Api записи вызовов можно использовать для управления записью с помощью триггеров внутренней бизнес-логики, таких как приложение, создающее групповой вызов и запись беседы. Кроме того, записи могут быть активированы действием пользователя, которое сообщает серверу приложению начать запись. Чтобы инициировать запись, API для записи звонков могут использовать callConnectionId (предпочтительный) или serverCallId, если callConnectionId недоступен. Чтобы узнать, как получить callConnectionId или serverCallId, проверьте наше краткое руководство по записи звонков. При начале записи возвращается recordingId, который затем может использоваться для последующих операций, таких как приостановка и возобновление.

Операция Работает включено Comments
Начать запись callConnectionId или serverCallId Возвращает recordingId.
Получение состояния записи recordingId Возвращает RecordingStateResult.
Пауза в записи recordingId Приостановка и возобновление записи звонков позволяет пропускать запись части звонка или собрания, а также возобновлять запись в один файл.
Возобновить запись recordingId Возобновляет операцию приостановки записи. Содержимое включается в тот же файл, что и содержимое до приостановки.
Остановка записи recordingId Останавливает запись и инициирует окончательную обработку мультимедиа для скачивания файлов.

Уведомления сетки событий

Запись вызовов использует службу "Сетка событий Azure " для предоставления уведомлений, связанных с мультимедиа и метаданными.

Замечание

Службы коммуникации Azure предоставляют краткосрочное хранилище носителей для записей. Записи доступны для скачивания в течение 24 часов. Через 24 часа записи больше не доступны.

Уведомление 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}/recordingId/{recordingId}
    "data": {
        "recordingStorageInfo": {
            "recordingChunks": [
                {
                    "documentId": string, // Document id for retrieving from storage
                    "index": int, // Index providing ordering for this chunk in the entire recording
                    "endReason": string, // Reason for chunk ending: "SessionEnded", "ChunkMaximumSizeExceeded”, etc.
                    "metadataLocation": <string>,  // url of the metadata for this chunk
                    "contentLocation": <string>,   // url of the mp4, mp3, or wav for this chunk
                    "deleteLocation": <string>     // url of the mp4, mp3, or wav to delete this chunk
                }
            ]
        },
        "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
}

Справочник по схеме метаданных

{
  "resourceId": <string>,           // stable resource id of the Azure Communication Services resource recording
  "callId": <string>,               // id of the call
  "chunkDocumentId": <string>,      // object identifier for the chunk this metadata corresponds to
  "chunkIndex": <number>,           // index of this chunk with respect to all chunks in the recording
  "chunkStartTime": <string>,       // ISO 8601 datetime for the start time of the chunk this metadata corresponds to
  "chunkDuration": <number>,        // [Chunk duration has a maximum of 4 hours] duration of the chunk this metadata corresponds to in milliseconds
  "pauseResumeIntervals": [
              "startTime": <string>,          // ISO 8601 datetime for the time at which the recording was paused
              "duration": <number>            // duration of the pause in the recording in milliseconds
                          ],
  "recordingInfo": {
               "contentType": <string>,        // content type of recording, e.g. audio/audioVideo
               "channelType": <string>,        // channel type of recording, e.g. mixed/unmixed
               "format": <string>,             // format of the recording, e.g. mp4/mp3/wav
               "audioConfiguration": {
                   "sampleRate": <number>,       // sample rate for audio recording
                   "bitRate": <number>,          // bitrate for audio recording
                   "channels": <number>          // number of audio channels in output recording
                                     },
               "videoConfiguration": {
                   "longerSideLength": <number>,        // longerSideLength for video recording
                   "shorterSideLength": <number>,       // shorterSideLength for video recording
                   "frameRate": <number>,               // frameRate for video recording
                   "bitRate": <number>                  // bitrate for video recording
                                     }
                    },
  "participants": [
    {
      "participantId": <string>,    // participant identifier of a participant captured in the recording
      "channel": <number>           // channel the participant was assigned to if the recording is unmixed
    }
  ]
}

Вопросы регулирования и конфиденциальности

Многие страны или регионы и государства имеют законы и правила, применимые к записи звонков. ТСОП, голосовые и видеозвонки часто требуют, чтобы пользователи предоставили согласие на запись своих сообщений. Вы несете ответственность за использование возможностей записи звонков в соответствии с законом. Вы должны получить согласие от сторон записанных сообщений таким образом, чтобы они соответствовали законам, применимым к каждому участнику.

Нормативные акты по обслуживанию персональных данных требуют возможности экспорта пользовательских данных. В целях поддержки этих требований файлы метаданных записей включают данные о каждом участнике вызова в массив participantId. Вы можете сопоставлять удостоверение пользователя Служб коммуникации Azure из массива participants с внутренними удостоверениями пользователей, чтобы определить участников вызова.

Известные проблемы

В редких сценариях высокой доступности или аварийного восстановления (HADR) один сеанс записи вызовов может создавать несколько файлов записи, которые используют одинаковые recordingId и chunkId. В этих случаях StopCallRecording может вернуть 404 Recording not found, даже если файлы записи успешно доставлены событиями RecordingFileStatusUpdated. Приложения должны сопоставлять записи, используя serverCallId, и не предполагать связь "один к одному" между вызовами, идентификаторами записей, идентификаторами блоков и выходными файлами.

Дальнейшие шаги

Ниже приведены некоторые статьи, интересующие вас: