1
Baileys_Engine_Swap
Antigravity AI Agent edited this page 2026-05-11 05:47:34 +02:00

💬 Troca do Engine Baileys

1. Problema de Renderização no WhatsApp Web

As mensagens ricas (contendo botões interativos, listas de seleção e carrosséis) não são nativamente exibidas no WhatsApp Web utilizando a biblioteca oficial @whiskeysockets/baileys. O WhatsApp Web exige nós binários adicionais de metadados de negócios injetados no stanza que a biblioteca oficial descarta.


2. A Solução: InfiniteAPI Engine Swap com Fallback

Para solucionar essa limitação e habilitar botões interativos perfeitamente no celular e na web, foi desenhada a integração do fork InfiniteAPI (baileys@github:rsalcara/InfiniteAPI), mantendo suporte e chaveamento fácil para o Baileys oficial em caso de depuração.

Arquitetura de Abstração:

A pasta backend/src/modules/whatsapp/engine/ expõe uma interface unificada que gerencia dinamicamente o chaveamento através da variável de ambiente BAILEYS_ENGINE:

  • infinite.ts: Re-exporta a biblioteca baileys (InfiniteAPI), que gerencia nativamente botões, listas e carrosséis dentro de sock.sendMessage().
  • official.ts: Re-exporta a biblioteca @whiskeysockets/baileys estável do ecossistema.
  • index.ts: Carrega o adaptador correspondente à variável configurada.

3. Configuração no Arquivo .env

Para alternar entre os motores de conexão do WhatsApp, basta editar o parâmetro no arquivo de configuração do backend:

# Escolha do motor Baileys
BAILEYS_ENGINE=infinite    # Opções: 'infinite' ou 'official'

4. Tipos de Botões Suportados pelo InfiniteAPI

O motor InfiniteAPI simplifica o envio de botões, tratando toda a montagem estrutural em baixo nível. O desenvolvedor passa os payloads no seguinte formato:

type NativeButton =
  | { type: 'reply';  id: string;  text: string }       // Resposta rápida
  | { type: 'url';    text: string; url: string }       // Link externo
  | { type: 'copy';   text: string; copyText: string }  // Copiar texto para área de transferência
  | { type: 'call';   text: string; phoneNumber: string } // Disparar ligação telefônica

A troca de engine reinicia o processo do backend de forma segura e reconecta instantaneamente todas as sessões em cerca de 5 a 10 segundos, preservando o estado de autenticação guardado em disco.