From 0c39339e00ecbc95a44fd157034a4a0c4d86c71f Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 6 Feb 2026 17:02:46 +0000 Subject: [PATCH] fix(carousel): add carouselCardType HSCROLL_CARDS and remove viewOnceMessage Two changes to fix carousel rendering on WhatsApp Web/Desktop: 1. Added carouselCardType: 1 (HSCROLL_CARDS) to carouselMessage - this proto field tells the client how to render carousel cards. Without it, Web/Desktop doesn't know to render horizontal scrollable cards. 2. Removed viewOnceMessage wrapper - confirmed it causes error 479 rejection from linked devices (Web/Desktop). Carousel works as direct interactiveMessage on phone; carouselCardType should fix Web. https://claude.ai/code/session_01EK9NpViRCtda1WAvFd8ptR --- src/Utils/messages.ts | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/Utils/messages.ts b/src/Utils/messages.ts index e241f0b6..129a97a8 100644 --- a/src/Utils/messages.ts +++ b/src/Utils/messages.ts @@ -654,22 +654,16 @@ export const generateCarouselMessage = async ( }, carouselMessage: { cards: carouselCards, - messageVersion: 1 + messageVersion: 1, + carouselCardType: 1 // HSCROLL_CARDS - required for Web/Desktop to render carousel cards } } - // Wrap in viewOnceMessage - required for WhatsApp Web/Desktop rendering - // Without this wrapper, Web only shows the header/body text + // Return as direct interactiveMessage (no viewOnceMessage wrapper) + // viewOnceMessage causes error 479 rejection from linked devices (Web/Desktop) + // carouselCardType: 1 (HSCROLL_CARDS) tells Web how to render the cards return { - viewOnceMessage: { - message: { - messageContextInfo: { - deviceListMetadata: {}, - deviceListMetadataVersion: 2 - }, - interactiveMessage - } - } + interactiveMessage } } @@ -1166,8 +1160,8 @@ export const generateWAMessageContent = async ( } // Pass options for media processing if cards have images/videos const generated = await generateCarouselMessage(carouselOptions, options) - m.viewOnceMessage = generated.viewOnceMessage - options.logger?.info('Sending carouselMessage with viewOnceMessage wrapper') + m.interactiveMessage = generated.interactiveMessage + options.logger?.info('Sending carouselMessage with carouselCardType HSCROLL_CARDS') } // Check for nativeList else if (hasNonNullishProperty(message, 'nativeList')) {