Call summary log schema
The call summary log contains data to help you identify key properties of all calls. A different call summary log is created for each participantId
(or endpointId
for peer-to-peer [P2P] calls) value in the call.
For each participant within a call, Communication Services creates a distinct call summary log. If someone rejoins a call, that participant has the same EndpointId
value but a different ParticipantId
value. That endpoint can then have two call summary logs.
How to use call logs
We recommend you collect all available call logs in a log analytics resource so you can monitor your call usage and improve your call quality and receive new logs from Azure Communication Services as we release them.
There are two main tools you can use to monitor your calls and improve call quality.
We recommend using the voice and video insights dashboard dashboards to start any quality investigations, and using call diagnostics as needed to explore individual calls when you need granular detail.
Data concepts
Important
You must collect logs if you want to analyze them. To learn more, see: How do I store logs?
Azure doesn't store your call log data unless you enable these specific Diagnostic Settings. Your call data isn't retroactively available. You accumulate data once you create the Diagnostic Settings.
Data definitions
Call summary log schema
Important
Participant information in the call summary log varies based on the participant tenant. The SDK version and OS version are redacted if the participant is not within the same tenant (also called cross-tenant) as the Communication Services resource. Cross-tenant participants are classified as external users invited by a resource tenant to join and collaborate during a call.
This table describes each property.
Property | Description |
---|---|
time |
The time stamp (UTC) 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. This property 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 unique ID for a call. It identifies correlated events from all of the participants and endpoints that connect during a single call, and you can use it to join data from different logs. If you ever need to open a support case with Microsoft, you can use the correlationId value to easily identify the call that you're troubleshooting. |
identifier |
The unique ID for the user. The identity can be an Azure Communication Services user, a Microsoft Entra user ID, a Teams anonymous user ID, or a Teams bot ID. You can use this ID to correlate user events across logs. |
callStartTime |
A time stamp for the start of the call, based on the first attempted connection from any endpoint. |
callDuration |
The duration of the call, expressed in seconds, based on the first attempted connection and the end of the last connection between two endpoints. |
callType |
The type of the call. It contains either "P2P" or "Group" . A "P2P" call is a direct 1:1 connection between only two, nonserver endpoints. A "Group" call is a call that has more than two endpoints or is created as "Group" call before the connection. |
teamsThreadId |
The Teams thread ID. This ID is relevant only when the call is organized as a Teams meeting. It then represents the use case of interoperability between Microsoft Teams and Azure Communication Services. This ID is exposed in operational logs. You can also get this ID through the Chat APIs. |
participantId |
The ID generated to represent the two-way connection between a "Participant" endpoint (endpointType = "Server" ) and the server. When callType = "P2P" , there's a direct connection between two endpoints, and no participantId value is generated. |
participantStartTime |
The time stamp for the beginning of the participant's first connection attempt. |
participantDuration |
The duration of each participant connection in seconds, from participantStartTime to the time stamp when the connection ended. |
participantEndReason |
The reason for the end of a participant connection. It contains Calling SDK error codes that the SDK emits (when relevant) for each participantId value. |
endpointId |
The unique ID that represents each endpoint connected to the call, where endpointType defines the endpoint type. When the value is null , the connected entity is the Communication Services server (endpointType = "Server" ). The endpointId value can sometimes persist for the same user across multiple calls (correlationId ) for native clients. The number of endpointId values determines the number of call summary logs. A distinct summary log is created for each endpointId value. |
endpointType |
This value describes the properties of each endpoint connected to the call. It can contain "Server" , "VOIP" , "PSTN" , "BOT" , or "Unknown" . |
sdkVersion |
The version string for the Communication Services Calling SDK version that each relevant endpoint uses (for example, "1.1.00.20212500" ). |
osVersion |
A string representing the operating system and version of each endpoint device. |
participantTenantId |
The ID of the Microsoft tenant associated with the identity of the participant. The tenant can either be the Azure tenant that owns the Azure Communication Services resource or the Microsoft tenant of a Microsoft 365 identity. This field is used to guide cross-tenant redaction. |
participantType |
Description of the participant as a combination of its client (Azure Communication Services or Teams), and its identity (Azure Communication Services or Microsoft 365). Possible values include: Azure Communication Services (Azure Communication Services identity and Azure Communication Services SDK), Teams (Teams identity and Teams client), Azure Communication Services as Teams external user (Azure Communication Services identity and Azure Communication Services SDK in Teams call or meeting), Azure Communication Services as Microsoft 365 user (Microsoft 365 identity and Azure Communication Services client), and Teams Voice Apps. |
pstnParticipantCallType |
Represents the type and direction of PSTN participants including Emergency calling, direct routing, transfer, forwarding, and so on. |
ParticipantEndSubCode |
Represents the Calling SDK error subcode that the SDK emits (when relevant) for each participantId value. |
ResultCategory |
Represents the category of the participant ending the call. It can be one of these four values: Success, ExpectedError, UnexpectedClientError, UnexpectedServerError. |
DiagnosticOptions |
This value allows developers to attach custom tags to their client telemetry, which can then be viewed in the Call Diagnostics section. This helps in identifying and troubleshooting issues more effectively. To learn how to add custom tags to this value, refer to Tutorial on adding custom tags to your client telemetry |
Error codes
The participantEndReason
property contains a value from the set of Calling SDK error codes. You can refer to these codes to troubleshoot issues that were detected during the call, for each endpoint. See Troubleshooting call end response codes for Calling SDK, Call Automation SDK, PSTN, Chat SDK, and SMS SDK.
Sample data for various call types
Note
In this article, P2P and group calls are within the same tenant by default. All call scenarios that are cross-tenant are specified accordingly throughout the article.
P2P call
Here are shared fields for all logs in a P2P call:
"time": "2021-07-19T18:46:50.188Z",
"resourceId": "SUBSCRIPTIONS/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/RESOURCEGROUPS/ACS-TEST-RG/PROVIDERS/MICROSOFT.COMMUNICATION/COMMUNICATIONSERVICES/ACS-PROD-CCTS-TESTS",
"correlationId": "aaaa0000-bb11-2222-33cc-444444dddddd",
Call summary logs
Call summary logs share operation and category information:
"operationName": "CallSummary",
"operationVersion": "1.0",
"category": "CallSummary",
Here's a call summary for VoIP user 1:
"properties": {
"identifier": "acs:61fddbe3-0003-4066-97bc-6aaf143bbb84_0000000b-4fee-66cf-ac00-343a0d003158",
"callStartTime": "2021-07-19T17:54:05.113Z",
"callDuration": 6,
"callType": "P2P",
"teamsThreadId": "null",
"participantId": "null",
"participantStartTime": "2021-07-19T17:54:06.758Z",
"participantDuration": "5",
"participantEndReason": "0",
"endpointId": "570ea078-74e9-4430-9c67-464ba1fa5859",
"endpointType": "VoIP",
"sdkVersion": "1.0.1.0",
"osVersion": "Windows 10.0.17763 Arch: x64"
}
Here's a call summary for VoIP user 2:
"properties": {
"identifier": "acs:7af14122-9ac7-4b81-80a8-4bf3582b42d0_06f9276d-8efe-4bdd-8c22-ebc5434903f0",
"callStartTime": "2021-07-19T17:54:05.335Z",
"callDuration": 6,
"callType": "P2P",
"teamsThreadId": "null",
"participantId": "null",
"participantStartTime": "2021-07-19T17:54:06.335Z",
"participantDuration": "5",
"participantEndReason": "0",
"endpointId": "a5bd82f9-ac38-4f4a-a0fa-bb3467cdcc64",
"endpointType": "VoIP",
"sdkVersion": "1.1.0.0",
"osVersion": "null"
}
Here's a cross-tenant call summary log for VoIP user 1:
"properties": {
"identifier": "1e4c59e1-r1rr-49bc-893d-990dsds8f9f5",
"callStartTime": "2022-08-14T06:18:27.010Z",
"callDuration": 520,
"callType": "P2P",
"teamsThreadId": "null",
"participantId": "null",
"participantTenantId": "02cbdb3c-155a-4b95-b829-6d56a45787ca",
"participantStartTime": "2022-08-14T06:18:27.010Z",
"participantDuration": "520",
"participantEndReason": "0",
"endpointId": "02cbdb3c-155a-4d98-b829-aaaaa61d44ea",
"endpointType": "VoIP",
"sdkVersion": "Redacted",
"osVersion": "Redacted"
}
Here's a call summary for a PSTN call:
Note
P2P or group call logs have OS and SDK versions redacted regardless of whether it's the participant's tenant or the bot's tenant.
"properties": {
"identifier": "b1999c3e-bbbb-4650-9b23-9999bdabab47",
"callStartTime": "2022-08-07T13:53:12Z",
"callDuration": 1470,
"callType": "Group",
"teamsThreadId": "19:36ec5177126fff000aaa521670c804a3@thread.v2",
"participantId": " b25cf111-73df-4e0a-a888-640000abe34d",
"participantStartTime": "2022-08-07T13:56:45Z",
"participantDuration": 960,
"participantEndReason": "0",
"endpointId": "8731d003-6c1e-4808-8159-effff000aaa2",
"endpointType": "PSTN",
"sdkVersion": "Redacted",
"osVersion": "Redacted"
}
Group calls
Data for a group call is generated in three call summary logs and six call diagnostics logs. Here are shared fields for all logs in the call:
"time": "2021-07-05T06:30:06.402Z",
"resourceId": "SUBSCRIPTIONS/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/RESOURCEGROUPS/ACS-TEST-RG/PROVIDERS/MICROSOFT.COMMUNICATION/COMMUNICATIONSERVICES/ACS-PROD-CCTS-TESTS",
"correlationId": "bbbb1111-cc22-3333-44dd-555555eeeeee",
Call summary logs
Call summary logs share operation and category information:
"operationName": "CallSummary",
"operationVersion": "1.0",
"category": "CallSummary",
Here's a call summary for VoIP endpoint 1:
"properties": {
"identifier": "acs:1797dbb3-f982-47b0-b98e-6a76084454f1_0000000b-1531-729f-ac00-343a0d00d975",
"callStartTime": "2021-07-05T06:16:40.240Z",
"callDuration": 87,
"callType": "Group",
"teamsThreadId": "19:meeting_MjZiOTAyN2YtZWU1Yi00ZTZiLT77777OOOOO99999jgxOTkw@thread.v2",
"participantId": "04cc26f5-a86d-481c-b9f9-7a40be4d6fba",
"participantStartTime": "2021-07-05T06:16:44.235Z",
"participantDuration": "82",
"participantEndReason": "0",
"endpointId": "5ebd55df-ffff-ffff-89e6-4f3f0453b1a6",
"endpointType": "VoIP",
"sdkVersion": "1.0.0.3",
"osVersion": "Darwin Kernel Version 18.7.0: Mon Nov 9 15:07:15 PST 2020; root:xnu-4903.272.3~3/RELEASE_ARM64_S5L8960X"
}
Here's a call summary for VoIP endpoint 3:
"properties": {
"identifier": "acs:1797dbb3-f982-47b0-b98e-6a76084454f1_0000000b-1531-57c6-ac00-343a0d00d972",
"callStartTime": "2021-07-05T06:16:40.240Z",
"callDuration": 87,
"callType": "Group",
"teamsThreadId": "19:meeting_MjZiOTAyN2YtZWU1Yi00ZTZiLTk2ZDUtYTZlM2I2ZjgxOTkw@thread.v2",
"participantId": "1a9cb3d1-7898-4063-b3d2-26c1630ecf03",
"participantStartTime": "2021-07-05T06:16:40.240Z",
"participantDuration": "87",
"participantEndReason": "0",
"endpointId": "5ebd55df-ffff-ffff-ab89-19ff584890b7",
"endpointType": "VoIP",
"sdkVersion": "1.0.0.3",
"osVersion": "Android 11.0; Manufacturer: Google; Product: redfin; Model: Pixel 5; Hardware: redfin"
}
Here's a call summary for PSTN endpoint 2:
"properties": {
"identifier": "null",
"callStartTime": "2021-07-05T06:16:40.240Z",
"callDuration": 87,
"callType": "Group",
"teamsThreadId": "19:meeting_MjZiOTAyN2YtZWU1Yi00ZTZiLT77777OOOOO99999jgxOTkw@thread.v2",
"participantId": "515650f7-8204-4079-ac9d-d8f4bf07b04c",
"participantStartTime": "2021-07-05T06:17:10.447Z",
"participantDuration": "52",
"participantEndReason": "0",
"endpointId": "46387150-692a-47be-8c9d-1237efe6c48b",
"endpointType": "PSTN",
"sdkVersion": "null",
"osVersion": "null"
}
Here's a cross-tenant call summary log:
"properties": {
"identifier": "1e4c59e1-r1rr-49bc-893d-990dsds8f9f5",
"callStartTime": "2022-08-14T06:18:27.010Z",
"callDuration": 912,
"callType": "Group",
"teamsThreadId": "19:meeting_MjZiOTAyN2YtZWU1Yi00ZTZiLT77777OOOOO99999jgxOTkw@thread.v2",
"participantId": "aa1dd7da-5922-4bb1-a4fa-e350a111fd9c",
"participantTenantId": "02cbdb3c-155a-4b95-b829-6d56a45787ca",
"participantStartTime": "2022-08-14T06:18:27.010Z",
"participantDuration": "902",
"participantEndReason": "0",
"endpointId": "02cbdb3c-155a-4d98-b829-aaaaa61d44ea",
"endpointType": "VoIP",
"sdkVersion": "Redacted",
"osVersion": "Redacted"
}
Here's a cross-tenant call summary log with a bot as a participant:
"properties": {
"identifier": "b1902c3e-b9f7-4650-9b23-9999bdabab47",
"callStartTime": "2022-08-09T16:00:32Z",
"callDuration": 1470,
"callType": "Group",
"teamsThreadId": "19:meeting_MmQwZDcwYTQtZ000HWE6NzI4LTg1YTAtNXXXXX99999ZZZZZ@thread.v2",
"participantId": "66e9d9a7-a434-4663-d91d-fb1ea73ff31e",
"participantStartTime": "2022-08-09T16:14:18Z",
"participantDuration": 644,
"participantEndReason": "0",
"endpointId": "69680ec2-5ac0-4a3c-9574-eaaa77720b82",
"endpointType": "Bot",
"sdkVersion": "Redacted",
"osVersion": "Redacted"
}
Frequently asked questions
How do I store logs?
The following section explains this requirement.
Azure Communication Services logs aren't stored in your Azure account by default so you need to begin storing them in order for tools like voice and video insights dashboard and call diagnostics to work. To collect these call logs, you need to enable a diagnostic setting that directs the call data to a Log Analytics workspace.
Data isn’t stored retroactively, so you begin capturing call logs only after configuring the diagnostic setting.
Follow instructions to add diagnostic settings for your resource in Enable logs via Diagnostic Settings in Azure Monitor. We recommend that you initially collect all logs. After you understand the capabilities in Azure Monitor, determine which logs you want to retain and for how long. When you add your diagnostic setting, you're prompted to select logs. To collect all logs, select allLogs.
Your data volume, retention, and usage in Log Analytics within Azure Monitor is billed through existing Azure data meters. We recommend that you monitor your data usage and retention policies for cost considerations as needed. For more information, see Controlling costs.
If you have multiple Azure Communications Services resource IDs, you must enable these settings for each resource ID.
Next steps
Review the overview of all voice and video logs, see: Overview of Azure Communication Services call logs
Learn best practices to manage your call quality and reliability, see: Improve and manage call quality
Learn about the insights dashboard to monitor Voice Calling and Video Calling logs.
Learn how to use call logs to diagnose call quality and reliability issues with Call Diagnostics, see: Call Diagnostics