你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 通信服务通话记录日志

Azure 通信服务提供的日志记录功能可用于监视和调试通信服务解决方案。 可通过 Azure 门户配置这些功能。

本文中的内容指的是通过 Azure Monitor 启用的日志(另请参阅常见问题解答)。 要为通信服务启用这些日志,请参阅在诊断设置中启用日志记录

资源日志类别

通信服务提供以下类型的日志,你可以启用:

  • 使用情况日志 - 提供与每个计费服务产品相关联的使用情况数据。
  • 通话记录摘要日志:提供通话记录的摘要信息,例如:
    • 呼叫持续时间。
    • 媒体内容(例如,音频/视频、未混合或听录)。
    • 用于记录的格式类型(例如,WAV 或 MP4)。
    • 记录结束的原因。
  • 记录传入操作日志:提供有关通话记录操作传入请求的信息。 每个条目对应于通话记录 API 的调用结果,例如 StartRecording、StopRecording、PauseRecording 和 ResumeRecording。

记录文件是通话或会议结束时生成的。 用户或应用(机器人)均可启动和停止记录。 记录也可能因为系统故障而结束。

记录可用于下载后,将发布摘要日志。 日志在 Azure Monitor 资源日志的标准延迟时间内发布。 请参阅 Azure Monitor 中的日志数据引入时间

使用情况日志架构

properties 说明
timestamp 生成日志的时间戳 (UTC)。
operationName 与日志记录相关联的操作。
operationVersion 如果通过 API 执行 operationName 操作,则 api-version 值与该操作关联。 如果没有任何 API 对应于此操作,则此版本表示操作的版本,以防与该操作关联的属性将来发生更改。
category 事件的日志类别。 类别是可以在资源上启用或禁用日志的粒度。 出现在事件的 properties blob 中的属性与日志类别和资源类型中的属性相同。
correlationID 关联事件的 ID。 可以使用它来标识多个表之间的关联事件。
Properties 适用于各种通信服务模式的其他数据。
recordID 使用情况记录的唯一 ID。
usageType 使用模式(例如聊天、PSTN 或 NAT)。
unitType 使用模式的使用情况所依据的单位类型(例如分钟数、兆字节或消息)。
quantity 此记录使用或消耗的单位数。

通话记录摘要日志架构

属性名称 数据类型 描述
timeGenerated DateTime 生成日志的时间戳 (UTC)。
operationName 字符串 与日志记录关联的操作。
correlationId 字符串 用于关联表之间事件的 ID。
recordingID 字符串 此日志引用的记录的 ID。
category 字符串 事件的日志类别。 具有相同日志类别和资源类型的日志具有相同的属性字段。
resultType 字符串 操作状态。
level 字符串 操作的严重性级别。
chunkCount Integer 为记录创建的区块总数。
channelType 字符串 记录的通道类型,如混合或未混合。
recordingStartTime DateTime 开始记录的时间。
contentType 字符串 记录的内容,即仅音频、音频/视频或听录。
formatType 字符串 记录的文件格式。
recordingLength 双精度 记录持续时间,以秒为单位。
audioChannelsCount Integer 记录中的音频通道总数。
recordingEndReason 字符串 记录结束的原因。

通话记录和示例数据

"operationName":            "Call Recording Summary",
"operationVersion":         "1.0",
"category":                 "RecordingSummary",

一次通话可以有一个记录或多个记录,具体取决于触发记录事件的次数。

例如,如果座席在记录线路上发起传出通话,但由于网络信号不佳而掉线,则 callID 只有一个 recordingID 值。 如果座席给客户回电,系统将生成新的 callID 实例和新的 recordingID 值。

示例:一次通话有一个记录的通话记录

"properties"
{  
  "TimeGenerated":"2022-08-17T23:18:26.4332392Z",
    "OperationName": "RecordingSummary",
    "Category": "CallRecordingSummary",
    "CorrelationId": "zzzzzz-cada-4164-be10-0000000000",
    "ResultType": "Succeeded",
    "Level": "Informational",
    "RecordingId": "eyJQbGF0Zm9ybUVuZHBvaW5xxxxxxxxFmNjkwxxxxxxxxxxxxSZXNvdXJjZVNwZWNpZmljSWQiOiJiZGU5YzE3Ni05M2Q3LTRkMWYtYmYwNS0yMTMwZTRiNWNlOTgifQ",
    "RecordingEndReason": "CallEnded",
    "RecordingStartTime": "2022-08-16T09:07:54.0000000Z",
    "RecordingLength": "73872.94",
    "ChunkCount": 6,
   "ContentType": "Audio - Video",
    "ChannelType": "mixed",
    "FormatType": "mp4",
    "AudioChannelsCount": 1
}

如果座席开始记录,然后在通话持续过程中多次停止并重新开始记录,callID 将具有多个 recordingID 值。 值的数量取决于触发记录事件的次数。

示例:一次通话有多个记录的通话记录


{   
 "TimeGenerated": "2022-08-17T23:55:46.6304762Z",
    "OperationName": "RecordingSummary",
    "Category": "CallRecordingSummary",
    "CorrelationId": "xxxxxxx-cf78-4156-zzzz-0000000fa29cc",
    "ResultType": "Succeeded",
    "Level": "Informational",
    "RecordingId": "eyJQbGF0Zm9ybUVuZHBxxxxxxxxxxxxjkwMC05MmEwLTRlZDYtOTcxYS1kYzZlZTkzNjU0NzciLCJSxxxxxNwZWNpZmljSWQiOiI5ZmY2ZTY2Ny04YmQyLTQ0NzAtYmRkYy00ZTVhMmUwYmNmOTYifQ",
    "RecordingEndReason": "CallEnded",
    "RecordingStartTime": "2022-08-17T23:55:43.3304762Z",
    "RecordingLength": 3.34,
    "ChunkCount": 1,
    "ContentType": "Audio - Video",
    "ChannelType": "mixed",
    "FormatType": "mp4",
    "AudioChannelsCount": 1
}
{
    "TimeGenerated": "2022-08-17T23:55:56.7664976Z",
    "OperationName": "RecordingSummary",
    "Category": "CallRecordingSummary",
    "CorrelationId": "xxxxxxx-cf78-4156-zzzz-0000000fa29cc",
    "ResultType": "Succeeded",
    "Level": "Informational",
    "RecordingId": "eyJQbGF0Zm9ybUVuxxxxxxiOiI4NDFmNjkwMC1mMjBiLTQzNmQtYTg0Mi1hODY2YzE4M2Y0YTEiLCJSZXNvdXJjZVNwZWNpZmljSWQiOiI2YzRlZDI4NC0wOGQ1LTQxNjEtOTExMy1jYWIxNTc3YjM1ODYifQ",
    "RecordingEndReason": "CallEnded",
    "RecordingStartTime": "2022-08-17T23:55:54.0664976Z",
    "RecordingLength": 2.7,
    "ChunkCount": 1,
    "ContentType": "Audio - Video",
    "ChannelType": "mixed",
    "FormatType": "mp4",
    "AudioChannelsCount": 1
}

ACSCallRecordingIncomingOperations 日志

属性如下:

properties 说明
timeGenerated 生成日志的时间戳 (UTC)。
callConnectionId 呼叫连接或支路的 ID(如果提供)。
callerIpAddress 调用方 IP 地址,如果该操作对应于来自具有公开 IP 地址的实体的 API 调用。
correlationId 关联事件的 ID。 可以使用它来标识多个表之间的关联事件。
durationMs 操作持续时间,以毫秒为单位。
level 操作的严重性级别。
operationName 与日志记录关联的操作。
operationVersion 与操作关联的 API 版本或者操作版本(如果没有 API 版本)。
resourceId 与记录关联的资源的唯一标识符。
resultSignature 操作的子状态。 如果该操作对应于 REST API 调用,则此字段为相应 REST 调用的 HTTP 状态代码。
resultType 操作的状态。
sdkType 请求中使用的 SDK 类型。
sdkVersion SDK 版本。
serverCallId 服务器呼叫 ID。
URI 请求的 URI。

下面是一个示例:

"properties"
{  "TimeGenerated": "2023-05-09T15:58:30.100Z",
    "Level": "Informational",
    "CorrelationId": "a999f996-b4e1-xxxx-ac04-a59test87d97",
    "OperationName": "ResumeCallRecording",
    "OperationVersion": "2023-03-06",
    "URI": "https://acsresouce.communication.azure.com/calling/recordings/   eyJQbGF0Zm9ybUVuZHBviI0MjFmMTIwMC04MjhiLTRmZGItOTZjYi0...:resume?api-version=2023-03-06",
    "ResultType": "Succeeded",
    "ResultSignature": 202,
    "DurationMs": 130,
    "CallerIpAddress": "127.0.0.1",
    "CallConnectionId": "d5596715-ab0b-test-8eee-575c250e4234",
    "ServerCallId": "aHR0cHM6Ly9hcGk0vjCCCCCCQd2pRP2k9OTMmZT02Mzc5OTQ3xMDAzNDUwMzg...",
    "SdkVersion": "1.0.0-alpha.20220829.1",
    "SdkType": "dotnet"
}

后续步骤