Conversation
Contorna a lib de link-preview do Baileys que falha com shorteners
(amzn.to, bit.ly, etc) permitindo o caller pre-montar o preview
(title, description, canonicalUrl, thumbnail).
Se data.linkPreviewOverride vier no body de POST /message/sendText,
textMessage monta um WAUrlInfo pronto e entrega ao sock.sendMessage
como linkPreview objeto (em vez de boolean), fazendo Baileys renderizar
extendedTextMessage com card preview -- igual WhatsApp oficial.
Preserva a URL original do texto (nao altera o que o usuario ve) --
canonicalUrl eh so o campo interno do card do WhatsApp.
Arquivos:
- src/api/dto/sendMessage.dto.ts: LinkPreviewOverride + Metadata
- src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts:
textMessage monta WAUrlInfo; sendMessageWithTyping prioriza override
- src/validate/message.schema.ts: linkPreviewOverride no schema do text
Uso (body POST /message/sendText/:instance):
{
"number": "553196018045",
"text": "Oferta: https://amzn.to/ABC",
"linkPreviewOverride": {
"title": "Produto na Amazon",
"description": "Descricao og:description",
"canonicalUrl": "https://www.amazon.com.br/dp/XXX",
"thumbnailUrl": "https://.../og-image.jpg"
}
}
Mantem compatibilidade: se linkPreviewOverride ausente, comportamento
original (Baileys decide via linkPreview boolean).
feat(channel): add support for @newsletter in sendMessage and findChannels
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Escopo
Fork do Evolution API v2.3.7 com 3 patches críticos pro whatsapp-dispatcher do Ligge/Clube BHZ:
amzn.to,bit.ly)prepareWAMessageMedia— renderiza como hero card (imagem grande) em vez de thumbnail lateralnewsletterMetadataFromInviteDeployado na VM Oracle como
evolution-api-lp:v2.3.7.3(ARM64, build local).Commits
1. linkPreviewOverride (
1c7dfc05)Problema: Baileys usa
link-preview-jsque falha ao seguir redirects de shorteners. URLs tipoamzn.to/XXXchegam no WhatsApp como texto puro sem preview, mesmo comlinkPreview: true.Solução: novo campo
linkPreviewOverrideno body dePOST /message/sendText:{ "number": "5531999998888", "text": "Confira: https://amzn.to/4tWuwfo", "linkPreviewOverride": { "title": "Produto na Amazon", "description": "...", "canonicalUrl": "https://www.amazon.com.br/dp/XXX", "jpegThumbnail": "<base64 da imagem>" } }O fork monta um
WAUrlInfopronto (commatched-text,title,description,jpegThumbnail,canonicalUrl) e entrega direto aosock.sendMessage— fazendo Baileys renderizarextendedTextMessagecom card preview, igual WhatsApp oficial.A URL original no texto fica intacta —
canonicalUrlé só metadata do card (não substitui o link exibido). Afiliados e tracking permanecem funcionais.Arquivos
src/api/dto/sendMessage.dto.ts— classeLinkPreviewOverride+ campo emOptionseMetadatasrc/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts—textMessagemontaWAUrlInfo;sendMessageWithTypingprioriza override sobre booleansrc/validate/message.schema.ts— propriedade no JSONSchema desendText2. Upload real da thumbnail (
62eed894)Problema: v2.3.7.1 aceitava
jpegThumbnailcomo base64, mas Baileys exibia só um thumbnail lateral pequeno (protobuf embed). Queríamos hero card.Solução: quando
linkPreviewOverride.jpegThumbnailouthumbnailUrlvier, chamaprepareWAMessageMedia({ image }, { upload: waUploadToServer, mediaTypeOverride: 'thumbnail-link' })pra fazer upload real nos servidores do WhatsApp, obtendohighQualityThumbnailcompleto (directPath,mediaKey,mediaKeyTimestamp,fileSha256, etc).WhatsApp passa a renderizar como hero card (imagem grande, igual WhatsApp oficial). Fallback pra thumbnail simples se upload falhar.
Arquivos
src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts— blocotextMessagereescrito com try/catch de upload3. Newsletter (canal) support (
44518759+ab99d39d)3.1 Cherry-pick do upstream (
44518759)Traz o PR EvolutionAPI/evolution-api#2296 ("feat(channel): add support for @newsletter in sendMessage and findChannels") que foi merged no branch
developupstream em 11/dez/2025 mas ainda não saiu em release tagueada.POST /chat/findChannels/:instance— lista canais detectados via histórico de enviossendMessageaceitanumber: <id>@newslettercreateJidreconhece sufixo@newsletter3.2
newsletterMetadataFromInvite(ab99d39d)O PR upstream não resolve invite code → JID (só lista canais que já tiveram envio). Adicionei endpoint novo pra evitar o chicken-and-egg (sem JID não envia, sem enviar não aparece em findChannels):
Usa
sock.newsletterMetadata('invite', code)do Baileys. Retorna JID + name + subscribers_count + picture. Aceita também URL completa (https://whatsapp.com/channel/XXX).Arquivos
src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts— métodonewsletterMetadataFromInvite(inviteCode)src/api/controllers/chat.controller.ts— método controllersrc/api/routes/chat.router.ts— registra rotaDeploy
Build ARM64 nativo na VM Oracle Free Tier (aarch64):
Container roda healthy com mesmo
.envdo Evolution original — 100% retrocompat.Testes manuais validados
sendTextcomlinkPreviewOverridecompleto → hero card no WhatsApp (imagem Amazon forno Electrolux + título)amzn.to/4tWuwfo→ rastreável)newsletterMetadataFromInviteresolveu0029Vb7OgUv05MUYDGiozv3Y→120363420354363779@newsletter("DOIDO POR PROMOS")sendTextpro canal entrega + hero card renderiza com amzn.toNotas de manutenção
44518759vira merge-base zero.linkPreviewOverrideé custom nosso — não há PR upstream proposto. Mantém-se no fork.evolution-api-lp:vX.Y.Z). Pra distribuir pra outras máquinas, publicar no GHCR/Docker Hub.