--- tags: [projeto, intranet, whatsapp, chat, atendimento] status: em-andamento date: 2026-04-29 --- # WhatsApp Chat - Sistema de Atendimento ## Visao Geral Sistema de atendimento ao cliente via WhatsApp integrado ao intranet, com suporte a admin em tempo real, boas-vindas automaticas e auto-encerramento. ## Funcionalidades Principais ### Admin em Tempo Real - Variavel `IS_ADMIN` no JavaScript controla visibilidade - Admin abre qualquer conversa sem precisar "puxar" o atendimento - `isAdminChat()` verifica: `gerenciar_whatsapp_chat || wa_ver_todas_conversas || wa_admin` ### Boas-vindas - Enviada apenas 1x por ciclo de atendimento - Configuracoes: `wa_msg_boas_vindas`, `wa_boas_vindas_ativa` ### Auto-encerramento - Timeout: **15 minutos** (alterado de 5min) - Cron roda a cada 5 minutos - Configuracao: `wa_auto_encerrar_minutos` ### Status Diferenciados - **"Encerrado auto"** — cor amarela (encerrado por timeout) - **"Encerrado - Nome"** — cor azul (encerrado manualmente pelo atendente) ### Permissoes de Atendentes - Crismaria, Valeria e Erick possuem 8 permissoes basicas - Sem acesso a funcoes de admin/gerencia ### Avatares - Armazenados em `writable/uploads/avatars/` - Servidos via rota `/avatar/:filename` ### Configuracoes WhatsApp - `wa_msg_boas_vindas`, `wa_boas_vindas_ativa` - `wa_msg_encerramento`, `wa_auto_encerrar_minutos` (15) ## LID Resolution (Resolucao de Identificadores) ### Cache de Contatos - Local: `/root/api-teste2/instances_data//contacts_cache.json` - Cache deduplicado (era 34k entradas, reduzido para 37) - Upsert corrigido nos eventos `contacts.upsert` e `messaging-history.set` ### resolveLidToPhone() - **Corrigido**: so retorna se `contact.id` contem `@s.whatsapp.net` - Antes retornava LID como telefone (bug) ### Etapas de Resolucao - Webhook PHP possui **10 etapas** de resolucao LID - Passo 4.5: cross-ref na tabela `clientes` por nome ### Telefone Manual - Endpoint `definir-telefone-lid` para informar telefone manualmente - Botao "Informar telefone" disponivel na interface do chat ### Guard Anti-LID - Apos `normalizePhone()`, detecta LID sem prefixo e adiciona `lid_` automaticamente - **Limitacao**: WhatsApp esconde numeros via LID — sem API para forcar revelacao ### Webhook Config - Micro-server na porta 8001 - Endpoints: `POST/GET /webhook-config/:instance_key` ## Baileys LID Patch > [!warning] Reaplicar apos npm install > Arquivo: `/root/api-teste2/node_modules/@whiskeysockets/baileys/lib/Socket/messages-send.js` > Se rodar `npm install`, o patch sera perdido e precisa ser reaplicado manualmente. ## Instancias Baileys | Instancia | Key | Numero | |-----------|-----|--------| | **GotechBr (SISTEMA)** | `be3c97d7-5a59-48e1-ba19-a2a205046113` | `553135003516` | | GotechBr Financeiro | `QLh063KG7xL0kmEY0U5EhH0x1Qt1mhI2thuPN` | `553184932799` | | Agnaldo | `137371875097838` | `553189049626` | > [!important] Instance key muda a cada re-scan QR > Atualizar DB `whatsapp_sessions` quando mudar. ## Notas Tecnicas - Servidor Baileys API: `208.110.85.226`, porta 8000 (TSeD framework) - Profile Pic server: porta 8001 (micro Express) - Instances exportadas de `dist/controllers/InstanceController.js` via `exports.instances` ## Memorias detalhadas ### Sessao principal - [[whatsapp-chat-2026-03-26]] — refactor completo do chat - [[whatsapp-chat-admin-puxar]] — admin acompanhar em tempo real - [[whatsapp-chat-contatos-visibilidade]] — controle de visibilidade - [[whatsapp-chat-reply-delete-edit]] — reply, delete, edit - [[whatsapp-chat-scroll]] — fix do scroll ### LID - [[whatsapp-lid-fixes-2026-03-30]] — fixes da resolucao LID ### Outros fixes - [[whatsapp-proposta-fix]] — PDF e links no chat - [[csrf-chat-fix]] — fix de CSRF ## Relacionados - [[social-media-modulo]] - [[financeiro-modulo]]