From 624b37e2aa11dbf1565dce8aabdc24a6cc5b8855 Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Wed, 21 May 2025 15:01:17 -0300 Subject: [PATCH] fix(media): improve media download handling for base64 conversion - Enhanced the logic for converting media messages to base64 by adding a retry mechanism for downloading media if the initial buffer is not available. - This change ensures that media messages are reliably converted to base64 format, improving the robustness of media handling in the WhatsApp integration service. - Updated error logging to capture issues during the media conversion process. --- .../whatsapp/whatsapp.baileys.service.ts | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts index aa8f245c..9b853b71 100644 --- a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts +++ b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts @@ -1389,7 +1389,24 @@ export class BaileysStartupService extends ChannelStartupService { }, ); - messageRaw.message.base64 = buffer ? buffer.toString('base64') : undefined; + if (buffer) { + messageRaw.message.base64 = buffer.toString('base64'); + } else { + // retry to download media + const buffer = await downloadMediaMessage( + { key: received.key, message: received?.message }, + 'buffer', + {}, + { + logger: P({ level: 'error' }) as any, + reuploadRequest: this.client.updateMediaMessage, + }, + ); + + if (buffer) { + messageRaw.message.base64 = buffer.toString('base64'); + } + } } catch (error) { this.logger.error(['Error converting media to base64', error?.message]); } @@ -2373,7 +2390,24 @@ export class BaileysStartupService extends ChannelStartupService { }, ); - messageRaw.message.base64 = buffer ? buffer.toString('base64') : undefined; + if (buffer) { + messageRaw.message.base64 = buffer.toString('base64'); + } else { + // retry to download media + const buffer = await downloadMediaMessage( + { key: messageRaw.key, message: messageRaw?.message }, + 'buffer', + {}, + { + logger: P({ level: 'error' }) as any, + reuploadRequest: this.client.updateMediaMessage, + }, + ); + + if (buffer) { + messageRaw.message.base64 = buffer.toString('base64'); + } + } } catch (error) { this.logger.error(['Error converting media to base64', error?.message]); }