Notas
Agentes externos, posts autónomos y analítica propia
Agentes externos con webhooks firmados, el ciclo completo de posts autónomos,
3 min de lectura
Un día de tres frentes: abrir el CMS a agentes externos, cerrar el sistema de posts autónomos y dejar la casa monitorizada. Al final de la noche, analítica propia.
Agentes externos con webhooks firmados
Desde Ajustes → Agentes ya puedo registrar agentes externos con token de un solo uso, ámbitos e instrucciones editables. El CMS queda expuesto por OpenAPI (el proxy lo tapaba porque estaba fuera de /api/; ahora está en /api/v1/openapi.json) y el token se guarda como hash. Prueba E2E en producción: manifest, 61 rutas, alta de un artículo programado y revocación con 401.
La pieza fuerte son los webhooks: entregas persistentes con firma HMAC SHA-256, tres intentos y log por agente. Se emiten al publicar o despublicar un artículo y al crear un comentario. Dos fixes del camino: el servicio no arrancaba porque una anotación list[int] resolvía el método propio list() (renombrado a list_deliveries), y un despliegue fallido dejó el contenedor web parado aunque el API y la base estaban sanos.
Posts autónomos, del concepto al ciclo completo
La decisión del día: los posts autónomos se publican solos, generados dos días antes. Y ya funciona: el cron crea los huecos, elige el tema de una lista fija (o lo propone la IA si se agota), pasa filtros de duplicado textual y semántico, escribe con Keyword + Tavily, reescribe el SEO, genera la imagen destacada y traduce a todos los idiomas activos con el mismo publish_at. Si una fase falla, la ejecución queda reintentable sin duplicar el artículo.
Fixes del trayecto: el dedupe textual usaba un iterador escalar para dos columnas y fallaba antes de crear nada; la URL de portada ha desaparecido del panel porque el backend ya lee la home por el servicio interno de web; y con un único tema fijo, el fallback ahora propone variantes (cuidados, alimentación, guía, costes...) en lugar de quedarse sin nada.
Contenido generado más limpio
Tres correcciones que dejan la IA más fina: la «mejora general» pasa a job con polling (el proxy cortaba con 504), ningún artículo empieza con un H1 duplicado (el título ya es el h1 público) y las imágenes con URL inventada se eliminan: sanitize_images solo acepta /api/media/. Limpieza retroactiva: 17 artículos sin h1 inicial y 14 sin imágenes falsas.
Páginas legales editables
Aviso legal, política de cookies y privacidad ahora se editan desde el panel con macros de identidad compartidas: cambias los datos de contacto una vez y las tres páginas siguen el cambio.
Robustez y analítica propia
Los reintentos webhook sobreviven a los reinicios (contador en base de datos y tick cada 5 minutos), las publicaciones programadas disparan su article.published cuando toca y hay un monitor de incidencias en el panel. Y el último hito: analítica propia sin cookies. Beacon propio, visitante como hash diario de IP+UA+sal, país por Cloudflare con GeoIP de respaldo (la base DB-IP falló por permisos del volumen, reasignada) y panel con 7/30/90 días: vistas, únicos, artículos, países, ciudades, fuentes y dispositivos. La primera visita real salió con país ES y ciudad correcta.
Retención del crudo a 90 días. Nada de terceros.