mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2026-01-09 21:32:20 -06:00
feat(channel): add support for @newsletter in sendMessage and findChannels
This commit is contained in:
@@ -3511,9 +3511,24 @@ export class BaileysStartupService extends ChannelStartupService {
|
||||
users: { number: string; jid: string; name?: string }[];
|
||||
} = { groups: [], broadcast: [], users: [] };
|
||||
|
||||
const onWhatsapp: OnWhatsAppDto[] = [];
|
||||
|
||||
data.numbers.forEach((number) => {
|
||||
const jid = createJid(number);
|
||||
|
||||
if (isJidNewsletter(jid)) {
|
||||
onWhatsapp.push(
|
||||
new OnWhatsAppDto(
|
||||
jid,
|
||||
true, // Newsletters are always valid
|
||||
number,
|
||||
undefined, // Can be fetched later if needed
|
||||
'newsletter', // Indicate it's a newsletter type
|
||||
),
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (isJidGroup(jid)) {
|
||||
jids.groups.push({ number, jid });
|
||||
} else if (jid === 'status@broadcast') {
|
||||
@@ -3523,8 +3538,6 @@ export class BaileysStartupService extends ChannelStartupService {
|
||||
}
|
||||
});
|
||||
|
||||
const onWhatsapp: OnWhatsAppDto[] = [];
|
||||
|
||||
// BROADCAST
|
||||
onWhatsapp.push(...jids.broadcast.map(({ jid, number }) => new OnWhatsAppDto(jid, false, number)));
|
||||
|
||||
@@ -4700,6 +4713,10 @@ export class BaileysStartupService extends ChannelStartupService {
|
||||
}
|
||||
}
|
||||
|
||||
if (isJidNewsletter(message.key.remoteJid) && message.key.fromMe) {
|
||||
messageRaw.status = status[3]; // DELIVERED MESSAGE TO NEWSLETTER CHANNEL
|
||||
}
|
||||
|
||||
return messageRaw;
|
||||
}
|
||||
|
||||
@@ -5119,4 +5136,51 @@ export class BaileysStartupService extends ChannelStartupService {
|
||||
},
|
||||
};
|
||||
}
|
||||
public async fetchChannels(query: Query<Contact>) {
|
||||
const page = Number((query as any)?.page ?? 1);
|
||||
const limit = Number((query as any)?.limit ?? (query as any)?.rows ?? 50);
|
||||
const skip = (page - 1) * limit;
|
||||
|
||||
const messages = await this.prismaRepository.message.findMany({
|
||||
where: {
|
||||
instanceId: this.instanceId,
|
||||
AND: [{ key: { path: ['remoteJid'], not: null } }],
|
||||
},
|
||||
orderBy: { messageTimestamp: 'desc' },
|
||||
select: {
|
||||
key: true,
|
||||
messageTimestamp: true,
|
||||
},
|
||||
});
|
||||
|
||||
const channelMap = new Map<string, { remoteJid: string; pushName: undefined; lastMessageTimestamp: number }>();
|
||||
|
||||
for (const msg of messages) {
|
||||
const key = msg.key as any;
|
||||
const remoteJid = key?.remoteJid as string | undefined;
|
||||
if (!remoteJid || !isJidNewsletter(remoteJid)) continue;
|
||||
|
||||
if (!channelMap.has(remoteJid)) {
|
||||
channelMap.set(remoteJid, {
|
||||
remoteJid,
|
||||
pushName: undefined, // Push name is never stored for channels, so we set it as undefined
|
||||
lastMessageTimestamp: msg.messageTimestamp,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const allChannels = Array.from(channelMap.values());
|
||||
|
||||
const total = allChannels.length;
|
||||
const pages = Math.ceil(total / limit);
|
||||
const records = allChannels.slice(skip, skip + limit);
|
||||
|
||||
return {
|
||||
total,
|
||||
pages,
|
||||
currentPage: page,
|
||||
limit,
|
||||
records,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user