Cron — tarefas agendadas
Agende ações pra rodar em horários específicos: notificações diárias, backups semanais, relatórios mensais.
3 tipos de action
1. Webhook — fetch HTTP
await Bea.cron.create({
expression: "0 9 * * 1", // toda segunda às 9h
name: "Resumo semanal",
action: {
type: "webhook",
url: "https://hooks.slack.com/services/T00/B00/XXX",
method: "POST",
body: { text: "Bom dia! Hora de revisar metas." }
}
});
2. Email — envia via plataforma
await Bea.cron.create({
expression: "0 8 * * *", // todo dia às 8h
name: "Lembrete diário",
action: {
type: "email",
to: "gerente@empresa.com",
subject: "Bom dia",
html: "<p>Confira os pedidos do dia.</p>"
}
});
3. Workflow — multi-step (ler API → filtrar → notificar)
Ver doc dedicado: Workflows multi-step.
Cron expressions
5 campos: minuto hora dia-mes mes dia-semana
| Exemplo | Significado |
|---|---|
0 9 * * * | Todo dia às 9h |
*/30 * * * * | A cada 30 min |
0 9 * * 1 | Toda segunda às 9h |
0 0 1 * * | Todo dia 1 do mês à meia-noite |
0 18 * * 5 | Toda sexta às 18h |
Listar / pausar / deletar
const tasks = await Bea.cron.list();
// → [{ id, name, cronExpression, isActive, lastRunAt, nextRunAt, lastError }]
await Bea.cron.toggle(taskId); // pausa/retoma
await Bea.cron.remove(taskId); // deleta
Limites
- Execução com timeout 10s por webhook
- Retry: não automático (se falhar, fica pra próxima execução)
- Logs:
lastErrorno objeto da task tem o último erro
Segurança
⚠️ Apps NÃO podem rodar código JS arbitrário em cron — apenas as 3 actions declarativas. Isso evita exploração tipo crypto miner.
Se precisar de lógica complexa, use workflow (ainda declarativo) ou faça o webhook bater num endpoint externo seu (Cloudflare Worker, Lambda) que processa.