El informe semanal del cliente, escrito por un agente cada lunes antes de que te despiertes

Un informe semanal que un agente compila desde Shager: qué se publicó, qué falló, clics por cuenta y por publicación, y cómo cruzarlo con los leads del CRM.

Un agente puede escribir el informe semanal de distribución de un cliente sacando tres cosas de Shager: las publicaciones de la semana y su resultado en cada cuenta, los clics por cuenta y por publicación de get_analytics, y la lista de todo lo que falló. Después cruza esos clics con los leads del CRM del cliente usando el valor de utm_content que identifica cada cuenta. Prográmalo con una clave de solo lectura y el lunes por la mañana el informe te espera en una carpeta.

Lo que exige pensar no es el código. Es decidir qué necesita ver de verdad el cliente y ser honesto sobre qué miden los números.

¿Qué debería tener un informe semanal de distribución?

Con cuatro secciones alcanza. Todo lo demás va en la revisión mensual.

  1. Entrega. Cuántas publicaciones salieron, a cuántas cuentas y qué cuentas fallaron. Los clientes casi nunca preguntan por esto hasta que algo falta, y entonces es lo único por lo que preguntan.
  2. Clics por cuenta. Qué páginas, sucursales o canales llevaron gente al sitio. Esta es la sección que mueve presupuestos.
  3. Clics por publicación. Qué contenido funcionó, sumando todas las cuentas.
  4. Acciones. Lo que tiene que hacer el cliente: volver a conectar una cuenta, aprobar los borradores de la semana siguiente, enviar los materiales que faltan.

Fíjate en lo que no está: alcance, impresiones, me gusta. Shager mide los clics en sus propios enlaces con seguimiento, por cuenta y por publicación. No pretende ser una suite de analítica social, y el informe tampoco debería aparentarlo.

Gráfico de barras: clics en los enlaces con seguimiento de Shager por cuenta, que muestra qué página trajo tráfico.
Lo que el agente recibe de get_analytics. (Ilustración, no son datos reales)

Las llamadas para obtener los datos

Para el espacio de trabajo de un cliente, el agente sigue esta secuencia. Los nombres son los de las herramientas MCP reales; los equivalentes REST están en el documento OpenAPI.

  1. list_workspaces para identificar el espacio de trabajo del cliente por su nombre.
  2. list_posts con status en PUBLISHED, y otra vez con PARTIALLY_PUBLISHED y con FAILED. limit llega hasta 100.
  3. get_post para cada publicación de la semana, para obtener el estado por cuenta, las URL publicadas y los mensajes de error.
  4. get_analytics con from y to abarcando la semana.
  5. list_channels, para asociar los IDs de canal con nombres de cuenta legibles y detectar cuentas cuyo estado de conexión cambió.

La llamada de analítica por REST:

curl -s "https://app.shager.ai/api/v1/workspaces/ws_example/analytics?from=2026-09-14T00:00:00%2B03:00&to=2026-09-20T23:59:59%2B03:00" \
  -H "Authorization: Bearer $SHAGER_READ_KEY"

Hay dos detalles en esa URL que suelen jugar en contra. El + del offset tiene que ir codificado como %2B en la query string, o el servidor lo lee como un espacio. Y los límites de la semana deben calcularse en la zona horaria del cliente, no en la del servidor. Si se omite from, get_analytics toma por defecto los últimos 30 días, que no es lo que quiere un informe semanal.

Los clics no son leads, así que crúzalos

Shager le da a cada cuenta su propio enlace corto y sus etiquetas UTM, con utm_content identificando la cuenta. Eso es lo que hace posible el cruce. El CRM registra los leads con los valores UTM capturados en el formulario de la landing page, y el agente los empareja con los clics por cuenta de Shager usando el mismo utm_content.

La tabla resultante es el corazón del informe:

Cuenta Publicaciones Clics (Shager) Leads (CRM) Nota
Aurora Downtown 4 ... ...
Aurora Northside 4 ... ... hay que volver a conectarla

Las diferencias entre columnas son información. Muchos clics y ningún lead es un problema de la landing page o de la oferta, no de la distribución. Nuestra guía sobre atribución de leads por cuenta explica los campos del formulario y el mapeo en el CRM que hacen confiable la columna de leads, y cómo medir los leads del contenido de agentes cubre la parte del agente.

Si no tienes acceso al CRM, el informe funciona igual solo con los clics. Dilo en el encabezado del informe. Un informe que presenta los clics como "resultados" es la forma en que las agencias pierden la confianza un trimestre después.

Cómo ejecutarlo sin supervisión con Claude Code

Claude Code puede funcionar en modo no interactivo con claude -p, como se explica en su documentación del modo headless. Eso convierte el informe semanal en una tarea de cron.

Primero, una carpeta de proyecto para los informes con un .mcp.json que lea la clave del entorno. La documentación de MCP de Claude Code admite la expansión de ${VAR} en los encabezados:

{
  "mcpServers": {
    "shager": {
      "type": "http",
      "url": "https://app.shager.ai/api/mcp",
      "headers": { "Authorization": "Bearer ${SHAGER_READ_KEY}" }
    }
  }
}

Después, las instrucciones, guardadas como skill para que la lógica viva en un archivo y no en una línea del crontab. Claude Code carga las skills del proyecto desde .claude/skills/<name>/SKILL.md, según su documentación de skills:

---
name: weekly-report
description: Compile the weekly distribution report for one client workspace from Shager. Use when asked for a weekly client report.
---

The argument is the client workspace name: $ARGUMENTS

1. Resolve the workspace with list_workspaces. Read its timezone.
2. Compute last Monday 00:00 to Sunday 23:59:59 in that timezone, with offsets.
3. Collect posts with list_posts (PUBLISHED, PARTIALLY_PUBLISHED, FAILED) and
   keep those published in the window. Call get_post for each.
4. Call get_analytics for the window. Map channel ids to names with list_channels.
5. If crm/<workspace>.csv exists, join leads on utm_content.
6. Write reports/<workspace>/<YYYY-MM-DD>.md with four sections: Delivery,
   Clicks by account, Clicks by post, Actions. Use tables. No adjectives about
   performance; numbers and one plain sentence per section.
7. Never call any tool that creates, schedules or cancels anything.

Y el comando programado, que aprueba de antemano solo las herramientas de lectura y la escritura de archivos:

cd ~/agency-reports && claude -p "/weekly-report Aurora" \
  --allowedTools "mcp__shager__list_*,mcp__shager__get_*,mcp__shager__whoami,Write" \
  --output-format json > logs/aurora-$(date +%F).json

La sintaxis de las reglas de permiso, con el prefijo mcp__<server>__ y un comodín al final, está documentada en la referencia de permisos de Claude Code. Todo lo que no esté en esa lista no se aprueba automáticamente en una ejecución sin supervisión.

Diagrama: una publicación va a varias cuentas, y cada cuenta recibe su propio enlace corto y su etiqueta utm_content.
Los enlaces con seguimiento muestran los clics por cuenta. Para las conversiones necesitas tu herramienta de analítica o tu CRM. (Ilustración)

Por qué aquí importa una clave de solo lectura

La skill le dice al modelo que no escriba. La clave hace que sea imposible. Crea en el panel de agentes una clave aparte, solo con el permiso read, para los informes, y no la uses para nada más. Si esa clave llegara a filtrarse, lo peor que puede pasar es que alguien lea cantidades de clics. Repasamos el modelo completo de permisos en claves de API, permisos y auditoría.

Además, cada llamada que hace el agente de informes aparece en el registro de auditoría de ese panel, una buena forma de confirmar durante los primeros lunes que llama a lo que esperas y a nada más.

La parte narrativa

Deja que el agente escriba una o dos frases por sección, pero ponle límites. Sin reglas, los modelos describen un cambio del 4 % como "un aumento significativo". Mi instrucción es directa: da el número, compáralo con la semana anterior si lo tienes y no digas nada sobre la causa salvo que los datos la muestren. Si la página de una sucursal tuvo cero clics porque su conexión venció el martes, esa es una causa que muestran los datos. La "fatiga de la audiencia", no.

Preguntas frecuentes

¿El agente puede enviarle el informe directamente al cliente?

Puede, si le das una herramienta de correo, pero yo no lo haría desde el primer día. Haz que escriba el archivo, revisa lo que produce durante unas semanas y solo después automatiza el envío. El informe es la mirada del cliente sobre tu trabajo, y un número equivocado enviado automáticamente cuesta más que el tiempo que ahorras.

¿get_analytics incluye leads?

No. Devuelve los clics en los enlaces con seguimiento de Shager, por cuenta y por publicación, en un rango de fechas. Los leads vienen del CRM o de la herramienta de formularios del cliente, emparejados por utm_content. El informe debería mantener las dos fuentes claramente separadas.

¿Hasta qué fecha hacia atrás puede mirar el informe?

get_analytics acepta cualquier from y to que envíes, y por defecto toma los últimos 30 días cuando se omite from. Para comparar mes a mes, ejecuta la misma skill con otra ventana de fechas en lugar de usar los informes anteriores como fuente de verdad.

Por dónde seguir

Si todavía no tienes una clave, la puerta de entrada para agentes muestra cómo crear una o dejar que un agente se registre por su cuenta. Empieza con un cliente, lee tú mismo los informes de tres lunes y solo entonces suma los demás.

Pruébalo en tus propias cuentas.

Gratis durante el lanzamiento, sin tarjeta. Conecta, escribe una vez y Shager publica y mide.