--- name: WhatsApp LID Fixes e Bloqueio Chamadas description: Correções massivas no sistema LID - resolução automática, boas-vindas, foto, telefone manual, cache Baileys, cross-reference clientes type: project --- Correções aplicadas em 2026-03-30 no sistema WhatsApp Chat para suporte a contatos LID. **Why:** O WhatsApp passou a usar LID (Line ID) em vez de telefone para mensagens recebidas. Contatos apareciam sem número, sem foto, sem boas-vindas. **How to apply:** Considerar sempre que phone_number pode ser `lid_XXXX` ao mexer em qualquer funcionalidade do WhatsApp Chat. ## Bugs Corrigidos (2026-03-30 - sessão 2) ### PHP (WhatsApp.php) - **Guard phone sem prefixo lid_**: após `normalizePhone()`, detecta phones numéricos longos sem '55' e adiciona `lid_` automaticamente - **Resolução via tabela clientes (passo 4.5)**: cruza pushName com `clientes.nome` para descobrir telefone - **53 contatos** no banco tinham LID puro como phone_number (sem prefixo `lid_`) - corrigidos em massa via SQL - **7 contatos** resolvidos automaticamente usando cache Baileys ### PHP (WhatsAppChat.php) - **Boas-vindas para LID**: `$isLidContact` bypass da validação `55+12 chars` em `puxarAtendimento()` - **`profilePictures()`**: primeira loop preserva prefixo `lid_` (antes stripava e construía JID errado) - **`definirTelefoneLid()`**: novo endpoint para atendente vincular telefone manualmente a contato LID - Rota: `POST whatsapp-chat/definir-telefone-lid` ### JS (chat/index.php) - **Header chat**: mostra "Numero nao identificado" + link "Informar telefone" clicável para contatos LID - **Filtro fotos**: removido `!p.startsWith('lid_')` - agora busca foto para contatos LID - **`aplicarProfilePics()`**: regex alterada de `(\d+)` para `([^']+)` para capturar phones `lid_xxx` - **`promptDefinirTelefone()`**: prompt para atendente informar telefone real → chama `definir-telefone-lid` ### Baileys (Instance.js no servidor 208.110.85.226) - **`resolveLidToPhone()`**: BUG GRAVE - retornava o próprio LID como telefone quando `contact.id` era `@lid`. Fix: só retorna se `contact.id` contém `@s.whatsapp.net` - **`contacts.upsert`**: fazia `push(...contacts)` sem deduplicar → cache crescia infinitamente (34.369 → 37 após dedup). Fix: upsert por `contact.id` - **`messaging-history.set`**: mesmo bug de duplicação corrigido - **Caches deduplicados**: GotechBr (34369→37), Agnaldo já era 3 ## Arquivos da sessão anterior (mantidos) ### Servidor Baileys (208.110.85.226) - **`Instance.js`**: `createId()` suporte @lid, `rejectCall`, `phoneNumberShare` handler, `contacts.update`, fix `fs_1` - Cache contatos: `./instances_data//contacts_cache.json` ### Servidor Web - **`WhatsAppChat.php`**: `buildJidFromPhoneNumber()` converte `lid_XXXX` → `XXXX@lid` - **`WhatsApp.php`**: webhook handlers (call, lid_resolved), 9 estratégias de resolução LID ## Estado do Cache de Contatos (GotechBr - be3c97d7) - 37 únicos: 15 com phone+LID mapeado, 21 só LID (sem telefone), 1 sem LID - WhatsApp NÃO compartilha telefone da maioria dos contatos LID - `phoneNumberShare` é evento passivo e raro ## Limitação Fundamental O WhatsApp com LID **intencionalmente esconde** números. Não há API para forçar revelação. Soluções: 1. Cross-reference com tabela `clientes` por nome (automático, passo 4.5) 2. Botão "Informar telefone" no chat (manual pelo atendente) 3. Cache de contatos do Baileys (quando disponível) 4. Evento `phoneNumberShare` (passivo, raro) 5. Match por pushName com contatos existentes (passos 5-8)