Consultas para la tabla ACSCallSummary
Para obtener información sobre el uso de estas consultas en Azure Portal, consulte tutorial de Log Analytics. Para obtener la API REST, consulte Consulta.
Participantes por llamada
Calcula el número medio de participantes por llamada.
ACSCallSummary
// Get the distinct participants in a call
| distinct CorrelationId, ParticipantId, EndpointId
// Count the participants and distinct calls
| summarize num_participants=count(), num_calls=dcount(CorrelationId)
// Calculate the average number of distinct participants per call
| extend avg_participants = toreal(num_participants) / toreal(num_calls)
| project num_participants, num_calls, avg_participants
Números de teléfono del participante
Enumera los números de teléfono de los participantes en la llamada. (Los números de teléfono proceden de la tabla ACSBillingUsage).
ACSCallSummary
// Get the calls with CallType as Group
| where CallType == 'Group'
| project CorrelationId, ParticipantId, ParticipantStartTime, ParticipantDuration, EndpointType, CallType, CallStartTime, PstnParticipantCallType
// Join with ACSBillingUsage data on ParticipantId
| join kind=leftouter (ACSBillingUsage
| where isnotempty(ParticipantId)
| project ParticipantId, UserIdA, UserIdB, StartTime, Quantity)
on ParticipantId
// Combine with calls of CallType P2P
| union (ACSCallSummary
| where CallType == 'P2P'
| project CorrelationId, ParticipantId, ParticipantStartTime, ParticipantDuration, EndpointType, CallType, CallStartTime, PstnParticipantCallType
// Join with ACSBillingUsage data on CorrelationId
| join kind=leftouter (ACSBillingUsage
| where isnotempty(ParticipantId)
| project CorrelationId, ParticipantId, UserIdA, UserIdB, StartTime, Quantity)
on CorrelationId)
| order by CallStartTime, ParticipantStartTime
Participantes por llamada de grupo
Genera un histograma del número de participantes en llamadas grupales.
ACSCallSummary
// Filter out all P2P calls to calculate only participants in Group calls
| where CallType == 'Group'
// Get the distinct participants in a call
| distinct CorrelationId, ParticipantId
// Count the number of participants per call
| summarize num_participants=count() by CorrelationId
// Aggregate the numbers of participants per call (e.g. if there are three calls
// with 5 participants, this will produce a row [num_participants=5, participant_counts=3])
| summarize participant_counts=count() by num_participants
| order by num_participants asc
| render columnchart with (xcolumn = num_participants, title="Number of participants per group call")
Relación de tipo de llamada
Genera un gráfico circular de la proporción de tipos de llamadas (P2P y llamadas de grupo).
ACSCallSummary
// Count distinct calls (dcount(CorrelationId)) per call type
| summarize call_types=dcount(CorrelationId) by CallType
| render piechart title="Call Type Ratio"
Histograma de duración de llamada
Genera un histograma de duraciones de llamada en segundos.
ACSCallSummary
// Get the distinct combinations of CorrelationId, CallDuration
| distinct CorrelationId, CallDuration
// Count call duration bins (60 second intervals)
| summarize duration_counts=count() by bin(CallDuration, 60)
| order by CallDuration asc
| render columnchart with (xcolumn = CallDuration, title="Call duration histogram")
Percentiles de duración de llamada
Calcula la duración media de las llamadas en segundos, así como los percentiles de duración de llamada del 50 %, el 90 % y el 99 %.
ACSCallSummary
// Get the distinct combinations of CorrelationId, CallDuration
| distinct CorrelationId, CallDuration
// Calculate average and percentiles (50%, 90%, and 99%) of call durations (in seconds)
| summarize avg(CallDuration), percentiles(CallDuration, 50, 90, 99)
Llamadas diarias
Genera un histograma de llamadas realizadas al día en la última semana.
ACSCallSummary
// To filter out calls made over a week ago, uncomment the next line
// | where CallStartTime > ago(7d)
// Get the distinct combinations of CorrelationId and CallStartTime
| distinct CorrelationId, CallStartTime
// Adds a new column with the call start day
| extend day = floor(CallStartTime, 1d)
// Count the number of calls per day
| summarize event_count=count() by day
| sort by day asc
| render columnchart title="Number of calls per day"
Llamadas por hora
Genera un histograma de llamadas realizadas por hora en el último día.
ACSCallSummary
// Get the distinct combinations of CorrelationId and CallStartTime
| distinct CorrelationId, CallStartTime
// Adds a new column with the call start hour
| extend hour = floor(CallStartTime, 1h)
// Count the number of calls per hour
| summarize event_count=count() by hour
| sort by hour asc
| render columnchart title="Number of calls per hour in last day"
Puntos de conexión por llamada
Calcula el número medio de puntos de conexión distintos por llamada.
ACSCallSummary
// Get the distinct combinations of CorrelationId and EndpointId
| distinct CorrelationId, EndpointId
// Count all endpoints and distinct calls
| summarize num_endpoints=count(), num_calls=dcount(CorrelationId)
// Calculate the average number of distinct endpoints per call
| extend avg_endpoints = toreal(num_endpoints) / toreal(num_calls)
| project num_endpoints, num_calls, avg_endpoints
Proporción de versiones del SDK
Genera un gráfico circular de la proporción de versiones del SDK usadas por los participantes.
ACSCallSummary
// Get the distinct participants in a call
| distinct CorrelationId, ParticipantId, EndpointId, SdkVersion
// Count participants that are using a particular SDK
| summarize sdk_counts=count() by SdkVersion
| order by SdkVersion asc
| render piechart title="SDK Version Ratio"
Relación de versiones del sistema operativo
Genera un gráfico circular de la proporción de versiones del sistema operativo usadas por los participantes.
ACSCallSummary
// Get the distinct participants in a call
| distinct CorrelationId, ParticipantId, EndpointId, OsVersion
// Simplified OS version name by searching for a specific OS keyword
// and performs a different string split operation per OS type
| extend simple_os = case( indexof(OsVersion, "Android") != -1, tostring(split(OsVersion, ";")[0]),
indexof(OsVersion, "Darwin") != -1, tostring(split(OsVersion, ":")[0]),
indexof(OsVersion, "Windows") != -1, tostring(split(OsVersion, ".")[0]),
OsVersion
)
// Count the participants that are using a particular OS version
| summarize os_counts=count() by simple_os
| order by simple_os asc
| render piechart title="OS Version Ratio"
Registro callSummary para la llamada api CallAutomation
Consulta el registro de resumen de una llamada con la que la API de Automatización de llamadas interactúó mediante el identificador de correlación.
ACSCallAutomationIncomingOperations
//| where CorrelationId == "<correlation ID>" // This can be uncommented to filter on a specific correlation ID
| join kind=inner
(ACSCallSummary)
on CorrelationId
| limit 100
Buscar llamadas por palabra clave
Enumere todas las llamadas encontradas que contengan la palabra clave y devuelva los detalles de la llamada, incluida la clasificación, la calidad, el desglose de problemas, etc. Esta consulta también se usa en Diagnósticos de llamadas para buscar llamadas.
// Set queryConditions_keyword to be the searching keyword. It can be CallId, ParticipantId,
// Identifier or any other column values in ACSCallSummary log. If not set, the query will return all calls.
// Note this query is used in Call Diagnostics to search calls based on selected filters.
declare query_parameters(queryConditions_keyword: string = '',
queryConditions_eventType: string = '',
queryConditions_startTime: string = '',
queryConditions_endTime: string = '');
let callIdsFromServiceLog =
ACSCallSummary
| where isempty(queryConditions_startTime) or CallStartTime >= todatetime(queryConditions_startTime)
| extend CallEndTime = CallStartTime + totimespan(strcat(tostring(CallDuration), 's'))
| where isempty(queryConditions_endTime) or CallEndTime <= todatetime(queryConditions_endTime)
| where isempty(queryConditions_keyword) or * contains queryConditions_keyword
| distinct CorrelationId, ParticipantId, CallStartTime
| where isnotempty(CallStartTime) and isnotempty(CorrelationId)
| extend Priority = 0;
let callIdsFromClientLog =
ACSCallClientOperations
| where isnotempty(CallId) and isnotempty(ParticipantId)
| where isempty(queryConditions_startTime) or CallClientTimeStamp >= todatetime(queryConditions_startTime)
| where isempty(queryConditions_endTime) or CallClientTimeStamp <= todatetime(queryConditions_endTime)
| where isempty(queryConditions_keyword) or * contains queryConditions_keyword
| extend State = tostring(OperationPayload.NewState)
| where OperationName in ('Join', 'StartCall', 'EnterCall', 'Hangup', 'AcceptIncomingCall') or State in ('Connected', 'Disconnected')
| extend
CallStartTime = iff(OperationName in ('Join', 'StartCall', 'EnterCall', 'AcceptIncomingCall') or State == 'Connected', CallClientTimeStamp, datetime(null))
| summarize
CallStartTime = coalesce(min(CallStartTime), min(CallClientTimeStamp))
by CorrelationId = CallId, ParticipantId
| extend Priority = 1;
let callIds = materialize((union callIdsFromServiceLog, callIdsFromClientLog)
| summarize arg_min(Priority, *) by CorrelationId, ParticipantId
| order by CallStartTime, CorrelationId desc
| extend Rank=row_rank_dense(CorrelationId)
// UI can't hanlde too many records. We limit to 50k records.
// This will also make sure in() operator can be used in the next steps without hitting the 1M limit.
| where Rank <= 50000);
let searchTimeLowerBound = toscalar(callIds | summarize min(CallStartTime)) - 3h;
let searchTimeUpperBound = toscalar(callIds | summarize max(CallStartTime)) + 3h;
let relatedCalls = materialize(callIds | where isnotempty(CorrelationId) | distinct CorrelationId);
let relatedParticipants = materialize(callIds | where isnotempty(ParticipantId) | distinct ParticipantId);
let searchedCalls =
materialize(union
// Service side callIds
(
ACSCallSummary
| where CallStartTime between (searchTimeLowerBound..searchTimeUpperBound)
| where CorrelationId in (relatedCalls)
| extend CallEndTime = CallStartTime + totimespan(strcat(tostring(CallDuration), 's'))
| where CorrelationId != ParticipantId
| extend ParticipantId = coalesce(ParticipantId, Identifier, EndpointId)
| extend ParticipantId = iff(ParticipantId == 'Redacted', strcat('RedactedParticipant-', EndpointType, '-Identifier-', Identifier), ParticipantId)
| extend EndpointId = iff(EndpointId == 'Redacted', strcat('RedactedEndpoint-', EndpointType, '-Identifier-', Identifier), EndpointId)
| summarize hint.strategy = shuffle CallStartTime = take_any(CallStartTime), CallEndTime = take_any(CallEndTime), CallType = take_any(CallType),
numOfDroppedParticipant = count_distinctif(ParticipantId, ResultCategory contains 'Unexpected')
by CorrelationId
| extend Priority = 0),
// Client side callIds
(
ACSCallClientOperations
| where CallClientTimeStamp between (searchTimeLowerBound..searchTimeUpperBound)
| where isnotempty(CallId) and isnotempty(ParticipantId)
| where CallId in (relatedCalls)
| extend State = tostring(OperationPayload.NewState)
| extend
CallStartTime = iff(OperationName in ('Join', 'StartCall', 'EnterCall', 'AcceptIncomingCall') or State == 'Connected', CallClientTimeStamp, datetime(null)),
CallEndTime = iff(OperationName == 'Hangup' or State == 'Disconnected', CallClientTimeStamp, datetime(null)),
CallType = tostring(OperationPayload.CallType)
| summarize
CallStartTime = min(CallStartTime),
CallEndTime = max(CallEndTime),
CallStartTimeBackup = min(CallClientTimeStamp),
CallEndTimeBackup = max(CallClientTimeStamp),
numOfDroppedParticipant = count_distinctif(ParticipantId, OperationName in ('Join', 'StartCall', 'EnterCall', 'Hangup', 'AcceptIncomingCall') and ResultType contains 'Unexpected'),
CallType = take_any(CallType)
by CorrelationId = CallId
| extend
CallStartTime = coalesce(CallStartTime, CallStartTimeBackup),
CallEndTime = coalesce(CallEndTime, CallEndTimeBackup),
Priority = 1
| project CallStartTime, CallEndTime, CallType, numOfDroppedParticipant, CorrelationId, Priority)
| summarize arg_min(Priority, *) by CorrelationId);
// client type
let allParticipants = materialize(ACSCallSummary
| where CallStartTime between (searchTimeLowerBound..searchTimeUpperBound)
| where CorrelationId != ParticipantId
| extend ParticipantId = coalesce(ParticipantId, Identifier, EndpointId)
| extend ParticipantId = iff(ParticipantId == 'Redacted', strcat('RedactedParticipant-', EndpointType, '-Identifier-', Identifier), ParticipantId)
| extend EndpointId = iff(EndpointId == 'Redacted', strcat('RedactedEndpoint-', EndpointType, '-Identifier-', Identifier), EndpointId)
| where CorrelationId in (relatedCalls)
| union (
ACSCallClientOperations
| where OperationName !in ('CallModeChanged', 'IdChanged', 'RoleChanged')
| where CallClientTimeStamp between (searchTimeLowerBound..searchTimeUpperBound)
| where CallId in (relatedCalls)
| where isnotempty(ParticipantId)
| distinct ParticipantId, CorrelationId = CallId, EndpointType = 'VoIP', ParticipantType = 'ACS')
| summarize hint.strategy = shuffle take_any(EndpointType), take_any(ParticipantType), take_any(OsVersion), take_any(SdkVersion) by ParticipantId, CorrelationId);
let ParticipantTypeInfo = materialize(allParticipants
| summarize hint.strategy = shuffle count() by ParticipantType, CorrelationId
| extend participantTypeInfo = strcat(count_, ' ', ParticipantType)
| summarize hint.strategy = shuffle
ParticipantTypeSummaryInfo = make_list(participantTypeInfo, 100) by CorrelationId
| extend ParticipantType = strcat_array(ParticipantTypeSummaryInfo, ', ')
| project CorrelationId, ParticipantType);
let OsInfo = materialize(allParticipants
| summarize hint.strategy = shuffle count() by OsVersion, CorrelationId
| extend OsVersionStr = iff(isnotempty(OsVersion), OsVersion, 'Unknown')
| extend osVersionInfo = strcat(count_, ' ', OsVersionStr)
| summarize hint.strategy = shuffle
OsVersionSummaryInfo = make_list(osVersionInfo, 100) by CorrelationId
| extend OsVersion = strcat_array(OsVersionSummaryInfo, ', ')
| project CorrelationId, OsVersion);
let SdkInfo = materialize(allParticipants
| summarize hint.strategy = shuffle count() by SdkVersion, CorrelationId
| extend SdkVersionStr = iff(isnotempty(SdkVersion), SdkVersion, 'Unknown')
| extend sdkVersionInfo = strcat(count_, ': ', SdkVersionStr)
| summarize hint.strategy = shuffle
SdkVersionSummaryInfo = make_list(sdkVersionInfo, 100) by CorrelationId
| extend SdkVersion = strcat_array(SdkVersionSummaryInfo, ', ')
| project CorrelationId, SdkVersion);
let clientTypeInfo = materialize(allParticipants
| summarize hint.strategy = shuffle count() by EndpointType, CorrelationId
| extend info = strcat(count_, ' ', EndpointType)
| summarize hint.strategy = shuffle summaryInfo = make_list(info, 100) by CorrelationId
| extend ClientType = strcat_array(summaryInfo, ', ')
| project CorrelationId, ClientType);
let totalNumOfParticipants = materialize(allParticipants | summarize hint.strategy = shuffle participantsCount = dcount(ParticipantId) by CorrelationId);
// quality
let qualityInfo = materialize(ACSCallDiagnostics
| where CorrelationId in (relatedCalls)
| where CorrelationId != ParticipantId
| extend ParticipantId = coalesce(ParticipantId, Identifier, EndpointId)
| extend ParticipantId = iff(ParticipantId == 'Redacted', strcat('RedactedParticipant-', EndpointType, '-Identifier-', Identifier), ParticipantId)
| extend EndpointId = iff(EndpointId == 'Redacted', strcat('RedactedEndpoint-', EndpointType, '-Identifier-', Identifier), EndpointId)
| where isnotempty(StreamId)
| summarize hint.strategy = shuffle arg_max(TimeGenerated, *) by ParticipantId, StreamId
| extend MediaType = iff(MediaType == 'VBSS' or MediaType == 'AppSharing', 'ScreenSharing', MediaType) | extend
__JitterQuality = iff(JitterAvg > 30, "Poor", "Good"),
__JitterBufferQuality = iff(JitterBufferSizeAvg > 200, "Poor", "Good"),
__PacketLossRateQuality = iff(PacketLossRateAvg > 0.1, "Poor", "Good"),
__RoundTripTimeQuality = iff(RoundTripTimeAvg > 500, "Poor", "Good"),
__HealedDataRatioQuality = iff(HealedDataRatioAvg > 0.1, "Poor", "Good"),
__VideoFrameRateQuality = iff((VideoFrameRateAvg < 1 and MediaType == 'ScreenSharing') or
(VideoFrameRateAvg < 7 and MediaType == 'Video'), "Poor", "Good"),
__FreezesQuality = iff((RecvFreezeDurationPerMinuteInMs > 25000 and MediaType == 'ScreenSharing') or
(RecvFreezeDurationPerMinuteInMs > 6000 and MediaType == 'Video'), "Poor", "Good"),
__VideoResolutionHeightQuality = iff((RecvResolutionHeight < 768 and MediaType == 'ScreenSharing') or
(RecvResolutionHeight < 240 and MediaType == 'Video'), "Poor", "Good"),
__VideoBitRateQuality = iff((VideoBitRateAvg < 150000 and MediaType == 'Video'), "Poor", "Good")
| extend
__StreamQuality = iff(
(__JitterQuality == "Poor")
or (__JitterBufferQuality == "Poor")
or (__PacketLossRateQuality == "Poor")
or (__RoundTripTimeQuality == "Poor")
or (__HealedDataRatioQuality == "Poor")
or (__VideoFrameRateQuality == "Poor")
or (__FreezesQuality == "Poor")
or (__VideoResolutionHeightQuality == "Poor")
or (__VideoBitRateQuality == "Poor"),
"Poor", "Good"),
MediaDirection = iff(EndpointType == 'Server', 'InboundStream', 'OutboundStream')
| summarize hint.strategy = shuffle numOfPoorStreams = countif(__StreamQuality == 'Poor') by CorrelationId
| extend Quality = iff(numOfPoorStreams >0, 'Poor', 'Good') | project Quality, numOfPoorStreams, CorrelationId);
// rating
let ratingInfo = materialize(ACSCallSurvey
| where CallId in (relatedCalls)
| extend OverallRatingScoreUpperBound = iff(isnotempty(OverallRatingScoreUpperBound), OverallRatingScoreUpperBound, 5)
| summarize hint.strategy = shuffle Rating = avg(OverallRatingScore*5.0/OverallRatingScoreUpperBound) by CallId
| project CorrelationId=CallId, Rating);
// client operation issues
let rangeEventsWithCorrelation = dynamic(['UserFacingDiagnostics']);
let pointEvents = dynamic([
'SelectedMicrophoneChanged', 'SelectedSpeakerChanged', 'OptimalVideoCount-changed', 'State-changed', 'CallMode-changed',
'IsMuted-changed', 'IsIncomingAudioMuted-changed', 'Id-changed', 'Role-changed', 'SelectedDevice-changed', 'PageHidden',
'OptimalVideoCountChanged', 'StateChanged', 'IsMutedChanged', 'IsIncomingAudioMutedChanged', 'SelectedDeviceChanged']);
// We need clientIds to get all operations before call is established.
let callClientIds = materialize(ACSCallClientOperations
| where OperationName !in ('CallModeChanged', 'IdChanged', 'RoleChanged')
| where CallClientTimeStamp between (searchTimeLowerBound..searchTimeUpperBound)
| where ParticipantId in (relatedParticipants) or CallId in (relatedCalls)
| distinct ClientInstanceId, ParticipantId, CallId);
//
let allOperations =
materialize(callClientIds | join kind=rightouter hint.strategy=shuffle
(ACSCallClientOperations
| where OperationName !in ('CallModeChanged', 'IdChanged', 'RoleChanged')
| where CallClientTimeStamp between (searchTimeLowerBound..searchTimeUpperBound)
| where ParticipantId in (relatedParticipants) or CallId in (relatedCalls) or (isempty(CallId) and isempty(ParticipantId) and ClientInstanceId in ((callClientIds | distinct ClientInstanceId)))
| where isnotempty(OperationName) and OperationName != 'CallClientOperations'
and isnotempty(OperationId) and isnotempty(CallClientTimeStamp))
on ClientInstanceId
| extend ParticipantId = coalesce(ParticipantId1, ParticipantId), CallId = coalesce(CallId1, CallId)
| project-away ParticipantId1, ClientInstanceId1, CallId1
| summarize hint.strategy = shuffle arg_max(TimeGenerated, *) by OperationId, OperationName, CallClientTimeStamp);
//
let correlatedOperations = materialize(allOperations
| where OperationName in (rangeEventsWithCorrelation)
| extend OperationPayload = todynamic(OperationPayload)
| extend
UFDQuality = coalesce(tostring(OperationPayload.DiagnosticQuality), tostring(OperationPayload.diagnosticQuality)),
UFDType = coalesce(tostring(OperationPayload.DiagnosticChanged), tostring(OperationPayload.diagnosticChanged))
| extend UFDType = strcat(toupper(substring(UFDType, 0, 1)), substring(UFDType, 1))
| extend OperationPayloadNew = bag_pack(tostring(CallClientTimeStamp), OperationPayload)
| project-away ResultType
| summarize hint.strategy = shuffle
arg_max(TimeGenerated, *), ResultType = iff(countif(UFDQuality != 'Good')>0, 'Failed', 'Succeeded'),
OperationStartTime = min(CallClientTimeStamp), OperationEndTime = max(CallClientTimeStamp),
OperationPayloadPacked = make_bag(OperationPayloadNew) by OperationId, UFDType, CallId
| extend ResultType = iff(UFDType has_any ("SpeakingWhileMicrophoneIsMuted", "SpeakerMuted"), 'Succeeded', ResultType), OperationName = UFDType
| where ResultType !in ('Succeeded', 'Success', 'ExpectedError'));
//
let nonCorrelatedOperations = materialize(allOperations
| where OperationName !in (rangeEventsWithCorrelation)
| extend OperationId = coalesce(hash_sha256(strcat(OperationId, tostring(CallClientTimeStamp), OperationName)), tostring(new_guid()))
| summarize hint.strategy = shuffle arg_max(TimeGenerated, *) by OperationId, CallId
| where ResultType !in ('Succeeded', 'Success', 'ExpectedError'));
let clientOperationIssues =
materialize(union nonCorrelatedOperations, correlatedOperations
| summarize hint.strategy = shuffle numOfBadOperations=count() by OperationName, CallId
| extend badClientOperations = bag_pack(OperationName, numOfBadOperations)
| summarize hint.strategy = shuffle badClientOperations = make_bag(badClientOperations), numOfBadOperations = sum(numOfBadOperations) by CorrelationId=CallId);
////
searchedCalls
| join kind=leftouter hint.strategy=shuffle clientTypeInfo on CorrelationId
| join kind=leftouter hint.strategy=shuffle ParticipantTypeInfo on CorrelationId
| join kind=leftouter hint.strategy=shuffle OsInfo on CorrelationId
| join kind=leftouter hint.strategy=shuffle SdkInfo on CorrelationId
| join kind=leftouter hint.strategy=shuffle qualityInfo on CorrelationId
| join kind=leftouter hint.strategy=shuffle ratingInfo on CorrelationId
| join kind=leftouter hint.strategy=shuffle clientOperationIssues on CorrelationId
| join kind=leftouter hint.strategy=shuffle totalNumOfParticipants on CorrelationId
| extend numOfPoorStreams = coalesce(numOfPoorStreams, 0)
| extend
drops=bag_pack('Call Ended Ungracefully', numOfDroppedParticipant),
badMediaStreams = bag_pack('Poor Media Streams', numOfPoorStreams),
Issues = coalesce(numOfBadOperations, 0) + numOfDroppedParticipant + numOfPoorStreams
| extend
IssuesBreakdown=bag_merge(drops, badClientOperations, badMediaStreams)
| project
CallId=CorrelationId,
CallStartTime,
CallEndTime,
CallType,
ParticipantType,
SdkVersion,
OsVersion,
Participants=participantsCount,
ClientType,
Quality=iff(badClientOperations contains 'Network', 'Poor', iff(isempty(Quality), 'Unknown', Quality)),
Rating=case(isempty(Rating), 'Unknown', Rating>=4.5, 'Good', Rating >=3, 'Average', 'Poor'),
NumOfDroppedParticipant = numOfDroppedParticipant,
NumOfPoorStreams = numOfPoorStreams,
Issues,
IssuesBreakdown
| order by CallStartTime desc
| where CallStartTime >= ago(7days)
Buscar todos los participantes en una llamada
Busque todos los participantes en una llamada por callId y devuelva los detalles de los participantes. Esta consulta también se usa en Diagnósticos de llamadas para buscar participantes.
// Set queryConditions_callId to be the CallId you want to query.
// Note this query is used in Call Diagnostics to get all the participant entities of a call.
declare query_parameters(queryConditions_callId:string = 'replace-with-your-callId');
// Temporary subcodes mapping table used in CDC ingestion query
let SubCodesMapping = datatable(
message: string,
webConfig_overrideMessage: string,
webConfig_legacyMessage: string,
nativeConfig_overrideMessage: string,
code: real,
subCode: real,
resultCategories: string,
clientOrService: string
) [
// Copy paste the data from above script here
"Failed to initialize CallClient. Please try again, if issue persists, gather browser console logs, and contact Azure Communication Services support.","","Failed to initialize CallClient","","500","40000","UnexpectedClientError","client",
"Failed to create CallAgent. Please try again, if issue persists, gather browser console logs, and contact Azure Communication Services support.","","Failed to create CallAgent","","409","40001","UnexpectedClientError","client",
"Failed to create TeamsCallAgent. Please try again, if issue persists, gather browser console logs, and contact Azure Communication Services support.","","Failed to create TeamsCallAgent","","409","40002","UnexpectedClientError","client",
"Failed to create a URL object with the ICE server URL provided.","","Error processing relay information. Possibly invalid url: {0}","","400","40003","ExpectedError","client",
"The ICE server url must contain 'turn', 'turns', or 'stun'.","","Error processing relay information. Unrecognized schema","","400","40004","ExpectedError","client",
"Failed setup proxy, the url is too short","","","","400","40005","ExpectedError","client",
"Failed setup proxy, the protocol is not https or http","","","","400","40006","ExpectedError","client",
"Failed to create a URL object with the proxy URL provided.","","Setup failed. Proxy url is invalid: {0}","","400","40007","ExpectedError","client",
"CallClient instance can support only one CallAgent or TeamsCallAgent create new CallClient instance to create new CallAgent or TeamsCallAgent","","","","400","40008","ExpectedError","client",
"EmergencyCountryCode is invalid, max length is 10","","","","400","40009","ExpectedError","client",
"ACS Web Calling SDK must be used through https, file:, or localhost","","","","400","40100","ExpectedError","client",
"Failed to create CallAgent, timeout during initialization of the calling base stack. Please try again, if issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","Failed to create stack base due to timeout during initialization","","408","40101","UnexpectedClientError","client",
"Failed to create CallAgent, failure during initialization of the calling base stack. Please try again, if issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","Failed to create stack base due to failure in intialization","","500","40102","UnexpectedClientError","client",
"Failed to create CallAgent, failure to initialize calling user stack because calling base stack failed to create. Please try again, if issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","Base stack failed to create","","500","40103","UnexpectedClientError","client",
"Failed to create CallAgent, timeout during initialization of the calling user stack. Please try again, if issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","User stack init timeout","","408","40104","UnexpectedClientError","client",
"Failed to create CallAgent, failure during initialization of the calling user stack. Please try again, if issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","User stack init failed","","500","40105","UnexpectedClientError","client",
"Failed to set configurations for the calling stack. Please try again, if issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","Unable to parse configuration","","500","40106","UnexpectedClientError","client",
"Failed to set user configurations for calling stack. Please try again, if issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","Failed to set configuration for stack","","500","40107","UnexpectedClientError","client",
"Failed to get device manager due to internal call stack undefined. Please try again, if issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","Failed to get device manager due to internal call stack undefined","","500","40108","UnexpectedClientError","client",
"Failed to set configuration parameters for the calling stack. Please try again, if issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","Failed to initialize callclient","","500","40109","UnexpectedClientError","client",
"Fetched undefined configurations for the calling stack. Please try again, if issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","Found undefined configs in ECS response: {0}","","500","40110","UnexpectedClientError","client",
"Failed to connect to Azure Communication Services infrastructure. Please try again and check the browser's network requests. If the requests keep failing, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","Failed to create trouter service","","500","40111","UnexpectedClientError","client",
"Failed to initialize connection to Azure Communication Services infrastructure. Please try again and check the browser's network requests. If the requests keep failing, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","Signaling init failed","","500","40112","UnexpectedClientError","client",
"Already connected to Azure Communication Services infrastructure. Please try again, if issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","Signaling service already initialized","","500","40113","ExpectedError","client",
"Failed to connect to Azure Communication Services infrastructure, timeout during initialization. Please try again and check the browser's network requests. If the requests keep failing, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","Signaling init timeout, request took longer than {0} ms","","408","40114","UnexpectedClientError","client",
"Failed to create CallAgent, unable to initialize connection to Azure Communication Services infrastructure. Please try again and check the browser's network requests. If the requests keep failing, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","Signaling failed to initialize.","","412","40115","UnexpectedClientError","client",
"Failed to create CallAgent, media failure during initialization of the calling user stack. Please try again, if issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","","","500","40116","UnexpectedClientError","client",
"Failed to create CallAgent, signaling failure during initialization of the calling user stack. Please try again, if issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","","","500","40117","UnexpectedClientError","client",
"Failed to create CallAgent, internal stack failure during initialization of the calling user stack. Please try again, if issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","","","500","40118","UnexpectedClientError","client",
"Using proxy or custom TURN for calls involving Teams is disabled","","","","403","40200","ExpectedError","client",
"Failed to parse AccessToken","","","","500","40201","UnexpectedClientError","client",
"Call to yourself is not supported.","","","","400","40202","ExpectedError","client",
"Call Agent is already disposed","","","","409","40203","ExpectedError","client",
"Teams Call Agent is already disposed","","","","409","40204","ExpectedError","client",
"Not able to subscribe to CallAgent event, unknown event name.","","Not able to subscribe to event {0}, unknown event name","","422","40205","ExpectedError","client",
"Not able to unsubscribe from CallAgent event, unknown event name.","","Not able to unsubscribe event {0}, unknown event name","","422","40206","ExpectedError","client",
"Device type must be msft-acs-mesh-deviceType-v2 to join immersive call","","","","400","40207","ExpectedError","client",
"Failed to start or join call, call stack did not initialize","","","","500","40208","UnexpectedClientError","client",
"Invalid join locator specified.","","Invalid call configuration","","400","40209","ExpectedError","client",
"The provided Teams meeting link is invalid.","","Invalid meeting link","","400","40210","ExpectedError","client",
"The provided Teams For Life meeting link is invalid.","","Invalid TFL meeting link","","400","40211","ExpectedError","client",
"Starting a group call must include thread ID in StartTeamsGroupCallOptions.","","","","400","40212","ExpectedError","client",
"Starting a one to one with thread ID is invalid.","","","","400","40213","ExpectedError","client",
"Display name is not allowed to be set for Teams users.","","","","400","40214","ExpectedError","client",
"Display name is too long.","","","","400","40215","ExpectedError","client",
"Failed to create CallAgent. Please try again, if issue persists, gather browser console logs and contact Azure Communication Services support.","","","","500","40216","UnexpectedClientError","client",
"Attempted to get AccessToken before initialization","","","","422","40217","UnexpectedClientError","client",
"Invalid push notification data provided. No 'incomingCallContext' key found in the PushNotificatitonData.","","Invalid push notification data provided","","400","40218","ExpectedError","client",
"Failed to handle push notification","","","","500","40219","UnexpectedClientError","client",
"Incoming Call push notification payload provided has too many keys. Only 'incomingCallContext' key is expected in the PushNotificatitonData.","","Invalid Incoming Call push notification payload provided","","400","40220","ExpectedError","client",
"Invalid push notification data provided. No 'incomingCallContext' key found in the PushNotificatitonData.","","No 'incomingCallContext' provided in event payload","","400","40221","ExpectedError","client",
"The decoded 'incomingCallContext' data is invalid.","","Invalid Incoming Call push notification payload data provided","","400","40222","ExpectedError","client",
"Incoming Call is already being processed","","","","400","40223","ExpectedError","client",
"Failed to handle Incoming Call push notification","","","","500","40224","UnexpectedClientError","client",
"Missed call","","","","400","40225","ExpectedError","client",
"AssertIsObject failed. : userIds must be object","","","","400","40226","ExpectedError","client",
"AssertNotNull failed. : userIds cannot be null","","","","400","40227","ExpectedError","client",
"Failed to create CallAgent, an instance of CallAgent associated with this identity already exists. Please dispose the existing CallAgent, or create a new one with a different identity.","","Failed to create call agent, call agent for this ACS Id already exists","","409","40228","ExpectedError","client",
"CallAgent must be created only with ACS token","","","","403","40229","ExpectedError","client",
"Failed to create TeamsCallAgent, an instance of TeamsCallAgent associated with this identity already exists. Please dispose the existing TeamsCallAgent before creating a new one.","","Failed to create call agent, call agent for this ACS Id already exists","","409","40230","ExpectedError","client",
"TeamsCallAgent must be created only with Teams token","","","","403","40231","ExpectedError","client",
"Failed to get token","","","","409","40232","UnexpectedClientError","client",
"Refreshed AccessToken User Id doesnt match initial User Id.","","","","400","40233","ExpectedError","client",
"Access token is expired and failed to fetch a valid one after retries.","","","","400","40234","ExpectedError","client",
"AccessToken expired","","","","401","40235","ExpectedError","client",
"Action not allowed.","","","","403","40236","ExpectedError","client",
"Failed to hangup call.","","","","500","40237","UnexpectedServerError","client",
"Joining a Teams for life meeting is not supported","","","","400","40238","ExpectedError","client",
"Failed to get raw device stream track","","","","500","40600","UnexpectedClientError","client",
"Failed to get raw device stream track, make sure there is available device","","","","412","40601","UnexpectedClientError","client",
"Failed to get device manager.","","","","500","40602","UnexpectedClientError","client",
"Not able to subscribe to DeviceManager event, unknown event name.","","Not able to subscribe to event {0}, unknown event name","","422","40603","ExpectedError","client",
"Not able to unsubscribe from DeviceManager event, unknown event name.","","Not able to unsubscribe event {0}, unknown event name","","422","40604","ExpectedError","client",
"Unable to access device manager","","","","500","40605","UnexpectedClientError","client",
"Failed to enumerate speakers, it is not supported to enumerate/select speakers on Android Chrome, iOS Safari, nor MacOS Safari.","","This device does not support speaker enumeration.","","405","40606","ExpectedError","client",
"Microphone selection timed out.","","","","408","40607","UnexpectedClientError","client",
"There was an issue with selecting the microphone","","","","500","40608","UnexpectedClientError","client",
"Speaker selection timed out.","","","","408","40609","UnexpectedClientError","client",
"There was an issue with selecting the speaker","","","","500","40610","UnexpectedClientError","client",
"This device does not support speaker selection.","","","","405","40611","ExpectedError","client",
"At least one permission must be requested","","","","400","40612","ExpectedError","client",
"Failed to obtain permission to use microphone and/or camera, it was denied or it failed. Please ensure to allow the permissions in the browser's setttings and in the OS setttings.","","Permissions not granted or failed: {0}","","400","40613","ExpectedError","client",
"Failed to ask for device permissions Please ensure to allow the permissions in the browser's setttings and in the OS setttings and try again. If issue persists, gather browser console logs and contact Azure Communication Services support.","","Failed to get audio video permissions","","500","40614","UnexpectedClientError","client",
"Invalid AudioDeviceInfo object passed in. Ensure it has an Id.","","The device argument is invalid","","400","40615","ExpectedError","client",
"The device is not selectable","","","","400","40616","ExpectedError","client",
"Attempted invalid operation during Emergency Call.","","{0} operation is not allowed during Emergency Call","","500","41000","ExpectedError","client",
"{0} failed","","","","500","41001","UnexpectedClientError","client",
"Unable to get remote audio stream, getMediaStream returned undefined","","","","500","41002","UnexpectedClientError","client",
"Unable to get remote audio stream, getMediaStream returned error","","","","500","41003","UnexpectedClientError","client",
"Getting raw audio media stream is currently disabled by Azure Communication Services.","","Getting raw audio media strema is currently dissabled","","409","41004","ExpectedError","client",
"Failed to accept the Incoming Call","","","","500","41005","UnexpectedClientError","client",
"Failed to accept the incoming call, it is not in the Ringing state. Subcscribe to CallAgent's 'incomingCall' event to accept the incoming call.","","Call cannot be accepted because it is not in Ringing state","","400","41006","ExpectedError","client",
"Failed to reject the incoming call, it is not in the Ringing state. Subcscribe to CallAgent's 'incomingCall' event to reject the incoming call.","","Call cannot be rejectd because it is not in Ringing state","","400","41007","ExpectedError","client",
"Failed to get raw stream from local audio stream","","","","500","41008","UnexpectedClientError","client",
"Failed to set raw input audio stream","","","","500","41009","UnexpectedClientError","client",
"Failed to unset raw input audio stream","","","","500","41010","UnexpectedClientError","client",
"Failed to process audio because the calling stack is undefined. Please collect browser console logs and contact Azure Communication Services support.","","Failed to process audio because of internal call stack error","","500","41011","UnexpectedClientError","client",
"Removing local video stream due to video fail UFD being raised before call connected. Please ensure to allow video permissions in the browser's setttings and in the OS setttings, and ensure the camera device is not being used by another process.","","Removing local video stream due to video fail UFD being raised before call connected. UFD: {0}, value: {1}, call direction: {2}","","409","41012","UnexpectedClientError","client",
"Failed to stop audio on microphone device not functioning or capture mute event {0} with value {1}","","","","400","41013","UnexpectedClientError","client",
"Failed to instantiate the Call","","","","500","41014","UnexpectedClientError","client",
"Failed to mute microphone. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Failed to mute microphone","","500","41015","UnexpectedClientError","client",
"Failed to unmute microphone. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Failed to unmute microphone","","400","41016","UnexpectedClientError","client",
"Failed to recover the microphone audio after bad microphone UFD recovered. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Failed to unmute and start audio, microphone device not functioning","","410","41017","UnexpectedClientError","client",
"Mute other participants is currently disabled by ACS service.","","Mute other participants disabled.","","403","41018","ExpectedError","client",
"Failed to mute all remote participants","","","","500","41019","UnexpectedClientError","client",
"Failed to mute incoming audio","","","","500","41020","UnexpectedClientError","client",
"Failed to unmute incoming audio","","","","500","41021","UnexpectedClientError","client",
"Failed to send DTMF tone","","","","400","41022","UnexpectedClientError","client",
"Invalid value passed to DtfmTone","","","","422","41023","ExpectedError","client",
"Failed to start audio before starting video","","","","500","41024","UnexpectedClientError","client",
"Failed to start video, LocalVideoStream instance is invalid or empty. Please pass in a LocalVideoStream instance.","","Failed to start video, localVideoStream cannot be null","","400","41025","ExpectedError","client",
"Failed to start video, localVideoStream is not an instance of LocalVideoStream","","","","400","41026","ExpectedError","client",
"Failed to start video, video is already started.","","Failed to start video, local video is already on","","400","41027","ExpectedError","client",
"Failed to set media stream","","","","500","41028","UnexpectedClientError","client",
"Failed to start video","","","","500","41029","UnexpectedClientError","client",
"Failed to stop video, video is already stopped.","","Failed to stop video, local video is already off","","400","41030","ExpectedError","client",
"Failed to start video because the calling stack is undefined. Please gether browser console logs, .HAR files, and contact Aure Communication Services support.","","Failed to process video because of internal call stack error","","500","41031","UnexpectedClientError","client",
"Failed to stop video, invalid argument. LocalVideoStream used as an input is currently not being sent.","","Invalid LocalVideoStream, this LocalVideoStream is not being sent","","400","41032","ExpectedError","client",
"Failed to hold the call. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Failed to hold call","","500","41033","UnexpectedClientError","client",
"Failed to resume the call.Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Failed to resume call","","500","41034","UnexpectedClientError","client",
"Failed to start screen share, screen share is already started.","","Failed to start screen share, screen share is already on. Must stop and start again.","","400","41035","ExpectedError","client",
"Failed to start raw screen sharing, localVideoStream is not an instance of LocalVideoStream","","","","400","41036","ExpectedError","client",
"Unable to get media stream from local video stream for raw media screen sharing. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Unable to get media stram from local video stream for screen sharing","","500","41037","UnexpectedClientError","client",
"Failed to set raw media stream for screen sharing. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Failed to set media stream for screen sharing","","422","41038","UnexpectedClientError","client",
"Failed to get raw screen sharing stream. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Failed to get media stream for screen sharing","","422","41039","UnexpectedClientError","client",
"Failed to start screen sharing","","","","500","41040","UnexpectedClientError","client",
"Failed to stop screen share, screen share is already stopped.","","Failed to stop screen share, screen share is already off","","400","41041","ExpectedError","client",
"Not able to subscribe to Call event, unknown event name.","","Not able to subscribe to event {0}, unknown event name","","422","41042","ExpectedError","client",
"Not able to unsubscribe from Call event, unknown event name.","","Not able to unsubscribe event {0}, unknown event name","","422","41043","ExpectedError","client",
"Only single LocalVideoStream is supported currently","","","","400","41044","ExpectedError","client",
"Stream is not an instance of LocalVideoStream","","","","400","41045","ExpectedError","client",
"Only single LocalAudioStream is supported currently","","","","400","41046","ExpectedError","client",
"Stream is not an instance of LocalAudioStream","","","","400","41047","ExpectedError","client",
"Failed to start video during call setup process. Please ensure to allow video permissions in the browser's setttings and in the OS setttings, and ensure the camera device is not being used by another process.","","Video failed to start during call-{0} process.","","410","41048","UnexpectedClientError","client",
"Failed to start audio during call setup process. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Audio failed to start during call-{0} process.","","400","41049","UnexpectedClientError","client",
"Failed to force isAvailable flag to False during large meeting","","","","500","41050","UnexpectedClientError","client",
"Failed to dispose view in large meeting","","","","500","41051","UnexpectedClientError","client",
"Not able to add unkown participant.","","","","400","41052","ExpectedError","client",
"Participant is already in the call.","","{0} is already in the call","","400","41053","ExpectedError","client",
"Failed to remove the specified participant. The participant is not in the call.","","{0} is not in the call.","","400","41054","ExpectedError","client",
"Add participant failed: thread ID is missing in options.","","","","400","41055","ExpectedError","client",
"Failed to start or join to the call, Teams Enterprise voice policy is not enabled for this Azure Communication Services resource. Follow the tutorial online to enable it.","","Teams Enterprise voice is not enabled. Teams user is not eligible to make PSTN call","","412","41056","ExpectedError","client",
"Failed to get server call Id","","","","500","41057","UnexpectedClientError","client",
"Failed to get the MediaStream to initialize the Volume indicator. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","failed to getMediaStreamTrack","","500","41058","UnexpectedClientError","client",
"Failed to setup volume calcualtor using AudioContext, please retry getVolumeindicator on a working audio stream with exponential backoff","","","","500","41059","UnexpectedClientError","client",
"Not able to subscribe to Volume Indicator event, unknown event name.","","Not able to subscribe to event {0}, unknown event name","","400","41060","ExpectedError","client",
"Not able to unsubscribe from Volume Indicator event, unknown event name.","","Not able to unsubscribe to event {0}, unknown event name","","400","41061","ExpectedError","client",
"Failed to setup volume calculator, please retry after exponential backoff","","","","500","41062","UnexpectedClientError","client",
"Failed to get serverCallId, serverCallId is empty","","","","404","41063","UnexpectedClientError","client",
"Setting call constraint is currently disabled by ACS service.","","Setting call constraints is disabled","","409","41064","ExpectedError","client",
"Error setting call constraints at call setup. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Error setting call constraints at call {0}","","500","41065","UnexpectedClientError","client",
"Error setting call constraints during mid-call","","","","500","41066","UnexpectedClientError","client",
"Error settting video constraints during call settup or mid-call. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Error setting video constraints during call stage: {0}","","500","41067","UnexpectedClientError","client",
"Error setting video constraints during call accept","","","","500","41068","UnexpectedClientError","client",
"Error setting video constraints during call start","","","","500","41069","UnexpectedClientError","client",
"Failed to set call constraints during mid call","","","","500","41070","UnexpectedClientError","client",
"Failed to start screen share, call is not in Connected state. Subscribe to the Call's 'statteChanged' event to know when the call is connected.","","Failed to start screen sharing. Call must be in connected state","","412","41071","ExpectedError","client",
"Failed to stop screen sharing. Call must be in connected state","","","","412","41072","ExpectedError","client",
"Failed to get or set custom MediaStream, this functionality is currently disabled by Azure Communication Services.","","Accessing raw media stream is currently not enabled","","412","41073","ExpectedError","client",
"The raw media stream function is currently not available","","","","500","41074","UnexpectedClientError","client",
"Failed to start raw screen sharing, localVideoStream doesn't contain a raw media stream","","","","400","41075","ExpectedError","client",
"Failed to start audio stream.","","","","500","41076","UnexpectedClientError","client",
"Failed to stop video.","","","","500","41077","UnexpectedClientError","client",
"Incoming call is already unplaced","","","","400","41078","ExpectedError","client",
"Failed to reject call","","","","500","41079","UnexpectedServerError","client",
"Failed to start local audio device","","","","400","41080","UnexpectedClientError","client",
"Failed to Select Virtual Device.","","","","400","41081","UnexpectedClientError","client",
"Failed to Unselect Virtual Device.","","","","400","41082","UnexpectedClientError","client",
"Failed to start raw audio, localAudioStream doesn't contain a raw media stream. To start raw audio, the LocalAudioStream passed in, must be constructed with a MediaStream object.","","","","400","41083","ExpectedError","client",
"Failed to stop raw audio, localAudioStream doesn't contain a raw media stream. To stop raw audio, the current LocalAudioStream in the call must have a MediaStream as the source.","","","","400","41084","ExpectedError","client",
"Thread ID is invalid.","","","","400","41085","ExpectedError","client",
"Not able to subscribe to Lobby event, unknown event name.","","Not able to subscribe to event {0}, unknown event name","","422","41800","ExpectedError","client",
"Not able to unsubscribe from Lobby event, unknown event name.","","Not able to unsubscribe event {0}, unknown event name","","422","41801","ExpectedError","client",
"Current conversation type doesn't support lobby admit and reject","","","","400","41802","ExpectedError","client",
"Participant is already in the meeting.","","{0} is already in the meeting","","400","41803","ExpectedError","client",
"Participant is not in the lobby.","","{0} is not in the lobby","","400","41804","ExpectedError","client",
"only Organizer, Co-organizer or Presenter can admit/reject participants from lobby","","","","403","41805","ExpectedError","client",
"Failed to admit participants in the lobby","","","","500","41806","UnexpectedServerError","client",
"Participant list is empty","","","","400","41807","ExpectedError","client",
"Lobby is not enabled for this meeting","","","","400","41808","ExpectedError","client",
"Failed to reject participants from the lobby","","","","500","41809","UnexpectedServerError","client",
"Failed to fetch Teams user policies and settings cannot proceed, because teams user Id was not found in the AccessToken.","","Caller's MicrosoftTeamsUserIdentifier wasn't provided. Fetching Teams user policies and settings cannot proceed","","400","41900","ExpectedError","client",
"Error Fetching Teams user policy from ACS MiddleTier Service","","","","500","41901","UnexpectedServerError","client",
"Unable to derive emergency policy from ACS MiddleTier Service response","","","","500","41902","UnexpectedServerError","client",
"Unable to fetch Teams calling policy from ACS MiddleTier Service response. Please try again, if the issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","Unable to fetch teamsCallingPolicy from ACS MiddleTier Service response","","500","41903","UnexpectedServerError","client",
"Unable to fetch Teams meeting policy from ACS MiddleTier Service response. Please try again, if the issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","Unable to fetch teamsMeetingPolicy from ACS MiddleTier Service response","","500","41904","UnexpectedServerError","client",
"Unable to fetch feature types from ACS MiddleTier Service response. Please try again, if the issue persists, gather browser console logs, .HAR file, and contact Azure Communication Services support.","","Unable to fetch featureTypes from ACS MiddleTier Service response","","500","41905","UnexpectedServerError","client",
"Unable to create thread for the Teams User groupcall from ACS MiddleTier Service response","","","","500","41906","UnexpectedServerError","client",
"Unable to add particpant for the thread for Teams groupcall from ACS MiddleTier Service","","","","500","41907","UnexpectedServerError","client",
"Mute other participants is disabled by ACS service.","","Mute other participants disabled.","","403","42000","ExpectedError","client",
"Failed to mute specific participant","","","","500","42001","UnexpectedClientError","client",
"Not able to subscribe to RemoteParticipant event, unknown event name.","","Not able to subscribe to event {0}, unknown event name","","422","42002","ExpectedError","client",
"Not able to unsubscribe from RemoteParticipant event, unknown event name.","","Not able to unsubscribe to event {0}, unknown event name","","422","42003","ExpectedError","client",
"The scenario to soft mute a PSTN participant is not supported.","","","","405","42004","ExpectedError","client",
"Failed to start video, video device is being used by another process/application. Stop your camera from being used in the other process/application and try again.","","Video operation failure SourceUnavailableError","","412","43000","ExpectedError","client",
"Failed to start video, permission was not granted to use selected video device. Ensure video device permissions are allowed in the browser's settings and in the system's setttings.","","Video operation failure PermissionDeniedError","","403","43001","ExpectedError","client",
"Failed to start video, unknown error. Please try again. If the issue persists, contact Azure Communication Services support.","","Video operation failure UnknownFailureForVideoOperation","","500","43002","UnexpectedClientError","client",
"Failed to create local video stream, source was not of type VideoDeviceInfo or MediaStream","","","","400","43003","ExpectedError","client",
"Failed to switch video device, invalid input. Input must be of a VideoDeviceInfo type.","","Failed to switch source, source was not of type VideoDeviceInfo","","400","43004","ExpectedError","client",
"Failed to switch video device, unable to switch to the same video device, it's already selected.","","Unable to switch to the same source","","400","43005","ExpectedError","client",
"Unable to get device type","","","","500","43006","UnexpectedClientError","client",
"Failed to get raw video stream. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Failed to get media stream","","500","43007","UnexpectedClientError","client",
"Failed to set media stream source is not MediaStream","","","","400","43008","ExpectedError","client",
"Failed to set raw video stream. Found undefined function. Gather browser console logs and contact Azure Communication Services support.","","Unable ot set media stream","","500","43009","UnexpectedClientError","client",
"Failed to set raw video stream. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Failed to set media stream","","500","43010","UnexpectedClientError","client",
"Not able to subscribe to LocalVideoStream event, unknown event name.","","Not able to subscribe to event {0}, unknown event name","","422","43011","ExpectedError","client",
"Not able to unsubscribe from LocalVideoStream event, unknown event name.","","Not able to unsubscribe event {0}, unknown event name","","422","43012","ExpectedError","client",
"Failed to start video, no video devices found. Ensure video devices are plugged in and enabled in the system settings.","","Video operation failure DevicesNotFoundError","","412","43013","ExpectedError","client",
"Failed to start video, error requesting media stream. Please try again, if issue persists, contact Azure Communication Services support.","","Video operation failure MediaStreamRequestError","","412","43014","UnexpectedClientError","client",
"Failed to start video, media stream request timed out. PLease allow permission on the browser's prompt to access the camera and try again.","","Video operation failure MediaStreamRequestTimedout","","412","43015","ExpectedError","client",
"Failed to start video, permissions denied by system. Ensure video device permissions are allowed in the browser's settings and in the system's setttings.","","Video operation failure PermissionsDeniedBySystem","","412","43016","ExpectedError","client",
"Failed to start video, unsupported stream. Please try again, if issue persists, contact Azure Communication Services support.","","Video operation failure UnsupportedStream","","412","43017","UnexpectedClientError","client",
"Failed to start video, failed to set constraints. Please try again, if issue persists, contact Azure Communication Services support.","","Video operation failure ConstraintNotSatisfiedError","","412","43018","UnexpectedClientError","client",
"Failed to start video, no device selected. Please ensure to pass a LocalVideoStream constructed with a VideoDeviceInfo and try again. If issue persists, contact Azure Communication Services support.","","Video operation failure noDeviceSelected","","412","43019","UnexpectedClientError","client",
"Not able to subscribe to RemoteVideoStream event, unknown event name.","","Not able to subscribe to event {0}, unknown event name","","422","43100","ExpectedError","client",
"Not able to unsubscribe from RemoteVideoStream event, unknown event name.","","Not able to unsubscribe event {0}, unknown event name","","422","43101","ExpectedError","client",
"Not able to get media stream","","","","500","43102","UnexpectedClientError","client",
"The remote video stream is currently not available, subscribe to the stream's isAvailable property to get notified when it is ready to get the raw media stream.","","The stream is currently not availalbe, subscribe to stream.isAvailable property to get notified when it is ready to get media stream","","400","43103","ExpectedError","client",
"Failed to subscribe to media stream, timeout","","","","408","43104","UnexpectedClientError","client",
"Failed to get media stream","","","","500","43105","UnexpectedClientError","client",
"Failed to subscribe to media stream, muted","","","","408","43106","UnexpectedClientError","client",
"Failed to get raw media stream","","","","500","43107","UnexpectedClientError","client",
"Failed to render video stream, this stream is not available. Subscribe to the stream's isAvailable property to get notified when the remote participant has their video on and the stream is available for rendering.","","Failed to create view, remote stream is not available","","412","43200","ExpectedError","client",
"Failed to start stream, already disposed","","","","405","43201","ExpectedError","client",
"Failed to render video stream, this stream is not longer available. Remote participant turned their video off.","","Failed to start stream, stream became unavailable","","404","43202","ExpectedError","client",
"Failed to render video stream, rendering timed out while waiting for video frames. Please try again, if issue persists, contact Azure Communication Services support.","","Failed to render stream, timeout","","408","43203","UnexpectedClientError","client",
"Failed to render video stream, failed to subscribe to video on the Azure Communication Services infrastructure. Please try again, if issue persists, contact Azure Communication Services support.","","Failed to start stream, fail to subscribe","","500","43204","UnexpectedClientError","client",
"Failed to start stream, internal error","","","","500","43205","UnexpectedClientError","client",
"Failed to updateScalingMode, failed to update","","","","500","43206","UnexpectedClientError","client",
"Failed to start stream, disposing stream because participant is not a dominant speaker in the large meeting","","","","405","43207","ExpectedError","client",
"Failed to start stream, disposing stream because remote video stream is disposing","","","","405","43208","ExpectedError","client",
"Failed to render video stream, VideoStreamRenderer was disposed during initialization process.","","Failed to start stream, disposing stream","","405","43209","ExpectedError","client",
"Failed to dispose VideoStreamRenderer, it is already disposed.","","Failed to dispose stream, already disposed","","400","43210","ExpectedError","client",
"Failed to dispose remote renderer","","","","500","43211","UnexpectedClientError","client",
"Failed to create VideoStreamRendererView, videoStream must be either LocalVideoStream or RemoteVideoStream type","","","","400","43212","ExpectedError","client",
"Failed to dispose, VideoStreamRendererView is disposed","","","","400","43213","ExpectedError","client",
"Failed to render, stream disposed","","","","400","43214","ExpectedError","client",
"Failed to updateScalingMode, VideoStreamRendererView is disposed","","","","400","43215","ExpectedError","client",
"Failed to updateScalingMode, wrong scalingMode value","","","","400","43216","ExpectedError","client",
"Failed to dispose view","","","","500","43217","UnexpectedClientError","client",
"Failed to create VideoStreamRenderer, videoStream must be either LocalVideoStream or RemoteVideoStreamCommon type","","","","400","43218","ExpectedError","client",
"Failed to create view, VideoStreamRenderer is disposed","","","","400","43219","ExpectedError","client",
"Failed to create view, maximum number of active RemoteVideoStream views has been reached. You can dispose of a previous one in order to create new one.","","Failed to create view, maximum number of {0} active RemoteVideoStream has been reached","","400","43220","ExpectedError","client",
"Failed to create view","","","","500","43221","UnexpectedClientError","client",
"Failed to dispose, VideoStreamRendererView is already disposed","","","","400","43222","ExpectedError","client",
"Unknown stream type","","","","400","43223","ExpectedError","client",
"Failed to dispose local renderer","","","","500","43224","UnexpectedClientError","client",
"Failed to create local audio stream, source is not of type AudioDeviceInfo or MediaStream","","","","400","43600","ExpectedError","client",
"Failed to create local audio stream, source is not a microphone","","","","400","43601","ExpectedError","client",
"Failed to get media stream source is not AudioDeviceInfo or MediaStream","","","","500","43602","UnexpectedClientError","client",
"Failed to switch stream on local audio, source is not of type MediaStream","","","","400","43603","ExpectedError","client",
"Failed to create local audio stream, source is not a microphone","","","","400","43604","ExpectedError","client",
"Not able to subscribe to LocalAudioStream event, unknown event name.","","Not able to subscribe to event {0}, unknown event name","","422","43605","ExpectedError","client",
"Not able to unsubscribe from LocalAudioStream event, unknown event name.","","Not able to unsubscribe event {0}, unknown event name","","422","43606","ExpectedError","client",
"Failed to switch audio device, unable to switch to the same audio device, it's already selected.","","","","400","43607","ExpectedError","client",
"Failed to start audio, unknown error. Please try again. If the issue persists, gather browser console logs and contact Azure Communication Services support.","","","","500","43608","UnexpectedClientError","client",
"Unable to parse PhoneNumberIdentifier object","","","","422","44000","ExpectedError","client",
"Unable to parse MicrosoftTeamsUserIdentifier object","","","","422","44001","ExpectedError","client",
"Unable to parse MicrosoftTeamsAppIdentifier object","","","","422","44002","ExpectedError","client",
"Unable to parse Identifier object, please check the syntax","","","","422","44003","ExpectedError","client",
"Invalid CommunicationUser identifier specified","","","","422","44004","ExpectedError","client",
"Invalid MicrosoftTeamsUser rawId specified","","","","422","44005","ExpectedError","client",
"Invalid MicrosoftTeamsUser microsoftTeamsUserId specified","","","","422","44006","ExpectedError","client",
"Invalid MicrosoftTeamsApp rawId specified","","","","422","44007","ExpectedError","client",
"Invalid MicrosoftTeamsApp teamsAppId specified","","","","422","44008","ExpectedError","client",
"Invalid identifier specified, please specify an id","","","","422","44009","ExpectedError","client",
"Unable to parse Identifier object","","","","422","44010","ExpectedError","client",
"AssertIsArrayOfIdentifiers failed. : userIds must be array of CommunicationIdentifier","","","","422","44011","ExpectedError","client",
"No cloud prefix found in identity","","","","409","44012","ExpectedError","client",
"Config is empty","","","","500","44100","UnexpectedServerError","client",
"Missing ACS config key","","","","500","44101","UnexpectedServerError","client",
"Error while merging config","","","","500","44102","UnexpectedClientError","client",
"Failed to initialize telemetry","","","","500","44103","UnexpectedClientError","client",
"Failed to initialize telemetry","","","","500","44104","UnexpectedClientError","client",
"Failed to create and initialize telemetry logger for tenant. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Failed to create and initialize telemetry logger for {0}","","500","44105","UnexpectedClientError","client",
"Failed to flush telemetry","","","","500","44106","UnexpectedClientError","client",
"Failed to initialize telemetry logger","","","","500","44107","UnexpectedClientError","client",
"No CommunicationTokenCredential provided","","","","401","44108","ExpectedError","client",
"AccessToken is empty","","","","401","44109","ExpectedError","client",
"Failed to get AccessToken","","","","401","44110","UnexpectedClientError","client",
"Invalid token","","","","401","44111","ExpectedError","client",
"Failed to parse AccessToken","","","","401","44112","ExpectedError","client",
"AccessToken does not contain 'voip' or 'voip.join' scope","","","","401","44113","ExpectedError","client",
"Wrong AccessToken scope format. Scope is expected to be a string that contains 'voip'","","","","401","44114","ExpectedError","client",
"AccessToken does not contain ACS resource Id","","","","401","44115","ExpectedError","client",
"AccessToken does not contain ACS user Id","","","","401","44116","ExpectedError","client",
"Failed to parse AccessToken","","","","401","44117","UnexpectedClientError","client",
"Operation timed out","","","","408","44118","UnexpectedClientError","client",
"Error while trying to start or stop echo cancellation. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Error while trying to {0} echo cancellation","","500","45000","UnexpectedClientError","client",
"Error while trying to start or stop noise suppression. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Error while trying to {0} noise suppression","","500","45001","UnexpectedClientError","client",
"Not able to subscribe to AudioEffects event, unknown event name.","","Not able to subscribe to event {0}, unknown event name","","400","45002","ExpectedError","client",
"Not able to unsubscribe from AudioEffects event, unknown event name.","","Not able to unsubscribe event {0}, unknown event name","","400","45003","ExpectedError","client",
"Setting audio effects is currently disabled by Azure Communication Services.","","Setting audio effects is disabled.","","403","45004","ExpectedError","client",
"Audio effects feature is disposed. Create a new AudioEffects feature instance.","","","","400","45005","ExpectedError","client",
"Current source is not supported","","","","415","45006","ExpectedError","client",
"Failed to get device manager to start effects.","","","","500","45007","UnexpectedClientError","client",
"Audio effects feature is disposed. Create a new AudioEffects feature instance.","","","","400","45008","ExpectedError","client",
"Failed to get device manager to stop effects.","","","","500","45009","UnexpectedClientError","client",
"Internal error - DM missing","","","","500","45010","UnexpectedClientError","client",
"EffectProvider not available","","","","500","45011","UnexpectedClientError","client",
"Internal error - stack aec provider missing","","","","500","45012","UnexpectedClientError","client",
"Invalid effect provided","","","","400","45013","ExpectedError","client",
"Invalid or no echo cancellation effect provided","","","","400","45014","ExpectedError","client",
"Invalid or no noise suppression effect provided","","","","400","45015","ExpectedError","client",
"Unsupported effect specified. Please specify a supported audio effect.","","{0} is not supported.","","415","45016","UnexpectedClientError","client",
"Error while checking support","","","","501","45017","UnexpectedClientError","client",
"Invalid or no auto gain control effect provided","","","","400","45018","ExpectedError","client",
"Error while trying to start or stop auto gain control. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Error while trying to {0} auto gain control","","500","45019","UnexpectedClientError","client",
"Error setting browser audio processing flags","","","","500","45020","UnexpectedClientError","client",
"Error starting audio effects.","","","","500","45021","UnexpectedClientError","client",
"Error stopping audio effects.","","","","500","45022","UnexpectedClientError","client",
"Error disposing audio effects feature.","","","","500","45023","UnexpectedClientError","client",
"Invalid call survey. Please submit a survey options.","","{0}.","","400","45100","ExpectedError","client",
"Failed to submit survery, timedout. Please try again, if issue persists, gather browser console logs and contact Azure Communication Services support.","","","","408","45101","UnexpectedClientError","client",
"Failed to initialize Captions.","","","","500","45200","UnexpectedClientError","client",
"Captions feature is currently disabled by Azure Communication services.","","Feature is not enabled.","","412","45201","ExpectedError","client",
"Spoken language requested is not supported.","","","","400","45202","ExpectedError","client",
"Captions feature is disabled in meeting policy.","","","","403","45203","ExpectedError","client",
"Captions feature is disabled in calling policy.","","","","403","45204","ExpectedError","client",
"Could not start captions.","","","","500","45205","UnexpectedClientError","client",
"Cannot update spoken language as captions has not started.","","","","400","45206","ExpectedError","client",
"Set spoken language is currently disabled by Azure Communication Services.","","Set spoken language is not enabled.","","412","45207","ExpectedError","client",
"Unable to update spoken language. Failed to get token.","","","","401","45208","UnexpectedClientError","client",
"Unable to update spoken language.","","","","500","45209","UnexpectedClientError","client",
"Cannot update caption language as captions has not started.","","","","400","45210","ExpectedError","client",
"Set caption language is currently disabled by Azure Communication Services.","","Set caption language is not enabled.","","412","45211","ExpectedError","client",
"Set caption language failed. Teams premium license is needed to use this feature.","","","","401","45212","ExpectedError","client",
"Caption language requested is not supported.","","","","400","45213","ExpectedError","client",
"Null token","","","","401","45214","ExpectedError","client",
"Unable to update caption language.","","","","500","45215","UnexpectedClientError","client",
"Failed to fetch policy for Teams Captions.","","","","500","45216","UnexpectedClientError","client",
"Captions already active","","","","400","45217","ExpectedError","client",
"Captions feature is not active.","","","","400","45218","ExpectedError","client",
"Operation in progress","","","","400","45219","ExpectedError","client",
"Spoken language already set","","","","400","45220","ExpectedError","client",
"Unable to update caption language as Captions is not active.","","","","400","45221","ExpectedError","client",
"Caption language already set.","","","","400","45222","ExpectedError","client",
"Captions status already set.","","","","400","45223","ExpectedError","client",
"Captions is not supported.","","","","400","45224","ExpectedError","client",
"Failed to update endpoint metadata","","","","500","45225","UnexpectedClientError","client",
"Cannot start captions as call state is not connected.","","","","400","45226","ExpectedError","client",
"DataChannel has been disposed","","","","500","45300","UnexpectedClientError","client",
"Sender is not ready","","","","500","45301","UnexpectedClientError","client",
"No available channel id","","","","500","45302","UnexpectedClientError","client",
"Invalid channel id","","","","400","45303","ExpectedError","client",
"Invalid bitrateInKbps","","","","400","45304","ExpectedError","client",
"Invalid participants","","","","400","45305","ExpectedError","client",
"Too many participants","","","","400","45306","ExpectedError","client",
"No valid participant","","","","400","45307","ExpectedError","client",
"Message data is empty","","","","400","45308","ExpectedError","client",
"The size of message data is too large","","","","400","45309","ExpectedError","client",
"Invalid message length","","","","500","45310","UnexpectedClientError","client",
"The buffer is full. Please wait and try again","","","","500","45311","UnexpectedClientError","client",
"The sender has been closed","","","","400","45312","ExpectedError","client",
"Currently there is no available reliable channel","","","","500","45313","UnexpectedClientError","client",
"Currently there is no available unreliable channel","","","","500","45314","UnexpectedClientError","client",
"Unable allocate the channel because a channel with the same channelId has already been allocated","","","","500","45315","UnexpectedClientError","client",
"Invalid bitrate","","","","400","45316","ExpectedError","client",
"Traffic is limited","","","","400","45317","ExpectedError","client",
"Failed to send message.","","","","500","45318","UnexpectedClientError","client",
"Not able to subscribe to DataChannel event, unknown event name.","","Not able to {0} subscribe to event {1}, unknown event name","","422","45319","ExpectedError","client",
"Wrong argument type specified.","","TypeError: Expect '{0}' to be of type '{1}'","","400","45320","ExpectedError","client",
"Wrong value specified.","","ValueError: Expect '{0}' to be '{1}'","","400","45321","ExpectedError","client",
"Cannot find the channelId specified.","","Cannot find the channelId {0}","","400","45322","ExpectedError","client",
"Failed to create the sender.","","","","500","45323","UnexpectedClientError","client",
"Mapped to an incorrect value type. Please gather browser console logs and contact Azure Communication Services support.","","Mapped to an incorrect value type={0}, diagnostic value={1}, for diagnostic {2}","","500","45400","UnexpectedClientError","client",
"Not able to subscribe to UserFacingDiagnostics event, unknown event name.","","Not able to subscribe to event {0}, unknown event name","","422","45401","ExpectedError","client",
"Not able to unsubscribe from UserFacingDiagnostics event, unknown event name.","","Not able to unsubscribe event {0}, unknown event name","","422","45402","ExpectedError","client",
"Failed to map diagnostic quality level. Please gather browser console logs and contact Azure Communication Services support.","","Cannot map ts quality level {0} for {1}","","500","45403","UnexpectedClientError","client",
"Not able to subscribe to LiveStream event, unknown event name.","","Not able to subscribe to event {0}, unknown event name","","422","45500","ExpectedError","client",
"Not able to unsubscribefrom LiveStream event, unknown event name.","","Not able to unsubscribe event {0}, unknown event name","","422","45501","ExpectedError","client",
"Invalid aggregationInterval value range.","","","","400","45502","ExpectedError","client",
"invalid dataPointsPerAggregation value range.","","","","400","45503","ExpectedError","client",
"MediaStatsCallFeature has been disposed.","","","","400","45504","ExpectedError","client",
"Invalid aggregationInterval value range.","","","","400","45550","ExpectedError","client",
"invalid dataPointsPerAggregation value range.","","","","400","45551","ExpectedError","client",
"MediaStatsCallFeature has been disposed.","","","","400","45552","ExpectedError","client",
"Not able to subscribe to OptimalVideoCount event, unknown event name.","","Not able to subscribe to event {0}, unknown event name","","422","45600","ExpectedError","client",
"Not able to unsubscribe from OptimalVideoCount event, unknown event name.","","Not able to unsubscribe event {0}, unknown event name","","422","45601","ExpectedError","client",
"Failed to set default microphone or speaker with error","","","","412","45700","UnexpectedClientError","client",
"Unable to return call diagnostic information.","","","","500","45701","UnexpectedClientError","client",
"Timeout in checking media stream status","","","","500","45702","UnexpectedClientError","client",
"Failed to get existing call agent or create a new one","","","","500","45703","UnexpectedClientError","client",
"Test call failed to connect","","","","500","45704","UnexpectedClientError","client",
"Call failed to render video.","","","","500","45705","UnexpectedClientError","client",
"Test call failed hang up the call","","","","500","45706","UnexpectedClientError","client",
"Failed to get video call media stats","","","","500","45707","UnexpectedClientError","client",
"Call timed out to connect. Please try again, if the issue persists, gather browser console logs and contact Azure Communication Services support.","","Call timeout after {0}","","408","45708","UnexpectedClientError","client",
"Could not initialize raise hand feature.","","","","500","45750","UnexpectedClientError","client",
"Could not change a participant state.","","","","500","45751","UnexpectedServerError","client",
"Could not change a participant state.","","","","500","45752","UnexpectedServerError","client",
"Could not change a participant state.","","","","500","45753","UnexpectedServerError","client",
"Could not change a participant state.","","","","500","45754","UnexpectedServerError","client",
"Could not change a participant state.","","","","500","45755","UnexpectedServerError","client",
"Lower hands request failed because participant list is empty.","","","","400","45756","ExpectedError","client",
"Raise hands request failed because participant list is empty.","","","","400","45757","ExpectedError","client",
"Call is not connected yet to send reaction","","","","400","45800","ExpectedError","client",
"Reaction send is not supported for 1:1 direct calling with teams identity","","","","400","45801","ExpectedError","client",
"Unable to register listener due to meeting policy","","","","403","45802","ExpectedError","client",
"Unable to deregister listener due to meeting policy","","","","403","45803","ExpectedError","client",
"Unable to send reaction due to meeting policy","","","","403","45804","ExpectedError","client",
"Could not create state service proxy web-socket connection","","","","500","45805","UnexpectedServerError","client",
"Could not create sync map to exchange reaction","","","","500","45806","UnexpectedServerError","client",
"Unable to handle send reaction","","","","400","45807","ExpectedError","client",
"Unable to handle send reaction","","","","500","45808","UnexpectedClientError","client",
"Unable to parse reaction","","","","500","45809","UnexpectedClientError","client",
"Not able to subscribe to Reation event, unknown event name.","","Not able to subscribe to event {0}, unknown event name","","422","45810","ExpectedError","client",
"Not able to unsubscribe from Reaction event, unknown event name.","","Not able to unsubscribe event {0}, unknown event name","","422","45811","ExpectedError","client",
"Not able to subscribe to Recording event, unknown event name.","","Not able to subscribe to event {0}, unknown event name","","422","45850","ExpectedError","client",
"Not able to unsubscribe from Recording event, unknown event name.","","Not able to unsubscribe event {0}, unknown event name","","422","45851","ExpectedError","client",
"Recording status already set.","","","","400","45852","ExpectedError","client",
"Bad request. All participants are already spotlighted","","","","400","45900","ExpectedError","client",
"Internal Error. Start spotlight for participants failed","","","","500","45901","UnexpectedServerError","client",
"Failed to start spotlight. Reached the maximum number of participants that can be Spotlighted.","","startSpotlight failed. {0} is the max number of participants that can be Spotlighted","","400","45902","ExpectedError","client",
"Failed to spotlight. User does not have a Presenter or Organizer role.","","{0} spotlight failed. User does not have a Presenter or Organizer role in {1}","","403","45903","ExpectedError","client",
"Spotlight feature is not enabled","","","","400","45904","ExpectedError","client",
"StartSpotlight failed. Participant list is empty","","","","400","45905","ExpectedError","client",
"Teams meeting audio conferencing feature is only available in meetings","","","","400","45950","ExpectedError","client",
"The Teams meeting audio conferencing details feature is disabled by ACS service.","","Teams meeting audio conferencing details feature is disabled","","405","45951","ExpectedError","client",
"Teams meeting audio conferencing details are not available before joining the Teams meeting","","","","400","45952","ExpectedError","client",
"Teams meeting audio conferencing details are not available in Lobby","","","","400","45953","ExpectedError","client",
"Teams meeting audio conferencing details is not configured","","","","400","45954","UnexpectedClientError","client",
"Error retrieving Teams meeting audio conferencing details","","","","500","45955","UnexpectedServerError","client",
"Transcription status already set.","","","","400","46000","ExpectedError","client",
"Transfer to target failed","","","","500","46050","UnexpectedClientError","client",
"Transfer is not supported in this call.","","","","400","46051","ExpectedError","client",
"Transfer target is not recognized.","","","","400","46052","ExpectedError","client",
"Invalid target participant type detected.","","Invalid target participant type detected: {0}.","","400","46053","ExpectedError","client",
"UnmixedAudio is not available.","","","","500","46100","UnexpectedClientError","client",
"The operation cannot be done because there is a pending operation","","","","400","46101","ExpectedError","client",
"The operation is not supported in peer-to-peer call","","","","400","46102","ExpectedError","client",
"Unmixed audio has been enabled","","","","400","46103","ExpectedError","client",
"Unmixed audio has been disabled","","","","400","46104","ExpectedError","client",
"Unmixed audio has been disposed","","","","400","46105","ExpectedError","client",
"Not able to subscribe or unsubscibe to UnmixedAudio event, unknown event name.","","Unable to {0} to event {1}, unknown event name","","422","46106","ExpectedError","client",
"Wrong argument type specified.","","TypeError: Expect '{0}' to be of type '{1}'","","400","46107","ExpectedError","client",
"Wrong value specified.","","ValueError: Expect '{0}' to be '{1}'","","400","46108","ExpectedError","client",
"Invalid state.","","Invalid state: {0}","","400","46109","ExpectedError","client",
"Unknown error","","","","500","46110","UnexpectedClientError","client",
"Failed to enable unmixed audio: AudioContext={0}, UnmixedAudio={1}","","","","500","46111","UnexpectedClientError","client",
"Failed to disable unmixed audio: AudioContext={0}, UnmixedAudio={1}","","","","500","46112","UnexpectedClientError","client",
"Failed to initialize unmixed audio.","","","","500","46113","UnexpectedClientError","client",
"Video effects feature is currently disabled by Azure Communication Services.","","Disabled.","","403","46150","ExpectedError","client",
"VideoEffects feature is disposed. Create a new VideoEffects Feature instance.","","","","400","46151","ExpectedError","client",
"Current source is unsupported to use effects","","","","415","46152","ExpectedError","client",
"Failed to get device manager to start effects.","","","","500","46153","UnexpectedClientError","client",
"EffectProvider not available","","","","500","46154","UnexpectedClientError","client",
"Failed to get WebCV provider.","","","","500","46155","UnexpectedClientError","client",
"Effect is not supported.","","","","501","46156","UnexpectedClientError","client",
"VideoEffects feature is disposed. Create a new VideoEffects Feature instance.","","","","400","46157","UnexpectedClientError","client",
"Failed to get device manager to stop effects.","","","","500","46158","UnexpectedClientError","client",
"Invalid effect provided","","","","400","46159","ExpectedError","client",
"Not able to subscribe to event {event}, unknown event name","","","","400","46160","ExpectedError","client",
"Not able to unsubscribe event {event}, unknown event name","","","","400","46161","ExpectedError","client",
"Timed promise; rejected.","","","","408","46162","UnexpectedClientError","client",
"Error while checking support","","","","501","46163","UnexpectedClientError","client",
"Error starting video effects","","","","500","46164","UnexpectedClientError","client",
"Error stopping video effects","","","","500","46165","UnexpectedClientError","client",
"Error disposing video effects feature","","","","500","46166","UnexpectedClientError","client",
"Effect is not available. Try again when the effect is initialized and available","","","","500","46167","UnexpectedClientError","client",
"Effect can not be enabled because of Teams Policy","","","","403","46168","ExpectedError","client",
"Local Recording feature is only available in meetings","","","","400","46200","ExpectedError","client",
"Local Recording feature is currently disabled by Azure Communication Service.","","Local Recording feature is disabled","","405","46201","ExpectedError","client",
"Not able to subscribe to LocalRecording event, unknown event name.","","Not able to subscribe to event {0}, unknown event name","","422","46202","ExpectedError","client",
"Not able to unsubscribe from LocalRecording event, unknown event name.","","Not able to unsubscribe event {0}, unknown event name","","422","46203","ExpectedError","client",
"Failed to start video, permission was not granted to use selected video device. Ensure video device permissions are allowed in the browser's settings and in the system's setttings.","","Video operation failure permissionDeniedError","","403","43001","ExpectedError","client",
"Call ended successfully by local participant.","","","","0","0","Success","service",
"Call ended for all users by the meeting organizer.","","","","0","4097","Success","service",
"Call ended because user disconnected from the call abruptly, this may be a result of a user closing the application that hosted the call, eg a user terminated application, closed browser of browser tab without proper hang-up.","","","","0","4521","ExpectedError","service",
"Call ended for this participant as it was removed from the conversation by another participant.","","","","0","5000","Success","service",
"Call ended successfully, as all callee endpoints declined the call.","","","","0","5003","Success","service",
"This conversation has ended as only one participant was remaining in the conversation.","","","","0","5010","Success","service",
"This conversation has ended as no one else has joined the group call.","","","","0","5013","Success","service",
"","","","","0","5014","Success","service",
"Call ended for this participant as it was removed from the conversation by another participant.","","","","0","5300","Success","service",
"Removed from the Teams meeting lobby by another participant.","","","","0","5854","Success","service",
"Removed from Teams meeting lobby due to inactivity timeout.","","","","0","5855","Success","service",
"Call ended by Azure Communication Services platform.","","","","0","7000","Success","service",
"Call ended by service because transfer completed successfully.","","","","0","7015","Success","service",
"Call is ended.","","","","0","540000","","service",
"Call ended successfully by remote PSTN participant.","","","","0","560000","Success","service",
"Error from CreateUsageRequest: User is not entitled to call this destination.","","","","400","580040","ExpectedError","service",
"Unauthenticated identity.","","","","401","10009","UnexpectedClientError","service",
"Call ended, as it has been marked as a spam and got blocked.","","","","403","510403","ExpectedError","service",
"Call was forbidden, cancelled or rejected","","","","403","560403","UnexpectedClientError","service",
"Call failed, unable to start or join to a call with given Id, call does not exist. Please check if provided id is correct, and if the call did not end already and try again.","","","","404","404","UnexpectedClientError","service",
"Call failed, unable to start or join to a call with given Id, call does not exist. Please check if provided id is correct, and if the call did not end already and try again.","","","","404","4500","ExpectedError","service",
"Phone number not found.","","","","404","560404","ExpectedError","service",
"Call failed, callee failed to finalize call setup, most likely callee lost network or terminated the application abruptly. Ensure clients are connected and available.","","","","408","10057","ExpectedError","service",
"","","","","408","10325","UnexpectedClientError","service",
"Gateway (SBC) failover timer expired.","","","","408","500001","ExpectedError","service",
"The called party did not respond.","","","","408","560408","","service",
"Media dropped during connect.","","","","410","3100","ExpectedError","service",
"","","","","410","3101","","service",
"","","","","410","3112","","service",
"Participant was removed from the call by the Azure Communication Services infrastructure due to loss of media connectivity with Azure Communication Services infrastructure, this usually happens if participant leaves the call abruptly or looses network connectivity. If participant wants to continue the call, it should reconnect.","","","","410","301005","UnexpectedClientError","service",
"","","","","429","5029","ExpectedError","service",
"This call has exceeded the maximum call lifetime.","","","","429","10110","ExpectedError","service",
"Unable to deliver message to client application. Please ensure the client application is successfully sending netwwork requests to Azure Communication Services.","","","","430","10315","","service",
"Unable to deliver message to client application. Please ensure the client application is successfully sending netwwork requests to Azure Communication Services.","","","","430","10317","","service",
"","","","","480","10037","ExpectedError","service",
"Remote client endpoint not registered. Please ensure the client application is successfully sending netwwork requests to Azure Communication Services.","","","","480","10076","ExpectedError","service",
"No answer.","","","","480","560480","UnexpectedServerError","service",
"Incomplete/Invalid callee address.","","","","484","560484","","service",
"Call ended because remote PSTN participant was busy. The number called was already in a call or having technical issues.","","","","486","560486","Success","service",
"Call ended successfully as caller cancelled the call.","","","","487","0","Success","service",
"Call canceled, locally declined, ended due to an endpoint mismatch issue, or failed to generate media offer.","","","","487","4501","","service",
"Call was accepted elsewhere, by another endpoint of this user.","","","","487","10003","Success","service",
"Call was canceled on timeout, no callee endpoint accepted on time. Ensure that user saw the notification and try to initiate that call again.","","","","487","10004","ExpectedError","service",
"Call ended successfully as it was declined by all callee endpoints.","","","","487","10024","Success","service",
"Call canceled, locally declined, ended due to an endpoint mismatch issue, or failed to generate media offer.","","","","487","540200","Success","service",
"Call ended successfully as caller cancelled the call.","","","","487","540487","Success","service",
"Call cancelled by originator.","","","","487","560487","","service",
"Call ended as application did not provide a valid Azure Communication Services token.","","","","495","4507","UnexpectedClientError","service",
"Azure Communication Services infrastructure error. Please gather browser console logs, .HAR file, and contact Azure Communication Services support.","","","","500","10045","","service",
"Unexpected server error","","","","503","560503","UnexpectedServerError","service",
"Call ended successfully as it was declined by callee.","","","","603","0","Success","service",
];
let participants = materialize(ACSCallSummary
| where CorrelationId == queryConditions_callId
| where ParticipantId != CorrelationId and isnotempty(ParticipantId)
| distinct ParticipantId, CallType);
// For P2P case, we at most take 2 participants from the query.
let numOfResultRows = iff(toscalar(participants | project CallType | take 1) == 'P2P', 2, 1000);
let serviceSideParticipants = materialize(ACSCallSummary
| where CorrelationId == queryConditions_callId
// some participants don't have startTime, we use callStartTime instead.
| extend ParticipantStartTime = coalesce(ParticipantStartTime, CallStartTime)
| extend ParticipantEndTime = coalesce(ParticipantStartTime + 1s*ParticipantDuration, ParticipantStartTime + 10ms)
| extend ParticipantEndSubCode = toreal(ParticipantEndSubCode)
| join kind=leftouter hint.strategy=shuffle SubCodesMapping on $left.ParticipantEndSubCode == $right.subCode
| extend EndReason = message
| extend Rank = iff(isempty(ParticipantId) and CallType == 'P2P' and EndpointType == 'VoIP', -1, 1)
| where CorrelationId != ParticipantId
| extend ParticipantId = coalesce(ParticipantId, Identifier, EndpointId)
| extend ParticipantId = iff(ParticipantId == 'Redacted', strcat('RedactedParticipant-', EndpointType, '-Identifier-', Identifier), ParticipantId)
| extend EndpointId = iff(EndpointId == 'Redacted', strcat('RedactedEndpoint-', EndpointType, '-Identifier-', Identifier), EndpointId)
| summarize hint.strategy = shuffle arg_max(TimeGenerated, *) by ParticipantId
| extend CallDroppedUngracefully = ResultCategory contains 'Unexpected'
| project
ParentEntityId = CorrelationId,
ParentEntityType = 'Call',
EntityType = 'Participant',
EntityId = ParticipantId,
Server_EntityStartTime=ParticipantStartTime,
Server_EntityEndTime=ParticipantEndTime,
Server_EntityDuration=ParticipantDuration,
EntityDisplayName = strcat('Participant-', ParticipantId),
Server_EndReasonCode = toint(ParticipantEndReason),
Server_EndReasonSubCode = toint(ParticipantEndSubCode),
Server_EndReasonPhrase = EndReason,
Server_ResultCategory = ResultCategory,
Server_Identifer = Identifier,
Server_EndpointId = EndpointId,
Server_EndpointType = EndpointType,
Server_ParticipantType = ParticipantType,
Server_SdkVersion = SdkVersion,
Server_OsVersion = OsVersion,
Server_PstnParticipantCallType = PstnParticipantCallType,
Server_CallDroppedUngracefully = CallDroppedUngracefully,
GroupName = "lifeCycle");
//
let sdkTypeRegex = @"( .*-communication-calling)";
let clientSideParticipants = materialize(ACSCallClientOperations
| where ParticipantId in (participants) or CallId == queryConditions_callId
| where isnotempty(OperationName) and OperationName != 'CallClientOperations'
and isnotempty(OperationId) and isnotempty(CallClientTimeStamp)
| where OperationName !in ('CallModeChanged', 'IdChanged')
| extend OperationId = coalesce(hash_sha256(strcat(OperationId, tostring(CallClientTimeStamp), OperationName)), tostring(new_guid()))
| summarize hint.strategy = shuffle arg_max(CallId, *) by OperationId
| where isnotempty(ParticipantId)
| extend OS = parse_user_agent(UserAgent, 'os').OperatingSystem
| extend Browser = parse_user_agent(UserAgent, 'browser').Browser
| extend OsVersion = strcat(OS.Family, " ", OS.MajorVersion,'.', OS.MinorVersion)
| extend Browser = strcat(Browser.Family, ' ', Browser.MajorVersion, '.', Browser.MinorVersion)
| extend SDKType = extract(sdkTypeRegex, 1, UserAgent)
| project OperationId, ParticipantId, CallId, CallClientTimeStamp, OperationName, OperationPayload, OsVersion, SdkVersion, ResultSignature, ResultType, UserAgent, Browser, SDKType
| extend OperationPayload = todynamic(OperationPayload)
| extend
UFDQuality = coalesce(tostring(OperationPayload.DiagnosticQuality), tostring(OperationPayload.diagnosticQuality)),
UFDType = coalesce(tostring(OperationPayload.DiagnosticChanged), tostring(OperationPayload.diagnosticChanged)),
isUFD = OperationName == 'UserFacingDiagnostics',
State = tostring(OperationPayload.NewState)
| extend
ResultType = iff(isUFD, iff(UFDQuality != 'Good' and not(UFDType has_any ("SpeakingWhileMicrophoneIsMuted", "SpeakerMuted")), 'Failed', 'Succeeded'), ResultType),
CallDroppedUngracefully = iff(OperationName in ('EnterCall', 'Join', 'Hangup', 'StartCall', 'AcceptIncomingCall'), ResultType !in ('Succeeded', 'Success', 'ExpectedError'), bool(null)),
Client_EndReasonCode = iff(OperationName in ('EnterCall', 'Join', 'Hangup', 'StartCall', 'AcceptIncomingCall'), toint(OperationPayload.Code), int(null)),
Client_EndReasonSubCode = iff(OperationName in ('EnterCall', 'Join', 'Hangup', 'StartCall', 'AcceptIncomingCall'), toint(OperationPayload.SubCode), int(null)),
Client_EndReasonPhrase = iff(OperationName in ('EnterCall', 'Join', 'Hangup', 'StartCall', 'AcceptIncomingCall'), tostring(OperationPayload.FailureReason), ''),
Client_ResultCategory = iff(OperationName in ('EnterCall', 'Join', 'Hangup', 'StartCall', 'AcceptIncomingCall'), OperationPayload.ResultCategory, ''),
ParticipantStartTime = iff(OperationName in ('Join', 'StartCall', 'EnterCall', 'AcceptIncomingCall') or State == 'Connected', CallClientTimeStamp, datetime(null)),
ParticipantEndTime = iff(OperationName == 'Hangup' or State == 'Disconnected', CallClientTimeStamp, datetime(null))
| summarize hint.strategy = shuffle arg_max(CallId, *), ResultType = iff(countif(ResultType !in ('Succeeded', 'Success', 'ExpectedError')) > 0, 'Failed', 'Succeeded'),
CallDroppedUngracefully = take_any(CallDroppedUngracefully),
ParticipantStartTimeApprox = min(CallClientTimeStamp),
ParticipantEndTimeApprox = max(CallClientTimeStamp) by ParticipantId
| extend
ParticipantStartTime = coalesce(ParticipantStartTime, ParticipantStartTimeApprox),
ParticipantEndTime = coalesce(ParticipantEndTime, ParticipantEndTimeApprox)
| project
ParentEntityId = queryConditions_callId,
ParentEntityType = 'Call',
EntityId = ParticipantId,
EntityType = 'Participant',
EntityDisplayName = strcat('Participant-', ParticipantId),
Client_EntityStartTime=ParticipantStartTime,
Client_EntityEndTime=ParticipantEndTime,
Client_EntityDuration=tolong((ParticipantEndTime - ParticipantStartTime)/1s),
Client_ParticipantType = 'ACS',
Client_EndpointType = 'VoIP',
Client_SdkVersion = SdkVersion,
Client_OsVersion = OsVersion,
Client_Browser = Browser,
Client_SdkType = SDKType,
Client_Insights_HasIssues = ResultType == 'Failed',
Client_EndReasonCode,
Client_EndReasonSubCode,
Client_EndReasonPhrase,
Client_ResultCategory,
Client_CallDroppedUngracefully = CallDroppedUngracefully,
GroupName = "lifeCycle");
// Merge participantEntities from service side and client side, and if the participant exists in both sides, we take the one with higher Rank.
union serviceSideParticipants, clientSideParticipants
| summarize
ParentEntityId = take_any(ParentEntityId),
ParentEntityType = take_any(ParentEntityType),
EntityType = take_any(EntityType),
EntityDisplayName = take_any(EntityDisplayName),
Client_EntityStartTime = take_any(Client_EntityStartTime),
Client_EntityEndTime = take_any(Client_EntityEndTime),
Client_EntityDuration = take_any(Client_EntityDuration),
Client_ParticipantType = take_any(Client_ParticipantType),
Client_EndpointType = take_any(Client_EndpointType),
Client_SdkVersion = take_any(Client_SdkVersion),
Client_OsVersion = take_any(Client_OsVersion),
Client_Insights_HasIssues = take_any(Client_Insights_HasIssues),
Client_EndReasonCode = take_any(Client_EndReasonCode),
Client_EndReasonSubCode = take_any(Client_EndReasonSubCode),
Client_EndReasonPhrase = take_any(Client_EndReasonPhrase),
Client_ResultCategory = take_any(Client_ResultCategory),
Client_CallDroppedUngracefully = take_any(Client_CallDroppedUngracefully),
Server_EntityStartTime = take_any(Server_EntityStartTime),
Server_EntityEndTime = take_any(Server_EntityEndTime),
Server_EntityDuration = take_any(Server_EntityDuration),
Server_EndReasonCode = take_any(Server_EndReasonCode),
Server_EndReasonSubCode = take_any(Server_EndReasonSubCode),
Server_EndReasonPhrase = take_any(Server_EndReasonPhrase),
Server_ResultCategory = take_any(Server_ResultCategory),
Server_Identifer = take_any(Server_Identifer),
Server_EndpointId = take_any(Server_EndpointId),
Server_EndpointType = take_any(Server_EndpointType),
Server_ParticipantType = take_any(Server_ParticipantType),
Server_SdkVersion = take_any(Server_SdkVersion),
Server_OsVersion = take_any(Server_OsVersion),
Client_Browser = take_any(Client_Browser),
Client_SDKType = take_any(Client_SdkType),
Server_PstnParticipantCallType = take_any(Server_PstnParticipantCallType),
Server_CallDroppedUngracefully = take_any(Server_CallDroppedUngracefully),
GroupName = take_any(GroupName) by EntityId
| extend CallDroppedUngracefully = coalesce(Client_CallDroppedUngracefully, Server_CallDroppedUngracefully)
| extend
// We prioritize the client side information over server side information.
EntityStartTime = coalesce(Client_EntityStartTime, Server_EntityStartTime),
EntityEndTime = coalesce(Client_EntityEndTime, Server_EntityEndTime),
EntityDuration = coalesce(Client_EntityDuration, Server_EntityDuration),
EntityPayload = bag_pack(
'EndReasonCode', coalesce(Client_EndReasonCode, Server_EndReasonCode),
// Server side log doesn't have EndReasonSubCode, so we use client side EndReasonSubCode if it exists.
'EndReasonSubCode', coalesce(Client_EndReasonSubCode, Server_EndReasonSubCode),
'EndReasonPhrase', coalesce(Client_EndReasonPhrase, Server_EndReasonPhrase),
'ResultCategory', coalesce(Client_ResultCategory, Server_ResultCategory),
'ParticipantId', EntityId,
'CallDroppedUngracefully', CallDroppedUngracefully,
'Identifier', Server_Identifer,
'EndpointId', Server_EndpointId,
// From service log ACSCallSummary it has actual ParticipantType, SdkVersion and OsVersion columns.
// So we prioritize to use them to be consistent with the participants that can only be found in service log.
'ParticipantType', coalesce(Server_ParticipantType, Client_ParticipantType),
'EndpointType', Server_EndpointType,
'SdkVersion', coalesce(Server_SdkVersion, Client_SdkVersion),
'OsVersion', coalesce(Server_OsVersion, Client_OsVersion),
'Browser', Client_Browser,
'SDKType', Client_SDKType,
'PstnParticipantCallType', Server_PstnParticipantCallType
),
// A participant is considered to have issues if it's dropped ungracefully or having client operations failures.
Insights_HasIssues = Client_Insights_HasIssues or CallDroppedUngracefully,
Insights_Payload = bag_pack(
'EndReasonCode', coalesce(Client_EndReasonCode, Server_EndReasonCode),
// Server side log doesn't have EndReasonSubCode, so we use client side EndReasonSubCode if it exists.
'EndReasonSubCode', coalesce(Client_EndReasonSubCode, Server_EndReasonSubCode),
'EndReasonPhrase', coalesce(Client_EndReasonPhrase, Server_EndReasonPhrase),
'ResultCategory', coalesce(Client_ResultCategory, Server_ResultCategory),
'ParticipantId', EntityId,
'CallDroppedUngracefully', CallDroppedUngracefully
)
| project
ParentEntityId,
ParentEntityType,
EntityId,
EntityType,
EntityDisplayName,
EntityStartTime,
EntityEndTime,
EntityDuration,
EntityPayload,
Insights_HasIssues,
Insights_Payload,
GroupName
Buscar todas las operaciones de cliente en una llamada
Busque todas las operaciones de cliente para todos los participantes en una llamada por callId. Esta consulta también se usa en Diagnósticos de llamadas para buscar operaciones de cliente.
// Replace queryConditions_callId with the callId you want to investigate.
// Note this query is used in Call Diagnostics to get all the operations in the call.
declare query_parameters(queryConditions_callId: string = 'replace-with-your-callId');
let rangeEventsWithCorrelation = dynamic(['UserFacingDiagnostics']);
let pointEvents = dynamic([
'SelectedMicrophoneChanged', 'SelectedSpeakerChanged', 'OptimalVideoCount-changed', 'State-changed', 'CallMode-changed',
'IsMuted-changed', 'IsIncomingAudioMuted-changed', 'Id-changed', 'Role-changed', 'SelectedDevice-changed', 'PageHidden',
'OptimalVideoCountChanged', 'StateChanged', 'IsMutedChanged', 'IsIncomingAudioMutedChanged', 'SelectedDeviceChanged']);
let participants = materialize(ACSCallSummary
| where CorrelationId == queryConditions_callId
| where ParticipantId != CorrelationId and isnotempty(ParticipantId)
| extend CallEndTime = CallStartTime + 1s * CallDuration
| distinct ParticipantId, CallStartTime, CallEndTime);
let OperationsTimestampLowerBound = max_of(toscalar(participants | project CallStartTime | take 1) - 2h, ago(365d));
let OperationsTimestampUpperBound = min_of(toscalar(participants | project CallEndTime | take 1) + 2h, now() + 365d);
// We need clientIds to get all operations before call is established.
let callClientIds = materialize(ACSCallClientOperations
| where OperationName !in ('CallModeChanged', 'IdChanged', 'RoleChanged')
| where ParticipantId in ((participants | project ParticipantId)) or CallId == queryConditions_callId
| where CallClientTimeStamp between (OperationsTimestampLowerBound..OperationsTimestampUpperBound)
| distinct ClientInstanceId, ParticipantId);
//
let allOperations =
materialize(ACSCallClientOperations
| where OperationName !in ('CallModeChanged', 'IdChanged', 'RoleChanged')
| where CallClientTimeStamp between (OperationsTimestampLowerBound..OperationsTimestampUpperBound)
| where ParticipantId in ((participants | project ParticipantId)) or CallId == queryConditions_callId or (isempty(CallId) and isempty(ParticipantId) and ClientInstanceId in ((callClientIds | distinct ClientInstanceId)))
| where isnotempty(OperationName) and OperationName != 'CallClientOperations'
and isnotempty(OperationId) and isnotempty(CallClientTimeStamp)
| join kind=leftouter hint.strategy=shuffle callClientIds on ClientInstanceId
| extend ParticipantId = coalesce(ParticipantId, ParticipantId1)
| project-away ParticipantId1, ClientInstanceId1
| summarize hint.strategy = shuffle arg_max(TimeGenerated, *) by OperationId, OperationName, CallClientTimeStamp);
//
let correlatedOperations = materialize(allOperations
| where OperationName in (rangeEventsWithCorrelation)
| extend OperationPayload = todynamic(OperationPayload)
| extend
UFDQuality = tostring(OperationPayload.DiagnosticQuality),
UFDType = tostring(OperationPayload.DiagnosticChanged)
| extend UFDType = strcat(toupper(substring(UFDType, 0, 1)), substring(UFDType, 1))
| extend OperationPayloadNew = bag_pack(tostring(CallClientTimeStamp), OperationPayload)
| project-away ResultType
// Make sure the UFD payload are aggregated in time-asc order.
| order by CallClientTimeStamp asc
| summarize hint.strategy = shuffle
arg_max(TimeGenerated, *), ResultType = iff(countif(UFDQuality != 'Good') > 0, 'Failed', 'Succeeded'),
OperationStartTime = min(CallClientTimeStamp), OperationEndTime = max(CallClientTimeStamp),
OperationPayloadPacked = make_bag(OperationPayloadNew)
by OperationId, UFDType
| extend
ResultType = iff(UFDType has_any ("SpeakingWhileMicrophoneIsMuted", "SpeakerMuted"), 'Succeeded', ResultType),
OperationEndTime = max_of(OperationEndTime, OperationStartTime + 10ms)
| extend OperationPayload = todynamic(OperationPayload)
| extend UFDType = coalesce(tostring(OperationPayload.DiagnosticChanged), tostring(OperationPayload.diagnosticChanged))
// Capitalize the first letter.
| extend UFDType = strcat(toupper(substring(UFDType, 0, 1)), substring(UFDType, 1))
| extend parent_entity_type = case(OperationName has_any ('StateChanged', 'AcceptIncomingCall', 'AskDevicePermission', 'CallAgentInit', 'EnterCall',
'Hangup', 'Hold', 'Join', 'PageHidden', 'RejectIncomingCall', 'SelectedDeviceChanged',
'StartCall'),
'Call',
OperationName has_any (
'IsMuted-changed',
'IsIncomingAudioMuted-changed',
'IsIncomingAudioMutedChanged',
'IsMutedChanged',
'MuteMicrophone',
'UnmuteMicrophone',
'StartAudio',
'StopAudio',
'SelectedMicrophoneChanged',
'SelectedSpeakerChanged'
),
'Audio',
OperationName has_any ('StartScreenShare', 'StopScreenShare'),
'ScreenSharing',
OperationName has_any ('OptimalVideoCount-changed', 'OptimalVideoCountChanged'),
'Video',
OperationName has_any ('SwitchSource'),
case(
tostring(OperationPayload.StreamType) == 'Video',
'Video',
'Audio'
),
OperationName has_any ('CreateView', 'DisposeView', 'StartVideo', 'StopVideo'),
case(
tostring(OperationPayload.StreamType) == 'Video',
'Video',
'Audio'
),
OperationName has_any ('CreateView', 'DisposeView', 'StartVideo', 'StopVideo'),
case(
tostring(OperationPayload.StreamType) == 'Video',
'Video',
tostring(OperationPayload.StreamType) == 'ScreenSharing',
'ScreenSharing',
'Video'
),
OperationName == 'UserFacingDiagnostics',
case(
UFDType contains 'Speak' or UFDType contains 'microphone',
'Audio',
UFDType contains 'camera' or UFDType contains 'capture',
'Video',
UFDType contains 'screenshare',
'ScreenSharing',
UFDType contains 'network',
'Network',
'Call'
),
'Call')
| project
ParentEntityId = strcat(ParticipantId, '-', parent_entity_type),
ParentEntityType = parent_entity_type,
OperationRoundtripId = OperationId,
OperationId = OperationId,
OperationName = OperationName,
OperationType = UFDType,
OperationStartTime,
OperationEndTime,
OperationDuration = DurationMs,
OperationDisplayName = UFDType,
OperationResultCode = toint(iff(ResultType !in ('Succeeded', 'Success', 'ExpectedError'), 500, 200)),
OperationResult = ResultType,
OperationPayload = OperationPayloadPacked,
Insights_HasIssues = ResultType !in ('Succeeded', 'Success', 'ExpectedError'),
ParticipantId,
UserAgent
| extend
Insights_Payload = bag_pack('ResultType', OperationResult, 'ResultSignature', OperationResultCode, 'userAgent', UserAgent, 'ParticipantId', ParticipantId),
ShowLabel = true
| project-away UserAgent);
//
let nonCorrelatedOperations = materialize(allOperations
| where OperationName !in (rangeEventsWithCorrelation)
| extend OperationId = coalesce(hash_sha256(strcat(OperationId, tostring(CallClientTimeStamp), OperationName)), tostring(new_guid()))
| summarize hint.strategy = shuffle arg_max(TimeGenerated, *) by OperationId
| extend OperationPayload = todynamic(OperationPayload)
| extend UFDType = coalesce(tostring(OperationPayload.DiagnosticChanged), tostring(OperationPayload.diagnosticChanged))
// Capitalize the first letter.
| extend UFDType = strcat(toupper(substring(UFDType, 0, 1)), substring(UFDType, 1))
| extend parent_entity_type = case(OperationName has_any ('StateChanged', 'AcceptIncomingCall', 'AskDevicePermission', 'CallAgentInit', 'EnterCall',
'Hangup', 'Hold', 'Join', 'PageHidden', 'RejectIncomingCall', 'SelectedDeviceChanged',
'StartCall'),
'Call',
OperationName has_any (
'IsMuted-changed',
'IsIncomingAudioMuted-changed',
'IsIncomingAudioMutedChanged',
'IsMutedChanged',
'MuteMicrophone',
'UnmuteMicrophone',
'StartAudio',
'StopAudio',
'SelectedMicrophoneChanged',
'SelectedSpeakerChanged'
),
'Audio',
OperationName has_any ('StartScreenShare', 'StopScreenShare'),
'ScreenSharing',
OperationName has_any ('OptimalVideoCount-changed', 'OptimalVideoCountChanged'),
'Video',
OperationName has_any ('SwitchSource'),
case(
tostring(OperationPayload.StreamType) == 'Video',
'Video',
'Audio'
),
OperationName has_any ('CreateView', 'DisposeView', 'StartVideo', 'StopVideo'),
case(
tostring(OperationPayload.StreamType) == 'Video',
'Video',
'Audio'
),
OperationName has_any ('CreateView', 'DisposeView', 'StartVideo', 'StopVideo'),
case(
tostring(OperationPayload.StreamType) == 'Video',
'Video',
tostring(OperationPayload.StreamType) == 'ScreenSharing',
'ScreenSharing',
'Video'
),
OperationName == 'UserFacingDiagnostics',
case(
UFDType contains 'Speak' or UFDType contains 'microphone',
'Audio',
UFDType contains 'camera' or UFDType contains 'capture',
'Video',
UFDType contains 'screenshare',
'ScreenSharing',
UFDType contains 'network',
'Network',
'Call'
),
'Call')
| project
ParentEntityId = strcat(ParticipantId, '-', parent_entity_type),
ParentEntityType = parent_entity_type,
OperationRoundtripId = OperationId,
OperationId = OperationId,
OperationName,
OperationType=OperationName,
OperationEndTime=CallClientTimeStamp,
OperationStartTime=iff(OperationName in (pointEvents), CallClientTimeStamp, CallClientTimeStamp - max_of(DurationMs, 10) * 1ms),
OperationDuration=DurationMs,
OperationDisplayName = OperationName,
OperationResultCode = ResultSignature,
OperationResult = ResultType,
OperationPayload,
Insights_HasIssues = ResultType !in ('Succeeded', 'Success', 'ExpectedError'),
Insights_Payload = bag_pack('ResultType', ResultType, 'ResultSignature', ResultSignature, 'userAgent', UserAgent, 'ParticipantId', ParticipantId),
ParticipantId,
ShowLabel = true);
let poorOperations = materialize((union nonCorrelatedOperations, correlatedOperations)
| where Insights_HasIssues
| extend
ParentEntityId = ParticipantId,
ParentEntityType = 'Participant',
OperationId = strcat('Participant-Issues-', OperationId),
GroupName = "lifeCycle",
ShowLabel = false);
union poorOperations, nonCorrelatedOperations, correlatedOperations
| project
ParentEntityId,
ParentEntityType,
OperationId,
OperationRoundtripId = OperationId,
OperationName,
OperationDisplayName,
OperationResultCode,
OperationResult,
OperationType,
OperationStartTime,
OperationEndTime,
OperationPayload,
Insights_HasIssues,
Insights_Payload,
GroupName,
ShowLabel