Sessão caiu
Um WhatsApp pareado parou de responder — como confirmar, o que o sistema já faz sozinho e quando agir.
Sintomas
- O overview mostra
pairingsDegradedacima de zero. - Em Clientes → Conexões, um canal aparece
degradedoudisconnected. - O responsável recebeu a notificação
pairing.disconnected(crítica) ou viupairing.statuscomnextRetryAtno app.
Confirmar
Rotas de admin pedem o token de acesso do backoffice (Authorization: Bearer).
API=https://api.superdinda.com
curl -s "$API/admin/connections?status=degraded" -H "Authorization: Bearer <ADMIN_ACCESS_TOKEN>"
curl -s "$API/admin/seats/<seat-uid>/timeline" -H "Authorization: Bearer <ADMIN_ACCESS_TOKEN>"-
Na linha do tempo da vaga, procure
provider.failed/provider.stopped, seguido dereconnect(uma linha por tentativa). -
Veja o estado no WAHA, de dentro do container (em produção ele não tem porta pública):
docker compose exec waha curl -fsS -H "X-Api-Key: <WAHA_API_KEY>" \ http://localhost:3000/api/sessions/sd-<pairingUid> -
Descubra o proxy (coluna proxy em Conexões) e veja quem mais está nele:
GET /admin/proxies/<proxy-uid>/bindings. Vários caindo juntos no mesmo endereço apontam para o proxy, não para a sessão.
O que o sistema faz sozinho
FAILED/STOPPEDcom o pareamentopaired→degradede retry em 30 s.- O tick de reconexão (15 s) reinicia a sessão no WAHA; depois 2 min e 10 min.
- Voltou
WORKING→paired, sem nova notificação. - Depois da 3ª tentativa:
disconnectedcomended_at, sessão apagada no WAHA, notificação ao responsável. O binding de proxy da vaga é mantido.
Só os atrasos somam 12 min 30 s (30 s + 2 min + 10 min); o desfecho depende ainda de o WAHA reportar cada falha.
Passos
-
Durante
degraded: espere o backoff terminar. -
disconnected: precisa parear de novo. A pessoa pode fazer pelo próprio link de consentimento (POST /consent-requests/{token}/pairing, código no celular dela) ou o responsável pela tela dele. -
degradedparado (semnext_retry_ate sem eventos novos): force o fim e peça um novo pareamento. É a ação mais disruptiva que um operador tem; o motivo é obrigatório e fica na auditoria.curl -s -X POST "$API/admin/seats/<seat-uid>/pairing/reset" \ -H "Authorization: Bearer <ADMIN_ACCESS_TOKEN>" -H "Content-Type: application/json" \ -d '{"reason":"degraded sem retry após restart sem resposta"}'
Em aberto
O reset não tem botão no backoffice; só pela rota. O template de reconexão
para avisar a pessoa (WABA_RECONNECT_TEMPLATE) ainda não existe, então quem
leva o pedido até ela é o responsável.
Quando escalar
- Várias sessões do mesmo endereço → Proxy queimado.
- Todas as sessões ao mesmo tempo → WAHA fora do ar.
- O mesmo número cai de novo logo depois de parear, ou não consegue parear → Número banido.
Fontes
backend/src/domains/channels/use-cases/{apply-provider-state,cancel-pairing}.ts,backend/apps/workers/reconnect-ticker.tsbackend/src/http/routes/admin/{operator-lists,proxies}.route.ts,backend/src/domains/insights/use-cases/{operator-lists,seat-timeline,overview}.tsbackend/src/config/env.ts(WABA_RECONNECT_TEMPLATE),backend/docker-compose.prod.yml- Vault: AD-010, AD-016
