Última revisão: 23 de julho de 2026.
O Cron Trigger executa a cada minuto e, na mesma chamada autenticada:
- processa publicações devidas;
- cria alertas deduplicados para conexões que expiram em até sete dias;
- busca até três e-mails críticos pendentes;
- envia pelo binding nativo
EMAILda Cloudflare; - registra métricas estruturadas sem tokens, URLs assinadas ou mensagens brutas de provedores.
Uma segunda agenda, às 03:17 UTC, executa a manutenção diária: remove do R2 uploads não confirmados há mais de 24 horas e aplica a retenção das notificações.
Uma falha final de publicação cria a notificação na mesma transação que altera o
post para failed. Falhas intermediárias com retry agendado não geram alerta para
evitar ruído. Cada ciclo de publicação pode gerar no máximo um alerta.
O e-mail é complementar. A central dentro do Voha continua funcionando se o serviço de e-mail estiver desabilitado ou indisponível.
O Voha usa o Cloudflare Email Service por binding, sem API key adicional. Para o uso apenas pela Larissa, mantenha o destino como endereço verificado na conta:
- adicione um domínio gerenciado pelo Cloudflare DNS em Email Service;
- habilite Email Routing para esse domínio;
- adicione o e-mail da Larissa em Destination Addresses e confirme o link;
- use um remetente do domínio, como
alertas@seudominio.com; - configure
ALERT_EMAIL_FROMnas variáveis do Worker; - faça novo deploy e simule uma falha controlada.
O binding está em wrangler.jsonc como EMAIL. Sem ALERT_EMAIL_FROM, o Cron
não reivindica a fila de e-mails e registra emailEnabled: false. Não coloque
tokens ou senhas de e-mail no repositório.
O comando npx wrangler email sending list exige que a sessão do Wrangler tenha
permissão para Email Sending. Um erro 2036 Unauthorized nessa consulta indica
escopo insuficiente da sessão, não necessariamente falha do Worker.
Procure estes eventos em Workers > Observability > Logs:
| Evento | Significado | Campos úteis |
|---|---|---|
operational_cron_completed |
ciclo concluído | runId, duração, publicações, notificações e e-mails |
operational_cron_failed |
ciclo interrompido | runId, duração |
operational_scheduled_handler_failed |
endpoint interno recusou o Cron | status HTTP |
instagram_publication_succeeded |
publicação confirmada | postId, attemptId, tentativa, duração |
instagram_publication_failed |
tentativa encerrada | postId, attemptId, código, retry |
notification_email_sent |
e-mail aceito | notificationId, tentativa |
notification_email_failed |
envio recusado | notificationId, código sanitizado, retry |
stale_media_cleanup_failed |
upload abandonado não pôde ser removido | mediaAssetId |
Use runId, postId, attemptId ou notificationId para correlacionar eventos.
Os logs nunca devem incluir access_token, App Secret, chave R2, endereço de
destino ou URL assinada.
O smoke test automatizado cria e remove dados técnicos temporários no Supabase remoto:
npm run test:notifications:remoteEle valida a criação, a fila de e-mail e a deduplicação do alerta. Para um teste visual manual:
- crie um rascunho descartável no Voha e copie seu UUID;
- no SQL Editor do Supabase, faça somente esse rascunho percorrer as transições
válidas
scheduled,publishingefailed, usandofailure_code = 'test_notification', uma mensagem sem dados pessoais enext_retry_at = null; - abra o sino do Voha e confirme o alerta crítico;
- clique no alerta, confirme a navegação ao calendário e o estado lido;
- aguarde o Cron e verifique o e-mail, se configurado;
- edite o post de teste para transformá-lo novamente em rascunho ou exclua-o.
Nunca simule falha alterando uma publicação real ou já publicada.
- Alerta não apareceu: confira se a falha é final (
next_retry_atnulo), a migration está aplicada e o usuário é proprietário do workspace. - Badge não atualizou: abra novamente a central, confira
/api/notificationse a sessão Supabase. - E-mail não saiu: verifique
ALERT_EMAIL_FROM, domínio, destino verificado, bindingEMAILeemail_error_codeno registro da notificação. - Cron falhou: filtre
operational_cron_failedpelorunIde confira o evento imediatamente anterior. - Muitos alertas: verifique
dedupe_keye se algum processo está iniciando novos ciclos de publicação indevidamente.
- publicação: até três tentativas automáticas;
- e-mail: até três tentativas com backoff;
- falhas permanentes de e-mail não são tentadas novamente;
- envio interrompido há mais de 15 minutos pode ser retomado e, raramente, gerar um e-mail duplicado;
- notificações lidas e e-mails finalizados são removidos após 90 dias;
- notificações não lidas permanecem por até 360 dias;
- notificações com envio pendente ou em andamento não são removidas;
- uploads que não forem confirmados em 24 horas são removidos do R2 e marcados como falhos;
- posts, aprovações e tentativas de publicação permanecem até exclusão do workspace ou definição de uma política específica para histórico.
Referências: Email Service, preços de e-mail e Workers Logs.