# Alertas de gasto

> Avisos por correo antes de pasarte del presupuesto de WhatsApp

Fuente: https://developers.plazbot.com/sdk/spend-alerts/

### Introducción

El módulo **SpendAlerts** gestiona las alertas de gasto de WhatsApp: Plazbot revisa el gasto en Meta cada 2 horas y avisa por correo al llegar a un porcentaje del tope, si la proyección del período lo va a superar o ante un día con gasto inusual. Son las mismas alertas de **Reportes** > **WhatsApp** > **Alertas de gasto**. 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.spendAlerts.summary()
```

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

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

---

### Gasto del mes

```ts
const summary = await plazbot.spendAlerts.summary();
console.log(summary.monthSpend, summary.forecast, summary.currency);
```

---

### Crear una alerta

```ts
// Avisar al 80 % y al 100 % de 200 por mes
const alert = await plazbot.spendAlerts.create({
name: "Tope mensual",
period: "monthly",
amount: 200,
thresholds: [80, 100],
recipients: ["finanzas@empresa.com"]
});

// Avisar si un día se gasta 3 veces el promedio
await plazbot.spendAlerts.create({
name: "Gasto inusual",
period: "anomaly",
anomalyMultiplier: 3,
recipients: ["operaciones@empresa.com"]
});
```

| Campo | Descripción |
|-------|-------------|
| `name` | Nombre de la alerta. |
| `period` | `daily`, `weekly`, `monthly`, `custom` (con `customStart` y `customEnd`, `yyyy-MM-dd`) o `anomaly`. |
| `amount` | Tope en la moneda de la cuenta de Meta. No aplica a `anomaly`. |
| `recipients` | Correos que reciben los avisos (máximo 20). |
| `phoneNumber` | Solo este número. Si lo omites, todos los números del workspace. |
| `categories` | Solo estas categorías: `MARKETING`, `UTILITY`, `AUTHENTICATION`, `SERVICE`. Vacío = todas. |
| `thresholds` | Porcentajes del tope en los que se avisa. Por defecto `[50, 80, 100]`. |
| `forecastEnabled` | Avisar si la proyección del período supera el tope. Por defecto `true`. |
| `anomalyMultiplier` / `anomalyMinAmount` | `anomaly`: veces el promedio de 7 días (por defecto 2) y monto mínimo para avisar (por defecto 5). |

---

### Gestionar

```ts
const alerts = await plazbot.spendAlerts.list();
await plazbot.spendAlerts.update(alert.id, { amount: 300 });   // lo que no pases se mantiene
await plazbot.spendAlerts.update(alert.id, { enabled: false });
const { sentNotifications } = await plazbot.spendAlerts.check(alert.id);  // revisar ahora
await plazbot.spendAlerts.sendTest(alert.id, "yo@empresa.com");           // correo de prueba
const history = await plazbot.spendAlerts.history();                      // avisos de los últimos 30 días
await plazbot.spendAlerts.delete(alert.id);
```

> **Nota:** Cambiar el tope, el período, el número, las categorías o los umbrales reinicia los avisos del período en curso.
