Registos de Chamadas de Voz e Chamadas de Vídeo dos Serviços de Comunicação do Azure

Os Serviços de Comunicação do Azure oferecem recursos de registro em log que você pode usar para monitorar e depurar sua solução de Serviços de Comunicação. Você configura esses recursos por meio do portal do Azure.

O conteúdo deste artigo refere-se a logs habilitados por meio do Azure Monitor (consulte também Perguntas frequentes). Para habilitar esses logs para os Serviços de Comunicação, consulte Habilitar o registro em log nas configurações de diagnóstico.

Conceitos de dados

As seguintes descrições de alto nível de conceitos de dados são específicas para chamadas de voz e chamadas de vídeo. Esses conceitos são importantes de serem revisados para que você possa entender o significado dos dados capturados nos logs.

Entidades e IDs

Familiarize-se com os seguintes termos:

  • Chamada: Conforme representado nos dados, uma chamada é uma abstração representada por correlationId. Os valores para são exclusivos para correlationId cada chamada e têm limite de tempo por callStartTime e callDuration.

  • Participante: Esta entidade representa a conexão entre um ponto de extremidade e o servidor. Um participante (participantId) está presente apenas quando a chamada é uma chamada de grupo.

  • Ponto de extremidade: Esta é a entidade mais exclusiva, representada por endpointId. Cada chamada é um evento que contém dados de dois ou mais pontos de extremidade. Os endpoints representam os participantes na chamada.

    EndpointType informa se o ponto de extremidade é um usuário humano (PSTN ou VoIP), um bot ou o servidor que está gerenciando vários participantes em uma chamada. Quando um endpointType valor é "Server", o ponto de extremidade não recebe uma ID exclusiva. Você pode analisar endpointType e o número de endpointId valores para determinar quantos usuários e outros participantes não humanos (bots e servidores) ingressam em uma chamada.

    SDKs nativos para Android e iOS reutilizam o mesmo endpointId valor para um usuário em várias chamadas, para que você possa entender as experiências em todas as sessões. Esse processo difere dos pontos de extremidade baseados na Web, que sempre geram um novo endpointId valor para cada nova chamada.

  • Stream: Esta é a entidade mais granular. Há um fluxo para cada direção (entrada ou saída) e mediaType valor (por exemplo, Audio ou Video).

Definições de dados

Esquema de log de uso

Property Description
Timestamp O carimbo de data/hora (UTC) de quando o log foi gerado.
Operation Name A operação associada ao registro de log.
Operation Version O api-version valor associado à operação, se a operação foi executada Operation Name através de uma API. Se nenhuma API corresponder a esta operação, a versão representa a versão da operação, caso as propriedades associadas à operação mudem no futuro.
Category A categoria de log do evento. A categoria é a granularidade na qual você pode habilitar ou desabilitar logs em um recurso. As propriedades que aparecem dentro do properties blob de um evento são as mesmas dentro de uma categoria de log e tipo de recurso.
Correlation ID A ID para eventos correlacionados. Você pode usá-lo para identificar eventos correlacionados entre várias tabelas.
Properties Outros dados aplicáveis a vários modos de Serviços de Comunicação.
Record ID A ID exclusiva de um registro de uso.
Usage Type O modo de uso (por exemplo, Chat, PSTN ou NAT).
Unit Type O tipo de unidade em que o uso se baseia para um modo de uso (por exemplo, minutos, megabytes ou mensagens).
Quantity O número de unidades utilizadas ou consumidas para este registo.

Esquema de log de resumo de chamadas

O log de resumo de chamadas contém dados para ajudá-lo a identificar as principais propriedades de todas as chamadas. Um log de resumo de chamada diferente é criado para cada participantId valor (endpointId no caso de chamadas ponto a ponto [P2P]) na chamada.

Importante

As informações do participante no log de resumo de chamadas variam de acordo com o locatário participante. A versão do SDK e a versão do sistema operacional serão editadas se o participante não estiver dentro do mesmo locatário (também chamado de locatário cruzado) que o recurso dos Serviços de Comunicação. Os participantes entre locatários são classificados como usuários externos convidados por um locatário de recurso para participar e colaborar durante uma chamada.

Property Description
time O carimbo de data/hora (UTC) de quando o log foi gerado.
operationName A operação associada ao registro de log.
operationVersion O api-version valor associado à operação, se a operação foi executada operationName através de uma API. Se nenhuma API corresponder a esta operação, a versão representa a versão da operação, caso as propriedades associadas à operação mudem no futuro.
category A categoria de log do evento. Essa propriedade é a granularidade na qual você pode habilitar ou desabilitar logs em um recurso. As propriedades que aparecem dentro do properties blob de um evento são as mesmas dentro de uma categoria de log e tipo de recurso.
correlationId O ID exclusivo de uma chamada. Ele identifica eventos correlacionados de todos os participantes e pontos de extremidade que se conectam durante uma única chamada, e você pode usá-lo para unir dados de logs diferentes. Se você precisar abrir um caso de suporte com a Microsoft, poderá usar o correlationId valor para identificar facilmente a chamada que está solucionando.
identifier O ID exclusivo para o usuário. A identidade pode ser um usuário dos Serviços de Comunicação do Azure, uma ID de usuário do Microsoft Entra, uma ID de usuário anônima do Teams ou uma ID de bot do Teams. Você pode usar esse ID para correlacionar eventos do usuário em logs.
callStartTime Um carimbo de data/hora para o início da chamada, com base na primeira tentativa de conexão de qualquer ponto de extremidade.
callDuration A duração da chamada, expressa em segundos. Baseia-se na primeira tentativa de conexão e no final da última conexão entre dois pontos de extremidade.
callType O tipo de chamada. Contém ou "P2P""Group". Uma "P2P" chamada é uma conexão direta 1:1 entre apenas dois pontos de extremidade que não são do servidor. Uma "Group" chamada é uma chamada que tem mais de dois pontos de extremidade ou é criada como "Group" chamada antes da conexão.
teamsThreadId O ID do thread do Teams. Esse ID é relevante somente quando a chamada é organizada como uma reunião do Teams. Em seguida, representa o caso de uso da interoperabilidade entre o Microsoft Teams e os Serviços de Comunicação do Azure.

Esse ID é exposto em logs operacionais. Você também pode obter esse ID através das APIs de bate-papo.
participantId A ID gerada para representar a conexão bidirecional entre um "Participant" ponto de extremidade (endpointType = "Server") e o servidor. Quando callType = "P2P", há uma conexão direta entre dois pontos de extremidade e nenhum participantId valor é gerado.
participantStartTime O carimbo de data/hora para o início da primeira tentativa de conexão do participante.
participantDuration A duração de cada conexão de participante em segundos, desde o carimbo de participantStartTime data/hora quando a conexão terminou.
participantEndReason O motivo do fim de uma conexão de participante. Ele contém códigos de erro do SDK de chamada que o SDK emite (quando relevante) para cada participantId valor.
endpointId A ID exclusiva que representa cada ponto de extremidade conectado à chamada, onde endpointType define o tipo de ponto de extremidade. Quando o valor é , a entidade conectada é nullo servidor dos Serviços de Comunicação ( = endpointType"Server").

Às vezes, endpointId o valor pode persistir para o mesmo usuário em várias chamadas (correlationId) para clientes nativos. O número de valores determina o número de logs de resumo de endpointId chamadas. Um log de resumo distinto é criado para cada endpointId valor.
endpointType Esse valor descreve as propriedades de cada ponto de extremidade conectado à chamada. Pode conter "Server", , , , "BOT""VOIP""PSTN"ou "Unknown".
sdkVersion A cadeia de caracteres de versão para a versão do SDK de Chamada dos Serviços de Comunicação que cada ponto de extremidade relevante usa (por exemplo, "1.1.00.20212500").
osVersion Uma cadeia de caracteres que representa o sistema operacional e a versão de cada dispositivo de ponto de extremidade.
participantTenantId A ID do locatário da Microsoft associada à identidade do participante. O locatário pode ser o locatário do Azure que possui o recurso dos Serviços de Comunicação do Azure ou o locatário da Microsoft de uma identidade M365. Este campo é usado para orientar a redação entre locatários.
participantType Descrição do participante como uma combinação de seu cliente (Serviços de Comunicação do Azure ou Teams) e sua identidade (Serviços de Comunicação do Azure ou Microsoft 365). Os valores possíveis incluem: Serviços de Comunicação do Azure (identidade dos Serviços de Comunicação do Azure e SDK dos Serviços de Comunicação do Azure), Teams (identidade do Teams e cliente do Teams), Serviços de Comunicação do Azure como usuário externo do Teams (identidade dos Serviços de Comunicação do Azure e SDK dos Serviços de Comunicação do Azure em chamada ou reunião do Teams), Serviços de Comunicação do Azure como usuário do Microsoft 365 (identidade M365 e cliente dos Serviços de Comunicação do Azure), e Teams Voice Apps.
pstnPartcipantCallType Ele representa o tipo e a direção dos participantes PSTN, incluindo chamadas de emergência, roteamento direto, transferência, encaminhamento, etc.

Esquema de log de diagnóstico de chamadas

Os logs de diagnóstico de chamadas fornecem informações importantes sobre os pontos de extremidade e as transferências de mídia para cada participante. Eles também fornecem medições que ajudam a entender os problemas de qualidade.

Para cada ponto de extremidade dentro de uma chamada, um log de diagnóstico de chamada distinto é criado para fluxos de mídia de saída (áudio ou vídeo, por exemplo) entre pontos de extremidade. Em uma chamada P2P, cada log contém dados relacionados a cada um dos fluxos de saída associados a cada ponto de extremidade. Em chamadas de grupo, participantId serve como um identificador de chave para unir os logs de saída relacionados em uma conexão de participante distinta. Os logs de diagnóstico de chamadas permanecem intactos e são os mesmos, independentemente do locatário participante.

Nota

Neste artigo, as chamadas P2P e de grupo estão dentro do mesmo locatário, por padrão, para todos os cenários de chamada que são cross-tenant. Eles são especificados de acordo ao longo do artigo.

Property Description
operationName A operação associada ao registro de log.
operationVersion O api-version valor associado à operação, se a operação foi executada operationName através de uma API. Se nenhuma API corresponder a esta operação, a versão representa a versão da operação, caso as propriedades associadas à operação mudem no futuro.
category A categoria de log do evento. Essa propriedade é a granularidade na qual você pode habilitar ou desabilitar logs em um recurso. As propriedades que aparecem dentro do properties blob de um evento são as mesmas dentro de uma categoria de log e tipo de recurso.
correlationId O ID exclusivo de uma chamada. Ele identifica eventos correlacionados de todos os participantes e pontos de extremidade que se conectam durante uma única chamada. Se você precisar abrir um caso de suporte com a Microsoft, poderá usar o correlationId valor para identificar facilmente a chamada que está solucionando.
participantId A ID gerada para representar a conexão bidirecional entre um "Participant" ponto de extremidade (endpointType = "Server") e o servidor. Quando callType = "P2P", há uma conexão direta entre dois pontos de extremidade e nenhum participantId valor é gerado.
identifier O ID exclusivo para o usuário. A identidade pode ser um usuário dos Serviços de Comunicação do Azure, uma ID de usuário do Microsoft Entra, uma ID de objeto do Teams ou uma ID de bot do Teams. Você pode usar esse ID para correlacionar eventos do usuário em logs.
endpointId O ID exclusivo que representa cada ponto de extremidade conectado à chamada, onde endpointType define o tipo de ponto de extremidade. Quando o valor é , a entidade conectada é nullo servidor dos Serviços de Comunicação. EndpointId pode persistir para o mesmo usuário em várias chamadas (correlationId) para clientes nativos, mas é exclusivo para cada chamada quando o cliente é um navegador da Web.
endpointType O valor que descreve as propriedades de cada endpointId instância. Pode conter "Server", , , , , "Voicemail""Anonymous", "BOT""VOIP""PSTN"ou ."Unknown"
mediaType O valor da cadeia de caracteres que descreve o tipo de mídia que está sendo transmitida entre pontos de extremidade dentro de cada fluxo. Os valores possíveis incluem "Audio", , "VBSS""Video"(compartilhamento de tela baseado em vídeo) e "AppSharing".
streamId Um inteiro não exclusivo que, juntamente com mediaTypeo , você pode usar para identificar exclusivamente fluxos do mesmo participantId valor.
transportType O valor da cadeia de caracteres que descreve o protocolo de transporte de rede para cada participantId valor. Pode conter "UDP", , "TCP"ou "Unrecognized". "Unrecognized" indica que o sistema não pôde determinar se o tipo de transporte era TCP ou UDP.
roundTripTimeAvg O tempo médio que leva para obter um pacote IP de um ponto de extremidade para outro dentro de um participantDuration período. Este atraso de propagação da rede está relacionado com a distância física entre os dois pontos, a velocidade da luz e qualquer sobrecarga que os vários routers tenham entre eles.

A latência é medida como tempo unidirecional ou tempo de ida e volta (RTT). O seu valor expresso em milissegundos. Um RTT superior a 500 ms está a afetar negativamente a qualidade da chamada.
roundTripTimeMax O RTT máximo (em milissegundos) medido para alcançar o fluxo de mídia durante um período em uma chamada em grupo ou durante um participantDurationcallDuration período em uma chamada P2P.
jitterAvg A variação média no atraso entre pacotes sucessivos. Os Serviços de Comunicação do Azure podem se adaptar a alguns níveis de desvio por meio de buffer. Quando o jitter excede o buffering, que é aproximadamente em um momento maior que 30 ms, é provável que ocorra um jitterAvg impacto negativo na qualidade. Os pacotes que chegam a velocidades diferentes fazem com que a voz de um alto-falante soe robótica.

Essa métrica é medida para cada fluxo de mídia durante o período em uma chamada em grupo ou durante o participantDurationcallDuration período em uma chamada P2P.
jitterMax O valor máximo de jitter medido entre pacotes para cada fluxo de mídia. Rajadas nas condições de rede podem causar problemas no fluxo de tráfego de áudio/vídeo.
packetLossRateAvg A porcentagem média de pacotes perdidos. A perda de pacotes afeta diretamente a qualidade do áudio. Pequenos pacotes individuais perdidos quase não têm impacto, enquanto as perdas de burst back-to-back fazem com que o áudio seja cortado completamente. Os pacotes sendo descartados e não chegando ao destino pretendido causam lacunas na mídia. Esta situação resulta em sílabas e palavras perdidas, juntamente com vídeo instável e compartilhamento.

Uma taxa de perda de pacotes superior a 10% (0,1) está provavelmente a ter um impacto negativo na qualidade. Essa métrica é medida para cada fluxo de mídia durante o período em uma chamada em grupo ou durante o participantDurationcallDuration período em uma chamada P2P.
packetLossRateMax Esse valor representa a taxa máxima de perda de pacotes (porcentagem) para cada fluxo de mídia durante o período em uma chamada em grupo ou durante o participantDurationcallDuration período em uma chamada P2P. Rajadas nas condições de rede podem causar problemas no fluxo de tráfego de áudio/vídeo.
JitterBufferSizeAvg O tamanho médio do buffer de jitter ao longo da duração de cada fluxo de mídia. Um buffer de desvio é uma área de dados compartilhada onde os pacotes de voz podem ser coletados, armazenados e enviados para o processador de voz em intervalos uniformemente espaçados. O buffer de desvio é usado para combater os efeitos do desvio.

Os buffers de desvio podem ser estáticos ou dinâmicos. Os buffers de jitter estáticos são definidos para um tamanho fixo, enquanto os buffers de jitter dinâmicos podem ajustar seu tamanho com base nas condições da rede. O objetivo do buffer de jitter é fornecer um fluxo suave e ininterrupto de dados de áudio e vídeo para o usuário.

No SDK da Web, este 'JitterBufferSizeAvg' é o valor médio do 'jitterBufferDelay' durante a chamada, o 'jitterBufferDelay' é a duração de uma amostra de áudio ou um quadro de vídeo que permanece no buffer de jitter.

Normalmente, quando o valor 'JitterBufferSizeAvg' é maior que 200 ms, isso causará um impacto negativo na qualidade.
JitterBufferSizeMax O tamanho máximo do buffer de desvio medido durante a duração de cada fluxo de mídia.

Normalmente, quando este valor é superior a 200 ms, causará um impacto negativo na qualidade.
HealedDataRatioAvg A percentagem média de pacotes de dados perdidos ou danificados que são reconstruídos ou recuperados com sucesso pelo curandeiro ao longo da duração do fluxo de áudio. Razão de dados curados é uma medida da eficácia das técnicas de correção de erros usadas em sistemas VoIP.

Quando este valor é superior a 0,1 (10%), consideramos o fluxo como má qualidade.
HealedDataRatioMax A taxa máxima de dados recuperados medida durante a duração de cada fluxo de mídia.

Quando este valor é superior a 0,1 (10%), consideramos o fluxo como má qualidade.
VideoFrameRateAvg O número médio de quadros de vídeo que são transmitidos por segundo durante uma chamada de vídeo/compartilhamento de tela. A taxa de quadros de vídeo pode afetar a qualidade e suavidade do fluxo de vídeo, com taxas de quadros mais altas geralmente resultando em movimento mais suave e fluido. A taxa de quadros padrão para vídeo WebRTC é normalmente de 30 quadros por segundo (fps), embora isso possa variar dependendo da implementação específica e das condições de rede.

A qualidade do fluxo é considerada fraca quando este valor é inferior a 7 para fluxo de vídeo, ou inferior a 1 para fluxo de partilha de ecrã.
RecvResolutionHeight A média do tamanho vertical do fluxo de vídeo de entrada que é transmitido durante uma chamada de vídeo / compartilhamento de tela. É medido em pixels e é um dos fatores que determina a resolução geral e qualidade do fluxo de vídeo. A resolução específica utilizada pode depender das capacidades dos dispositivos e das condições de rede envolvidas na chamada.

A qualidade do fluxo é considerada fraca quando este valor é inferior a 240 para fluxo de vídeo, ou inferior a 768 para fluxo de partilha de ecrã.
RecvFreezeDurationPerMinuteInMs A duração média do congelamento em milissegundos por minuto para o fluxo de entrada de vídeo / compartilhamento de tela. Os congelamentos são normalmente devidos a más condições de rede e podem degradar a qualidade do fluxo.

A qualidade do fluxo é considerada ruim quando esse valor é maior que 6.000 ms para fluxo de vídeo, ou maior que 25.000 ms para fluxo de compartilhamento de tela.

Esquema do log de operações do cliente de chamada

Importante

A funcionalidade descrita neste artigo está atualmente em visualização pública. Esta versão de pré-visualização é fornecida sem um contrato de nível de serviço e não a recomendamos para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.

O registro de operações do cliente de chamada fornece informações do lado do cliente sobre os pontos de extremidade de chamada e os participantes envolvidos em uma chamada. Esses logs estão atualmente em visualização e mostram os eventos do cliente que ocorreram em uma chamada e quais ações um cliente pode ter tomado durante uma chamada.

Esse log fornece informações detalhadas sobre as ações tomadas durante uma chamada e pode ser usado para visualizar e investigar problemas de chamada usando o Diagnóstico de Chamada para seu Recurso de Serviços de Comunicação do Azure. Saiba mais sobre o Diagnóstico de Chamadas

Property Description
CallClientTimeStamp O carimbo de data/hora para quando em operação ocorreu no SDK em UTC.
OperationName O nome da operação acionada no SDK de chamada.
CallId O ID exclusivo de uma chamada. Ele identifica eventos correlacionados de todos os participantes e pontos de extremidade que se conectam durante uma única chamada, e você pode usá-lo para unir dados de logs diferentes. É semelhante ao correlationId no log de resumo de chamadas e no log de diagnóstico de chamadas.
ParticipantId O identificador exclusivo para cada trecho de chamada (em chamadas em grupo) ou participante de chamada (em chamadas ponto a ponto). Essa ID é o principal ponto de correlação entre os logs CallSummary, CallDiagnostic, CallClientOperations e CallClientMediaStats.
OperationType Chame a Operação do Cliente.
OperationId Um GGUID exclusivo que identifica uma operação SDK.
DurationMs O tempo necessário para uma operação do SDK de chamada falhar ou ter êxito.
ResultType Campo que descreve o sucesso ou fracasso de uma operação.
ResultSignature HTTP como código de falha ou sucesso (200, 500).
SdkVersion A versão do SDK de chamada que está sendo usada.
UserAgent A cadeia de caracteres padrão do agente do usuário baseada no navegador ou na plataforma Calling SDK é usada.
ClientInstanceId Um GGUID exclusivo que identifica o objeto CallClient.
EndpointId A ID exclusiva que representa cada ponto de extremidade conectado à chamada, onde endpointType define o tipo de ponto de extremidade. Quando o valor é null, a entidade conectada é o servidor dos Serviços de Comunicação (endpointType = "Server").

Às vezes, o valor endpointId pode persistir para o mesmo usuário em várias chamadas (correlationId) para clientes nativos. O número de valores endpointId determina o número de logs de resumo de chamadas. Um log de resumo distinto é criado para cada valor endpointId.
OperationPayload Uma carga útil dinâmica que varia de acordo com a operação, fornecendo mais detalhes específicos da operação.

P2P vs. chamadas em grupo

Existem dois tipos de chamadas, representadas por callType:

  • Chamada ponto a ponto (P2P): uma conexão entre apenas dois pontos de extremidade, sem nenhum ponto de extremidade do servidor. As chamadas P2P são iniciadas como uma chamada entre esses pontos de extremidade e não são criadas como um evento de chamada de grupo antes da conexão.

    Diagram that shows a P2P call across two endpoints.

  • Chamada em grupo: qualquer chamada que tenha mais de dois pontos de extremidade conectados. As chamadas de grupo incluem um ponto de extremidade do servidor e a conexão entre cada ponto de extremidade e o servidor. As chamadas P2P que adicionam outro ponto de extremidade durante a chamada deixam de ser P2P e se tornam uma chamada em grupo. Você pode determinar a linha do tempo de quando cada ponto de extremidade ingressou na chamada usando as participantStartTime métricas e participantDuration .

    Diagram that shows a group call across multiple endpoints.

Estrutura do log

Os Serviços de Comunicação do Azure criam quatro tipos de logs:

  • Logs de resumo de chamadas: contêm informações básicas sobre a chamada, incluindo todos os IDs relevantes, carimbos de data/hora, pontos de extremidade e informações do SDK. Para cada participante em uma chamada, os Serviços de Comunicação criam um log de resumo de chamada distinto.

    Se alguém voltar a participar numa chamada, esse participante tem o mesmo EndpointId valor, mas um valor diferente ParticipantId . Esse ponto de extremidade pode então ter dois logs de resumo de chamadas.

  • Logs de diagnóstico de chamadas: contêm informações sobre o fluxo, juntamente com um conjunto de métricas que indicam a qualidade das medições de experiência. Para cada uma dentro de uma chamada (incluindo o servidor), os Serviços de Comunicação do Azure criam um log de diagnóstico de chamada distinto para cada EndpointId fluxo de mídia (áudio ou vídeo, por exemplo) entre pontos de extremidade.

  • Logs de operações do cliente de chamada: contêm eventos detalhados do cliente de chamada. Esses eventos de log são gerados para cada EndpointId uma em uma chamada e o número de logs de eventos gerados dependerá das operações que o participante realizou durante a chamada.

Exemplo: chamada P2P

O diagrama a seguir representa dois pontos de extremidade conectados diretamente em uma chamada P2P. Neste exemplo, os Serviços de Comunicação criam dois logs de resumo de chamadas (um para cada valor) e quatro logs de diagnóstico de chamadas (um para cada participantID fluxo de mídia).

Diagram that shows a P2P call within the same tenant.

Exemplo: chamada em grupo

O diagrama a seguir representa um exemplo de chamada de grupo com três valores (o que significa três participantId participantes) e um ponto de extremidade do servidor. Vários valores para endpointId podem aparecer em vários participantes - por exemplo, quando eles reingressam em uma chamada do mesmo dispositivo. Os Serviços de Comunicação criam um log de resumo de chamadas para cada participantId valor. Ele cria quatro logs de diagnóstico de chamada: um para cada fluxo de mídia por participantId.

Para participantes do cliente de chamada dos Serviços de Comunicação do Azure (ACS), os logs de operações do cliente de chamada são os mesmos que as chamadas P2P. Para cada participante que usa o SDK de chamada, haverá uma série de logs de operações do cliente de chamada.

Diagram that shows a group call within the same tenant.

Exemplo: chamada P2P entre locatários

O diagrama a seguir representa dois participantes em vários locatários que estão conectados diretamente em uma chamada P2P. Neste exemplo, os Serviços de Comunicação criam um log de resumo de chamadas (um para cada participante) com versões editadas do sistema operacional e do SDK. Os Serviços de Comunicação também criam quatro logs de diagnóstico de chamadas (um para cada fluxo de mídia). Cada log contém dados relacionados ao fluxo de saída do participantID.

Diagram that shows a cross-tenant P2P call.

Exemplo: chamada de grupo entre locatários

O diagrama a seguir representa um exemplo de chamada de grupo com três participantId valores em vários locatários. Os Serviços de Comunicação criam um log de resumo de chamadas para cada participante com versões editadas do sistema operacional e do SDK. Os Serviços de Comunicação também criam quatro logs de diagnóstico de chamada relacionados a cada valor (um para cada participantId fluxo de mídia).

Diagram that shows a cross-tenant group call.

Nota

Esta versão suporta apenas logs de diagnóstico de saída. As versões do SO e do SDK associadas ao bot e ao participante podem ser editadas porque os Serviços de Comunicação tratam as identidades dos participantes e dos bots da mesma maneira.

Dados de exemplo

Chamada P2P

Aqui estão campos compartilhados para todos os logs em uma chamada P2P:

"time":                     "2021-07-19T18:46:50.188Z",
"resourceId":               "SUBSCRIPTIONS/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/RESOURCEGROUPS/ACS-TEST-RG/PROVIDERS/MICROSOFT.COMMUNICATION/COMMUNICATIONSERVICES/ACS-PROD-CCTS-TESTS",
"correlationId":            "8d1a8374-344d-4502-b54b-ba2d6daaf0ae",

Registos de resumo de chamadas

Os logs de resumo de chamadas têm informações compartilhadas de operação e categoria:

"operationName":            "CallSummary",
"operationVersion":         "1.0",
"category":                 "CallSummary",

Aqui está um resumo de chamada para o usuário VoIP 1:

"properties": {
    "identifier":               "acs:61fddbe3-0003-4066-97bc-6aaf143bbb84_0000000b-4fee-66cf-ac00-343a0d003158",
    "callStartTime":            "2021-07-19T17:54:05.113Z",
    "callDuration":             6,
    "callType":                 "P2P",
    "teamsThreadId":            "null",
    "participantId":            "null",    
    "participantStartTime":     "2021-07-19T17:54:06.758Z",
    "participantDuration":      "5",
    "participantEndReason":     "0",
    "endpointId":               "570ea078-74e9-4430-9c67-464ba1fa5859",
    "endpointType":             "VoIP",
    "sdkVersion":               "1.0.1.0",
    "osVersion":                "Windows 10.0.17763 Arch: x64"
}

Aqui está um resumo de chamada para o usuário VoIP 2:

"properties": {
    "identifier":               "acs:7af14122-9ac7-4b81-80a8-4bf3582b42d0_06f9276d-8efe-4bdd-8c22-ebc5434903f0",
    "callStartTime":            "2021-07-19T17:54:05.335Z",
    "callDuration":             6,
    "callType":                 "P2P",
    "teamsThreadId":            "null",
    "participantId":            "null",
    "participantStartTime":     "2021-07-19T17:54:06.335Z",
    "participantDuration":      "5",
    "participantEndReason":     "0",
    "endpointId":               "a5bd82f9-ac38-4f4a-a0fa-bb3467cdcc64",
    "endpointType":             "VoIP",
    "sdkVersion":               "1.1.0.0",
    "osVersion":                "null"
}

Aqui está um log de resumo de chamadas entre locatários para o usuário VoIP 1:

"properties": {
    "identifier":               "1e4c59e1-r1rr-49bc-893d-990dsds8f9f5",
    "callStartTime":            "2022-08-14T06:18:27.010Z",
    "callDuration":             520,
    "callType":                 "P2P",
    "teamsThreadId":            "null",
    "participantId":            "null",
    "participantTenantId":      "02cbdb3c-155a-4b95-b829-6d56a45787ca",
    "participantStartTime":     "2022-08-14T06:18:27.010Z",
    "participantDuration":      "520",
    "participantEndReason":     "0",
    "endpointId":               "02cbdb3c-155a-4d98-b829-aaaaa61d44ea",
    "endpointType":             "VoIP",
    "sdkVersion":               "Redacted",
    "osVersion":                "Redacted"
}

Aqui está um resumo de chamada para uma chamada PSTN:

Nota

Os registros de chamadas P2P ou de grupo têm versões do sistema operacional e do SDK editadas, independentemente de ser o locatário do participante ou o locatário do bot.

"properties": {
    "identifier": "b1999c3e-bbbb-4650-9b23-9999bdabab47",
    "callStartTime": "2022-08-07T13:53:12Z",
    "callDuration": 1470,
    "callType": "Group",
    "teamsThreadId": "19:36ec5177126fff000aaa521670c804a3@thread.v2",
    "participantId": " b25cf111-73df-4e0a-a888-640000abe34d",
    "participantStartTime": "2022-08-07T13:56:45Z",
    "participantDuration": 960,
    "participantEndReason": "0",
    "endpointId": "8731d003-6c1e-4808-8159-effff000aaa2",
    "endpointType": "PSTN",
    "sdkVersion": "Redacted",
    "osVersion": "Redacted"
}

Registros de diagnóstico de chamadas

Os logs de diagnóstico de chamadas compartilham informações de operação:

"operationName":            "CallDiagnostics",
"operationVersion":         "1.0",
"category":                 "CallDiagnostics",

Aqui está um log de diagnóstico para um fluxo de áudio do ponto de extremidade VoIP 1 para o ponto de extremidade VoIP 2:

"properties": {
    "identifier":           "acs:61fddbe3-0003-4066-97bc-6aaf143bbb84_0000000b-4fee-66cf-ac00-343a0d003158",
    "participantId":        "null",
    "endpointId":           "570ea078-74e9-4430-9c67-464ba1fa5859",
    "endpointType":         "VoIP",
    "mediaType":            "Audio",
    "streamId":             "1000",
    "transportType":        "UDP",
    "roundTripTimeAvg":     "82",
    "roundTripTimeMax":     "88",
    "jitterAvg":            "1",
    "jitterMax":            "1",
    "packetLossRateAvg":    "0",
    "packetLossRateMax":    "0"
}

Aqui está um log de diagnóstico para um fluxo de áudio do ponto de extremidade VoIP 2 para o ponto de extremidade VoIP 1:

"properties": {
    "identifier":           "acs:7af14122-9ac7-4b81-80a8-4bf3582b42d0_06f9276d-8efe-4bdd-8c22-ebc5434903f0",
    "participantId":        "null",
    "endpointId":           "a5bd82f9-ac38-4f4a-a0fa-bb3467cdcc64",
    "endpointType":         "VoIP",
    "mediaType":            "Audio",
    "streamId":             "1363841599",
    "transportType":        "UDP",
    "roundTripTimeAvg":     "78",
    "roundTripTimeMax":     "84",
    "jitterAvg":            "1",
    "jitterMax":            "1",
    "packetLossRateAvg":    "0",
    "packetLossRateMax":    "0"
}

Aqui está um log de diagnóstico para um fluxo de vídeo do ponto de extremidade VoIP 1 para o ponto de extremidade VoIP 2:

"properties": {
    "identifier":           "acs:61fddbe3-0003-4066-97bc-6aaf143bbb84_0000000b-4fee-66cf-ac00-343a0d003158",
    "participantId":        "null",
    "endpointId":           "570ea078-74e9-4430-9c67-464ba1fa5859",
    "endpointType":         "VoIP",
    "mediaType":            "Video",
    "streamId":             "2804",
    "transportType":        "UDP",
    "roundTripTimeAvg":     "103",
    "roundTripTimeMax":     "143",
    "jitterAvg":            "0",
    "jitterMax":            "4",
    "packetLossRateAvg":    "3.146336E-05",
    "packetLossRateMax":    "0.001769911"
}

Chamada em grupo

Os dados de uma chamada de grupo são gerados em três logs de resumo de chamadas e seis logs de diagnóstico de chamadas. Aqui estão campos compartilhados para todos os logs na chamada:

"time":                     "2021-07-05T06:30:06.402Z",
"resourceId":               "SUBSCRIPTIONS/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/RESOURCEGROUPS/ACS-TEST-RG/PROVIDERS/MICROSOFT.COMMUNICATION/COMMUNICATIONSERVICES/ACS-PROD-CCTS-TESTS",
"correlationId":            "341acde7-8aa5-445b-a3da-2ddadca47d22",

Registos de resumo de chamadas

Os logs de resumo de chamadas têm informações compartilhadas de operação e categoria:

"operationName":            "CallSummary",
"operationVersion":         "1.0",
"category":                 "CallSummary",

Aqui está um resumo de chamada para o ponto de extremidade VoIP 1:

"properties": {
    "identifier":               "acs:1797dbb3-f982-47b0-b98e-6a76084454f1_0000000b-1531-729f-ac00-343a0d00d975",
    "callStartTime":            "2021-07-05T06:16:40.240Z",
    "callDuration":             87,
    "callType":                 "Group",
    "teamsThreadId":            "19:meeting_MjZiOTAyN2YtZWU1Yi00ZTZiLT77777OOOOO99999jgxOTkw@thread.v2",
    "participantId":            "04cc26f5-a86d-481c-b9f9-7a40be4d6fba",
    "participantStartTime":     "2021-07-05T06:16:44.235Z",
    "participantDuration":      "82",
    "participantEndReason":     "0",
    "endpointId":               "5ebd55df-ffff-ffff-89e6-4f3f0453b1a6",
    "endpointType":             "VoIP",
    "sdkVersion":               "1.0.0.3",
    "osVersion":                "Darwin Kernel Version 18.7.0: Mon Nov 9 15:07:15 PST 2020; root:xnu-4903.272.3~3/RELEASE_ARM64_S5L8960X"
}

Aqui está um resumo de chamada para o ponto de extremidade VoIP 3:

"properties": {
    "identifier":               "acs:1797dbb3-f982-47b0-b98e-6a76084454f1_0000000b-1531-57c6-ac00-343a0d00d972",
    "callStartTime":            "2021-07-05T06:16:40.240Z",
    "callDuration":             87,
    "callType":                 "Group",
    "teamsThreadId":            "19:meeting_MjZiOTAyN2YtZWU1Yi00ZTZiLTk2ZDUtYTZlM2I2ZjgxOTkw@thread.v2",
    "participantId":            "1a9cb3d1-7898-4063-b3d2-26c1630ecf03",
    "participantStartTime":     "2021-07-05T06:16:40.240Z",
    "participantDuration":      "87",
    "participantEndReason":     "0",
    "endpointId":               "5ebd55df-ffff-ffff-ab89-19ff584890b7",
    "endpointType":             "VoIP",
    "sdkVersion":               "1.0.0.3",
    "osVersion":                "Android 11.0; Manufacturer: Google; Product: redfin; Model: Pixel 5; Hardware: redfin"
}

Aqui está um resumo de chamada para o ponto de extremidade 2 da PSTN:

"properties": {
    "identifier":               "null",
    "callStartTime":            "2021-07-05T06:16:40.240Z",
    "callDuration":             87,
    "callType":                 "Group",
    "teamsThreadId":            "19:meeting_MjZiOTAyN2YtZWU1Yi00ZTZiLT77777OOOOO99999jgxOTkw@thread.v2",
    "participantId":            "515650f7-8204-4079-ac9d-d8f4bf07b04c",
    "participantStartTime":     "2021-07-05T06:17:10.447Z",
    "participantDuration":      "52",
    "participantEndReason":     "0",
    "endpointId":               "46387150-692a-47be-8c9d-1237efe6c48b",
    "endpointType":             "PSTN",
    "sdkVersion":               "null",
    "osVersion":                "null"
}

Aqui está um log de resumo de chamadas entre locatários:

"properties": {
    "identifier":               "1e4c59e1-r1rr-49bc-893d-990dsds8f9f5",
    "callStartTime":            "2022-08-14T06:18:27.010Z",
    "callDuration":             912,
    "callType":                 "Group",
    "teamsThreadId":            "19:meeting_MjZiOTAyN2YtZWU1Yi00ZTZiLT77777OOOOO99999jgxOTkw@thread.v2",
    "participantId":            "aa1dd7da-5922-4bb1-a4fa-e350a111fd9c",
    "participantTenantId":      "02cbdb3c-155a-4b95-b829-6d56a45787ca",
    "participantStartTime":     "2022-08-14T06:18:27.010Z",
    "participantDuration":      "902",
    "participantEndReason":     "0",
    "endpointId":               "02cbdb3c-155a-4d98-b829-aaaaa61d44ea",
    "endpointType":             "VoIP",
    "sdkVersion":               "Redacted",
    "osVersion":                "Redacted"
}

Aqui está um log de resumo de chamadas entre locatários com um bot como participante:


"properties": {
    "identifier":             "b1902c3e-b9f7-4650-9b23-9999bdabab47",
    "callStartTime":          "2022-08-09T16:00:32Z",
    "callDuration":            1470,
    "callType":               "Group",
    "teamsThreadId":         "19:meeting_MmQwZDcwYTQtZ000HWE6NzI4LTg1YTAtNXXXXX99999ZZZZZ@thread.v2",
    "participantId":           "66e9d9a7-a434-4663-d91d-fb1ea73ff31e",
    "participantStartTime":    "2022-08-09T16:14:18Z",
    "participantDuration":      644,
    "participantEndReason":    "0",
    "endpointId":             "69680ec2-5ac0-4a3c-9574-eaaa77720b82",
    "endpointType":           "Bot",
    "sdkVersion":             "Redacted",
    "osVersion":              "Redacted"
}

Registros de diagnóstico de chamadas

Os logs de diagnóstico de chamadas compartilham informações de operação:

"operationName":            "CallDiagnostics",
"operationVersion":         "1.0",
"category":                 "CallDiagnostics",

Aqui está um log de diagnóstico para um fluxo de áudio do ponto de extremidade VoIP 1 para um ponto de extremidade do servidor:

"properties": {
    "identifier":           "acs:1797dbb3-f982-47b0-b98e-6a76084454f1_0000000b-1531-729f-ac00-343a0d00d975",
    "participantId":        "04cc26f5-a86d-481c-b9f9-7a40be4d6fba",
    "endpointId":           "5ebd55df-ffff-ffff-89e6-4f3f0453b1a6",
    "endpointType":         "VoIP",
    "mediaType":            "Audio",
    "streamId":             "14884",
    "transportType":        "UDP",
    "roundTripTimeAvg":     "46",
    "roundTripTimeMax":     "48",
    "jitterAvg":            "0",
    "jitterMax":            "1",
    "packetLossRateAvg":    "0",
    "packetLossRateMax":    "0"
}

Aqui está um log de diagnóstico para um fluxo de áudio de um ponto de extremidade do servidor para o ponto de extremidade VoIP 1:

"properties": {
    "identifier":           null,
    "participantId":        "04cc26f5-a86d-481c-b9f9-7a40be4d6fba",
    "endpointId":           null,
    "endpointType":         "Server",
    "mediaType":            "Audio",
    "streamId":             "2001",
    "transportType":        "UDP",
    "roundTripTimeAvg":     "42",
    "roundTripTimeMax":     "44",
    "jitterAvg":            "1",
    "jitterMax":            "1",
    "packetLossRateAvg":    "0",
    "packetLossRateMax":    "0"
}

Aqui está um log de diagnóstico para um fluxo de áudio do ponto de extremidade VoIP 3 para um ponto de extremidade do servidor:

"properties": {
    "identifier":           "acs:1797dbb3-f982-47b0-b98e-6a76084454f1_0000000b-1531-57c6-ac00-343a0d00d972",
    "participantId":        "1a9cb3d1-7898-4063-b3d2-26c1630ecf03",
    "endpointId":           "5ebd55df-ffff-ffff-ab89-19ff584890b7",
    "endpointType":         "VoIP",
    "mediaType":            "Audio",
    "streamId":             "13783",
    "transportType":        "UDP",
    "roundTripTimeAvg":     "45",
    "roundTripTimeMax":     "46",
    "jitterAvg":            "1",
    "jitterMax":            "2",
    "packetLossRateAvg":    "0",
    "packetLossRateMax":    "0"
}

Aqui está um log de diagnóstico para um fluxo de áudio de um ponto de extremidade do servidor para o ponto de extremidade VoIP 3:

"properties": {
    "identifier":           "null",
    "participantId":        "1a9cb3d1-7898-4063-b3d2-26c1630ecf03",
    "endpointId":           null,
    "endpointType":         "Server"    
    "mediaType":            "Audio",
    "streamId":             "1000",
    "transportType":        "UDP",
    "roundTripTimeAvg":     "45",
    "roundTripTimeMax":     "46",
    "jitterAvg":            "1",
    "jitterMax":            "4",
    "packetLossRateAvg":    "0",

Registros de operações do cliente de chamadas para chamadas P2P e em grupo

Para o log de operações do cliente de chamada, não há diferença entre cenários P2P e de chamada em grupo e o número de logs depende das operações do SDK e da duração da chamada. A seguir fornecem alguns exemplos genéricos que mostram o esquema desses logs.

Registro de operações do cliente de chamadas

Aqui está um log de operações do cliente de chamada para a operação "CreateView":

"properties": {
    "TenantId":               "4e7403f8-515a-4df5-8e13-59f0e2b76e3a",
    "TimeGenerated":          "2024-01-09T17:06:50.3Z",
    "CallClientTimeStamp":    "2024-01-09T15:07:56.066Z",
    "OperationName":          "CreateView" ,   
    "CallId":                 "92d800c4-abde-40be-91e9-3814ee786b19",
    "ParticipantId":          "2656fd6c-6d4a-451d-a1a5-ce1baefc4d5c",
    "OperationType":          "client-api-request",
    "OperationId":            "0d987336-37e0-4acc-aba3-e48741d88103",
    "DurationMs":             "577",
    "ResultType":             "Succeeded",
    "ResultSignature":        "200",
    "SdkVersion":             "1.19.2.2_beta",
    "UserAgent":              "azure-communication-services/1.3.1-beta.1 azsdk-js-communication-calling/1.19.2-beta.2 (javascript_calling_sdk;#clientTag:904f667c-5f25-4729-9ee8-6968b0eaa40b). Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "ClientInstanceId":       "d08a3d05-db90-415f-88a7-87ae74edc1dd",
    "OperationPayload":       "{"StreamType":"Video","StreamId":"2.0","Source":"remote","RemoteParticipantId":"remote"}",
    "Type":                   "ACSCallClientOperations"
}

Cada participante pode ter muitas métricas diferentes para uma chamada. A consulta a seguir pode ser executada no Log Analytics no portal do Azure para listar todas as operações possíveis no log de operações do cliente de chamada:

ACSCallClientOperations | distinct OperationName

Códigos de erro

A participantEndReason propriedade contém um valor do conjunto de códigos de erro Calling SDK. Você pode consultar esses códigos para solucionar problemas durante a chamada, para cada ponto de extremidade. Consulte Solução de problemas nos Serviços de Comunicação do Azure.

Próximos passos