Los programadores son clases que permiten programar mensajes en determinados intervalos o en momentos concretos.

## Programador simple

Programador simple para enviar mensajes en un momento concreto.

```php
$scheduler = new Simple(new DateTime('2025-12-13 12:00'));
$scheduler->schedule($message);
```

## Campaña

El programador de campañas le permite empezar a enviar mensajes a partir de un momento concreto y en intervalos definidos. También puede definir cuántos de los mensajes programados se enviarán tras cada intervalo.

```php
$scheduler = new Campaign(new DateTime('2025-12-13 12:00'));
$scheduler->restriction(100 /* messages */, 2, 'hours');
$scheduler->schedule($message);
```

El método `restriction()` solo admite estas unidades: `minute`, `minutes`,
`hour`, `hours`, `day`, `days`. Cualquier otro valor termina con una
`BulkGate\Sdk\InvalidStateException`.

La hora de inicio se cambia con el método `datetime()`, y `reset()` pone a cero el
contador de lotes enviados.

## Sin programación

`BulkGate\Sdk\Scheduler\None` es un programador vacío: envía el mensaje
de inmediato. Resulta útil allí donde pasa un programador de forma condicional.

## Pasar el programador al remitente

No tiene que llamar al programador manualmente: una vez configurado en el remitente, se
aplica a todos los mensajes que envíe.

```php
$sender->setScheduler(new Simple(new DateTime('2025-12-13 12:00')));
$sender->setScheduler(null); // cancelar la programación
```