diff --git a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts index ea695212..44b0122c 100644 --- a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts +++ b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts @@ -500,8 +500,8 @@ export class BaileysStartupService extends ChannelStartupService { try { // Use raw SQL to avoid JSON path issues const webMessageInfo = (await this.prismaRepository.$queryRaw` - SELECT * FROM "Message" - WHERE "instanceId" = ${this.instanceId} + SELECT * FROM "Message" + WHERE "instanceId" = ${this.instanceId} AND "key"->>'id' = ${key.id} `) as proto.IWebMessageInfo[]; @@ -1491,8 +1491,8 @@ export class BaileysStartupService extends ChannelStartupService { if (configDatabaseData.HISTORIC || configDatabaseData.NEW_MESSAGE) { // Use raw SQL to avoid JSON path issues const messages = (await this.prismaRepository.$queryRaw` - SELECT * FROM "Message" - WHERE "instanceId" = ${this.instanceId} + SELECT * FROM "Message" + WHERE "instanceId" = ${this.instanceId} AND "key"->>'id' = ${key.id} LIMIT 1 `) as any[]; @@ -1600,33 +1600,33 @@ export class BaileysStartupService extends ChannelStartupService { // MAINTAINS: participants: string[] (original JID strings) // ADDS: participantsData: { jid: string, phoneNumber: string, name?: string, imgUrl?: string }[] // This enables LID to phoneNumber conversion without breaking existing webhook consumers - + // Helper to normalize participantId as phone number const normalizePhoneNumber = (id: string): string => { // Remove @lid, @s.whatsapp.net suffixes and extract just the number part return id.split('@')[0]; }; - + try { - // Usa o mesmo método que o endpoint /group/participants + // Usa o mesmo método que o endpoint /group/participants const groupParticipants = await this.findParticipants({ groupJid: participantsUpdate.id }); - + // Validação para garantir que temos dados válidos if (!groupParticipants?.participants || !Array.isArray(groupParticipants.participants)) { throw new Error('Invalid participant data received from findParticipants'); } - + // Filtra apenas os participantes que estão no evento const resolvedParticipants = participantsUpdate.participants.map((participantId) => { - const participantData = groupParticipants.participants.find(p => p.id === participantId); - + const participantData = groupParticipants.participants.find((p) => p.id === participantId); + let phoneNumber: string; if (participantData?.phoneNumber) { phoneNumber = participantData.phoneNumber; } else { phoneNumber = normalizePhoneNumber(participantId); } - + return { jid: participantId, phoneNumber, @@ -1639,13 +1639,14 @@ export class BaileysStartupService extends ChannelStartupService { const enhancedParticipantsUpdate = { ...participantsUpdate, participants: participantsUpdate.participants, // Mantém array original de strings - participantsData: resolvedParticipants // Adiciona dados resolvidos em campo separado + // Adiciona dados resolvidos em campo separado + participantsData: resolvedParticipants, }; - + this.sendDataWebhook(Events.GROUP_PARTICIPANTS_UPDATE, enhancedParticipantsUpdate); } catch (error) { this.logger.error( - `Failed to resolve participant data for GROUP_PARTICIPANTS_UPDATE webhook: ${error.message} | Group: ${participantsUpdate.id} | Participants: ${participantsUpdate.participants.length}` + `Failed to resolve participant data for GROUP_PARTICIPANTS_UPDATE webhook: ${error.message} | Group: ${participantsUpdate.id} | Participants: ${participantsUpdate.participants.length}`, ); // Fallback - envia sem conversão this.sendDataWebhook(Events.GROUP_PARTICIPANTS_UPDATE, participantsUpdate); @@ -4514,7 +4515,7 @@ export class BaileysStartupService extends ChannelStartupService { // Use raw SQL to avoid JSON path issues const result = await this.prismaRepository.$executeRaw` - UPDATE "Message" + UPDATE "Message" SET "status" = ${status[4]} WHERE "instanceId" = ${this.instanceId} AND "key"->>'remoteJid' = ${remoteJid} @@ -4539,7 +4540,7 @@ export class BaileysStartupService extends ChannelStartupService { this.prismaRepository.chat.findFirst({ where: { remoteJid } }), // Use raw SQL to avoid JSON path issues this.prismaRepository.$queryRaw` - SELECT COUNT(*)::int as count FROM "Message" + SELECT COUNT(*)::int as count FROM "Message" WHERE "instanceId" = ${this.instanceId} AND "key"->>'remoteJid' = ${remoteJid} AND ("key"->>'fromMe')::boolean = false