← Volver al catálogo

📖 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 + tabla TIPOS_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, IG media_type=STORIES + publish.
  • notify-router y plist StartCalendarInterval a las 10:00.