Azure Communication Services Call Recording logs
Azure Communication Services offers logging capabilities that you can use to monitor and debug your Communication Services solution. You configure these capabilities through the Azure portal.
The content in this article refers to logs enabled through Azure Monitor (see also FAQ). To enable these logs for Communication Services, see Enable logging in diagnostic settings.
Resource log categories
Communication Services offers the following types of logs that you can enable:
- Usage logs: Provide usage data associated with each billed service offering.
- Call Recording summary logs: Provide summary information for call recordings, like:
- Call duration.
- Media content (for example, audio/video, unmixed, or transcription).
- Format types used for the recording (for example, WAV or MP4).
- The reason why the recording ended.
- Recording incoming operations logs: Provide information about incoming requests for Call Recording operations. Every entry corresponds to the result of a call to the Call Recording APIs, such as StartRecording, StopRecording, PauseRecording, and ResumeRecording.
A recording file is generated at the end of a call or meeting. Either a user or an app (bot) can start and stop the recording. The recording can also end because of a system failure.
Summary logs are published after a recording is ready to be downloaded. The logs are published within the standard latency time for Azure Monitor resource logs. See Log data ingestion time in Azure Monitor.
Usage log schema
Property | Description |
---|---|
timestamp |
The timestamp (UTC) of when the log was generated. |
operationName |
The operation associated with the log record. |
operationVersion |
The api-version value associated with the operation, if the operationName operation was performed through an API. If no API corresponds to this operation, the version represents the version of the operation, in case the properties associated with the operation change in the future. |
category |
The log category of the event. The category is the granularity at which you can enable or disable logs on a resource. The properties that appear within the properties blob of an event are the same within a log category and resource type. |
correlationID |
The ID for correlated events. You can use it to identify correlated events between multiple tables. |
Properties |
Other data that's applicable to various modes of Communication Services. |
recordID |
The unique ID for a usage record. |
usageType |
The mode of usage (for example, Chat, PSTN, or NAT). |
unitType |
The type of unit that usage is based on for a mode of usage (for example, minutes, megabytes, or messages). |
quantity |
The number of units used or consumed for this record. |
Call Recording summary log schema
Property name | Data type | Description |
---|---|---|
timeGenerated |
DateTime | The time stamp (UTC) of when the log was generated. |
operationName |
String | The operation associated with a log record. |
correlationId |
String | The ID that's used to correlate events between tables. |
recordingID |
String | The ID for the recording that this log refers to. |
category |
String | The log category of the event. Logs with the same log category and resource type have the same property fields. |
resultType |
String | The status of the operation. |
level |
String | The severity level of the operation. |
chunkCount |
Integer | The total number of chunks created for the recording. |
channelType |
String | The channel type of the recording, such as mixed or unmixed. |
recordingStartTime |
DateTime | The time that the recording started. |
contentType |
String | The content of the recording, such as audio only, audio/video, or transcription. |
formatType |
String | The file format of the recording. |
recordingLength |
Double | The duration of the recording in seconds. |
audioChannelsCount |
Integer | The total number of audio channels in the recording. |
recordingEndReason |
String | The reason why the recording ended. |
Call Recording and example data
"operationName": "Call Recording Summary",
"operationVersion": "1.0",
"category": "RecordingSummary",
A call can have one recording or many recordings, depending on how many times a recording event is triggered.
For example, if an agent starts an outbound call on a recorded line and the call drops because of a poor network signal, callID
will have one recordingID
value. If the agent calls back the customer, the system generates a new callID
instance and a new recordingID
value.
Example: Call Recording for one call to one recording
"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
}
If the agent starts a recording and then stops and restarts the recording multiple times while the call is still on, callID
will have many recordingID
values. The number of values depends on how many times the recording events were triggered.
Example: Call Recording for one call to many recordings
{
"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 logs
Here are the properties:
Property | Description |
---|---|
timeGenerated |
The time stamp (UTC) of when the log was generated. |
callConnectionId |
The ID of the call connection or leg, if available. |
callerIpAddress |
The caller IP address, if the operation corresponds to an API call that comes from an entity with a publicly available IP address. |
correlationId |
The ID for correlated events. You can use it to identify correlated events between multiple tables. |
durationMs |
The duration of the operation in milliseconds. |
level |
The severity level of the operation. |
operationName |
The operation associated with log records. |
operationVersion |
The API version associated with the operation or version of the operation (if there is no API version). |
resourceId |
A unique identifier for the resource that the record is associated with. |
resultSignature |
The substatus of the operation. If this operation corresponds to a REST API call, this field is the HTTP status code of the corresponding REST call. |
resultType |
The status of the operation. |
sdkType |
The SDK type used in the request. |
sdkVersion |
The SDK version. |
serverCallId |
The server call ID. |
URI |
The URI of the request. |
Here's an example:
"properties"
{ "TimeGenerated": "2023-05-09T15:58:30.100Z",
"Level": "Informational",
"CorrelationId": "aaaa0000-bb11-2222-33cc-444444dddddd",
"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"
}
Next steps
- Get Call Recording insights.
- Learn more about Call Recording.