
# Gestion des relances et des échecs

Les automatisations sont résilientes par configuration : relancez les échecs transitoires avec un backoff, encadrez les étapes emballées avec des timeouts, récupérez les exécutions partiellement échouées de manière idempotente, et acheminez les exécutions épuisées vers un gestionnaire d'échec.

## Politique de relance

Un bloc `retry` peut être défini au niveau de l'**automatisation** (exécution entière) ou au niveau de l'**action** (étape unique).

| Propriété     | Description                                                                |
| ------------- | -------------------------------------------------------------------------- |
| `maxAttempts` | Nombre maximal de tentatives de relance (1–10). **Requis.**                |
| `delayMs`     | Délai de base entre les relances en ms (100–60000, par défaut 1000).       |
| `strategy`    | `fixed` (délai constant, par défaut) ou `exponential` (backoff croissant). |

```yaml
automations:
  - name: sync-inventory
    trigger: { type: cron, expression: '0 * * * *' }
    retry: { maxAttempts: 5, delayMs: 2000, strategy: exponential }
    actions:
      - name: pull
        type: http
        operator: get
        props: { url: $env.INVENTORY_API, expectedStatus: [200] }
        retry: { maxAttempts: 3, strategy: fixed } # per-action override
```

## Timeouts

Deux portées de timeout indépendantes :

| Portée                | Où                                 | Effet                                                                                         |
| --------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------- |
| Automatisation        | `automation.timeout` (1000–900000) | Plafonne la durée totale de l'exécution. À l'expiration, l'exécution est marquée `timed-out`. |
| Action (uniforme)     | `action.timeout` (1000–900000)     | Plafonne une étape ; `retry`/`continueOnError` s'appliquent toujours.                         |
| Action (gestionnaire) | `action.props.timeout`             | Encadrement interne par type (par ex. `http`, `code`, `automation/call`).                     |

Une exécution `timed-out` est **distincte de `failed`** afin que les opérateurs puissent distinguer une durée emballée des erreurs.

## Continuer en cas d'erreur

Définissez `continueOnError: true` sur une action afin que son échec n'interrompe pas l'exécution. Les actions suivantes s'exécutent toujours et l'exécution se termine en `completed-with-errors`.

```yaml
- name: bestEffortLog
  type: analytics
  operator: track
  continueOnError: true
  props: { event: order.created, properties: { id: '{{trigger.data.id}}' } }
```

## Dead-letter et épuisement

Lorsqu'une exécution échoue après avoir épuisé tous les `maxAttempts` configurés, elle passe au statut `exhausted` (dead-letter). Chaque tentative est enregistrée avec un horodatage, un message d'erreur et une trace de pile. Le [déclencheur `automation-failure`](/fr/docs/automation-triggers) se déclenche après l'épuisement, transmettant au gestionnaire d'échec l'historique complet des tentatives — permettant une gestion d'échec centralisée sans configuration de notification par automatisation.

## Récupération d'échec partiel et idempotence

Lorsqu'une exécution échoue au milieu du pipeline, les étapes terminées affichent `completed`, l'étape en échec affiche `failed`, et les étapes en aval affichent `skipped`. Le rejeu de l'exécution **reprend à partir de l'étape en échec**, en sautant les étapes déjà terminées (reprise idempotente). Le rejeu crée toujours une nouvelle exécution, sans jamais muter l'originale.

:::callout
**Déduplication des webhooks.** Les déclencheurs webhook acceptent une `deduplicationKey` (un gabarit sur la charge utile) et une `deduplicationWindow` (secondes) pour rejeter les exécutions en double issues de charges utiles identiques. Combinée à la reprise idempotente, cela rend la livraison au-moins-une-fois sûre. Voir [Déclencheurs](/fr/docs/automation-triggers).
:::

## Pages connexes

- [Exécutions](/fr/docs/automation-runs) — statuts d'exécution/d'étape, rejeu et annulation.
- [Déclencheurs](/fr/docs/automation-triggers) — déclencheur `automation-failure` et déduplication de webhook.
- [Vue d'ensemble des actions](/fr/docs/automation-actions-overview) — props de base `retry`, `timeout`, `continueOnError`.
