# Déclencheur Planification

Le déclencheur Planification exécute un workflow selon un timer — soit à un **intervalle fixe** (toutes les N minutes), soit selon une **expression cron** (chaque jour ouvré à 9h, le 1er de chaque mois, etc.).

## Ajouter le déclencheur

1. Glissez un nœud **Schedule** depuis la palette sur le canevas.
2. Choisissez un **Mode** :
   - **Intervalle** — sélectionnez un preset (1m, 5m, 15m, 30m, 1h, 6h, 1j) ou une valeur personnalisée en minutes.
   - **Expression cron** — collez une chaîne cron standard à 5 champs.
   - **Visual builder** — assemblez le cron sans l'écrire : `every minute`, `every N minutes`, `hourly`, `daily`, `weekly`, `monthly`. Le cron généré s'affiche en live sous le sélecteur.
3. Définissez un **Fuseau horaire** (défaut `UTC`). Accepte tout nom IANA — `Europe/Paris`, `America/New_York`, etc.
4. Choisissez une **Politique de rattrapage** pour les exécutions manquées (ex. après un déploiement ou une panne) :
   - `skip` — ignorer le retard accumulé et attendre le prochain créneau planifié.
   - `fire_once` — exécuter une seule fois après la reprise pour couvrir tout le retard (choix par défaut, recommandé dans la plupart des cas).
   - `fire_all` — rejouer chaque créneau manqué, avec un maximum de 50 exécutions de rattrapage. À utiliser uniquement si chaque occurrence doit être traitée.

La politique de rattrapage intervient seulement lorsque plusieurs exécutions se sont accumulées pendant l'indisponibilité du planificateur. Une exécution normalement arrivée à échéance est toujours lancée, quelle que soit la politique. Dans la configuration du nœud, survolez l'icône **ⓘ** ou un bouton de politique pour afficher cette explication.
5. Activez le toggle **Enabled** et sauvegardez.

Le format cron standard a 5 champs : `minute heure jour-du-mois mois jour-de-semaine`. `0` et `7` désignent tous deux le dimanche.

## Patterns cron courants

| Cron              | Signification                    |
| ----------------- | -------------------------------- |
| `*/15 * * * *`   | toutes les 15 minutes            |
| `0 * * * *`      | en début de chaque heure         |
| `0 9 * * *`      | tous les jours à 09:00           |
| `0 9 * * 1-5`    | chaque jour ouvré à 09:00        |
| `0 9 1 * *`      | le 1er du mois à 09:00           |
| `30 14 * * 0`    | chaque dimanche à 14:30          |

## Ce que reçoit le workflow

Les fires de planification ne portent aucun corps de requête. Les nœuds en aval ne voient que les métadonnées du déclencheur :

```json
{
  "trigger_kind": "schedule",
  "fired_at": "2026-06-04T09:00:00Z"
}
```

Templatez `{fired_at}` dans les prompts ou utilisez-le comme timestamp dans les requêtes HTTP. Il n'y a pas d'`event.body` — si un nœud a besoin de données, il doit les chercher (HTTP Request, RAG, etc.).

## Limites

- **Intervalle minimum** : 1 minute. Plus court est rejeté.
- **Granularité cron minimum** : `* * * * *` (chaque minute) est le maximum.
- **Tick du dispatcher** : le serveur vérifie les déclencheurs dus toutes les **15 secondes**, donc un fire peut arriver jusqu'à ~15 s après l'heure planifiée.
- Des quotas de planification par tenant peuvent s'appliquer sur les plans hébergés — contactez votre admin si vos fires sont throttlés.

## Dépannage

- **Le déclencheur ne fire jamais** — vérifiez que le workflow est **sauvegardé**, que l'agent est **actif** (toggle Live dans l'espace Production), et que le toggle du déclencheur est **Activé**. Le cron / intervalle n'est enregistré qu'à la sauvegarde du workflow.
- **Fire au mauvais moment** — vérifiez le champ **Fuseau horaire**. Le défaut est UTC, pas votre fuseau local.
- **"Invalid cron expression"** — doit comporter 5 (ou 6) champs séparés par des espaces. Utilisez le mode **Visual builder** pour en générer un valide.
- **Une rafale de fires après un déploiement** — c'est la politique `fire_all` qui rejoue les créneaux manqués. Passez à `fire_once` ou `skip` si non désiré.

---

*Source: https://agentbuilder.systalink.sn/docs/trigger-schedule — human documentation.*
*Other language: [/docs-md/en/trigger-schedule.md](/docs-md/en/trigger-schedule.md).*
*Machine-readable index: [/llms.txt](/llms.txt).*
