Cerebro Studio · Backlog · Changelog
RioNoTeatro • /www/wwwroot/rionoteatro.com.br/docs/changelog/2026/CL-186-wa-chat-cancelamento.md • 2026-04-03T21:15:10.843Z

CL-186-wa-chat-cancelamento

Contexto operacional

  • O BK-186 consolidou duas frentes:
  • evolucao do WA Chat / historico do WhatsApp no admin
  • endurecimento do runtime para recuperar sessao presa apos QR/autenticacao
  • No incidente real de 27/03/2026, o bot chegava em AUTHENTICATED, mas nao emitia READY, mantendo o admin em loop de reconexao mesmo com QR aceito.

Ajustes entregues

1. WA Chat / historico

  • admin/modulos/bot/whatsapp.php
  • suporte a labels reais do WhatsApp Business no chat admin
  • preservacao de apelidos manuais/fixacao sem conflitar com labels reais
  • suporte a vinculo manual de numero -> cliente
  • suporte a edicao de mensagem enviada quando houver message_id
  • bot/whatsapp/webhook.php
  • persistencia de message_id no historico
  • includes/whatsapp_helper.php
  • autocorrecao de schema para whatsapp_mensagens
  • persistencia de message_id / edited_at
  • sql_updates/create_whatsapp_table.sql
  • schema base alinhado ao historico com message_id e edited_at

2. Console de Cancelamento

  • admin/modulos/pecas/index.php
  • a primeira tela passou a preservar a mensagem editada na pre-visualizacao

3. Runtime / painel WhatsApp

  • bot/whatsapp/server.js
  • passou a expor authenticated, client_state, last_auth_at e last_state_at
  • removeu o user-agent legado fixo
  • ganhou diagnostico de bootstrap do Puppeteer/page console
  • ganhou recovery automatico pos-auth usando ExposeStore + LoadUtils
  • promove o servico para READY quando a pagina ja estiver CONNECTED, mesmo com a rotina padrao da biblioteca presa
  • admin/whatsapp_qr.php
  • passou a devolver authenticated / client_state
  • admin/index.php
  • parou de insistir no QR antigo quando o pareamento ja foi aceito
  • includes/whatsapp_helper.php
  • passou a distinguir melhor requires_qr, authenticated e sessao presa

RCA resumida do incidente

  • O QR era aceito e o browser chegava a AuthStore.AppState = CONNECTED.
  • A biblioteca whatsapp-web.js nao completava a injecao de window.Store / window.WWebJS, entao o servico ficava parado em AUTHENTICATED.
  • O recovery automatico recompõe Store/WWebJS e destrava a transicao para READY.

Evidencias de validacao

  • node -c /www/wwwroot/rionoteatro.com.br/bot/whatsapp/server.js
  • php -l /www/wwwroot/rionoteatro.com.br/admin/index.php
  • php -l /www/wwwroot/rionoteatro.com.br/admin/whatsapp_qr.php
  • php -l /www/wwwroot/rionoteatro.com.br/includes/whatsapp_helper.php
  • systemctl restart rnt-whatsapp
  • curl http://127.0.0.1:3033/status
  • retorno final: {"status":"connected", ... "client_state":"READY"}
  • curl -H 'apikey: ...' http://127.0.0.1:3033/me
  • retorno final: connected=true, wid=5521999605790@c.us
  • curl -X POST http://127.0.0.1:3033/check-number ...
  • retorno final: exists=true

Observacao residual

  • O console do WhatsApp Web ainda registra o ruido Requiring unknown module "WAPhoneUtils", mas o bootstrap passou a se autocurar e o servico fecha com Conectado com sucesso!.