From bd35d7977c6b08d66e780a243f4d34efdf36b026 Mon Sep 17 00:00:00 2001 From: AlexisJusviack <67768512+AlexisJusviack@users.noreply.github.com> Date: Fri, 11 Jul 2025 23:50:58 -0300 Subject: [PATCH] Fix: Support media extraction from templateMessage in getBase64FromMediaMessage ### Fix: Add support for templateMessage media in getBase64FromMediaMessage #### What this does Adds support to download media from `templateMessage` structures in `getBase64FromMediaMessage`, by checking for `hydratedTemplate` and `hydratedFourRowTemplate`. #### Why it's needed Currently, media inside templates (e.g. `imageMessage`, `videoMessage`, `documentMessage`) is not processed by the method, which leads to errors or media being skipped. #### How it works If a `templateMessage` is detected, the code looks into the inner hydrated template and assigns the correct `mediaMessage` and `mediaType`. Then it proceeds as usual with the download logic. #### Example message ```json { "message": { "templateMessage": { "hydratedTemplate": { "imageMessage": { "mimetype": "image/jpeg", "fileLength": 123456, "url": "https://..." } } } } } --- .../whatsapp/whatsapp.baileys.service.ts | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts index de31b503d..edb7d808b 100644 --- a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts +++ b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts @@ -3437,16 +3437,34 @@ export class BaileysStartupService extends ChannelStartupService { let mediaMessage: any; let mediaType: string; - for (const type of TypeMediaMessage) { - mediaMessage = msg.message[type]; - if (mediaMessage) { - mediaType = type; - break; + if (msg.message?.templateMessage) { + const template = + msg.message.templateMessage.hydratedTemplate || msg.message.templateMessage.hydratedFourRowTemplate; + + for (const type of TypeMediaMessage) { + if (template[type]) { + mediaMessage = template[type]; + mediaType = type; + msg.message = { [type]: { ...template[type], url: template[type].staticUrl } }; + break; + } + } + + if (!mediaMessage) { + throw 'Template message does not contain a supported media type'; + } + } else { + for (const type of TypeMediaMessage) { + mediaMessage = msg.message[type]; + if (mediaMessage) { + mediaType = type; + break; + } } - } - if (!mediaMessage) { - throw 'The message is not of the media type'; + if (!mediaMessage) { + throw 'The message is not of the media type'; + } } if (typeof mediaMessage['mediaKey'] === 'object') {