📧 Email Weekly Digest (newsletter dominical)
Archivo: agentes/marketing/email-weekly-digest.ts · Plist: _(ninguno)_ · Horario: Diseñado para domingos 18:00; hoy se ejecuta manualmente (no hay plist cargado)
Qué hace
Genera y envía la newsletter semanal a la base de clientes con consentimiento de marketing. El contenido incluye los 3 últimos artículos del blog "news", el producto más vendido de los últimos 7 días y un CTA a la tienda. Redacta el email completo (HTML responsive, paleta RifKings) con IA y lo manda por Gmail SMTP (gratis, ~500/día) o Resend. Para no superar el límite de Gmail, si hay >400 suscriptores segmenta solo a clientes VIP+Recurrentes.
Cómo funciona
1. Carga .env y estado en data/email-digest-state.json.
2. Localiza el blog con handle news y trae sus 3 últimos artículos.
3. Calcula el top producto de la semana sumando line_items de pedidos de 7 días.
4. Genera el HTML del email y el subject con gemini-cli (modelo sonnet).
5. Carga clientes con email_marketing_consent.state === 'subscribed' o accepts_marketing.
6. Guarda el HTML como draft en agentes/marketing/output/digest-YYYY-MM-DD.html.
7. Envío: Gmail SMTP (throttle 250ms, tope seguridad 450 envíos; segmenta a tags ltv_vip/ltv_recurrente si >400 opt-in) o Resend (lotes de 50). Persiste estado y notifica (sales_email_digest).
Datos/APIs
- Shopify Admin API (
2024-10): blogs, articles, orders, products, customers, customers/search. - gemini-cli local (modelo sonnet) para HTML + subject.
- Gmail SMTP (
tools/gmail-sender.ts) o Resend. - notify-router → evento
sales_email_digest. - Vars .env:
SHOPIFY_STORE,SHOPIFY_ACCESS_TOKEN,GMAIL_USER+GMAIL_APP_PASSWORDoRESEND_API_KEY+RESEND_FROM.
Cómo probarlo
cd /Users/user/rifai-agents && npx tsx agentes/marketing/email-weekly-digest.ts
Espera: carga de blogs/top producto/suscriptores, generación del HTML guardado en agentes/marketing/output/, y envío real a los opt-in si hay Gmail/Resend configurado (¡cuidado, envía a clientes reales!). Si no hay sender, deja el HTML como draft y avisa.
Si se rompe / recuperar
- Sin plist. Para programarlo crear
com.rifai.email-digest(StartCalendarInterval domingo 18:00) ylaunchctl load ~/Library/LaunchAgents/com.rifai.email-digest.plist. - Logs:
/Users/user/rifai-agents/logs/email-weekly-digest.log(al lanzar manual). - Drafts HTML:
agentes/marketing/output/digest-*.html. Estado:data/email-digest-state.json. - Si falla por blog: requiere que exista un blog con handle
news.
Cómo replicarlo
- Parser
.envestándar. - 3 fuentes de contenido: blogs
news, top producto 7d, lista de opt-in. - LLM local sonnet con system prompt "newsletter dominical premium".
- Segmentación por tags LTV cuando la base es grande (Gmail 500/día).
- Envío Gmail con throttle o Resend en lotes, + draft HTML local + estado JSON.