mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-07-19 05:21:56 -06:00
new_feature_lottieMessage_healthCheck
This commit is contained in:
parent
5f530e1fcd
commit
855c24f38d
@ -2,7 +2,7 @@ services:
|
||||
api:
|
||||
container_name: evolution_api_${ENVIROMNENT}
|
||||
build: .
|
||||
#image: evoapicloud/evolution-api:latest
|
||||
image: adaptweb/evolution-api:1.2.1
|
||||
restart: always
|
||||
depends_on:
|
||||
- redis
|
||||
@ -24,11 +24,11 @@ services:
|
||||
- evolution-net
|
||||
container_name: redis_${ENVIROMNENT}
|
||||
command: >
|
||||
redis-server --port 6379 --appendonly yes
|
||||
redis-server --port 11235 --appendonly yes
|
||||
volumes:
|
||||
- evolution_redis:/data
|
||||
ports:
|
||||
- ${REDIS_PORT}:6379
|
||||
- ${REDIS_PORT}:11235
|
||||
|
||||
postgres:
|
||||
container_name: postgres_${ENVIROMNENT}
|
||||
@ -38,7 +38,7 @@ services:
|
||||
command: ["postgres", "-c", "max_connections=1000", "-c", "listen_addresses=*"]
|
||||
restart: always
|
||||
ports:
|
||||
- ${DATABASE_PORT}:5432
|
||||
- ${DATABASE_PORT}:11234
|
||||
environment:
|
||||
- POSTGRES_USER=user
|
||||
- POSTGRES_PASSWORD=pass
|
||||
|
@ -43,7 +43,6 @@ export class ChatController {
|
||||
}
|
||||
|
||||
public async fetchProfilePicture({ instanceName }: InstanceDto, data: NumberDto) {
|
||||
console.dir("Fetching profile picture...");
|
||||
return await this.waMonitor.waInstances[instanceName].profilePicture(data.number);
|
||||
}
|
||||
|
||||
|
23
src/api/controllers/health.controller.ts
Normal file
23
src/api/controllers/health.controller.ts
Normal file
@ -0,0 +1,23 @@
|
||||
import { WAMonitoringService } from '@api/services/monitor.service';
|
||||
|
||||
import { UnauthorizedException } from '../../exceptions';
|
||||
import { PrismaRepository } from '../repository/repository.service';
|
||||
|
||||
export class HealthController {
|
||||
constructor(
|
||||
private readonly waMonitor: WAMonitoringService,
|
||||
private readonly prismaRepository: PrismaRepository,
|
||||
) {}
|
||||
|
||||
public async checkHealth() {
|
||||
const instancesByKey = await this.prismaRepository.instance.findMany();
|
||||
|
||||
if (instancesByKey.length > 0) {
|
||||
const names = instancesByKey.map((instance) => instance.name);
|
||||
|
||||
return this.waMonitor.instanceInfo(names);
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
@ -98,6 +98,7 @@ import makeWASocket, {
|
||||
Contact,
|
||||
delay,
|
||||
DisconnectReason,
|
||||
downloadContentFromMessage,
|
||||
downloadMediaMessage,
|
||||
fetchLatestBaileysVersion,
|
||||
generateWAMessageFromContent,
|
||||
@ -1248,6 +1249,7 @@ export class BaileysStartupService extends ChannelStartupService {
|
||||
received?.message?.imageMessage ||
|
||||
received?.message?.videoMessage ||
|
||||
received?.message?.stickerMessage ||
|
||||
received?.message?.lottieStickerMessage ||
|
||||
received?.message?.documentMessage ||
|
||||
received?.message?.documentWithCaptionMessage ||
|
||||
received?.message?.ptvMessage ||
|
||||
@ -1362,20 +1364,41 @@ export class BaileysStartupService extends ChannelStartupService {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (this.localWebhook.enabled) {
|
||||
if (isMedia && this.localWebhook.webhookBase64) {
|
||||
if (1/* this.localWebhook.enabled */) {
|
||||
if (1/* isMedia && this.localWebhook.webhookBase64 */) {
|
||||
try {
|
||||
const buffer = await downloadMediaMessage(
|
||||
{ key: received.key, message: received?.message },
|
||||
'buffer',
|
||||
{},
|
||||
{
|
||||
logger: P({ level: 'error' }) as any,
|
||||
reuploadRequest: this.client.updateMediaMessage,
|
||||
},
|
||||
);
|
||||
let buffer : Buffer = null;
|
||||
console.dir({received}, {depth: null});
|
||||
if ((received.message.stickerMessage && received.message.stickerMessage.url === 'https://web.whatsapp.net')
|
||||
|| (received.message.lottieStickerMessage && received.message.lottieStickerMessage.message.stickerMessage.url)) { /*Fixing broken URLs from sticker messages*/
|
||||
const newUrl = `https://mmg.whatsapp.net${received.message.lottieStickerMessage ? received.message.lottieStickerMessage.message.stickerMessage.directPath : received.message.stickerMessage.directPath }`;
|
||||
|
||||
const stream = await downloadContentFromMessage(
|
||||
{
|
||||
mediaKey: received.message?.stickerMessage?.mediaKey || received.message.lottieStickerMessage?.message?.stickerMessage?.mediaKey,
|
||||
directPath: received.message?.stickerMessage?.directPath || received.message.lottieStickerMessage?.message?.stickerMessage?.directPath,
|
||||
url: newUrl
|
||||
},
|
||||
'sticker',
|
||||
{},
|
||||
)
|
||||
const chunks = [];
|
||||
for await (const chunk of stream) {
|
||||
chunks.push(chunk);
|
||||
}
|
||||
buffer = Buffer.concat(chunks);
|
||||
messageRaw.message.url = newUrl;
|
||||
} else {
|
||||
buffer = await downloadMediaMessage(
|
||||
{ key: received.key, message: received?.message },
|
||||
'buffer',
|
||||
{},
|
||||
{
|
||||
logger: P({ level: 'error' }) as any,
|
||||
reuploadRequest: this.client.updateMediaMessage,
|
||||
},
|
||||
);
|
||||
}
|
||||
messageRaw.message.base64 = buffer ? buffer.toString('base64') : undefined;
|
||||
} catch (error) {
|
||||
this.logger.error(['Error converting media to base64', error?.message]);
|
||||
@ -1383,6 +1406,7 @@ export class BaileysStartupService extends ChannelStartupService {
|
||||
}
|
||||
}
|
||||
|
||||
console.dir({webhookMessage: messageRaw}, {depth: null})
|
||||
this.logger.log(messageRaw);
|
||||
|
||||
this.sendDataWebhook(Events.MESSAGES_UPSERT, messageRaw);
|
||||
@ -1508,13 +1532,11 @@ export class BaileysStartupService extends ChannelStartupService {
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
if (!findMessage) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (update.message === null && update.status === undefined) {
|
||||
|
||||
const deletedMessage = {
|
||||
id: findMessage.id,
|
||||
instanceId: this.instanceId,
|
||||
@ -1526,7 +1548,7 @@ export class BaileysStartupService extends ChannelStartupService {
|
||||
pushName: findMessage.pushName,
|
||||
participant: findMessage.participant,
|
||||
message: findMessage.message,
|
||||
}
|
||||
};
|
||||
|
||||
this.sendDataWebhook(Events.MESSAGES_DELETE, deletedMessage);
|
||||
|
||||
@ -1756,7 +1778,7 @@ export class BaileysStartupService extends ChannelStartupService {
|
||||
}
|
||||
|
||||
if (events['messages.upsert']) {
|
||||
const payload = events['messages.upsert'];
|
||||
const payload = events['messages.upsert']
|
||||
this.messageHandle['messages.upsert'](payload, settings);
|
||||
}
|
||||
|
||||
@ -1880,12 +1902,10 @@ export class BaileysStartupService extends ChannelStartupService {
|
||||
}
|
||||
|
||||
public async profilePicture(number: string) {
|
||||
console.dir(`converting jid:${number}`);
|
||||
const jid = createJid(number);
|
||||
|
||||
try {
|
||||
const profilePictureUrl = await this.client.profilePictureUrl(jid, 'image');
|
||||
console.dir({ profilePictureUrl });
|
||||
|
||||
return {
|
||||
wuid: jid,
|
||||
@ -2280,7 +2300,8 @@ export class BaileysStartupService extends ChannelStartupService {
|
||||
messageSent?.message?.documentMessage ||
|
||||
messageSent?.message?.documentWithCaptionMessage ||
|
||||
messageSent?.message?.ptvMessage ||
|
||||
messageSent?.message?.audioMessage;
|
||||
messageSent?.message?.audioMessage ||
|
||||
messageSent?.message?.lottieStickerMessage;
|
||||
|
||||
if (this.configService.get<Chatwoot>('CHATWOOT').ENABLED && this.localChatwoot?.enabled && !isIntegration) {
|
||||
this.chatwootService.eventWhatsapp(
|
||||
|
@ -1597,6 +1597,7 @@ export class ChatwootService {
|
||||
'audioMessage',
|
||||
'videoMessage',
|
||||
'stickerMessage',
|
||||
'lottieStickerMessage',
|
||||
'viewOnceMessageV2',
|
||||
];
|
||||
|
||||
@ -1651,6 +1652,7 @@ export class ChatwootService {
|
||||
extendedTextMessage: msg.extendedTextMessage?.text,
|
||||
messageContextInfo: msg.messageContextInfo?.stanzaId,
|
||||
stickerMessage: undefined,
|
||||
lottieStickerMessage: undefined,
|
||||
documentMessage: msg.documentMessage?.caption,
|
||||
documentWithCaptionMessage: msg.documentWithCaptionMessage?.message?.documentMessage?.caption,
|
||||
audioMessage: msg.audioMessage?.caption,
|
||||
|
@ -497,6 +497,7 @@ class ChatwootImport {
|
||||
videoMessage: msg.message.videoMessage,
|
||||
audioMessage: msg.message.audioMessage,
|
||||
stickerMessage: msg.message.stickerMessage,
|
||||
lottieStickerMessage: msg.message.lottieStickerMessage,
|
||||
templateMessage: msg.message.templateMessage?.hydratedTemplate?.hydratedContentText,
|
||||
};
|
||||
const typeKey = Object.keys(types).find((key) => types[key] !== undefined);
|
||||
@ -531,6 +532,9 @@ class ChatwootImport {
|
||||
case 'stickerMessage':
|
||||
return '_<Sticker Message>_';
|
||||
|
||||
case 'lottieStickerMessage':
|
||||
return '_<lottieStickerMessage>_';
|
||||
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
|
18
src/api/routes/health.router.ts
Normal file
18
src/api/routes/health.router.ts
Normal file
@ -0,0 +1,18 @@
|
||||
import { RequestHandler, Router } from "express";
|
||||
import { RouterBroker } from "../abstract/abstract.router";
|
||||
import { HttpStatus } from "./index.router";
|
||||
import { healthController } from "@api/server.module";
|
||||
|
||||
|
||||
export class HealthRouter extends RouterBroker {
|
||||
constructor() {
|
||||
super();
|
||||
this.router
|
||||
.get(this.routerPath('healthz', false), async (req, res) => {
|
||||
await healthController.checkHealth();
|
||||
return res.status(HttpStatus.OK).json({msg: 'healthy'});
|
||||
})
|
||||
}
|
||||
|
||||
public readonly router: Router = Router();
|
||||
}
|
@ -22,6 +22,7 @@ import { MessageRouter } from './sendMessage.router';
|
||||
import { SettingsRouter } from './settings.router';
|
||||
import { TemplateRouter } from './template.router';
|
||||
import { ViewsRouter } from './view.router';
|
||||
import { HealthRouter} from './health.router';
|
||||
|
||||
enum HttpStatus {
|
||||
OK = 200,
|
||||
@ -57,6 +58,8 @@ router.get('/assets/*', (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
console.dir(new HealthRouter().router, { depth: null });
|
||||
|
||||
router
|
||||
.use((req, res, next) => telemetry.collectTelemetry(req, res, next))
|
||||
|
||||
@ -79,6 +82,7 @@ router
|
||||
facebookUserToken: process.env.FACEBOOK_USER_TOKEN,
|
||||
});
|
||||
})
|
||||
.use('', new HealthRouter().router)
|
||||
.use('/instance', new InstanceRouter(configService, ...guards).router)
|
||||
.use('/message', new MessageRouter(...guards).router)
|
||||
.use('/call', new CallRouter(...guards).router)
|
||||
|
@ -40,6 +40,7 @@ import { WAMonitoringService } from './services/monitor.service';
|
||||
import { ProxyService } from './services/proxy.service';
|
||||
import { SettingsService } from './services/settings.service';
|
||||
import { TemplateService } from './services/template.service';
|
||||
import { HealthController } from './controllers/health.controller';
|
||||
|
||||
const logger = new Logger('WA MODULE');
|
||||
|
||||
@ -107,6 +108,9 @@ export const eventManager = new EventManager(prismaRepository, waMonitor);
|
||||
export const chatbotController = new ChatbotController(prismaRepository, waMonitor);
|
||||
export const channelController = new ChannelController(prismaRepository, waMonitor);
|
||||
|
||||
//Health check
|
||||
export const healthController = new HealthController(waMonitor, prismaRepository);
|
||||
|
||||
// channels
|
||||
export const evolutionController = new EvolutionController(prismaRepository, waMonitor);
|
||||
export const metaController = new MetaController(prismaRepository, waMonitor);
|
||||
|
@ -552,6 +552,11 @@ export class ChannelStartupService {
|
||||
cleanedMessage.message.stickerMessage = {};
|
||||
}
|
||||
|
||||
// Limpa LottieStickerMessage
|
||||
if(cleanedMessage.message.lottieStickerMessage) {
|
||||
cleanedMessage.message.lottieStickerMessage = {};
|
||||
}
|
||||
|
||||
// Limpa documentMessage
|
||||
if (cleanedMessage.message.documentMessage) {
|
||||
cleanedMessage.message.documentMessage = {
|
||||
|
@ -139,6 +139,7 @@ export const TypeMediaMessage = [
|
||||
'audioMessage',
|
||||
'videoMessage',
|
||||
'stickerMessage',
|
||||
'lottieStickerMessage',
|
||||
'ptvMessage',
|
||||
];
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user