📖 Story diaria (Content Story)
Archivo: /Users/user/rifai-agents/agentes/content/content-story.ts · Plist: com.rifai.content-story · Horario: todos los días a las 10:00 (Europe/Madrid, StartCalendarInterval Hour=10 Min=0)
Qué hace
Publica una Story diaria en formato vertical 9:16 (1080x1920) en la Página de Facebook (photo_stories) y, si está vinculada, en Instagram Business (STORIES). El tipo de story rota entre 7 formatos: tip rápido, pregunta de engagement, antes/después, frase motivacional, dato curioso, novedad y CTA al blog. Genera un fondo lifestyle vertical con fal.ai y le incrusta texto grande + branding RifKings con Sharp.
Cómo funciona
1. Carga .env y estado (data/content-story-state.json), elige tipo por índice rotativo e incrementa.
2. Inyecta identidad corporativa del Brain (getCorporateIdentity('content')) en el system prompt.
3. Llama a gemini-cli (sonnet) para generar JSON con texto_story (máx ~15 palabras) y fondo_prompt en inglés.
4. Genera imagen vertical con fal.ai (flux/schnell, portrait_16_9) + KICK_SCOOTER_SUFFIX anti-moto.
5. Compone la story con Sharp: caja oscura tras el texto centrado + barra inferior con branding "RIFKINGS / rifkings.com" en dorado.
6. Sube la imagen a fal storage (URL pública).
7. Publica FB Story (/photos unpublished → /photo_stories); detecta IG Business y publica IG Story (/media media_type=STORIES → /media_publish).
8. Guarda histórico y notifica vía router (social_post_published).
Datos/APIs
- fal.ai (
flux/schnell+ storage). Var:FAL_API_KEY. - Meta Graph API v21.0 (FB photo_stories + IG STORIES). Vars:
META_PAGE_ID,META_PAGE_TOKEN/META_ACCESS_TOKEN. - LLM local
tools/gemini-cli(sonnet). - Brain
brain/tools/brain.js(identidad corporativa, opcional). - Notificaciones:
tools/notify-router.ts. - No usa Shopify (no toca catálogo).
Cómo probarlo
cd /Users/user/rifai-agents && npx tsx agentes/content/content-story.ts
Espera: tipo del día, texto generado, imagen vertical fal.ai, story compuesta, URL pública, publicación FB Story (✅ FB Story OK) e IG (o aviso de no vinculada). Publica de verdad.
Si se rompe / recuperar
launchctl unload ~/Library/LaunchAgents/com.rifai.content-story.plist
launchctl load ~/Library/LaunchAgents/com.rifai.content-story.plist
Logs en /Users/user/rifai-agents/logs/content-story.log. Estado en data/content-story-state.json. Fallos típicos: token Meta caducado, photo_stories requiere permisos de la Page, JSON inválido del LLM (aborta con exit 1), o fal.ai sin devolver imagen.
Cómo replicarlo
- Lector
.env+ tablaTIPOS_STORY(7 formatos) con índice rotativo. - LLM local con prompt de community manager + regla kick scooter.
- fal.ai portrait 9:16 + storage.
- Sharp para componer 1080x1920 (texto centrado + branding inferior).
- Cliente Meta Graph: FB
photo_stories, IGmedia_type=STORIES+ publish. notify-routery plistStartCalendarIntervala las 10:00.