📄 COMERCIALRS-BUGS-JUL2026.md

← Vault

ComercialRS — Bug Report & Fixes

> Updated: 2026-07-20

Bugs Corrigidos

Bug #1 — Reuniões para Remarketing ✅ CORRIGIDO

Causa raiz: Botão WhatsApp clicado → verify_responsible_for_task rejeitava porque não fazia fallback para client_phone.

Fix:

#### Problema B: Carol não conseguia fazer login

Causa raiz: A password da Carol estava guardada com SHA-256 (handler antigo do Deno v3) mas o GoTrue espera bcrypt.

Solução: Password re-definida com bcrypt diretamente na DB (auth.users).

Como fazer reset de password no futuro:

1. O Deno v5 usa bcryptjs (CDN: https://cdn.skypack.dev/bcryptjs) para fazer hash bcrypt

2. handleAdminResetPassword faz UPDATE auth.users SET encrypted_password =

3. O login no browser vai para /auth/v1/token?grant_type=password → Kong → deploy-vps-auth-1:9999 (GoTrue self-hosted) → verifica contra bcrypt

Nota importante: O GoTrue self-hosted usa VERIFY_JWT=false — tokens Cloud não são verificados no Admin API.


Bug #8 — WhatsApp Phone ID ❌ PENDENTE

Falta confirmar o Phone ID da conta WhatsApp Business.


Arquitetura Atual

Deno Edge Runtime (VPS Host)

`

Deno process: /root/.deno/bin/deno run --allow-net --allow-read=/tmp /tmp/main_server_v5.ts

Port: 9000

PID check: fuser 9000/tcp

Restart: fuser -k 9000/tcp && nohup /root/.deno/bin/deno run ... > /tmp/main_server_v5.log 2>&1 &

`

Kong Routing

`

/functions/v1/* → strip_path: true → http://172.28.0.1:9000 (Deno host)

/auth/v1/* → http://deploy-vps-auth-1:9999 (GoTrue self-hosted)

/rest/v1/* → http://deploy-vps-rest-1:3000 (PostgREST)

/realtime/v1/* → http://deploy-vps-realtime-1:4000/socket

`

GoTrue Self-Hosted

`

Container: deploy-vps-auth-1 (supabase/gotrue:v2.99.0)

IP: 172.23.0.2:9999

DB: 172.23.0.7:5432 (search_path=auth,public)

JWT_SECRET: OyIoGm...xXs4

VERIFY_JWT: false

`

PostgreSQL (Self-Hosted)

`

Container: root-postgres-1

IP: 172.23.0.7:5432

User: postgres

Password: tSm?p8n57f+TX5n

Database: postgres

Auth schema: auth (search_path=auth,public)

`

Supabase Cloud (apenas para browser sessions)

`

Project ref: dauftiqcvgaydddoxqhh

URL: https://dauftiqcvgaydddoxqhh.supabase.co

ANON_KEY: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InJvY2hhc2FsZXMiLCJyb2xlIjoiYW5vbiIsImlhdCI6MTc4MzQzMzcyNCwiZXhwIjoxNzg0NjQzMzI0fQ.qfgKlvwdMkvKZp3CubkLC73yPtd5Pv5jOkil1BDsW2w

`

Importante: Cloud está bloqueado por exceed_egress_quota — Edge Functions Cloud retornam 402. Todas as operações vão pelo Deno + self-hosted.

Pendentes

1. Bug #8: Confirmar WhatsApp Phone ID com responsável Meta

2. Realtime WebSocket 500: deploy-vps-realtime-1 tem REALTIME_API_JWT_SECRET=* (GoTrue key) mas tokens Cloud usam key diferente. Causa: ArgumentError: incorrect padding` no decode JWT.

3. Bug #10: 93 tasks sem client_phone — todas anteriores a 22/mai/2026, sem message_log associável


Sistema de Notificações WhatsApp (Dispatch VPS)

> Updated: 2026-07-22

Arquitetura

`

ComercialRS (Lovable/VPS)

↓ escribe

Self-hosted Supabase (deploy-vps-db-1:5432)

dispatch_vps.py (cron 1 min) → Meta WhatsApp Business API

Notificações nova_reuniao_criada → corretores

`

Arquivos

Self-Hosted Supabase (banco real do ComercialRS)

`

Host: 127.0.0.1:5433 (Docker container deploy-vps-db-1)

User: postgres | Password: postgres

REST: https://comercialrs.rochasalesseguros.com.br/rest/v1/

Annon key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InJvY2hhc2FsZXMiLCJyb2xlIjoiYW5vbiIsImlhdCI6MTc4MjkyNjM1NywiZXhwIjoxODE0NDYyMzU3fQ.pude_uJHXvd41pEoMO0xph8L0FccAkgD1N9s2mgEQ1k

`

Bug crítico: client_phone não existe no banco self-hosted

Problema: O SELECT usava t.client_phone mas a coluna NÃO existe na tabela tasks no self-hosted (só existia no Cloud).

Fix no dispatch_vps.py (já corrigido):

`sql

SELECT t.id, t.title, t.status, t.due_date, t.channel,

t.responsible_id, '', t.created_at, -- '' em vez de t.client_phone

tm.name as broker_name, tm.phone as broker_phone

`

Fix no backfill_notifications.py (corrigido em 22/jul):

`python

SQL SELECT: '' como placeholder

t.responsible_id, '', t.created_at,

Tuple unpacking: 10 colunas → 9 variáveis (ignorar placeholder com _)

task_id, title, status, due_date, channel, resp_id, _, created_at, broker_name, broker_phone = task

`

Team Members (self-hosted, dados reais)

FileRole
------------
/var/www/comercialrs/data/dispatch_vps.pyDispatch principal — cron 1 min, conecta DB self-hosted
/var/www/comercialrs/data/backfill_notifications.pyBackfill pontual — envia pendentes das últimas 8h
/var/www/comercialrs/data/dispatch_cron.logLog do cron (stdout/stderr)
/var/www/comercialrs/data/backfill_cron.logLog do backfill
/var/www/comercialrs/data/dispatch_vps.logLog Python do dispatch principal
NomePhoneRole
-------------------
Carol5511925080819member
Nayara5511992285063broker
Madu5511915143146corretor
Victoria5511983877212broker
Rafael5511989793356member
Vinicius5511983928504manager
Raiany11944404184member
Davi11913412661manager
Michael5511980267689broker (telefone com 12 dígitos — possivelmente falta 1)
Pietra_(sem fone)_admin
Rayca_(sem fone)_pre_sales

Meta API

`

Token: EAASNGf6ucRcBRYZC7BtZAZBKnRjDTUwkTRpPgRw1jZALy7mQxiUTf6a7zJt7BvLj9iYsht7PtphRfDp9BjgyzjUNmJUru0yTVpzVc2EZCFxbRJID052my8IynikcjOeLAuuuXCFcE9SMKTWEdNUpnS4ltpJK4iD8d3ZAckIZBffhvrBmVFDIkmU3t1eg99klwZDZD

Phone ID: 812251211981254

WABA ID: 532448808878595

Template: nova_reuniao_criada (6 body params: broker_name, due_str, title, " ", " ", " ")

`

Resultado backfill 22/jul/2026

13 notificações enviadas com sucesso, 0 falhas.

Crons

`bash

Cron dispatch (1 min)

* cd /var/www/comercialrs/data && python3 dispatch_vps.py >> dispatch_cron.log 2>&1

Rodar backfill manualmente

cd /var/www/comercialrs/data && nohup python3 backfill_notifications.py >> backfill_cron.log 2>&1 &

`

Nota sobre Supabase Cloud

O Cloud (db.dauftiqcvgaydddoxqhh.supabase.co) está desactualizado — tem dados antigos (Ilano em vez de Carol, Maju que não existe, Nayara com phone errado). O ComercialRS (Lovable) escreve no self-hosted. Nunca usar o Cloud como fonte para dispatch.

Comandos Úteis

`bash

Ver se Deno está a correr

ssh root@31.97.243.106 "fuser 9000/tcp"

Reiniciar Deno

ssh root@31.97.243.106 "fuser -k 9000/tcp 2>/dev/null; sleep 1; nohup /root/.deno/bin/deno run --allow-net --allow-read=/tmp /tmp/main_server_v5.ts > /tmp/main_server_v5.log 2>&1 & sleep 3; cat /tmp/main_server_v5.log"

Testar login Carol (via Kong)

curl -s -X POST https://comercialrs.rochasalesseguros.com.br/auth/v1/token?grant_type=password \

-H 'Content-Type: application/json' \

-d '{"email":"carol@rochasales.com.br","password":"acesso@rochasales"}'

Reset password via API (futuro)

curl -s -X POST https://comercialrs.rochasalesseguros.com.br/functions/v1/admin-reset-user-password \

-H 'Content-Type: application/json' \

-d '{"user_id":"","new_password":"nova_senha"}'

Atualizar email (duas tabelas)

curl -s -X POST https://comercialrs.rochasalesseguros.com.br/functions/v1/admin-update-user-email \

-H 'Content-Type: application/json' \

-d '{"user_id":"","new_email":"novo@email.com"}'

Ver logs Deno

ssh root@31.97.243.106 "tail -20 /tmp/main_server_v5.log"

Ver container GoTrue auth

ssh root@31.97.243.106 "docker ps | grep auth"

DB: verificar password Carol (bcrypt)

python3 -c "import bcrypt; print(bcrypt.hashpw('senha'.encode(), bcrypt.gensalt(rounds=10)).decode())"

DB: fazer reset password Carol diretamente

docker run --rm --network container:rochasales-kong-1 -v /tmp/do_fix_carol.py:/tmp/do_fix_carol.py:ro python:3.11-slim bash /tmp/do_fix_carol.py

`