From f70bcd0b5341ec543cc0fc992faf9f5ae06aab2d Mon Sep 17 00:00:00 2001 From: devlikepro Date: Tue, 14 Apr 2026 14:55:25 +0700 Subject: [PATCH] [core] ChatWoot - use media from replyTo.media if provided --- .../to/chatwoot/StatusReplyMessage.ts | 28 +++++++++++++++---- .../messages/to/chatwoot/TextMessage.ts | 7 +++-- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/apps/chatwoot/messages/to/chatwoot/StatusReplyMessage.ts b/src/apps/chatwoot/messages/to/chatwoot/StatusReplyMessage.ts index bb29aff4..1920aa61 100644 --- a/src/apps/chatwoot/messages/to/chatwoot/StatusReplyMessage.ts +++ b/src/apps/chatwoot/messages/to/chatwoot/StatusReplyMessage.ts @@ -50,13 +50,29 @@ export class StatusReplyMessage extends TextMessage { let attachments: SendAttachment[] = []; const quoted = this.getStatusQuotedMessageInfo(payload); - const wamessage = await this.fetchStatusMessage(quoted.id); - if (wamessage?.media?.url) { - const extension = mime.extension(wamessage.media.mimetype); - wamessage.media.filename = `status-message.${extension}`; - const quotedAttachments = await super.getAttachments(wamessage); + let wamessage = null; // aka "quoted from store" + + // Media - Use provided replyTo.media if present + if (attachments.length === 0 && payload.replyTo.media) { + const extension = mime.extension(payload.replyTo.media.mimetype); + payload.replyTo.media.filename = `status-message.${extension}`; + const quotedAttachments = await super.getAttachments(payload.replyTo); attachments = [...attachments, ...quotedAttachments]; - } else { + } + + // Media - fetch message by id from store and use it's "media" + if (attachments.length == 0) { + wamessage = await this.fetchStatusMessage(quoted.id); + if (wamessage?.media?.url) { + const extension = mime.extension(wamessage.media.mimetype); + wamessage.media.filename = `status-message.${extension}`; + const quotedAttachments = await super.getAttachments(wamessage); + attachments = [...attachments, ...quotedAttachments]; + } + } + + // Media - get media url, key and try to decrypt it + if (attachments.length == 0) { const replyData = payload.replyTo._data; const quotedMedia = EngineHelper.ExtractQuotedMedia(replyData); if (quotedMedia) { diff --git a/src/apps/chatwoot/messages/to/chatwoot/TextMessage.ts b/src/apps/chatwoot/messages/to/chatwoot/TextMessage.ts index b5dcb67c..0a637b8d 100644 --- a/src/apps/chatwoot/messages/to/chatwoot/TextMessage.ts +++ b/src/apps/chatwoot/messages/to/chatwoot/TextMessage.ts @@ -11,6 +11,7 @@ import { MessageToChatWootConverter } from '@waha/apps/chatwoot/messages/to/chat import { WhatsappToMarkdown } from '@waha/apps/chatwoot/messages/to/chatwoot/utils/markdown'; import { JobLink } from '@waha/apps/app_sdk/JobUtils'; import { Job } from 'bullmq'; +import { WAMedia } from '@waha/structures/media.dto'; // eslint-disable-next-line @typescript-eslint/no-var-requires const mime = require('mime-types'); @@ -57,9 +58,9 @@ export class TextMessage implements MessageToChatWootConverter { }; } - protected async getAttachments( - payload: WAMessage, - ): Promise { + protected async getAttachments(payload: { + media?: WAMedia; + }): Promise { const hasMedia = payload.media?.url; if (!hasMedia) { return [];