Per-product message templates, official/não-oficial channel selection, manual per-number sending, and a 20-minute internal scheduler for the existing automatic outreach batch — all pre-existing local work being committed as-is.
30 lines
1.1 KiB
JavaScript
30 lines
1.1 KiB
JavaScript
import { runOutreachBatch } from './run.mjs';
|
|
|
|
const CICLO_MS = 20 * 60 * 1000;
|
|
|
|
// Timer interno no processo do servidor: nao depende de agendador do sistema
|
|
// operacional (Task Scheduler/cron), entao funciona identico local (Windows)
|
|
// ou dentro de um container Docker apos a migracao — so precisa do servidor
|
|
// estar de pe, o que ja e verdade hoje. runOutreachBatch e idempotente e sai
|
|
// cedo quando desligado/fora de horario/limite batido, entao rodar a cada
|
|
// 20 min e seguro sem lock ou fila.
|
|
export function startOutreachScheduler({ db, log = () => {} }) {
|
|
const ciclo = () => {
|
|
runOutreachBatch({ db, log }).catch((error) => {
|
|
log(`outreach: erro inesperado no ciclo automatico: ${error.message}`);
|
|
});
|
|
};
|
|
|
|
// roda um primeiro ciclo pouco depois do boot (idempotente/seguro), sem
|
|
// esperar os 20 min inteiros para o primeiro lote do dia.
|
|
const primeiro = setTimeout(ciclo, 30 * 1000);
|
|
primeiro.unref();
|
|
|
|
const timer = setInterval(ciclo, CICLO_MS);
|
|
timer.unref();
|
|
return () => {
|
|
clearTimeout(primeiro);
|
|
clearInterval(timer);
|
|
};
|
|
}
|