diff --git a/.env.example b/.env.example index 7c95e176..95543c7b 100644 --- a/.env.example +++ b/.env.example @@ -27,6 +27,8 @@ DATABASE_SAVE_DATA_NEW_MESSAGE=true DATABASE_SAVE_MESSAGE_UPDATE=true DATABASE_SAVE_DATA_CONTACTS=true DATABASE_SAVE_DATA_CHATS=true +DATABASE_SAVE_DATA_LABELS=true +DATABASE_SAVE_DATA_HISTORIC=true RABBITMQ_ENABLED=false RABBITMQ_URI=amqp://localhost diff --git a/CHANGELOG.md b/CHANGELOG.md index 849a05ad..31b16b7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### Fixed * Resolved issue with Chatwoot not receiving messages sent by Typebot +* Fixed the function of saving or not saving data in the database # 2.0.0-beta (2024-07-14 17:00) diff --git a/src/api/services/channels/whatsapp.baileys.service.ts b/src/api/services/channels/whatsapp.baileys.service.ts index 7c1ad4a4..87f7d811 100644 --- a/src/api/services/channels/whatsapp.baileys.service.ts +++ b/src/api/services/channels/whatsapp.baileys.service.ts @@ -695,9 +695,10 @@ export class BaileysStartupService extends ChannelStartupService { this.sendDataWebhook(Events.CHATS_UPSERT, chatsToInsert); if (chatsToInsert.length > 0) { - await this.prismaRepository.chat.createMany({ - data: chatsToInsert, - }); + if (this.configService.get('DATABASE').SAVE_DATA.CHATS) + await this.prismaRepository.chat.createMany({ + data: chatsToInsert, + }); } }, @@ -754,10 +755,11 @@ export class BaileysStartupService extends ChannelStartupService { if (contactsRaw.length > 0) this.sendDataWebhook(Events.CONTACTS_UPSERT, contactsRaw); if (contactsRaw.length > 0) { - await this.prismaRepository.contact.createMany({ - data: contactsRaw, - skipDuplicates: true, - }); + if (this.configService.get('DATABASE').SAVE_DATA.CONTACTS) + await this.prismaRepository.contact.createMany({ + data: contactsRaw, + skipDuplicates: true, + }); } if ( @@ -877,12 +879,14 @@ export class BaileysStartupService extends ChannelStartupService { this.sendDataWebhook(Events.CHATS_SET, chatsRaw); - const chatsSaved = await this.prismaRepository.chat.createMany({ - data: chatsRaw, - skipDuplicates: true, - }); + if (this.configService.get('DATABASE').SAVE_DATA.HISTORIC) { + const chatsSaved = await this.prismaRepository.chat.createMany({ + data: chatsRaw, + skipDuplicates: true, + }); - console.log('chatsSaved', chatsSaved); + console.log('chatsSaved', chatsSaved); + } const messagesRaw: any[] = []; @@ -939,12 +943,14 @@ export class BaileysStartupService extends ChannelStartupService { this.sendDataWebhook(Events.MESSAGES_SET, [...messagesRaw]); - const messagesSaved = await this.prismaRepository.message.createMany({ - data: messagesRaw, - skipDuplicates: true, - }); + if (this.configService.get('DATABASE').SAVE_DATA.HISTORIC) { + const messagesSaved = await this.prismaRepository.message.createMany({ + data: messagesRaw, + skipDuplicates: true, + }); - console.log('messagesSaved', messagesSaved); + console.log('messagesSaved', messagesSaved); + } if ( this.configService.get('CHATWOOT').ENABLED && @@ -1083,64 +1089,66 @@ export class BaileysStartupService extends ChannelStartupService { } } - const msg = await this.prismaRepository.message.create({ - data: messageRaw, - }); + if (this.configService.get('DATABASE').SAVE_DATA.NEW_MESSAGE) { + const msg = await this.prismaRepository.message.create({ + data: messageRaw, + }); - if (isMedia) { - if (this.configService.get('S3').ENABLE) { - try { - const message: any = received; - const media = await this.getBase64FromMediaMessage( - { - message, - }, - true, - ); + if (isMedia) { + if (this.configService.get('S3').ENABLE) { + try { + const message: any = received; + const media = await this.getBase64FromMediaMessage( + { + message, + }, + true, + ); - const { buffer, mediaType, fileName, size } = media; + const { buffer, mediaType, fileName, size } = media; - const mimetype = mime.lookup(fileName).toString(); + const mimetype = mime.lookup(fileName).toString(); - const fullName = join(`${this.instance.id}`, received.key.remoteJid, mediaType, fileName); + const fullName = join(`${this.instance.id}`, received.key.remoteJid, mediaType, fileName); - await s3Service.uploadFile(fullName, buffer, size.fileLength, { - 'Content-Type': mimetype, - }); + await s3Service.uploadFile(fullName, buffer, size.fileLength, { + 'Content-Type': mimetype, + }); - await this.prismaRepository.media.create({ - data: { - messageId: msg.id, - instanceId: this.instanceId, - type: mediaType, - fileName: fullName, - mimetype, - }, - }); + await this.prismaRepository.media.create({ + data: { + messageId: msg.id, + instanceId: this.instanceId, + type: mediaType, + fileName: fullName, + mimetype, + }, + }); - const mediaUrl = await s3Service.getObjectUrl(fullName); + const mediaUrl = await s3Service.getObjectUrl(fullName); - messageRaw.message.mediaUrl = mediaUrl; - } catch (error) { - this.logger.error(['Error on upload file to minio', error?.message, error?.stack]); - } - } else { - if (this.localWebhook.webhookBase64 === true) { - const 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; + messageRaw.message.mediaUrl = mediaUrl; + } catch (error) { + this.logger.error(['Error on upload file to minio', error?.message, error?.stack]); + } } } } + if (isMedia && !this.configService.get('S3').ENABLE && this.localWebhook.webhookBase64 === true) { + const 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; + } + this.logger.log(messageRaw); this.sendDataWebhook(Events.MESSAGES_UPSERT, messageRaw); @@ -1198,9 +1206,10 @@ export class BaileysStartupService extends ChannelStartupService { this.sendDataWebhook(Events.CONTACTS_UPSERT, contactRaw); - await this.prismaRepository.contact.create({ - data: contactRaw, - }); + if (this.configService.get('DATABASE').SAVE_DATA.CONTACTS) + await this.prismaRepository.contact.create({ + data: contactRaw, + }); } } catch (error) { this.logger.error(error); @@ -1273,9 +1282,10 @@ export class BaileysStartupService extends ChannelStartupService { instanceId: this.instanceId, }; - await this.prismaRepository.messageUpdate.create({ - data: message, - }); + if (this.configService.get('DATABASE').SAVE_DATA.MESSAGE_UPDATE) + await this.prismaRepository.messageUpdate.create({ + data: message, + }); if (this.configService.get('CHATWOOT').ENABLED && this.localChatwoot.enabled) { this.chatwootService.eventWhatsapp( @@ -1301,9 +1311,10 @@ export class BaileysStartupService extends ChannelStartupService { this.sendDataWebhook(Events.MESSAGES_UPDATE, message); - await this.prismaRepository.messageUpdate.create({ - data: message, - }); + if (this.configService.get('DATABASE').SAVE_DATA.MESSAGE_UPDATE) + await this.prismaRepository.messageUpdate.create({ + data: message, + }); } } }, @@ -1352,15 +1363,16 @@ export class BaileysStartupService extends ChannelStartupService { const labelName = label.name.replace(/[^\x20-\x7E]/g, ''); if (!savedLabel || savedLabel.color !== `${label.color}` || savedLabel.name !== labelName) { - await this.prismaRepository.label.create({ - data: { - color: `${label.color}`, - name: labelName, - labelId: label.id, - predefinedId: label.predefinedId, - instanceId: this.instanceId, - }, - }); + if (this.configService.get('DATABASE').SAVE_DATA.LABELS) + await this.prismaRepository.label.create({ + data: { + color: `${label.color}`, + name: labelName, + labelId: label.id, + predefinedId: label.predefinedId, + instanceId: this.instanceId, + }, + }); this.sendDataWebhook(Events.LABELS_EDIT, { ...label, instance: this.instance.name }); } }, @@ -1925,9 +1937,10 @@ export class BaileysStartupService extends ChannelStartupService { ); } - await this.prismaRepository.message.create({ - data: messageRaw, - }); + if (this.configService.get('DATABASE').SAVE_DATA.NEW_MESSAGE) + await this.prismaRepository.message.create({ + data: messageRaw, + }); return messageSent; } catch (error) { diff --git a/src/config/env.config.ts b/src/config/env.config.ts index 8512e9fa..dbe6f6e8 100644 --- a/src/config/env.config.ts +++ b/src/config/env.config.ts @@ -37,6 +37,7 @@ export type ProviderSession = { export type SaveData = { INSTANCE: boolean; + HISTORIC: boolean; NEW_MESSAGE: boolean; MESSAGE_UPDATE: boolean; CONTACTS: boolean; @@ -288,6 +289,7 @@ export class ConfigService { MESSAGE_UPDATE: process.env?.DATABASE_SAVE_MESSAGE_UPDATE === 'true', CONTACTS: process.env?.DATABASE_SAVE_DATA_CONTACTS === 'true', CHATS: process.env?.DATABASE_SAVE_DATA_CHATS === 'true', + HISTORIC: process.env?.DATABASE_SAVE_DATA_HISTORIC === 'true', LABELS: process.env?.DATABASE_SAVE_DATA_LABELS === 'true', }, },