Skip to content

Commit 79170b8

Browse files
committed
refactor: padroniza as mensagens salvas no banco
1 parent 9237381 commit 79170b8

File tree

1 file changed

+124
-153
lines changed

1 file changed

+124
-153
lines changed

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

Lines changed: 124 additions & 153 deletions
Original file line numberDiff line numberDiff line change
@@ -911,16 +911,7 @@ export class BaileysStartupService extends ChannelStartupService {
911911
continue;
912912
}
913913

914-
messagesRaw.push({
915-
key: m.key,
916-
pushName: m.pushName || m.key.remoteJid.split('@')[0],
917-
participant: m.participant,
918-
message: { ...m.message },
919-
messageType: getContentType(m.message),
920-
messageTimestamp: m.messageTimestamp as number,
921-
instanceId: this.instanceId,
922-
source: getDevice(m.key.id),
923-
});
914+
messagesRaw.push(this.prepareMessage(m));
924915
}
925916

926917
this.sendDataWebhook(Events.MESSAGES_SET, [...messagesRaw]);
@@ -1040,24 +1031,7 @@ export class BaileysStartupService extends ChannelStartupService {
10401031
return;
10411032
}
10421033

1043-
const contentMsg = received?.message[getContentType(received.message)] as any;
1044-
1045-
const messageRaw: any = {
1046-
key: received.key,
1047-
pushName: received.pushName,
1048-
message: { ...received.message },
1049-
contextInfo: contentMsg?.contextInfo,
1050-
messageType: getContentType(received.message) || 'unknown',
1051-
messageTimestamp: received.messageTimestamp as number,
1052-
instanceId: this.instanceId,
1053-
source: getDevice(received.key.id),
1054-
};
1055-
1056-
if (messageRaw.message.extendedTextMessage) {
1057-
messageRaw.messageType = 'conversation';
1058-
messageRaw.message.conversation = messageRaw.message.extendedTextMessage.text;
1059-
delete messageRaw.message.extendedTextMessage;
1060-
}
1034+
const messageRaw = this.prepareMessage(received);
10611035

10621036
const isMedia =
10631037
received?.message?.imageMessage ||
@@ -1093,6 +1067,30 @@ export class BaileysStartupService extends ChannelStartupService {
10931067
}
10941068
}
10951069

1070+
if (this.configService.get<Openai>('OPENAI').ENABLED) {
1071+
const openAiDefaultSettings = await this.prismaRepository.openaiSetting.findFirst({
1072+
where: {
1073+
instanceId: this.instanceId,
1074+
},
1075+
include: {
1076+
OpenaiCreds: true,
1077+
},
1078+
});
1079+
1080+
if (
1081+
openAiDefaultSettings &&
1082+
openAiDefaultSettings.openaiCredsId &&
1083+
openAiDefaultSettings.speechToText &&
1084+
received?.message?.audioMessage
1085+
) {
1086+
messageRaw.message.speechToText = await this.openaiService.speechToText(
1087+
openAiDefaultSettings.OpenaiCreds,
1088+
received,
1089+
this.client.updateMediaMessage,
1090+
);
1091+
}
1092+
}
1093+
10961094
if (this.configService.get<Database>('DATABASE').SAVE_DATA.NEW_MESSAGE) {
10971095
const msg = await this.prismaRepository.message.create({
10981096
data: messageRaw,
@@ -1159,30 +1157,6 @@ export class BaileysStartupService extends ChannelStartupService {
11591157
messageRaw.message.base64 = buffer ? buffer.toString('base64') : undefined;
11601158
}
11611159

1162-
if (this.configService.get<Openai>('OPENAI').ENABLED) {
1163-
const openAiDefaultSettings = await this.prismaRepository.openaiSetting.findFirst({
1164-
where: {
1165-
instanceId: this.instanceId,
1166-
},
1167-
include: {
1168-
OpenaiCreds: true,
1169-
},
1170-
});
1171-
1172-
if (
1173-
openAiDefaultSettings &&
1174-
openAiDefaultSettings.openaiCredsId &&
1175-
openAiDefaultSettings.speechToText &&
1176-
received?.message?.audioMessage
1177-
) {
1178-
messageRaw.message.speechToText = await this.openaiService.speechToText(
1179-
openAiDefaultSettings.OpenaiCreds,
1180-
received,
1181-
this.client.updateMediaMessage,
1182-
);
1183-
}
1184-
}
1185-
11861160
this.logger.log(messageRaw);
11871161

11881162
this.sendDataWebhook(Events.MESSAGES_UPSERT, messageRaw);
@@ -1951,6 +1925,12 @@ export class BaileysStartupService extends ChannelStartupService {
19511925
messageSent = await this.sendMessage(sender, message, mentions, linkPreview, quoted);
19521926
}
19531927

1928+
if (Long.isLong(messageSent?.messageTimestamp)) {
1929+
messageSent.messageTimestamp = messageSent.messageTimestamp?.toNumber();
1930+
}
1931+
1932+
const messageRaw = this.prepareMessage(messageSent);
1933+
19541934
const isMedia =
19551935
messageSent?.message?.imageMessage ||
19561936
messageSent?.message?.videoMessage ||
@@ -1959,41 +1939,12 @@ export class BaileysStartupService extends ChannelStartupService {
19591939
messageSent?.message?.documentWithCaptionMessage ||
19601940
messageSent?.message?.audioMessage;
19611941

1962-
const contentMsg = messageSent.message[getContentType(messageSent.message)] as any;
1963-
1964-
if (Long.isLong(messageSent?.messageTimestamp)) {
1965-
messageSent.messageTimestamp = messageSent.messageTimestamp?.toNumber();
1966-
}
1967-
1968-
const messageRaw: any = {
1969-
key: messageSent.key,
1970-
pushName: messageSent.pushName,
1971-
message: { ...messageSent.message },
1972-
contextInfo: contentMsg?.contextInfo,
1973-
messageType: getContentType(messageSent.message),
1974-
messageTimestamp: messageSent.messageTimestamp as number,
1975-
instanceId: this.instanceId,
1976-
source: getDevice(messageSent.key.id),
1977-
};
1978-
1979-
if (messageRaw.message.extendedTextMessage) {
1980-
messageRaw.messageType = 'conversation';
1981-
messageRaw.message.conversation = messageRaw.message.extendedTextMessage.text;
1982-
delete messageRaw.message.extendedTextMessage;
1983-
}
1984-
1985-
if (isMedia) {
1986-
const buffer = await downloadMediaMessage(
1987-
{ key: messageSent.key, message: messageSent?.message },
1988-
'buffer',
1989-
{},
1990-
{
1991-
logger: P({ level: 'error' }) as any,
1992-
reuploadRequest: this.client.updateMediaMessage,
1993-
},
1942+
if (this.configService.get<Chatwoot>('CHATWOOT').ENABLED && this.localChatwoot?.enabled && !isIntegration) {
1943+
this.chatwootService.eventWhatsapp(
1944+
Events.SEND_MESSAGE,
1945+
{ instanceName: this.instance.name, instanceId: this.instanceId },
1946+
messageRaw,
19941947
);
1995-
1996-
messageRaw.message.base64 = buffer ? buffer.toString('base64') : undefined;
19971948
}
19981949

19991950
if (this.configService.get<Openai>('OPENAI').ENABLED) {
@@ -2010,100 +1961,97 @@ export class BaileysStartupService extends ChannelStartupService {
20101961
openAiDefaultSettings &&
20111962
openAiDefaultSettings.openaiCredsId &&
20121963
openAiDefaultSettings.speechToText &&
2013-
messageSent?.message?.audioMessage
1964+
messageRaw?.message?.audioMessage
20141965
) {
20151966
messageRaw.message.speechToText = await this.openaiService.speechToText(
20161967
openAiDefaultSettings.OpenaiCreds,
2017-
messageSent,
1968+
messageRaw,
20181969
this.client.updateMediaMessage,
20191970
);
20201971
}
20211972
}
20221973

2023-
this.logger.log(messageRaw);
2024-
2025-
this.sendDataWebhook(Events.SEND_MESSAGE, messageRaw);
2026-
2027-
if (this.configService.get<Chatwoot>('CHATWOOT').ENABLED && this.localChatwoot?.enabled && !isIntegration) {
2028-
this.chatwootService.eventWhatsapp(
2029-
Events.SEND_MESSAGE,
2030-
{ instanceName: this.instance.name, instanceId: this.instanceId },
2031-
messageRaw,
2032-
);
2033-
}
2034-
2035-
if (this.configService.get<Chatwoot>('CHATWOOT').ENABLED && this.localChatwoot?.enabled && isIntegration)
2036-
await chatbotController.emit({
2037-
instance: { instanceName: this.instance.name, instanceId: this.instanceId },
2038-
remoteJid: messageRaw.key.remoteJid,
2039-
msg: messageRaw,
2040-
pushName: messageRaw.pushName,
2041-
isIntegration,
2042-
});
2043-
20441974
if (this.configService.get<Database>('DATABASE').SAVE_DATA.NEW_MESSAGE) {
20451975
const msg = await this.prismaRepository.message.create({
20461976
data: messageRaw,
20471977
});
20481978

2049-
const isMedia =
2050-
messageRaw?.message?.imageMessage ||
2051-
messageRaw?.message?.videoMessage ||
2052-
messageRaw?.message?.stickerMessage ||
2053-
messageRaw?.message?.documentMessage ||
2054-
messageRaw?.message?.documentWithCaptionMessage ||
2055-
messageRaw?.message?.audioMessage;
2056-
2057-
if (isMedia) {
2058-
if (this.configService.get<S3>('S3').ENABLE) {
2059-
try {
2060-
const message: any = messageRaw;
2061-
const media = await this.getBase64FromMediaMessage(
2062-
{
2063-
message,
2064-
},
2065-
true,
2066-
);
1979+
if (isMedia && this.configService.get<S3>('S3').ENABLE) {
1980+
try {
1981+
const message: any = messageRaw;
1982+
const media = await this.getBase64FromMediaMessage(
1983+
{
1984+
message,
1985+
},
1986+
true,
1987+
);
20671988

2068-
const { buffer, mediaType, fileName, size } = media;
1989+
const { buffer, mediaType, fileName, size } = media;
20691990

2070-
const mimetype = mime.getType(fileName).toString();
1991+
const mimetype = mime.getType(fileName).toString();
20711992

2072-
const fullName = join(`${this.instance.id}`, messageRaw.key.remoteJid, mediaType, fileName);
1993+
const fullName = join(`${this.instance.id}`, messageRaw.key.remoteJid, mediaType, fileName);
20731994

2074-
await s3Service.uploadFile(fullName, buffer, size.fileLength?.low, {
2075-
'Content-Type': mimetype,
2076-
});
1995+
await s3Service.uploadFile(fullName, buffer, size.fileLength?.low, {
1996+
'Content-Type': mimetype,
1997+
});
20771998

2078-
await this.prismaRepository.media.create({
2079-
data: {
2080-
messageId: msg.id,
2081-
instanceId: this.instanceId,
2082-
type: mediaType,
2083-
fileName: fullName,
2084-
mimetype,
2085-
},
2086-
});
1999+
await this.prismaRepository.media.create({
2000+
data: {
2001+
messageId: msg.id,
2002+
instanceId: this.instanceId,
2003+
type: mediaType,
2004+
fileName: fullName,
2005+
mimetype,
2006+
},
2007+
});
20872008

2088-
const mediaUrl = await s3Service.getObjectUrl(fullName);
2009+
const mediaUrl = await s3Service.getObjectUrl(fullName);
20892010

2090-
messageRaw.message.mediaUrl = mediaUrl;
2011+
messageRaw.message.mediaUrl = mediaUrl;
20912012

2092-
await this.prismaRepository.message.update({
2093-
where: { id: msg.id },
2094-
data: messageRaw,
2095-
});
2096-
} catch (error) {
2097-
this.logger.error('line 1181');
2098-
this.logger.error(['Error on upload file to minio', error?.message, error?.stack]);
2099-
}
2013+
await this.prismaRepository.message.update({
2014+
where: { id: msg.id },
2015+
data: messageRaw,
2016+
});
2017+
} catch (error) {
2018+
this.logger.error('line 1181');
2019+
this.logger.error(['Error on upload file to minio', error?.message, error?.stack]);
21002020
}
21012021
}
21022022
}
21032023

2024+
if (isMedia && !this.configService.get<S3>('S3').ENABLE) {
2025+
const buffer = await downloadMediaMessage(
2026+
{ key: messageRaw.key, message: messageRaw?.message },
2027+
'buffer',
2028+
{},
2029+
{
2030+
logger: P({ level: 'error' }) as any,
2031+
reuploadRequest: this.client.updateMediaMessage,
2032+
},
2033+
);
2034+
2035+
messageRaw.message.base64 = buffer ? buffer.toString('base64') : undefined;
2036+
}
2037+
2038+
this.logger.log(messageRaw);
2039+
2040+
this.sendDataWebhook(Events.SEND_MESSAGE, messageRaw);
2041+
2042+
if (this.configService.get<Chatwoot>('CHATWOOT').ENABLED && this.localChatwoot?.enabled && isIntegration) {
2043+
await chatbotController.emit({
2044+
instance: { instanceName: this.instance.name, instanceId: this.instanceId },
2045+
remoteJid: messageRaw.key.remoteJid,
2046+
msg: messageRaw,
2047+
pushName: messageRaw.pushName,
2048+
isIntegration,
2049+
});
2050+
}
2051+
21042052
return messageRaw;
21052053
} catch (error) {
2106-
this.logger.error('line 2081');
2054+
this.logger.error('line 2097');
21072055
this.logger.error(error);
21082056
throw new BadRequestException(error.toString());
21092057
}
@@ -3683,4 +3631,27 @@ export class BaileysStartupService extends ChannelStartupService {
36833631
public async templateMessage() {
36843632
throw new Error('Method not available in the Baileys service');
36853633
}
3634+
3635+
private prepareMessage(message: proto.IWebMessageInfo): any {
3636+
const contentMsg = message?.message[getContentType(message.message)] as any;
3637+
3638+
const messageRaw = {
3639+
key: message.key,
3640+
pushName: message.pushName,
3641+
message: { ...message.message },
3642+
contextInfo: contentMsg?.contextInfo,
3643+
messageType: getContentType(message.message) || 'unknown',
3644+
messageTimestamp: message.messageTimestamp as number,
3645+
instanceId: this.instanceId,
3646+
source: getDevice(message.key.id),
3647+
};
3648+
3649+
if (messageRaw.message.extendedTextMessage) {
3650+
messageRaw.messageType = 'conversation';
3651+
messageRaw.message.conversation = messageRaw.message.extendedTextMessage.text;
3652+
delete messageRaw.message.extendedTextMessage;
3653+
}
3654+
3655+
return messageRaw;
3656+
}
36863657
}

0 commit comments

Comments
 (0)