Atualizado em: 2026-03-26 09:44 BRT  ·  Versão: 3.0  ·  Status: OPERACIONAL
📰 Daily Briefing

Briefing Diário Cripto

Agregação automatizada de mercado → Telegram Central (com links) + WhatsApp Avisos (sem links)

Operacional
07:00 BRT diário
2 destinos
🔒 Anti-duplicata
Fluxo de Execução

Pipeline completo do gatilho ao entregável — executa todo dia às 07:00 BRT

Gatilho · Cron
Disparo Automático 07:00 BRT
Cron job do OpenClaw Gateway dispara o agentTurn diariamente. O cron executa o script principal via bash com timeout de 12 minutos. Lock file e flag anti-duplicata garantem que não rode duas vezes.
cron: 0 7 * * * BRT job: 764a07f9 timeout: 720s
🔍
Fase 0 · Validação
Pre-flight + Anti-duplicata
Health check via health-check.js valida credenciais (1Password, Firecrawl, Tavily, Groq). Verifica lock file e flag briefing-sent-YYYY-MM-DD.flag. Se já enviado hoje → aborta silenciosamente.
health-check.js /tmp/briefing-daily.lock /tmp/briefing-sent-DATE.flag
🕷️
Fase 1 · Coleta
Aggregator — Coleta de Dados
Executa aggregate.js com timeout de 10 minutos. Coleta de múltiplas fontes em paralelo: headlines via Firecrawl/Tavily (~982 por dia), tweets via Bird CLI, preços cripto, funding rates, Fear & Greed Index. Semantic Intelligence (Groq) categoriza os itens automaticamente. Saída: output/YYYY-MM-DD.json (~200KB)
aggregate.js ~982 headlines/dia 42 após filtro Groq semantic AI
✏️
Fase 1B · Formatação
Formato Compacto Diego v3
Gera format-diego-compact-v3.js — versão 100% em português com links. Fallback automático para v2 e v1. Saída: output/YYYY-MM-DD-diego-compact.md (~1.6KB). Estrutura: preços BTC/ETH + Fear & Greed → seções por categoria (₿ CRIPTO, 🌍 MACRO, 🏦 DEFI, 🏛️ INSTITUCIONAL, 📊 ON-CHAIN, ⚡ ALPHAS, 🎁 AIRDROPS, 🔗 TOKENIZAÇÃO)
format-diego-compact-v3.js 100% português ~1.6KB output
📤
Fase 2 + 2B · Entrega Dual
Envio para 2 Destinos (sequencial)
Envia primeiro para Telegram (com links), depois para WhatsApp (sem URLs). Ambos rodam no mesmo processo — sem crons adicionais, sem dependências externas.
📤 Destinos de Entrega
✈️
Telegram — Tópico Central (685)
Versão completa com links. Enviada via openclaw message send. Contém todas as categorias + URLs originais das fontes (Twitter, TheDefiant, etc).
channel: telegram
target: -1003880005285
threadId: 685
conteúdo: diego-compact.md (completo)
📱
WhatsApp — Grupo Avisos
Versão sem URLs (remove linhas 🔗 https://, preserva seções como 🔗 *TOKENIZAÇÃO*). Enviada via wa-sender.js (Baileys standalone, independente do gateway).
JID: 120363136035311553@g.us
via: wa-sender.js (Baileys)
filtro: grep -v "^🔗 https://"
sucesso: detectado por "✅ Mensagem enviada"
📊 Métricas do Sistema
982
Headlines coletadas/dia (média)
42
Itens após filtro semântico
2
Destinos de entrega
🔧 Status dos Componentes
Cron Gateway (764a07f9) — 07:00 BRT
✅ Ativo
🕷️
aggregate.js — Coleta de dados
✅ Operacional
✏️
format-diego-compact-v3.js — Formatação
✅ Operacional
✈️
Envio Telegram tópico 685 — com links
✅ Operacional
📱
Envio WhatsApp Avisos — wa-sender.js (Baileys)
✅ Operacional
🔒
Anti-duplicata (lock + flag)
✅ Ativo
♻️
Cron WA isolado (3ece20ab) — abordagem antiga
❌ Desativado
📁 Arquivos do Sistema
# Script principal scripts/briefing-daily-telegram.sh # Aggregator e formatação scripts/briefing-aggregator/aggregate.js scripts/briefing-aggregator/format-diego-compact-v3.js scripts/briefing-aggregator/health-check.js scripts/briefing-aggregator/recovery.js # Envio WhatsApp (Baileys standalone) scripts/wa-sender.js # Outputs gerados diariamente scripts/briefing-aggregator/output/YYYY-MM-DD.json # dados brutos (~200KB) scripts/briefing-aggregator/output/YYYY-MM-DD.md # briefing completo scripts/briefing-aggregator/output/YYYY-MM-DD-diego-compact.md # versão envio # Logs e flags /tmp/briefing-daily.log /tmp/briefing-sent-YYYY-MM-DD.flag /tmp/briefing-daily.lock
📏 Regras de Negócio
Telegram recebe versão COMPLETA — com todos os links 🔗 https://... originais
WhatsApp recebe versão LIMPA — linhas 🔗 https:// removidas, mas seções como 🔗 *TOKENIZAÇÃO* são preservadas
⚠️
Anti-duplicata — flag diária evita reenvio mesmo se o cron disparar novamente
⚠️
Erro 479 WhatsApp — é um ACK normal em grupos LID; a mensagem É entregue. Sucesso detectado por "✅ Mensagem enviada" no log, não pelo exit code
Product Requirements Document

Especificação funcional completa do sistema Daily Briefing

🎯 Visão Geral
CampoValor
NomeDaily Briefing Cripto — ASPIRA
ObjetivoEntregar automaticamente um resumo curado do mercado cripto todo dia às 07:00 BRT para Diego e para o grupo de alunos do IntusCripto Club
OwnerDiego Spanevello (IntusCripto)
Operado porASPIRA (OpenClaw Gateway)
FrequênciaDiária — 07:00 BRT
DestinosTelegram tópico Central (685) + WhatsApp grupo Avisos
Versão atual3.0 (2026-03-26)
Status✅ Produção
✅ Requisitos Funcionais
IDRequisitoStatus
RF-01 Coletar automaticamente headlines cripto de múltiplas fontes (Firecrawl, Tavily, Twitter/Bird CLI) ✅ Implementado
RF-02 Categorizar conteúdo semanticamente via IA (Groq) em: CRIPTO, MACRO, DEFI, INSTITUCIONAL, ON-CHAIN, ALPHAS, AIRDROPS, TOKENIZAÇÃO ✅ Implementado
RF-03 Incluir dados de mercado em tempo real: preços BTC/ETH, variação 24h, Fear & Greed Index, funding rates ✅ Implementado
RF-04 Gerar briefing 100% em português brasileiro ✅ Implementado
RF-05 Enviar para Telegram com links originais das fontes ✅ Implementado
RF-06 Enviar para WhatsApp Avisos SEM URLs (versão limpa para alunos) ✅ Implementado
RF-07 Garantir anti-duplicata — nunca enviar duas vezes no mesmo dia ✅ Implementado
RF-08 Sistema de recovery automático se aggregator falhar ✅ Implementado
RF-09 Log completo de cada execução em /tmp/briefing-daily.log ✅ Implementado
⚙️ Requisitos Não Funcionais
IDRequisitoMeta
RNF-01 Tempo máximo de execução completa ≤ 12 minutos (timeout: 720s)
RNF-02 Tamanho do briefing entregue ≥ 1.000 bytes (validado antes do envio)
RNF-03 Zero credenciais hardcoded 100% via 1Password vault "Aspira"
RNF-04 Independência do WA gateway plugin wa-sender.js usa Baileys standalone
RNF-05 Retenção de outputs 7 dias (JSON + MD), 3 dias (backups)
🔒 Regras Críticas de Negócio
#RegraRazão
1 Telegram recebe conteúdo completo com links Diego usa os links para aprofundar pesquisa
2 WhatsApp remove linhas 🔗 https:// mas preserva seções 🔗 *NOME* Alunos não precisam de links; seções são estrutura visual
3 Nunca expor paths internos, credenciais ou erros técnicos no grupo Avisos Grupo público de alunos — segurança
4 Se Telegram falhar → abortar com flag pending Telegram é o canal primário
5 Se WhatsApp falhar → logar e continuar (não abortar) Canal secundário; não deve bloquear o fluxo
6 Erro 479 no ACK do WhatsApp é NORMAL — mensagem foi entregue Comportamento do protocolo LID em grupos
🔑 Credenciais (1Password vault "Aspira")
ServiçoItem 1PasswordUso
FirecrawlFirecrawl API → api_keyScraping de sites de notícias
TavilyTavily API → api_keySearch AI + extração
GroqGroq API → passwordCategorização semântica (LLM)
Twitter/BirdTwitter Bird → authToken + ct0Coleta de tweets cripto
WhatsAppCredenciais WA em /credentials/whatsapp/default/Envio via Baileys
📡 Fontes de Dados

Headlines & Notícias

📰
thedefiant.io
📰
decrypt.co
📰
coindesk.com
📰
cointelegraph.com
🐦
Twitter via Bird CLI (KobeissaLetter, AshCrypto, aixbt, etc)

APIs de Mercado

💰
CoinGecko — preços BTC/ETH/SOL
📊
Binance Futures — funding rates
😱
Alternative.me — Fear & Greed Index
🔗
CryptoQuant — on-chain data
🧠
Santiment — social intelligence
Histórico de Mudanças

Evolução do sistema desde a criação

2026-03-26 · v3.0
🔧 Fix definitivo do WhatsApp — migração para wa-sender.js (Baileys standalone). Problema raiz era "missing runtime-api for plugin whatsapp" em sessões isoladas. Erro 479 documentado como normal em grupos LID. Cron isolado 3ece20ab desativado.
FASE 2B reescrita · Anti-duplicata de testes manuais confirmada · Filtro de links corrigido (preserva seções)
2026-03-22 a 2026-03-25 · v2.5
⚠️ WhatsApp Avisos não funcionava — cron isolado com sessionTarget="isolated" falhava com "missing runtime-api". Script avisos-dispatch-update.sh retornava 404 (ID de cron inexistente). Briefing chegava apenas no Telegram.
7 erros consecutivos no cron 3ece20ab
2026-03-21 · v2.0
✅ Migração para Telegram como canal primário — briefing passa a ir para tópico 685 (Central Aspira). WhatsApp delegado para cron separado (arquitetura que depois se provou falha). Semantic Intelligence v2 implementado com Groq.
requireMention: true no grupo Avisos para evitar bot respondendo inbound
2026-03-10 · v1.5
Grupo Avisos adicionado ao allowlist — JID 120363136035311553@g.us configurado no openclaw.json. Primeiras tentativas de envio proativo WA.
2026-03-01 · v1.0
Sistema inicial operacional — Aggregator + formato compacto Diego. Envio via WhatsApp pessoal funcionando. Crontab Linux como gatilho.
🔧 Problemas Resolvidos
DataProblemaSolução
26/03/2026 WhatsApp nunca enviou para grupo Avisos desde criação do cron (7 erros) wa-sender.js (Baileys standalone) — bypass total do gateway plugin
26/03/2026 avisos-dispatch-update.sh retornava 404 "Not Found" Desativado — desnecessário com nova arquitetura direta
26/03/2026 Seção "🔗 *TOKENIZAÇÃO*" era removida junto com URLs Filtro corrigido para grep -v "^🔗 https://"
16/03/2026 Zero tweets coletados (error crítico) Falha transiente de rede/rate limit — alerta foi disparado e limpo