Voltar para o início
Back-end & Processamento Assíncrono

WhatsApp Disparador & Worker

Motor de mensageria assíncrono para envios em escala. Toda a lógica de filas opera de forma desacoplada do ciclo de vida das rotas HTTP, suportando reinicializações sem perda de tarefas.

Node.jsExpressSQLiteWorkersWPPConnectREST API

Destaques de Engenharia

Fila assíncrona 100% persistida em disco através de SQLite
Worker em background desacoplado da camada de controllers da API
Algoritmo de concorrência com jitter aleatório para prevenção de bans
Mecanismo automático de retentativas para mensagens rejeitadas
Modo mock nativo para baterias de testes em ambientes de CI

Fluxo de Arquitetura

[HTTP Requests] ──► [Express Controller] ──► [Insert Job: PENDING]
                                                        │
                                                        ▼
                                              [SQLite Queue Table]
                                                        │
                                                        ▼
                                              [Background Worker Loop]
                                                        │
                                                        ├──► [Random Delay Jitter]
                                                        ▼
                                              [WPPConnect WhatsApp API]

• Backend: Node.js e Express expondo rotas REST

• Banco: SQLite com driver nativo operando em transações atômicas

• Fila: Scheduler baseado em timestamps e estados ('pending', 'processing', 'completed')

Implementação em Código

Worker Contínuo com Transação Atômicatypescript
async function processNextJob() {
  const job = db.prepare(`
    UPDATE queue 
    SET status = 'processing', updated_at = ? 
    WHERE id = (SELECT id FROM queue WHERE status = 'pending' LIMIT 1)
    RETURNING *
  `).get(Date.now());

  if (!job) return;
  await dispatchMessage(job);
}

Desafios Técnicos Resolvidos

Desafio:

Garantir integridade da fila de envios mesmo se o container cair.

Resolução Implementada:

Toda alteração de estado é persistida atomicamente no SQLite, permitindo retomada imediata pós-crash.

Desafio:

Evitar bloqueios na plataforma de mensageria provocados por envios rítmicos.

Resolução Implementada:

Algoritmo de cálculo de delay não linear e distribuição randômica de intervalos.

Tem interesse em detalhes da arquitetura ou código deste projeto?

Conversar no WhatsApp