From b5c5989ed85a25d480edf84a1fd012f8cc711318 Mon Sep 17 00:00:00 2001 From: Renato Alcara Date: Mon, 26 Jan 2026 02:27:22 -0300 Subject: [PATCH 1/2] fix(messages): detect interactive messages inside viewOnceMessage wrapper The getButtonType function was not detecting interactive messages when wrapped inside viewOnceMessage (the modern nativeFlowMessage format). This fix adds detection for: - viewOnceMessage > interactiveMessage - viewOnceMessage > listMessage - viewOnceMessage > buttonsMessage When enableInteractiveMessages is true, the 'biz' node will now be correctly injected for messages using the viewOnceMessage wrapper. Co-Authored-By: Claude Opus 4.5 --- src/Socket/messages-send.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/Socket/messages-send.ts b/src/Socket/messages-send.ts index 44e3a47d..4f8a269a 100644 --- a/src/Socket/messages-send.ts +++ b/src/Socket/messages-send.ts @@ -612,6 +612,7 @@ export const makeMessagesSocket = (config: SocketConfig) => { // ⚠️ EXPERIMENTAL: Functions to detect and handle interactive messages // These features may not work and can cause account bans const getButtonType = (message: proto.IMessage): string | undefined => { + // Check direct message types (legacy formats) if (message.buttonsMessage) { return 'buttons' } else if (message.templateMessage) { @@ -627,6 +628,20 @@ export const makeMessagesSocket = (config: SocketConfig) => { } else if (message.interactiveMessage) { return 'interactive' } + + // Check inside viewOnceMessage wrapper (modern nativeFlowMessage format) + // This is the recommended format for interactive messages + const innerMessage = message.viewOnceMessage?.message + if (innerMessage) { + if (innerMessage.interactiveMessage) { + return 'interactive' + } else if (innerMessage.listMessage) { + return 'list' + } else if (innerMessage.buttonsMessage) { + return 'buttons' + } + } + return undefined } From d081afe02bdf69a0083e721425c9c353f934d80f Mon Sep 17 00:00:00 2001 From: Renato Alcara Date: Mon, 26 Jan 2026 02:49:21 -0300 Subject: [PATCH 2/2] fix(messages): check all 7 message types inside viewOnceMessage wrapper Address PR review comment: the viewOnceMessage detection now checks all 7 message types for consistency with direct message detection: - buttonsMessage - templateMessage - listMessage - buttonsResponseMessage - listResponseMessage - templateButtonReplyMessage - interactiveMessage Co-Authored-By: Claude Opus 4.5 --- src/Socket/messages-send.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/Socket/messages-send.ts b/src/Socket/messages-send.ts index 4f8a269a..62ed959d 100644 --- a/src/Socket/messages-send.ts +++ b/src/Socket/messages-send.ts @@ -631,14 +631,23 @@ export const makeMessagesSocket = (config: SocketConfig) => { // Check inside viewOnceMessage wrapper (modern nativeFlowMessage format) // This is the recommended format for interactive messages + // Check all 7 types for consistency with direct message detection const innerMessage = message.viewOnceMessage?.message if (innerMessage) { - if (innerMessage.interactiveMessage) { - return 'interactive' + if (innerMessage.buttonsMessage) { + return 'buttons' + } else if (innerMessage.templateMessage) { + return 'template' } else if (innerMessage.listMessage) { return 'list' - } else if (innerMessage.buttonsMessage) { - return 'buttons' + } else if (innerMessage.buttonsResponseMessage) { + return 'buttons_response' + } else if (innerMessage.listResponseMessage) { + return 'list_response' + } else if (innerMessage.templateButtonReplyMessage) { + return 'template_reply' + } else if (innerMessage.interactiveMessage) { + return 'interactive' } }