# Estadísticas

> Mensajes, costos por categoría y rendimiento de plantillas, con los datos de Meta

Fuente: https://developers.plazbot.com/sdk/analytics/

### Introducción

El módulo **Analytics** trae las estadísticas que entrega Meta para un número: mensajes enviados, entregados y recibidos, gratis frente a pagados, costo por categoría y el rendimiento de cada plantilla. Son los mismos datos de **Reportes** > **WhatsApp**. Disponible desde la versión **2.4.0**.

### Inicialización

```ts Plazbot (recomendado)
import { Plazbot } from 'plazbot';

const plazbot = new Plazbot({
workspaceId: "YOUR_WORKSPACE_ID",
apiKey: "YOUR_API_KEY",
zone: "LA"
});

// Usar: plazbot.analytics.messages()
```

```ts Analytics individual
import { Analytics } from 'plazbot';

const analytics = new Analytics({
workspaceId: "YOUR_WORKSPACE_ID",
apiKey: "YOUR_API_KEY",
zone: "LA"
});
```

---

### Mensajes y costos

```ts
const stats = await plazbot.analytics.messages({
from: "2026-10-01",
to: "2026-10-31",
number: "+51912345678"   // opcional si el workspace tiene un solo número
});

console.log(stats.totals.sent, stats.totals.cost);
console.log(stats.byCategory.marketing);   // { messages, cost }
```

| Campo | Descripción |
|-------|-------------|
| `totals` | `messages`, `sent`, `delivered`, `received`, `free`, `paid` y `cost`. |
| `byCategory` | `marketing`, `utility`, `authentication` y `service`, cada una con `messages` y `cost`. |
| `free` | Gratis por ventana de servicio (`customerServiceWindow`) y por anuncio de 72 h (`entryPoint`), si Meta los entrega. |
| `costEstimated` | El costo es estimado (cuentas que facturan a través de un BSP). |
| `costNotAvailableMessage` | Por qué no hay costo, si no lo hay. |

El costo está en la moneda de la cuenta de WhatsApp en Meta.

---

### Rendimiento de plantillas

```ts
const report = await plazbot.analytics.templates({ from: "2026-10-01", to: "2026-10-31" });

if (report.analyticsUnavailable) {
await plazbot.analytics.enableTemplateInsights();  // Meta empieza a contar desde ahora
} else {
for (const t of report.templates) console.log(t.name, t.sent, t.read, t.clicks, t.spent);
}
```

Cada fila trae `sent`, `delivered`, `read`, `clicks`, los clics por botón (`buttons`) y el gasto (`spent`, `null` si Meta no entrega costos). Meta guarda 90 días: si pides más, `startClamped` viene en `true`.
