Skip to content

Commit 1c7dfc0

Browse files
committed
feat(text): suporte a linkPreviewOverride (fork v2.3.7-lp)
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).
1 parent cd800f2 commit 1c7dfc0

4 files changed

Lines changed: 65 additions & 27 deletions

File tree

package-lock.json

Lines changed: 0 additions & 26 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/api/dto/sendMessage.dto.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,29 @@ export class Quoted {
55
message: proto.IMessage;
66
}
77

8+
/**
9+
* Forked patch (ligge/evolution-api v2.3.7-lp): permite injetar preview
10+
* de link pre-montado, contornando a lib de link-preview do Baileys que
11+
* falha com shorteners (amzn.to, bit.ly, etc). O dispatcher resolve o
12+
* shortener + scrape de og:* e envia estes campos prontos.
13+
*/
14+
export class LinkPreviewOverride {
15+
title?: string;
16+
description?: string;
17+
/** URL canonica que o Baileys vai usar no card (sem trocar a URL do texto) */
18+
canonicalUrl?: string;
19+
/** URL da imagem de thumbnail; Baileys baixa e embute */
20+
thumbnailUrl?: string;
21+
/** Alternativa: base64 puro (sem prefixo data:) da thumbnail em JPEG */
22+
jpegThumbnail?: string;
23+
}
24+
825
export class Options {
926
delay?: number;
1027
presence?: WAPresence;
1128
quoted?: Quoted;
1229
linkPreview?: boolean;
30+
linkPreviewOverride?: LinkPreviewOverride;
1331
encoding?: boolean;
1432
mentionsEveryOne?: boolean;
1533
mentioned?: string[];
@@ -41,6 +59,8 @@ export class Metadata {
4159
delay?: number;
4260
quoted?: Quoted;
4361
linkPreview?: boolean;
62+
/** Patch fork: preview de link pre-montado (contorna Baileys com shorteners) */
63+
linkPreviewOverride?: LinkPreviewOverride;
4464
mentionsEveryOne?: boolean;
4565
mentioned?: string[];
4666
encoding?: boolean;

src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2338,7 +2338,14 @@ export class BaileysStartupService extends ChannelStartupService {
23382338
}
23392339
}
23402340

2341-
const linkPreview = options?.linkPreview != false ? undefined : false;
2341+
// Forked patch (v2.3.7-lp): override tem prioridade. Se o caller
2342+
// passou um objeto WAUrlInfo pronto, usa-o; senao, delega ao Baileys
2343+
// (undefined = auto-detect, false = desabilita).
2344+
const linkPreview: any = options?.linkPreviewOverride
2345+
? options.linkPreviewOverride
2346+
: options?.linkPreview != false
2347+
? undefined
2348+
: false;
23422349

23432350
let quoted: WAMessage;
23442351

@@ -2633,6 +2640,31 @@ export class BaileysStartupService extends ChannelStartupService {
26332640
throw new BadRequestException('Text is required');
26342641
}
26352642

2643+
// Forked patch (v2.3.7-lp): monta WAUrlInfo se veio linkPreviewOverride
2644+
// (contorna Baileys link-preview que falha com shorteners)
2645+
let linkPreviewOverride: any = undefined;
2646+
if (data.linkPreviewOverride) {
2647+
const ov = data.linkPreviewOverride;
2648+
const urlMatch = text.match(/https?:\/\/\S+/i);
2649+
if (urlMatch) {
2650+
linkPreviewOverride = {
2651+
'matched-text': urlMatch[0],
2652+
matchedText: urlMatch[0],
2653+
'canonical-url': ov.canonicalUrl ?? urlMatch[0],
2654+
canonicalUrl: ov.canonicalUrl ?? urlMatch[0],
2655+
title: ov.title,
2656+
description: ov.description,
2657+
...(ov.thumbnailUrl && {
2658+
thumbnailUrl: ov.thumbnailUrl,
2659+
'thumbnail-url': ov.thumbnailUrl,
2660+
}),
2661+
...(ov.jpegThumbnail && {
2662+
jpegThumbnail: Buffer.from(ov.jpegThumbnail, 'base64'),
2663+
}),
2664+
};
2665+
}
2666+
}
2667+
26362668
return await this.sendMessageWithTyping(
26372669
data.number,
26382670
{ conversation: data.text },
@@ -2641,6 +2673,7 @@ export class BaileysStartupService extends ChannelStartupService {
26412673
presence: 'composing',
26422674
quoted: data?.quoted,
26432675
linkPreview: data?.linkPreview,
2676+
linkPreviewOverride,
26442677
mentionsEveryOne: data?.mentionsEveryOne,
26452678
mentioned: data?.mentioned,
26462679
},

src/validate/message.schema.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,17 @@ export const textMessageSchema: JSONSchema7 = {
7272
number: { ...numberDefinition },
7373
text: { type: 'string' },
7474
linkPreview: { type: 'boolean' },
75+
// Forked patch (v2.3.7-lp): preview de link pre-montado pra shorteners
76+
linkPreviewOverride: {
77+
type: 'object',
78+
properties: {
79+
title: { type: 'string' },
80+
description: { type: 'string' },
81+
canonicalUrl: { type: 'string' },
82+
thumbnailUrl: { type: 'string' },
83+
jpegThumbnail: { type: 'string' },
84+
},
85+
},
7586
delay: {
7687
type: 'integer',
7788
description: 'Enter a value in milliseconds',

0 commit comments

Comments
 (0)