Rotinas e Cron com OpenClaw: Automação Agendada em PT-BR
Configure tarefas agendadas no OpenClaw com cron expressions. Exemplos práticos: lembretes de DAS, relatórios semanais e follow-up automático.
Tem uma categoria de problema que nenhum empresário deveria ter: pagar multa por esquecer de pagar o DAS. O boleto estava na gaveta, o prazo era dia 20, você estava ocupado, e pronto — R$ 50 de multa e mais uns trocos de juros que somam em nada mas irritam demais.
Esse problema específico é resolvido com 3 linhas de configuração. Este capítulo explica como.
O Que é Uma Expressão Cron
Cron é um sistema de agendamento originário do Unix. A ideia é simples: você descreve quando quer que algo aconteça usando uma sintaxe compacta de 5 campos, e o sistema executa naquele horário.
A estrutura de uma expressão cron:
┌───── minuto (0-59)
│ ┌─────── hora (0-23)
│ │ ┌──────── dia do mês (1-31)
│ │ │ ┌──────── mês (1-12)
│ │ │ │ ┌──────── dia da semana (0-7, sendo 0 e 7 = domingo)
│ │ │ │ │
* * * * *
O caractere * significa “qualquer valor” — ou seja, “sempre”. Combinando valores e asteriscos, você descreve qualquer padrão de agendamento imaginável.
Exemplos para fixar o conceito:
| Expressão | Leitura em PT-BR |
|---|---|
0 9 * * 1-5 | Todo dia útil às 9h |
0 8 20 * * | Todo dia 20 de cada mês às 8h |
0 9 * * 1 | Toda segunda-feira às 9h |
0 0 1 * * | Primeiro dia de cada mês à meia-noite |
30 18 * * 5 | Toda sexta-feira às 18h30 |
0 */2 * * * | A cada 2 horas |
0 8 15,20 * * | Dia 15 e dia 20 de cada mês às 8h |
Não precisa memorizar. Existe um site chamado crontab.guru que traduz qualquer expressão para linguagem humana em tempo real — útil quando você não tem certeza se escreveu certo.
O Horário É UTC por Padrão — Ajuste para BRT
Este é o erro mais comum com cron em produção no Brasil. Servidores VPS geralmente rodam em UTC (horário de Greenwich). O Brasil usa BRT (Brasília Time), que é UTC-3.
Se você quer um lembrete às 8h no horário de Brasília e não ajusta o fuso, o lembrete vai disparar às 11h. Em época de horário de verão (que o Brasil aboliu em 2019), esse ajuste é fixo.
Regra prática: sempre que escrever um cron para uso no Brasil, adicione 3 horas ao horário que você quer.
Quer lembrar às 8h BRT? A expressão cron usa 11:
0 11 20 * * → dispara às 11h UTC = 8h BRT
Algumas plataformas permitem configurar o fuso diretamente na interface. Quando disponível, use America/Sao_Paulo como timezone — isso resolve o ajuste automaticamente sem precisar calcular na mão.
O Caso do DAS para MEI
O DAS (Documento de Arrecadação do Simples) é o guia de pagamento mensal do MEI. Vence todo dia 20. O valor varia por categoria (R$ 75,90 para comércio/indústria, R$ 79,90 para serviços, R$ 83,90 para comércio + serviços em 2025 — confirme sempre no portal do empreendedor, pois o valor é reajustado).
Um lembrete automático 5 dias antes do vencimento — ou seja, dia 15 — resolve o problema de esquecimento:
0 11 15 * *
Isso dispara às 8h BRT no dia 15 de cada mês.
A mensagem pode ser simples:
Oi! Lembrete: o DAS do seu MEI vence no dia 20.
Acesse o portal para gerar o boleto:
https://www.gov.br/empresas-e-negocios/pt-br/empreendedor
Valor aproximado: R$ {{VALOR_DAS}}
Paga com antecedência para evitar multa.
Se o OpenClaw tem acesso ao valor do DAS (que você pode armazenar em uma variável de configuração do fluxo), injete dinamicamente. Se não, deixe o lembrete genérico — ainda é melhor do que nada.
Lembrete de Boleto Vencendo
Além do DAS, muitos MEIs têm outros boletos recorrentes: aluguel do ponto, mensalidade do contador, fornecedores. Um padrão genérico de lembrete de vencimento funciona assim:
- Você mantém uma lista de boletos com nome, valor e data de vencimento (pode ser uma planilha simples)
- Um cron roda todo dia às 8h:
0 11 * * * - O fluxo lê a lista e filtra boletos que vencem nos próximos 3 dias
- Para cada um encontrado, envia uma mensagem de lembrete
O benefício desse padrão é que funciona para qualquer boleto, não só o DAS. Você alimenta a lista, o sistema cuida dos lembretes.
Relatório Semanal de Negócios
Toda segunda-feira às 9h, um resumo da semana anterior — quantos pedidos, receita total, produto mais vendido, ticket médio. Esse relatório você pode receber no WhatsApp ou por email.
Expressão cron: 0 12 * * 1 (segunda-feira às 9h BRT)
O fluxo:
- Calcula a janela de datas: segunda anterior até domingo
- Consulta os dados de pedidos/vendas no banco de dados ou planilha
- Calcula os totais e métricas
- Monta o resumo
- Envia para o WhatsApp do dono
Exemplo de mensagem de relatório semanal:
*Resumo da semana* ({{DATA_INI}} a {{DATA_FIM}})
📦 Pedidos: {{TOTAL_PEDIDOS}}
💰 Receita: R$ {{RECEITA_TOTAL}}
🏆 Mais vendido: {{PRODUTO_TOP}}
🎯 Ticket médio: R$ {{TICKET_MEDIO}}
{{MENSAGEM_COMPARATIVO}}
O campo {{MENSAGEM_COMPARATIVO}} pode ser simples: “Alta de 12% vs semana passada” ou “Queda de 5% vs semana passada” — calculado pelo fluxo com base nos dados históricos.
Follow-Up Automático Pós-Venda
Um cron que roda 3 dias após uma venda pode disparar uma mensagem de follow-up: “Como foi o produto? Ficou satisfeito?” Isso aumenta recompra e gera feedback real.
A lógica é um pouco diferente das rotinas fixas porque depende de quando a venda aconteceu, não de uma data do calendário. A abordagem mais simples:
- Quando uma venda é confirmada, registre a data em uma fila de follow-ups
- Um cron roda todo dia de manhã verificando quais follow-ups estão agendados para hoje
- Para cada item na fila com
data_agendada = hoje, envia a mensagem e remove da fila
Expressão cron para o verificador diário: 0 11 * * * (8h BRT todo dia)
Para follow-ups de baixo volume, a memória vetorial com decaimento temporal (temporal_decay) é uma alternativa à fila em banco de dados: o agente recorda contatos recentes com peso maior e esquece os mais antigos naturalmente. Para volume alto ou garantias de entrega, o padrão com fila explícita é preferível.
Prevenindo Execuções Duplicadas
Cron jobs têm um problema clássico: se o servidor trava e reinicia, ou se há dois servidores rodando por acidente, o mesmo job pode executar duas vezes. Para mensagens, isso significa o cliente receber o mesmo lembrete duplicado.
Padrão de idempotência para resolver isso:
- Antes de executar, verifique se já existe um registro de execução para esse job + data/hora
- Se sim, pule a execução (já foi feito)
- Se não, execute e registre
Implementação simples: uma tabela cron_executions com job_name, scheduled_at e executed_at. Antes de rodar, faz uma consulta. Se encontrar registro, não executa.
Isso parece overhead, mas evita situações constrangedoras: ninguém quer receber o lembrete do DAS três vezes na mesma manhã.
Memória entre execuções
A v2026.3.22 mudou o timeout de sessão para 48 horas (era 10 minutos). Isso afeta cron jobs diretamente: se dois jobs disparam no mesmo dia, o agente pode “lembrar” da execução anterior sem precisar consultar banco — o contexto ainda está na sessão.
Adicionalmente, o OpenClaw agora salva notas automaticamente antes de compactar contexto (memory.auto_flush). Na prática, se um cron job acumula informação ao longo de várias execuções (ex: total de DAS pagos no trimestre), essa informação persiste no disco sem intervenção manual.
Monitorando Cron Jobs
Como você sabe se o cron rodou e funcionou? Sem monitoramento, é fé — e fé não é estratégia de operação.
O mínimo viável de monitoramento:
- Log de execução: registre início, fim e resultado (sucesso/erro) de cada execução
- Alerta de falha: se um job falhou, você recebe uma notificação (pode ser por WhatsApp mesmo)
- Alerta de ausência: se um job que deveria ter rodado às 8h não apareceu no log até as 9h, algo está errado
Para o alerta de ausência, uma técnica simples é o “dead man’s switch”: o job envia um ping para um endpoint de monitoramento ao finalizar com sucesso. Se o endpoint não receber o ping no prazo esperado, dispara alerta. Serviços como Healthchecks.io fazem exatamente isso, gratuitamente para uso básico.
Na Prática
Cenário: sistema completo de lembretes de DAS para uma MEI de serviços de design.
Configuração:
# Fluxo: lembrete-das-mei
trigger:
type: cron
expression: "0 11 15 * *" # dia 15 de cada mês, 8h BRT
timezone: UTC
steps:
- name: verificar-ja-enviado
type: db_query
query: "SELECT id FROM cron_executions WHERE job = 'das-lembrete' AND month = strftime('%Y-%m', 'now')"
on_result:
found: SKIP # já enviou esse mês, não repete
- name: buscar-dados-mei
type: config_read
keys: [NOME_MEI, VALOR_DAS, TELEFONE_DONO]
- name: enviar-lembrete
type: whatsapp_send
to: "{{TELEFONE_DONO}}"
message: |
Oi, {{NOME_MEI}}! 👋
O DAS do seu MEI vence no dia *20*.
Valor: R$ {{VALOR_DAS}}
Gere o boleto em:
gov.br/empreendedor
Paga antes do dia 20 para evitar multa e juros.
- name: registrar-execucao
type: db_insert
table: cron_executions
data:
job: das-lembrete
month: "{{MES_ANO}}"
executed_at: "{{AGORA}}"
Esse fluxo roda no dia 15, verifica se já enviou nesse mês (evita duplicata), lê os dados de configuração, envia a mensagem e registra a execução.
Extensão possível: adicionar um segundo disparo no dia 18 caso o dono não tenha confirmado o pagamento. Isso requer um passo extra de “checar se DAS foi pago” — que pode ser feito via consulta ao extrato bancário (se integrado) ou simplesmente confiando no primeiro lembrete.
Para fluxos mais complexos envolvendo o contexto completo de um negócio MEI, veja o capítulo seguinte sobre automação para negócios e MEI. Para templates prontos de mensagens de lembrete, consulte a biblioteca de templates.
Baseado no “Automate Everything: The OpenClaw Handbook” por Kelly Claude (CC BY 4.0). Adaptado e expandido para o mercado brasileiro.
Ainda não instalou o OpenClaw?
Um comando instala tudo. Funciona em Linux, macOS e VPS (Hostinger, DigitalOcean).
curl -fsSL https://openclaw.ai/install.sh | bash Ver guia de instalação completo