Add WABA outreach automation (Z-PRO integration)
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.
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
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);
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user