Pular para o conteúdo
CRM e WhatsApp

Hub independente de WhatsApp: por que tirei tudo do ERP

Painel próprio, API REST, banco PostgreSQL e runtime de workers. A arquitetura que resolveu minhas quedas noturnas e o que ela cobra em troca.

WAEquipe WebajatoPublicado em Atualizado em 11 minNível Avançado
Ilustração do módulo CRM e WhatsApp da plataforma Webajato

Deu uma sexta-feira em que eu subi uma atualização do sistema às sete da noite e derrubei o WhatsApp de três empresas ao mesmo tempo. Nenhuma delas tinha relação com o que eu mudei. Elas caíram porque a sessão morava dentro do mesmo processo. Foi essa noite que me convenceu a montar um hub independente de WhatsApp.

Antes disso, eu defendia o contrário. Achava que separar era complicar sem necessidade, mais uma coisa para manter, mais um lugar para dar errado. Confesso que demorei pra entender que o custo de manter separado é fixo e previsível, enquanto o custo de manter junto aparece sempre no pior momento.

A separação existe de verdade: o hub vive fora do ERP e é a referência atual para atendimento de WhatsApp independente. Ele tem painel operacional próprio, API REST própria, banco PostgreSQL próprio e runtime Node com Baileys em modo fleet.

O que um hub independente de WhatsApp assume

A divisão de responsabilidades é o que dá tranquilidade. Cada lado tem um papel bem delimitado e nenhum dos dois precisa saber os detalhes internos do outro.

LadoResponsabilidadeComo conversa
ERPSincronizar tenants e conexõesChamadas de API
ERPPedir envio e consultar estadoChamadas de API
ERPReceber eventos do canalWebhook assinado
HubAutenticar cada ERP clienteIdentificador e segredo de cliente
HubPersistir clientes, empresas, conexões e workersBanco próprio
HubProvisionar worker e atualizar estadoRuntime supervisionado

Repare que o ERP nunca fala com o WhatsApp diretamente. Ele fala com o hub. Essa camada a mais é exatamente o que impede que um deploy do sistema principal derrube uma sessão, que era o meu problema daquela sexta.

Onde os dados moram

O hub tem banco próprio, e as tabelas contam a história do que ele faz. Tem cadastro de ERPs clientes com credenciais e rotas, empresas por ERP, sessões vinculadas ao tenant, workers com host, porta, identificação de processo e heartbeat, auditoria de runtime e envio, fila interna de tentativas e histórico de entrega de webhook.

  • Clientes: os ERPs que consomem o hub, com credencial e rota de retorno.
  • Tenants: as empresas de cada ERP, isoladas entre si.
  • Conexões: as sessões de WhatsApp vinculadas a cada tenant.
  • Workers: host, porta, processo e heartbeat de cada sessão em execução.
  • Eventos e tentativas: auditoria de runtime, envio e entrega de webhook.

O histórico de tentativas de webhook foi o que mais me ajudou no primeiro mês. Quando alguém dizia "o cliente mandou mensagem e não chegou", eu parava de discutir e ia olhar a tentativa de entrega. A discussão acabava em dois minutos.

Um worker por sessão, e o gerente da frota

O runtime funciona com um gerente de frota que roda numa porta de controle e cuida dos processos: listar sessões, descobrir a próxima porta livre, criar worker, encerrar worker, reiniciar um ou todos e executar panic. A supervisão dos processos é feita por gerenciador dedicado.

Cada worker roda uma sessão, expõe sua própria API HTTP numa porta dinâmica, conecta ao WhatsApp, gera QR Code, envia mensagem, normaliza os eventos que chegam e reporta tudo de volta ao hub. Uma sessão problemática deixa de contaminar as outras, que era o meu pesadelo.

Como eu faria a migração hoje

  1. Levante o inventárioListe todas as conexões existentes, de quais empresas e quem depende de cada uma.
  2. Suba o hub em paraleloDeixe o hub de pé e testado antes de mover qualquer sessão de produção.
  3. Configure credencial e retornoRegistre o ERP como cliente, defina o segredo de webhook e a rota que vai receber os eventos.
  4. Migre uma conexão sóEscolha a de menor volume, migre, e observe por alguns dias inteiros antes de continuar.
  5. Valide envio e retornoTeste cada tipo de mensagem e confirme que os eventos chegam com assinatura válida.
  6. Migre o resto em lotesNunca tudo de uma vez. Eu tentei e voltei atrás no meio da tarde.

Antes de considerar concluído

  • Cada empresa enxerga apenas as próprias conexões, sem vazamento entre tenants.
  • O segredo de webhook está configurado e a assinatura está sendo validada.
  • O painel do hub foi apresentado a quem cuida do canal no dia a dia.
  • Restart de uma sessão foi testado e não afetou as demais.
  • O histórico de tentativas de entrega foi consultado ao menos uma vez.
  • Existe um caminho de volta documentado, caso algo dê errado.

A conta de manter junto não vem no fim do mês. Vem numa sexta às sete da noite, no meio de um deploy.

Equipe Webajato

O que ler antes de decidir

Se você ainda não escolheu o conector, o comparativo entre Baileys e Meta Cloud API muda de peso quando o hub entra na conta. A parte de assinatura dos eventos está em webhook assinado com HMAC, e o acompanhamento do dia a dia em saúde da conexão WhatsApp. Se você cuida de várias empresas no mesmo ambiente, o isolamento por empresa descrito em gestão multiempresa segue a mesma lógica que o hub aplica aos tenants.

Perguntas frequentes

Preciso de um hub separado desde o começo?
Não. Comece simples e separe quando a instabilidade justificar ou quando você passar a cuidar de várias empresas. Eu separei tarde demais, mas separar cedo demais também tem custo real de manutenção.
O ERP continua funcionando se o hub cair?
O sistema continua de pé, mas o canal de WhatsApp depende do hub para enviar e receber. A vantagem é o inverso: uma atualização do sistema principal deixa de derrubar as sessões, que era exatamente o meu problema.
Como o hub separa uma empresa da outra?
Cada ERP cliente é autenticado por identificador e segredo próprios, e cada empresa aparece como um tenant daquele cliente. As conexões ficam vinculadas ao tenant, o que mantém o isolamento entre ambientes.
Um worker por sessão não pesa demais?
Consome mais recurso do que um processo único, sim. Em troca, uma sessão problemática para de contaminar as outras. Para quem cuida de vários números, essa troca compensa com folga.
Dá para migrar sem parar o atendimento?
Dá, migrando uma conexão por vez e observando cada uma por alguns dias. O que não dá é migrar tudo numa tarde. Eu tentei, voltei atrás no meio do caminho e perdi a confiança do time por um tempo.
hub independente de whatsappfluxhubmulti-tenantbaileys fleet
Mais sobre CRM e WhatsApp

Outros módulos do blog

Cada módulo reúne um conjunto próprio de guias. Veja também o mapa do site com todos os artigos publicados.

Coloque esse conhecimento para rodar no seu dia a dia

Os temas daqui nascem de módulos reais da plataforma Webajato: ERP, financeiro, fiscal, estoque, PDV, loja virtual, marketplaces, CRM no WhatsApp, automação com IA e relatórios. Tudo em um único sistema multiempresa.

Conhecer a plataforma