From 8e7f348c12d86daf850df9fc49084fd75190baf6 Mon Sep 17 00:00:00 2001 From: Murilo Leal Date: Wed, 26 Nov 2025 13:29:31 -0300 Subject: [PATCH] fix(baileys): prevent message loss from WhatsApp stub placeholders MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mensagens do WhatsApp estavam sendo perdidas e não eram salvas no banco de dados, especialmente mensagens de canais/newsletters (@lid) e mensagens com criptografia complexa. O WhatsApp/Baileys envia mensagens criptografadas em duas etapas: 1. Primeiro: Envia um stub (placeholder) com messageStubParameters: ['Message absent from node'] enquanto descriptografa a mensagem 2. Depois: Envia a mensagem real com o conteúdo descriptografado O problema ocorria porque: - O stub chegava primeiro e era adicionado ao cache de mensagens duplicadas - O stub era descartado (corretamente) por não ter conteúdo (!received?.message) - A mensagem real chegava depois, mas era ignorada como duplicata porque o ID já estava no cache - Resultado: mensagem nunca era salva no banco de dados Solução: - Detectar stubs do WhatsApp através de messageStubParameters contendo 'Message absent from node' - Não adicionar stubs ao cache de mensagens duplicadas - Permitir que a mensagem real seja processada quando chegar - Manter o descarte do stub para evitar salvar placeholders vazios --- .../integrations/channel/whatsapp/whatsapp.baileys.service.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts index 2636adbda..79bfb3b0f 100644 --- a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts +++ b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts @@ -82,7 +82,7 @@ import { createId as cuid } from '@paralleldrive/cuid2'; import { Instance, Message } from '@prisma/client'; import { createJid } from '@utils/createJid'; import { fetchLatestWaWebVersion } from '@utils/fetchLatestWaWebVersion'; -import {makeProxyAgent, makeProxyAgentUndici} from '@utils/makeProxyAgent'; +import { makeProxyAgent, makeProxyAgentUndici } from '@utils/makeProxyAgent'; import { getOnWhatsappCache, saveOnWhatsappCache } from '@utils/onWhatsappCache'; import { status } from '@utils/renderStatus'; import { sendTelemetry } from '@utils/sendTelemetry'; @@ -1068,6 +1068,7 @@ export class BaileysStartupService extends ChannelStartupService { 'Invalid PreKey ID', 'No session record', 'No session found to decrypt message', + 'Message absent from node', ].some((err) => param?.includes?.(err)), ) ) {