Pings fantasma após o fim da sessão e falta de contexto de conexão
O que aconteceu
Uma cliente relatou que não conseguiu concluir sua sessão em 18/03/2026 às 20h por problemas de conexão. Ao investigar no Avo, o sistema mostrava 393 room_pings ao longo de 1h12min no dia 18 (presença contínua) mais 6 pings no dia 19 entre 12h14 e 12h15 — 15 horas depois do fim da sessão.
O suporte não conseguiu confirmar nem refutar o problema de conexão porque os pings não carregavam nenhum contexto sobre câmera, microfone, qualidade de conexão ou tipo de rede.
Causa raiz
Dois problemas independentes:
1. Pings fantasma (dia 19): o endpoint de ping (PATCH /api/v1/me/meetings/:meeting_id/pings) não valida meeting.can_join?. O endpoint de credenciais define joined: true permanentemente no MeetingParticipant. Uma vez setado, o frontend pode enviar pings indefinidamente — inclusive dias depois, se a aba ficar aberta ou o app mobile retomar em background.
2. Sem contexto de conexão: room_pings e wait_pings guardavam apenas timestamps Unix (arrays de string). Não havia campo para capturar status de câmera, microfone, qualidade de conexão ou tipo de rede junto de cada ping. O suporte não conseguia distinguir “a cliente estava presente” de “a cliente tinha áudio e vídeo funcionando”.
Correção
O contexto de conexão foi resolvido pela feature de diagnóstico de ping — nova tabela meeting_participant_pings com payload diagnostics em JSONB, especificada em 20260729143000_meeting_ping_diagnostics e exibida no Avo conforme room_ping_quality.
A guarda de janela (can_join?) no endpoint de pings continua pendente — segue registrada no draft 20260511112716_ping_connection_data_and_audit, junto com a auditoria por ping.
Como evitar
- Nunca use pings de presença como evidência de qualidade de sessão — pings confirmam que o cliente estava na sala, não que vídeo/áudio funcionavam.
- Sempre proteja endpoints de heartbeat com a mesma verificação de janela de tempo usada na entrada (
can_join?); caso contrário apps em background produzem dado fantasma. - Ao investigar reclamações de sessão, procure lacunas de ping maiores que 1 minuto como sinal de desconexão real; pings isolados de outro dia são quase sempre artefato de app em background.