diff --git a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts index 4db8146cc..25c6dbe09 100644 --- a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts +++ b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts @@ -989,6 +989,14 @@ export class BaileysStartupService extends ChannelStartupService { progress?: number; syncType?: proto.HistorySync.HistorySyncType; }) => { + //These logs are crucial; when something changes in Baileys/WhatsApp, we can more easily understand what changed! + this.logger.debug('Messages abaixo'); + this.logger.debug(messages); + this.logger.debug('Chats abaixo'); + this.logger.debug(chats); + this.logger.debug('Contatos abaixo'); + this.logger.debug(contacts); + try { if (syncType === proto.HistorySync.HistorySyncType.ON_DEMAND) { console.log('received on-demand history sync, messages=', messages); @@ -1017,14 +1025,29 @@ export class BaileysStartupService extends ChannelStartupService { } const contactsMap = new Map(); + const contactsMapLidJid = new Map(); for (const contact of contacts) { + let jid = null; + + if (contact?.id?.search('@lid') !== -1) { + if (contact.phoneNumber) { + jid = contact.phoneNumber; + } + } + + if (!jid) { + jid = contact?.id; + } + if (contact.id && (contact.notify || contact.name)) { - contactsMap.set(contact.id, { name: contact.name ?? contact.notify, jid: contact.id }); + contactsMap.set(contact.id, { name: contact.name ?? contact.notify, jid }); } + + contactsMapLidJid.set(contact.id, { jid }); } - const chatsRaw: { remoteJid: string; instanceId: string; name?: string }[] = []; + const chatsRaw: { remoteJid: string; remoteLid: string; instanceId: string; name?: string }[] = []; const chatsRepository = new Set( (await this.prismaRepository.chat.findMany({ where: { instanceId: this.instanceId } })).map( (chat) => chat.remoteJid, @@ -1036,13 +1059,39 @@ export class BaileysStartupService extends ChannelStartupService { continue; } - chatsRaw.push({ remoteJid: chat.id, instanceId: this.instanceId, name: chat.name }); + let remoteJid = null; + let remoteLid = null; + + if (chat.id.search('@lid') !== -1) { + const contact = contactsMapLidJid.get(chat.id); + + remoteLid = chat.id; + + if (contact && contact.jid) { + remoteJid = contact.jid; + } + } + + if (!remoteLid && chat.accountLid && chat.accountLid.search('@lid') !== -1) { + remoteLid = chat.accountLid; + } + + if (!remoteJid) { + remoteJid = chat.id; + } + + chatsRaw.push({ remoteJid, remoteLid, instanceId: this.instanceId, name: chat.name }); } this.sendDataWebhook(Events.CHATS_SET, chatsRaw); if (this.configService.get('DATABASE').SAVE_DATA.HISTORIC) { - await this.prismaRepository.chat.createMany({ data: chatsRaw, skipDuplicates: true }); + const chatsToCreateMany = JSON.parse(JSON.stringify(chatsRaw)).map((chat) => { + delete chat.remoteLid; + return chat; + }); + + await this.prismaRepository.chat.createMany({ data: chatsToCreateMany, skipDuplicates: true }); } const messagesRaw: any[] = []; @@ -1526,8 +1575,14 @@ export class BaileysStartupService extends ChannelStartupService { this.logger.verbose(messageRaw); sendTelemetry(`received.message.${messageRaw.messageType ?? 'unknown'}`); - if ((messageRaw.key as any).remoteJid?.includes('@lid') && (messageRaw.key as any).remoteJidAlt) { - (messageRaw.key as any).remoteJid = (messageRaw.key as any).remoteJidAlt; + + if (messageRaw.key.remoteJid?.includes('@lid') && messageRaw.key.remoteJidAlt) { + const lid = messageRaw.key.remoteJid; + + messageRaw.key.remoteJid = messageRaw.key.remoteJidAlt; + messageRaw.key.remoteJidAlt = lid; + + messageRaw.key.addressingMode = 'pn'; } console.log(messageRaw);