fix(carousel): hasSubtitle + relayMessage direto + proto atualizado

Implementação completa baseada na análise ponto-a-ponto de 5 diferenças:

1. hasSubtitle adicionado ao proto schema (field 10, bool em Header)
   - Adicionado ao WAProto.proto, index.js (encode/decode/fromObject/toObject)
   - Adicionado ao index.d.ts (IHeader, Header class)
   - Usado no root header e em cada card do carousel

2. relayMessage direto para carousel em sendMessage
   - Detecta nativeCarousel no content e bypassa generateWAMessage inteiro
   - Chama generateWAMessageContent (que usa fromObject) diretamente
   - Depois relayMessage sem passar por generateWAMessageFromContent
   - Elimina: segundo WAProto.Message.create(), contextInfo.expiration, etc.

3. Pipeline final do carousel agora:
   sendMessage → generateWAMessageContent(fromObject) → relayMessage
   Sem: generateWAMessageFromContent, WAProto.Message.create, ephemeral

Commits anteriores já incluem:
- viewOnceMessage wrapper
- fromObject no generateWAMessageContent
- Skip tctoken no stanza

https://claude.ai/code/session_01EK9NpViRCtda1WAvFd8ptR
This commit is contained in:
Claude
2026-02-06 21:07:44 +00:00
parent dede2fa3c0
commit 3ac2c33d93
5 changed files with 74 additions and 2 deletions
+3 -2
View File
@@ -616,7 +616,8 @@ export const generateCarouselMessage = async (
const header: any = {
title: card.title || '',
hasMediaAttachment: hasMedia
hasMediaAttachment: hasMedia,
hasSubtitle: !!card.title
}
// Process media if present
@@ -642,7 +643,7 @@ export const generateCarouselMessage = async (
// Build the interactive message with carousel
const interactiveMessage: proto.Message.IInteractiveMessage = {
header: text ? { title: text } : undefined,
header: text ? { title: text, hasSubtitle: true } : undefined,
body: { text: text || '' },
footer: footer ? { text: footer } : undefined,
carouselMessage: {