Agentes por Eventos vs Agentes Agendados: Qual Padrão para Qual Trabalho
Use agentes por eventos quando uma ação do usuário exige resposta imediata — qualquer atraso acima de alguns segundos quebra a experiência. Use agentes agendados para trabalho em lote ou periódico onde o timing é previsível. A restrição: agentes por eventos devem ser stateless e rápidos; agentes agendados podem ser stateful e mais lentos.
Toda quarta-feira. 28.400+ operadores. Zero enrolação.
✓ Check your inbox — click the confirmation link to complete sign-up.
✓ You're subscribed!
✓ You're already on the list.
Índice
Atualizado maio 2026.
TL;DR: Use agentes por eventos quando uma ação do usuário exige resposta imediata — qualquer atraso acima de alguns segundos quebra a experiência. Use agentes agendados para trabalho em lote ou periódico onde o timing é previsível. A restrição: agentes por eventos devem ser stateless e rápidos; agentes agendados podem ser stateful e mais lentos.
[Perspectiva do operador] Mantenho mais de 30 agentes em produção na minha marca de consultoria e no Pickleland, uma arena de pickleball em Pflugerville, TX. Cada um deles se encaixa em um de dois padrões: dispara por um evento, ou dispara por um relógio. Errar aqui desperdiça dinheiro e entrega experiências quebradas.
Os dois padrões em linguagem simples
Um agente por eventos acorda porque algo aconteceu. Uma reserva chegou. Um comentário foi postado. Um formulário foi enviado. O gatilho é externo e imprevisível no tempo. O trabalho: responder rápido.
Um agente agendado acorda porque o relógio mandou. Todo dia às 7h. Todo domingo às 18h. Toda hora no horário exato. O gatilho é interno e completamente previsível. O trabalho: fazer um trabalho minucioso.
É só isso. Não complique. A arquitetura segue da resposta a uma pergunta: o usuário ou o sistema precisa de resposta agora mesmo, ou pode esperar até um momento específico?
Por eventos: o agente de resposta nas redes sociais
Meu agente de resposta social dispara quando um novo comentário chega em um post do Facebook monitorado. O agente lê o comentário, classifica a intenção (pergunta, reclamação, elogio, spam), rascunha uma resposta e a publica — ou a sinaliza para revisão humana se a confiança for baixa.
Todo o ciclo completo precisa terminar em menos de 30 segundos ou a resposta parece desatualizada. Esse é um problema de ativação por eventos.
Aqui está um Cloudflare Worker simplificado que lida com o webhook de um serviço de monitoramento social:
// workers/social-reply.ts
export default {
async fetch(request: Request, env: Env): Promise<Response> {
if (request.method !== "POST") {
return new Response("Method not allowed", { status: 405 });
}
// Verificar a assinatura do webhook
const sig = request.headers.get("x-webhook-signature") ?? "";
const body = await request.text();
const valid = await verifySignature(body, sig, env.WEBHOOK_SECRET);
if (!valid) return new Response("Unauthorized", { status: 401 });
const event = JSON.parse(body) as SocialCommentEvent;
// Classificar e responder — manter async para retornar 200 rápido
env.REPLY_QUEUE.send(event);
return new Response("OK", { status: 200 });
},
};
// Consumidor de fila — faz o trabalho real de IA
export const queue: ExportedHandlerQueueHandler<Env, SocialCommentEvent> =
async (batch, env) => {
for (const msg of batch.messages) {
const comment = msg.body;
const classification = await classifyComment(comment.text, env);
if (classification.intent === "spam") {
msg.ack();
continue;
}
const reply = await draftReply(comment, classification, env);
if (classification.confidence > 0.85) {
await postReply(comment.postId, comment.id, reply, env);
} else {
await flagForReview(comment, reply, env);
}
msg.ack();
}
};Duas coisas a notar. Primeiro, o handler fetch retorna 200 imediatamente e delega o trabalho real para uma fila. Isso mantém a resposta do webhook rápida e evita que o serviço de monitoramento tente novamente. Segundo, o consumidor de fila faz a chamada real de IA — classificando e rascunhando — sem pressão de tempo de uma conexão HTTP aberta.
Agendado: o promotor de eventos do Pickleland
O Pickleland gerencia quadras e eventos. Toda semana, alguém precisa divulgar os próximos eventos nos grupos certos do Facebook para preencher vagas. Isso é puro trabalho periódico em lote — nenhuma ação do usuário o dispara, e não precisa acontecer em tempo real.
O promotor de eventos do Pickleland roda em um cron, verifica o sistema de reservas para eventos nos próximos 4 dias, rascunha posts específicos para cada grupo do Facebook correspondente, e os apresenta para minha revisão antes de qualquer coisa ir ao ar.
// workers/event-promoter.ts
export default {
async scheduled(
event: ScheduledEvent,
env: Env,
ctx: ExecutionContext
): Promise<void> {
ctx.waitUntil(runPromoter(env));
},
};
async function runPromoter(env: Env): Promise<void> {
// Buscar eventos do sistema de reservas
const upcomingEvents = await fetchUpcomingEvents(env, { daysAhead: 4 });
if (upcomingEvents.length === 0) return;
const drafts: PromoDraft[] = [];
for (const event of upcomingEvents) {
// Associar cada evento aos grupos de FB corretos
const groups = await matchFacebookGroups(event, env);
for (const group of groups) {
const post = await draftPromoPost(event, group, env);
drafts.push({ event, group, post });
}
}
// Salvar rascunhos no Airtable para revisão — nada é publicado automaticamente
await saveDraftsForReview(drafts, env);
// Me notificar pelo Slack
await notifyOperator(
`${drafts.length} rascunhos de promo prontos para revisão`,
env
);
}A configuração do wrangler que conecta tudo:
# wrangler.toml
[[triggers]]
crons = ["0 18 * * 0"] # Todo domingo às 18h UTCNote o que o agente agendado pode fazer que o por eventos não pode: itera sobre múltiplos eventos, escreve em um banco de dados e envia uma notificação resumida. Está fazendo trabalho em lote. O agente por eventos precisa se manter leve e retornar resposta rapidamente.
Agendado: o briefing diário
Todo dia às 7h, meu agente de briefing diário roda. Ele busca e-mails noturnos, meu calendário, tarefas principais e qualquer notícia que eu marquei como relevante. Formata tudo em um único documento e o deposita na minha pasta AI Workspace.
Este é puro agendamento. Não há nenhum evento que o dispararia — eu simplesmente quero que ele rode toda manhã antes de começar a trabalhar.
// workers/daily-brief.ts
export default {
async scheduled(
event: ScheduledEvent,
env: Env,
ctx: ExecutionContext
): Promise<void> {
ctx.waitUntil(buildDailyBrief(env));
},
};
async function buildDailyBrief(env: Env): Promise<void> {
const [emails, calendar, tasks] = await Promise.all([
fetchOvernightEmails(env),
fetchTodayCalendar(env),
fetchTopTasks(env),
]);
const brief = await synthesizeBrief({ emails, calendar, tasks }, env);
await writeToWorkspace(brief, env);
}[[triggers]]
crons = ["0 7 * * *"] # Todo dia às 7h UTCO Promise.all paralelo é deliberado. Agentes agendados não têm um humano esperando — mas ainda assim não deveriam ser mais lentos do que precisam. Busque todas as fontes de dados em paralelo, depois faça a síntese de IA uma vez.
Quando agentes por eventos falham
O modo de falha que vejo com mais frequência: alguém constrói um agente por eventos que faz trabalho demais no handler.
Uma reserva chega. O agente busca o perfil do cliente, enriquece a partir de três APIs externas, executa um modelo de personalização, escreve no CRM, envia o e-mail de confirmação e atualiza um dashboard. Tudo leva 45 segundos. A plataforma de reservas tenta novamente porque não recebeu um 200 rápido o suficiente. Agora o agente roda duas vezes.
Corrija da mesma forma que o agente de resposta social é construído: retorne 200 imediatamente, empurre o evento para uma fila, deixe o consumidor de fila fazer o trabalho pesado de forma assíncrona.
O outro modo de falha: usar por eventos para trabalho que é na verdade periódico. “Enviar um resumo semanal” não é um evento. Não conecte isso a um webhook de cron sintético — use um gatilho agendado adequado.
Quando agentes agendados falham
Agentes agendados falham quando o trabalho é na verdade sensível à latência. Se um usuário envia um formulário e o agente que o processa roda em um cron de 5 minutos, o usuário fica olhando para um spinner por até 5 minutos. Isso não é um job agendado — é um job por eventos lento se passando por agendado.
O outro falha: agentes agendados que se expandem para trabalho ilimitado. Se seu cron roda a cada minuto e cada invocação pode processar centenas de registros, você atingirá os limites de CPU do Cloudflare rapidamente. Aumente o intervalo do cron, adicione uma fila para limitar o trabalho por invocação, ou mude para Durable Objects para coordenação de longa duração.
Misturando padrões: o pipeline de reservas
Alguns fluxos de trabalho genuinamente precisam de ambos. O pipeline de reservas do Pickleland funciona assim:
- Por eventos: webhook de nova reserva → confirmar a reserva, enviar o recibo ao cliente, atualizar disponibilidade. Deve ser concluído em menos de 10 segundos.
- Agendado: todo domingo → revisar todas as reservas da semana passada, gerar um relatório resumido, sinalizar anomalias (reservas duplicadas, taxas de cancelamento incomuns).
Mesmo domínio, dois padrões, dois agentes. O por eventos é dono da experiência do usuário em tempo real. O agendado é dono da revisão operacional semanal. Eles compartilham um banco de dados, mas nada mais.
Não tente combiná-los em um único agente que “faz tudo.” O resultado será algo muito lento para eventos e muito acoplado ao fluxo em tempo real para trabalho em lote.
Cloudflare Workers: por que é a infraestrutura certa para ambos
O Cloudflare Workers lida com ambos os padrões nativamente:
- Handler
fetch→ por eventos (webhooks, chamadas de API) - Handler
scheduled→ baseado em cron (via[[triggers]]no wrangler.toml) - Consumidor
queue→ processamento assíncrono desacoplado da camada HTTP
O deployment no edge significa que seus agentes por eventos respondem rapidamente globalmente. O nível gratuito é generoso o suficiente para prototipar ambos os padrões sem gastar nada. E a configuração unificada do wrangler.toml significa que você não está gerenciando dois setups de infraestrutura separados para dois padrões.
A única coisa que o Workers não resolve bem: agentes que precisam rodar por mais de alguns minutos. Para esses, recorra aos Durable Objects ou delegue a um backend de maior duração.
A conclusão do operador
Escolha seu padrão antes de escrever uma única linha de código de agente. Por eventos para qualquer coisa em que um humano esteja esperando; agendado para qualquer coisa que roda em um relógio. Mantenha os handlers por eventos leves — retorne rápido, enfileire o trabalho. Mantenha os agentes agendados paralelos — não serialize o que você pode paralelizar. A arquitetura é simples. Violá-la é de onde vem a complexidade.
Toda quarta-feira. 28.400+ operadores. Zero enrolação.
✓ Check your inbox — click the confirmation link to complete sign-up.
✓ You're subscribed!
✓ You're already on the list.
Receba o manual de IA na sua caixa de entrada
Toda quarta-feira. 28.400+ operadores. Zero enrolação.
Check your inbox.
We sent you a confirmation email — click the link inside to complete your subscription. Check spam if you don't see it within a minute.
You're subscribed.
Welcome — the next edition lands in your inbox soon.
You're already on the list — look for it every Wednesday.