Skip to content

Commit 53f47d5

Browse files
committed
feat: Implementei agora a geração ativa de Link Preview dentro do serviço do WhatsApp
1 parent 3f91cf4 commit 53f47d5

File tree

1 file changed

+46
-1
lines changed

1 file changed

+46
-1
lines changed

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

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ import { createHash } from 'crypto';
139139
import EventEmitter2 from 'eventemitter2';
140140
import ffmpeg from 'fluent-ffmpeg';
141141
import FormData from 'form-data';
142+
import { getLinkPreview } from 'link-preview-js';
142143
import Long from 'long';
143144
import mimeTypes from 'mime-types';
144145
import NodeCache from 'node-cache';
@@ -2221,6 +2222,43 @@ export class BaileysStartupService extends ChannelStartupService {
22212222
}
22222223
}
22232224

2225+
private async generateLinkPreview(text: string) {
2226+
try {
2227+
const linkRegex = /https?:\/\/[^\s]+/;
2228+
const match = text.match(linkRegex);
2229+
2230+
if (!match) return undefined;
2231+
2232+
const url = match[0];
2233+
const previewData = await getLinkPreview(url, {
2234+
imagesPropertyType: 'og', // fetches only open-graph images
2235+
headers: {
2236+
'user-agent': 'googlebot', // fetches with googlebot to prevent login pages
2237+
},
2238+
}) as any;
2239+
2240+
if (!previewData || !previewData.title) return undefined;
2241+
2242+
const image = previewData.images && previewData.images.length > 0 ? previewData.images[0] : undefined;
2243+
2244+
return {
2245+
externalAdReply: {
2246+
title: previewData.title,
2247+
body: previewData.description,
2248+
mediaType: 2, // 2 for video/image preview, though usually 1 is for thumbnail
2249+
thumbnailUrl: image,
2250+
sourceUrl: url,
2251+
mediaUrl: url,
2252+
renderLargerThumbnail: true,
2253+
showAdAttribution: true
2254+
}
2255+
};
2256+
} catch (error) {
2257+
this.logger.error(`Error generating link preview: ${error}`);
2258+
return undefined;
2259+
}
2260+
}
2261+
22242262
private async sendMessage(
22252263
sender: string,
22262264
message: any,
@@ -2432,7 +2470,12 @@ export class BaileysStartupService extends ChannelStartupService {
24322470
}
24332471
}
24342472

2435-
const linkPreview = options?.linkPreview != false ? undefined : false;
2473+
const linkPreview = options?.linkPreview === false ? false : undefined;
2474+
2475+
let previewContext: any = undefined;
2476+
if (linkPreview !== false && (message as any)?.conversation) {
2477+
previewContext = await this.generateLinkPreview((message as any).conversation);
2478+
}
24362479

24372480
let quoted: WAMessage;
24382481

@@ -2486,6 +2529,7 @@ export class BaileysStartupService extends ChannelStartupService {
24862529
quoted,
24872530
null,
24882531
group?.ephemeralDuration,
2532+
previewContext,
24892533
// group?.participants,
24902534
);
24912535
} else {
@@ -2499,6 +2543,7 @@ export class BaileysStartupService extends ChannelStartupService {
24992543
unsigned: false,
25002544
},
25012545
disappearingMode: { initiator: 0 },
2546+
...previewContext,
25022547
};
25032548
messageSent = await this.sendMessage(
25042549
sender,

0 commit comments

Comments
 (0)