Sobre o Projeto (Automizi):
Estamos buscando um especialista em
Node.js para desenvolver o núcleo de uma integração "Whitelabel" entre WhatsApp e GoHighLevel (GHL). Este é um produto crítico (marketplace app) que servirá centenas de subcontas, exigindo arquitetura robusta, 100% de uptime e zero perda de dados. Você trabalhará diretamente com especificações técnicas detalhadas já aprovadas.
O Desafio:
Você será responsável por construir um middleware de alta performance que atua como um "Conversation Provider" para o GHL. O sistema deve gerenciar conexões de WhatsApp via QR Code (usando a biblioteca @whiskeysockets/baileys), sincronizar contatos em tempo real, gerenciar filas de mensagens com segurança (anti-ban) e logar chamadas de voz.
**Responsabilidades Chaves:**
1. **Conectividade & Sessão (Baileys):**
- Implementar autenticação via QR Code (Socket) exibido em uma Custom Page do GHL.
- Gerenciar reconexões automáticas e tratamento de conflitos de sessão.
- Sistema de alerta: Enviar e-mail/notificação via API caso a conexão caia permanentemente.
2. **Sincronização de Contatos & Resolução de LIDs:**
- **Crítico:** Resolver o desafio de LIDs (Identificadores de Privacidade) do WhatsApp.
- Capturar o evento
messaging-history.set para dump inicial de contatos no MongoDB.
- Implementar lógica de "Active Query" (sock.onWhatsApp) para descobrir o número real de novos contatos instantaneamente.
- Garantir que o ghl sempre receba o número de telefone real, nunca o lid.
3. **Sistema de Mensageria (Bidirecional):**
- **ghl -> wa:** receber webhooks do ghl, enfileirar e enviar mensagens (texto, mídia, áudio).
- **Wa -> ghl:** escutar eventos
messages.Upsert, processar mídia e injetar na timeline do ghl via api.
- **Grupos:** Suporte completo para envio/recebimento de mensagens em grupos, identificando o remetente corretamente.
4. **Fila de Segurança (Anti-Ban):**
- Desenvolver uma fila persistente no MongoDB.
- Implementar "Throttling" inteligente: delays aleatórios (5-15s), simulação de digitação (composing) e pausas longas após lotes de mensagens.
- Lógica de "Cold Start" para aquecimento de contas novas.
5. **Monitoramento de Chamadas:**
- Interceptar eventos de chamada (offer, timeout, reject).
- Calcular duração e criar logs de chamada no GHL sem enviar mensagens de texto desnecessárias ao cliente final.
**Requisitos Técnicos Obrigatórios:**
- **Back-end:**
Node.js avançado (Experiência com Processos, Buffers, Streams).
- **Lib Específica:** Experiência comprovada com @whiskeysockets/baileys (versão 2024+). _Não aceitamos soluções baseadas em Puppeteer/Selenium (wwebjs)._
- **Banco de Dados:** MongoDB (foco em DigitalOcean Managed Databases). Modelagem de Schemas para alta performance.
- **Integrações:** Experiência com APIs RESTful e Webhooks (GoHighLevel API v2 é um diferencial).
- **Infraestrutura:** Conhecimento em PM2, Gerenciamento de Processos e Deploy em VPS (DigitalOcean).
**Diferenciais:**
- Ter criado Chatbots ou integrações de WhatsApp anteriormente.
- Conhecimento profundo da estrutura de eventos de Socket do Baileys (
contacts.upsert,
messaging-history.set).
- Entendimento de Workflows e Custom Providers no GoHighLevel.
**O que esperamos de você:**
- **Leitura de Documentação:** Capacidade de seguir estritamente a Spec Doc fornecida e a documentação oficial atualizada (nada de código legado de 2022).
- **Foco em Estabilidade:** O sistema não pode perder mensagens. Você deve ser paranoico com tratamento de erros e persistência de dados.
- **Autonomia:** Capacidade de testar cenários complexos (ex: o que acontece se o servidor reiniciar no meio de uma sincronização?).
Tipo de Contratação: Freelance / Projeto (Com possibilidade de retainer para manutenção).
Localização: Remoto.
Como Aplicar:
Envie seu portfólio (GitHub ou projetos passados) destacando especificamente qualquer trabalho feito com Baileys ou Integrações de WhatsApp. Por favor, mencione "LID Resolution" na sua mensagem para confirmar que leu a descrição:
https://docs.google.com/document/d/1tAzmPrq_uNksZD20KW8bpwestE6a1Ifm1TK2eb_XqWc/edit?usp=sharing
Plazo de Entrega: No definido