Skip to content

Commit 855c24f

Browse files
committed
new_feature_lottieMessage_healthCheck
1 parent 5f530e1 commit 855c24f

File tree

11 files changed

+105
-24
lines changed

11 files changed

+105
-24
lines changed

docker-compose.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ services:
22
api:
33
container_name: evolution_api_${ENVIROMNENT}
44
build: .
5-
#image: evoapicloud/evolution-api:latest
5+
image: adaptweb/evolution-api:1.2.1
66
restart: always
77
depends_on:
88
- redis
@@ -24,11 +24,11 @@ services:
2424
- evolution-net
2525
container_name: redis_${ENVIROMNENT}
2626
command: >
27-
redis-server --port 6379 --appendonly yes
27+
redis-server --port 11235 --appendonly yes
2828
volumes:
2929
- evolution_redis:/data
3030
ports:
31-
- ${REDIS_PORT}:6379
31+
- ${REDIS_PORT}:11235
3232

3333
postgres:
3434
container_name: postgres_${ENVIROMNENT}
@@ -38,7 +38,7 @@ services:
3838
command: ["postgres", "-c", "max_connections=1000", "-c", "listen_addresses=*"]
3939
restart: always
4040
ports:
41-
- ${DATABASE_PORT}:5432
41+
- ${DATABASE_PORT}:11234
4242
environment:
4343
- POSTGRES_USER=user
4444
- POSTGRES_PASSWORD=pass

src/api/controllers/chat.controller.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ export class ChatController {
4343
}
4444

4545
public async fetchProfilePicture({ instanceName }: InstanceDto, data: NumberDto) {
46-
console.dir("Fetching profile picture...");
4746
return await this.waMonitor.waInstances[instanceName].profilePicture(data.number);
4847
}
4948

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { WAMonitoringService } from '@api/services/monitor.service';
2+
3+
import { UnauthorizedException } from '../../exceptions';
4+
import { PrismaRepository } from '../repository/repository.service';
5+
6+
export class HealthController {
7+
constructor(
8+
private readonly waMonitor: WAMonitoringService,
9+
private readonly prismaRepository: PrismaRepository,
10+
) {}
11+
12+
public async checkHealth() {
13+
const instancesByKey = await this.prismaRepository.instance.findMany();
14+
15+
if (instancesByKey.length > 0) {
16+
const names = instancesByKey.map((instance) => instance.name);
17+
18+
return this.waMonitor.instanceInfo(names);
19+
} else {
20+
return [];
21+
}
22+
}
23+
}

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

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ import makeWASocket, {
9898
Contact,
9999
delay,
100100
DisconnectReason,
101+
downloadContentFromMessage,
101102
downloadMediaMessage,
102103
fetchLatestBaileysVersion,
103104
generateWAMessageFromContent,
@@ -1248,6 +1249,7 @@ export class BaileysStartupService extends ChannelStartupService {
12481249
received?.message?.imageMessage ||
12491250
received?.message?.videoMessage ||
12501251
received?.message?.stickerMessage ||
1252+
received?.message?.lottieStickerMessage ||
12511253
received?.message?.documentMessage ||
12521254
received?.message?.documentWithCaptionMessage ||
12531255
received?.message?.ptvMessage ||
@@ -1362,27 +1364,49 @@ export class BaileysStartupService extends ChannelStartupService {
13621364
}
13631365
}
13641366
}
1365-
1366-
if (this.localWebhook.enabled) {
1367-
if (isMedia && this.localWebhook.webhookBase64) {
1367+
if (1/* this.localWebhook.enabled */) {
1368+
if (1/* isMedia && this.localWebhook.webhookBase64 */) {
13681369
try {
1369-
const buffer = await downloadMediaMessage(
1370-
{ key: received.key, message: received?.message },
1371-
'buffer',
1372-
{},
1373-
{
1374-
logger: P({ level: 'error' }) as any,
1375-
reuploadRequest: this.client.updateMediaMessage,
1376-
},
1377-
);
1370+
let buffer : Buffer = null;
1371+
console.dir({received}, {depth: null});
1372+
if ((received.message.stickerMessage && received.message.stickerMessage.url === 'https://web.whatsapp.net')
1373+
|| (received.message.lottieStickerMessage && received.message.lottieStickerMessage.message.stickerMessage.url)) { /*Fixing broken URLs from sticker messages*/
1374+
const newUrl = `https://mmg.whatsapp.net${received.message.lottieStickerMessage ? received.message.lottieStickerMessage.message.stickerMessage.directPath : received.message.stickerMessage.directPath }`;
13781375

1376+
const stream = await downloadContentFromMessage(
1377+
{
1378+
mediaKey: received.message?.stickerMessage?.mediaKey || received.message.lottieStickerMessage?.message?.stickerMessage?.mediaKey,
1379+
directPath: received.message?.stickerMessage?.directPath || received.message.lottieStickerMessage?.message?.stickerMessage?.directPath,
1380+
url: newUrl
1381+
},
1382+
'sticker',
1383+
{},
1384+
)
1385+
const chunks = [];
1386+
for await (const chunk of stream) {
1387+
chunks.push(chunk);
1388+
}
1389+
buffer = Buffer.concat(chunks);
1390+
messageRaw.message.url = newUrl;
1391+
} else {
1392+
buffer = await downloadMediaMessage(
1393+
{ key: received.key, message: received?.message },
1394+
'buffer',
1395+
{},
1396+
{
1397+
logger: P({ level: 'error' }) as any,
1398+
reuploadRequest: this.client.updateMediaMessage,
1399+
},
1400+
);
1401+
}
13791402
messageRaw.message.base64 = buffer ? buffer.toString('base64') : undefined;
13801403
} catch (error) {
13811404
this.logger.error(['Error converting media to base64', error?.message]);
13821405
}
13831406
}
13841407
}
13851408

1409+
console.dir({webhookMessage: messageRaw}, {depth: null})
13861410
this.logger.log(messageRaw);
13871411

13881412
this.sendDataWebhook(Events.MESSAGES_UPSERT, messageRaw);
@@ -1508,13 +1532,11 @@ export class BaileysStartupService extends ChannelStartupService {
15081532
},
15091533
});
15101534

1511-
15121535
if (!findMessage) {
15131536
continue;
15141537
}
15151538

15161539
if (update.message === null && update.status === undefined) {
1517-
15181540
const deletedMessage = {
15191541
id: findMessage.id,
15201542
instanceId: this.instanceId,
@@ -1526,7 +1548,7 @@ export class BaileysStartupService extends ChannelStartupService {
15261548
pushName: findMessage.pushName,
15271549
participant: findMessage.participant,
15281550
message: findMessage.message,
1529-
}
1551+
};
15301552

15311553
this.sendDataWebhook(Events.MESSAGES_DELETE, deletedMessage);
15321554

@@ -1756,7 +1778,7 @@ export class BaileysStartupService extends ChannelStartupService {
17561778
}
17571779

17581780
if (events['messages.upsert']) {
1759-
const payload = events['messages.upsert'];
1781+
const payload = events['messages.upsert']
17601782
this.messageHandle['messages.upsert'](payload, settings);
17611783
}
17621784

@@ -1880,12 +1902,10 @@ export class BaileysStartupService extends ChannelStartupService {
18801902
}
18811903

18821904
public async profilePicture(number: string) {
1883-
console.dir(`converting jid:${number}`);
18841905
const jid = createJid(number);
18851906

18861907
try {
18871908
const profilePictureUrl = await this.client.profilePictureUrl(jid, 'image');
1888-
console.dir({ profilePictureUrl });
18891909

18901910
return {
18911911
wuid: jid,
@@ -2280,7 +2300,8 @@ export class BaileysStartupService extends ChannelStartupService {
22802300
messageSent?.message?.documentMessage ||
22812301
messageSent?.message?.documentWithCaptionMessage ||
22822302
messageSent?.message?.ptvMessage ||
2283-
messageSent?.message?.audioMessage;
2303+
messageSent?.message?.audioMessage ||
2304+
messageSent?.message?.lottieStickerMessage;
22842305

22852306
if (this.configService.get<Chatwoot>('CHATWOOT').ENABLED && this.localChatwoot?.enabled && !isIntegration) {
22862307
this.chatwootService.eventWhatsapp(

src/api/integrations/chatbot/chatwoot/services/chatwoot.service.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1597,6 +1597,7 @@ export class ChatwootService {
15971597
'audioMessage',
15981598
'videoMessage',
15991599
'stickerMessage',
1600+
'lottieStickerMessage',
16001601
'viewOnceMessageV2',
16011602
];
16021603

@@ -1651,6 +1652,7 @@ export class ChatwootService {
16511652
extendedTextMessage: msg.extendedTextMessage?.text,
16521653
messageContextInfo: msg.messageContextInfo?.stanzaId,
16531654
stickerMessage: undefined,
1655+
lottieStickerMessage: undefined,
16541656
documentMessage: msg.documentMessage?.caption,
16551657
documentWithCaptionMessage: msg.documentWithCaptionMessage?.message?.documentMessage?.caption,
16561658
audioMessage: msg.audioMessage?.caption,

src/api/integrations/chatbot/chatwoot/utils/chatwoot-import-helper.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,7 @@ class ChatwootImport {
497497
videoMessage: msg.message.videoMessage,
498498
audioMessage: msg.message.audioMessage,
499499
stickerMessage: msg.message.stickerMessage,
500+
lottieStickerMessage: msg.message.lottieStickerMessage,
500501
templateMessage: msg.message.templateMessage?.hydratedTemplate?.hydratedContentText,
501502
};
502503
const typeKey = Object.keys(types).find((key) => types[key] !== undefined);
@@ -531,6 +532,9 @@ class ChatwootImport {
531532
case 'stickerMessage':
532533
return '_<Sticker Message>_';
533534

535+
case 'lottieStickerMessage':
536+
return '_<lottieStickerMessage>_';
537+
534538
default:
535539
return '';
536540
}

src/api/routes/health.router.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { RequestHandler, Router } from "express";
2+
import { RouterBroker } from "../abstract/abstract.router";
3+
import { HttpStatus } from "./index.router";
4+
import { healthController } from "@api/server.module";
5+
6+
7+
export class HealthRouter extends RouterBroker {
8+
constructor() {
9+
super();
10+
this.router
11+
.get(this.routerPath('healthz', false), async (req, res) => {
12+
await healthController.checkHealth();
13+
return res.status(HttpStatus.OK).json({msg: 'healthy'});
14+
})
15+
}
16+
17+
public readonly router: Router = Router();
18+
}

src/api/routes/index.router.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { MessageRouter } from './sendMessage.router';
2222
import { SettingsRouter } from './settings.router';
2323
import { TemplateRouter } from './template.router';
2424
import { ViewsRouter } from './view.router';
25+
import { HealthRouter} from './health.router';
2526

2627
enum HttpStatus {
2728
OK = 200,
@@ -57,6 +58,8 @@ router.get('/assets/*', (req, res) => {
5758
}
5859
});
5960

61+
console.dir(new HealthRouter().router, { depth: null });
62+
6063
router
6164
.use((req, res, next) => telemetry.collectTelemetry(req, res, next))
6265

@@ -79,6 +82,7 @@ router
7982
facebookUserToken: process.env.FACEBOOK_USER_TOKEN,
8083
});
8184
})
85+
.use('', new HealthRouter().router)
8286
.use('/instance', new InstanceRouter(configService, ...guards).router)
8387
.use('/message', new MessageRouter(...guards).router)
8488
.use('/call', new CallRouter(...guards).router)

src/api/server.module.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import { WAMonitoringService } from './services/monitor.service';
4040
import { ProxyService } from './services/proxy.service';
4141
import { SettingsService } from './services/settings.service';
4242
import { TemplateService } from './services/template.service';
43+
import { HealthController } from './controllers/health.controller';
4344

4445
const logger = new Logger('WA MODULE');
4546

@@ -107,6 +108,9 @@ export const eventManager = new EventManager(prismaRepository, waMonitor);
107108
export const chatbotController = new ChatbotController(prismaRepository, waMonitor);
108109
export const channelController = new ChannelController(prismaRepository, waMonitor);
109110

111+
//Health check
112+
export const healthController = new HealthController(waMonitor, prismaRepository);
113+
110114
// channels
111115
export const evolutionController = new EvolutionController(prismaRepository, waMonitor);
112116
export const metaController = new MetaController(prismaRepository, waMonitor);

src/api/services/channel.service.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,11 @@ export class ChannelStartupService {
552552
cleanedMessage.message.stickerMessage = {};
553553
}
554554

555+
// Limpa LottieStickerMessage
556+
if(cleanedMessage.message.lottieStickerMessage) {
557+
cleanedMessage.message.lottieStickerMessage = {};
558+
}
559+
555560
// Limpa documentMessage
556561
if (cleanedMessage.message.documentMessage) {
557562
cleanedMessage.message.documentMessage = {

0 commit comments

Comments
 (0)