A chamada termina com 410/3112
O motivo pelo qual a chamada termina com o erro 410/3112 é que o cliente não consegue 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 configurações incorretas. Portanto, os pares não conseguiram estabelecer uma conexão direta ou de retransmissão.
Os candidatos à retransmissão não serão necessários se o cliente conseguir 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 as restrições de rede ou configuração de servidor TURN (Travessia Usando Relays ao Redor do NAT). Os candidatos à retransmissão são cruciais para estabelecer conexões em ambientes de rede restritivos.
Como detectar usando o SDK
Você pode aprender o motivo para a chamada terminar usando o snippet 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 os 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 dispara o evento UFD networkRelaysNotReachable.
Aqui está um snippet de código mostrando como capturar o evento networkRelaysNotReachable UFD
.
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 o Log Analytics ou a ferramenta Diagnóstico de Chamadas
Quando um usuário relata que não consegue fazer uma chamada, você pode usar a ferramenta Diagnóstico de Chamadas para analisar o motivo da falha. Para depurar chamadas de usuário, você precisa da ID da chamada. Se a chamada do usuário falhou porque o firewall bloqueou a conexão de retransmissão, você poderá encontrar o código final e o subcódigo como 410 e 3112 na página de visão geral da chamada.
Além disso, você também pode encontrar o evento UFD networkRelaysNotReachable na página de problemas de chamada.
Para entender o tempo de ações ou eventos do usuário, você pode verificar os detalhes na página da linha do tempo.
Neste exemplo, o usuário recebeu o evento networkRelaysNotReachable UFD
às 16:41:47 e chamará o evento de alteração de estado às 16:41:49.
A ferramenta Diagnóstico de Chamadas fornece uma visão geral e as informações necessárias para depurar uma única chamada. Se você quiser entender quantos usuários encontram esse problema ou com que frequência os usuários enfrentam o problema, use a ferramenta Log Analytics para obter informações sobre esse problema.
Por exemplo, se você quiser obter a ID da chamada desconectada com o subcódigo 3112 nos últimos sete dias, poderá executar esta consulta:
ACSCallSummary
| where ParticipantEndSubCode == 3112
| project TimeGenerated, CorrelationId, ParticipantId, Identifier, CallType
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
O gráfico de tempo fornece apenas uma visão geral dos usuários na mesma 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 você a identificar a causa raiz de quaisquer problemas com mais precisão.
Por exemplo, se você vir um pico no número de chamadas que terminam com o subcódigo 3112, 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 fez muitas tentativas que falharam com o subcódigo 3112.
Nesta consulta, analisamos os dados com base nos identificadores do usuário, supondo que o aplicativo mantenha o mesmo identificador de usuário 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
Neste exemplo, um usuário teve um total de 180 chamadas, das quais 160 chamadas 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 com outra tentativa. 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 de subcódigo indica um provável problema de configuração de rede para esse usuário, em que é improvável que a repetição ajude.
Como atenuar ou resolver
Se você encontrar um usuário que recebe consistentemente o erro 410/3112, é recomendável que ele verifique as configurações de firewall. Os usuários devem seguir a diretriz de Configuração de Firewall mencionada no documento de Recomendações de rede. Verifique se o usuário ou administrador verifica suas configurações de NAT (Conversão de Endereços de Rede) e verifica se a política de firewall bloqueia pacotes de protocolo UDP. As configurações de 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, verifique se o IP, a porta e o protocolo especificados não serão bloqueados por nenhum firewall.
Para o aplicativo, é importante lidar com eventos do Recurso de Diagnóstico Voltado para o Usuário e notificar os usuários adequadamente. Ao fazer isso, o usuário está ciente da questão e pode solucionar problemas de seu ambiente de rede.
Em casos raros, esse código de erro aparece aleatoriamente mesmo se as configurações de firewall do usuário estiverem corretas. Se o mesmo usuário foi capaz de se conectar e chamar com êxito, esse problema pode ser devido a alterações nas condições de rede. Pode ser um problema temporário. Tente iniciar ou ingressar na chamada novamente.