Fix scheduled WhatsApp messages sending as email; add 24h cleanup and recipient display
The scheduled-job store never persisted the channel field, so the send worker always fell through to its email branch regardless of what was requested. Also purges sent jobs 24h after sending instead of keeping them forever, and surfaces who each scheduled job will go to in the admin "manage scheduled" lists (now correctly filtered per channel too). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -36,6 +36,22 @@ function parseFreeformPhones(lines) {
|
||||
return recipients;
|
||||
}
|
||||
|
||||
// Human-readable summary of who a WhatsApp broadcast will go to, for the scheduled-jobs admin UI
|
||||
async function describeBroadcastRecipients({ userIds, phones }) {
|
||||
const parts = [];
|
||||
try {
|
||||
const ids = Array.isArray(userIds) ? userIds.filter(x => typeof x === 'string' && x) : [];
|
||||
if (ids.length) {
|
||||
const users = await prisma.user.findMany({ where: { id: { in: ids } }, select: { name: true } });
|
||||
const names = users.map(u => u.name).filter(Boolean);
|
||||
parts.push(names.slice(0, 3).join(', ') + (names.length > 3 ? ` +${names.length - 3} more` : ''));
|
||||
}
|
||||
const extra = parseFreeformPhones(phones);
|
||||
if (extra.length) parts.push(`${extra.length} phone number${extra.length === 1 ? '' : 's'}`);
|
||||
} catch {}
|
||||
return parts.length ? parts.join('; ') : 'No recipients';
|
||||
}
|
||||
|
||||
// @desc Preview WhatsApp broadcast recipients
|
||||
// @route POST /api/whatsapp-broadcasts/preview
|
||||
// @access Private/Supervisor or Admin
|
||||
@@ -152,12 +168,15 @@ const scheduleWhatsAppBroadcast = async (req, res) => {
|
||||
|
||||
const payload = { message, userIds, phones, eventId };
|
||||
|
||||
const recipientSummary = await describeBroadcastRecipients({ userIds, phones });
|
||||
|
||||
const { addJob } = require('../utils/scheduledEmails');
|
||||
const created = addJob({
|
||||
broadcast: true,
|
||||
channel: 'whatsapp',
|
||||
scheduledAt: when.toISOString(),
|
||||
createdById: req.user?.id || null,
|
||||
recipientSummary,
|
||||
payload,
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user