From 6c5bbfbd14ba1b8fe95bcbc82d9477b05e43ce0c Mon Sep 17 00:00:00 2001 From: rudaev Date: Thu, 2 Apr 2026 19:18:08 +0700 Subject: [PATCH] fix(noweb): use stream mode for media download to fix 0-byte audio files The 'buffer' mode in Baileys' downloadMediaMessage() silently returns an empty buffer for audio/voice messages (PTT, OGG Opus), while images download correctly. Switching to 'stream' mode and collecting chunks manually resolves the issue. Tested in production (WAHA Plus 2026.3.4, NOWEB engine, S3 storage): - Before: voice messages saved as 0 bytes in S3 - After: voice messages saved with correct size (58,005 bytes confirmed) Fixes #1996 --- src/core/engines/noweb/session.noweb.core.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/core/engines/noweb/session.noweb.core.ts b/src/core/engines/noweb/session.noweb.core.ts index d5b850a9..56baedc6 100644 --- a/src/core/engines/noweb/session.noweb.core.ts +++ b/src/core/engines/noweb/session.noweb.core.ts @@ -2848,9 +2848,12 @@ export class NOWEBEngineMediaProcessor implements IMediaEngineProcessor { content.url = null; } - return (await downloadMediaMessage( + // Use 'stream' mode instead of 'buffer' to fix 0-byte audio files + // 'buffer' mode silently returns empty buffer for audio/voice messages + // See: https://github.com/devlikeapro/waha/issues/1996 + const stream = await downloadMediaMessage( message, - 'buffer', + 'stream', {}, { logger: this.logger, @@ -2859,7 +2862,12 @@ export class NOWEBEngineMediaProcessor implements IMediaEngineProcessor { ).finally(() => { // Set url back in case we removed it content.url = url; - })) as Buffer; + }); + const chunks: Buffer[] = []; + for await (const chunk of stream) { + chunks.push(chunk); + } + return Buffer.concat(chunks); } getFilename(message: any): string | null {