Skip to main content
O ZapMeow serve um painel em /painel/ (a raiz / redireciona para ele; o /dashboard/ antigo, da chave de API, continua). Ele tem duas entradas:
  • Admin Glow: entra com ZAPMEOW_ADMIN_KEY. Vê todos os tenants, cria clientes, gera links de acesso, gere sessões, canal do Backoffice, papéis, grupos e, com Cliente GHL, abre qualquer tenant para ver o que o cliente vê.
  • Cliente: entra com um link de acesso do próprio tenant. Conecta o GoHighLevel e o WhatsApp, ajusta a IA e o áudio, escolhe o modo das ações no CRM, monta o fluxo por estágio e aprova pedidos.
O painel é HTML e módulos JS embutidos (sem build), com dois temas: Notion para o cliente e tokens da Glow para o admin. O link é https://<servidor>/painel/#t=<token>: o token vai no fragmento, que o navegador não envia ao servidor, e o painel o tira da barra de endereço ao abrir. GET /admin/tenants passa a trazer portalAccess (tem link ativo). GET /admin/sessions lista todas as sessões com o tenantId de cada uma.

/portal: a fatia do cliente

/portal/{rota} com X-Portal-Token (ou Authorization: Bearer) vira /admin/tenants/{tenant do token}/{rota}, depois de passar por uma lista fechada. O token só enxerga o próprio tenant; o caminho nunca carrega o id. Fica só com a chave admin (403 no portal): cofre de segredos, criar/alterar/apagar tenant, o decisor do fluxo (PUT /config/flow: a URL dele é chamada pelo servidor; o cliente só lê), o token de portal e as rotas de mensagem (sendText…). Os mesmos caminhos /s/{sessão}/… existem na API admin, em /admin/tenants/{id}/s/{sessão}/…: o painel usa as duas com o mesmo código.

Instalação do GHL

Para o botão Conectar com GoHighLevel voltar ao painel, defina GHL_POST_INSTALL_URL=https://<servidor>/painel/. Sem GHL_CLIENT_ID/GHL_CLIENT_SECRET o painel oferece o token de integração privada (PIT) no lugar do OAuth.

O que o painel não faz (ainda)

  • A calibragem de risco do passo 3 de Conectar é só orientação: o teto de envios é aplicado por quem envia (Backoffice ou fluxo), não pelo ZapMeow.
  • Não há botão de ligação de teste: POST /api/{sessão}/call pede a chave de API, que o painel não guarda.
  • O segredo e a URL do webhook do Convex são variáveis de ambiente e não aparecem no painel.