feat: implement template filtering for notifications based on channel type and enhance email rendering with HTML wrapper, ensuring chat messages are sent as plain text
This commit is contained in:
@@ -363,10 +363,39 @@ export const verificarAlertasInternal = internalMutation({
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Enviar email se configurado (integração com sistema de email)
|
||||
// if (alerta.notifyByEmail) {
|
||||
// await enviarEmailAlerta(alerta, metricValue);
|
||||
// }
|
||||
// Enviar email se configurado (usar template HTML padronizado)
|
||||
if (alerta.notifyByEmail) {
|
||||
// Buscar usuários administradores/TI para receber o alerta por email
|
||||
const rolesAdminOuTi = await ctx.db
|
||||
.query('roles')
|
||||
.filter((q) => q.lte(q.field('nivel'), 1))
|
||||
.collect();
|
||||
|
||||
const rolesPermitidas = new Set(rolesAdminOuTi.map((r) => r._id));
|
||||
const usuarios = await ctx.db.query('usuarios').collect();
|
||||
const usuariosTI = usuarios.filter((u) => rolesPermitidas.has(u.roleId) && !!u.email);
|
||||
|
||||
for (const usuario of usuariosTI) {
|
||||
const email = usuario.email;
|
||||
if (!email) continue;
|
||||
|
||||
// Montar variáveis para template de alerta de sistema
|
||||
const variaveisEmail = {
|
||||
destinatarioNome: usuario.nome,
|
||||
metricName: alerta.metricName,
|
||||
metricValue: metricValue.toFixed(2),
|
||||
threshold: alerta.threshold.toString()
|
||||
};
|
||||
|
||||
await ctx.scheduler.runAfter(0, internal.email.enviarEmailComTemplate, {
|
||||
destinatario: email,
|
||||
destinatarioId: usuario._id,
|
||||
templateCodigo: 'monitoramento_alerta_sistema',
|
||||
variaveis: variaveisEmail,
|
||||
enviadoPor: usuario._id
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user