Partilhar via


A chamada termina com 410/3112

A razão pela qual a chamada termina com erro 410/3112 é que o cliente não é capaz de entrar em contato com o outro ponto de extremidade e nenhum candidato de retransmissão é coletado. Esse código de erro 410/3112 pode acontecer quando o caminho de mídia não pode ser estabelecido devido a problemas de rede, restrições de firewall ou definições de configuração incorretas. Portanto, os pares não conseguiram estabelecer uma conexão direta ou de retransmissão.

Os candidatos a revezamento não são necessários se o cliente for capaz de estabelecer uma conexão direta com o outro par. No entanto, quando o WebRTC não consegue reunir candidatos de retransmissão, geralmente indica um problema com a configuração do servidor TURN (Traversal Using Relays around NAT) ou restrições de rede. Os candidatos a retransmissão são cruciais para estabelecer conexões em ambientes de rede restritivos.

Como detetar usando o SDK

Você pode saber o motivo do término da chamada usando o trecho de código a seguir.

call.on('stateChanged', () => {
    if (call.state === 'Disconnected') {
      if (call.callEndReason.code === 410 && call.callEndReason.subCode === 3112) {
          // show error message
      }
    }
});

Para entender os códigos e subcódigos, consulte Noções básicas sobre códigos de chamada e erros de subcódigos.

Quando o caminho de mídia não pode ser estabelecido, a chamada termina com o código 410 e o subcódigo 3112. O SDK também aciona o evento UFD networkRelaysNotReachable. Aqui está um trecho de código mostrando como capturar o networkRelaysNotReachable UFD evento.

call.feature(Features.UserFacingDiagnostics).network.on('diagnosticChanged', (diagnosticInfo) => {
    if (diagnosticInfo.diagnostic === 'networkRelaysNotReachable') {
       if (diagnosticInfo.value === true) {
           // show a warning message on UI
       } else {
           // The networkRelaysNotReachable UFD recovered, notify the user
       }
    }
});

Como analisar o problema com a ferramenta Log Analytics ou Call Diagnostics

Quando um usuário relata que não consegue fazer uma chamada, você pode usar a ferramenta Diagnóstico de Chamada para analisar o motivo da falha. Para depurar chamadas de usuário, você precisa do ID da chamada. Se a chamada do usuário falhou porque o firewall bloqueou a conexão de retransmissão, você pode encontrar o código final e o subcódigo como 410 e 3112 na página de visão geral da chamada.

Captura de tela do diagnóstico de chamada que tem o subcódigo 3112 na página de visão geral da chamada.

Além disso, você também pode encontrar o evento networkRelaysNotReachable UFD na página de problemas de chamada.

Captura de tela do diagnóstico de chamada que tem networkRelaysNotReachable UFD na página de problemas de chamada.

Para entender o momento das ações ou eventos do usuário, você pode verificar os detalhes na página da linha do tempo. Neste exemplo, o usuário obteve networkRelaysNotReachable UFD o evento em 16:41:47 e o evento de alteração de estado de chamada em 16:41:49.

Captura de tela do diagnóstico de chamada que mostra o tempo dos eventos da página da linha do tempo da chamada.

A ferramenta Call Diagnostics fornece uma visão geral e as informações necessárias para depurar uma única chamada. Se quiser entender quantos usuários encontram esse problema ou com que frequência os usuários o enfrentam, você pode usar a ferramenta Log Analytics para obter informações sobre esse problema.

Por exemplo, se você quiser obter o ID de chamada que foi desconectado com o subcódigo 3112 nos últimos sete dias, você pode executar esta consulta:

ACSCallSummary
| where ParticipantEndSubCode == 3112
| project TimeGenerated, CorrelationId, ParticipantId, Identifier, CallType

Captura de ecrã do resultado da consulta de registo para chamadas com o subcódigo 3112.

Você também pode renderizar um gráfico de tempo para entender o número diário de chamadas que terminam com o subcódigo 3112

ACSCallSummary
| where ParticipantEndSubCode == 3112
| summarize count() by bin(TimeGenerated, 1d)
| render timechart

Captura de ecrã de um gráfico de tempo que apresenta o número diário de chamadas terminadas com o subcódigo 3112.

O gráfico de tempo fornece apenas uma visão geral dos usuários sob o mesmo ID de recurso do ACS. Ao executar consultas mais específicas, você pode identificar padrões ou anomalias que não são imediatamente aparentes apenas no gráfico de tempo, ajudando a identificar a causa raiz de quaisquer problemas com mais precisão.

Por exemplo, se você vir um pico no número de chamadas terminadas com o subcódigo 3112, isso pode ser devido ao alto volume de chamadas, enquanto a taxa de ocorrência do problema permaneceu a mesma. Como alternativa, o pico pode ser atribuído a um usuário específico que tentou novamente muitas vezes e todas as tentativas falharam com o subcódigo 3112.

Nesta consulta, analisamos os dados com base nos identificadores de utilizador, assumindo que a aplicação mantém o mesmo identificador de utilizador para cada indivíduo.

ACSCallSummary
| summarize Total = count(), SuccessCount = countif(ParticipantEndSubCode == 0), SubCode3112Count = countif(ParticipantEndSubCode == 3112) by Identifier
| where SubCode3112Count > 0
| order by SubCode3112Count desc

Captura de ecrã dos resultados da consulta de registo que mostra o número de chamadas que terminam com o subcódigo 3112 para cada identificador de utilizador.

Neste exemplo, um usuário teve um total de 180 chamadas, das quais 160 foram bem-sucedidas e apenas duas chamadas falharam com o subcódigo 3112. Esse padrão sugere um problema de rede transitório, que pode ser resolvido tentando novamente. Por outro lado, outro usuário teve um total de seis chamadas, todas com falha com o subcódigo 3112. Essa consistência no valor do subcódigo indica um provável problema de configuração de rede para esse usuário, onde é improvável que uma nova tentativa ajude.

Como mitigar ou resolver

Se você encontrar um usuário consistentemente experimenta erro 410/3112, você deve recomendar que ele verifique suas configurações de firewall. Os usuários devem seguir a diretriz de configuração do firewall mencionada no documento de recomendações de rede. Certifique-se de que o usuário ou administrador verifique suas configurações de NAT (Network Address Translation) e verifique se a política de firewall bloqueia pacotes UDP (User Datagram Protocol). As configurações do firewall não estão limitadas ao computador do usuário; Se o usuário estiver em um ambiente corporativo, o firewall da empresa também pode precisar ser configurado.

Além disso, se o aplicativo usar servidores TURN personalizados, certifique-se de que o IP, a porta e o protocolo especificados não sejam bloqueados por nenhum firewall.

Para o aplicativo, é importante manipular eventos do recurso de diagnóstico voltado para o usuário e notificar os usuários de acordo. Ao fazer isso, o usuário está ciente do problema e pode solucionar problemas de seu ambiente de rede.

Em casos raros, esse código de erro aparece aleatoriamente, mesmo que as configurações de firewall do usuário estejam corretas. Se o mesmo usuário foi anteriormente capaz de se conectar e chamar com êxito, esse problema pode ser devido a alterações nas condições de rede. Pode ser uma questão temporária. Tente iniciar ou participar da chamada novamente.

Referências