
# Actions d'approbation et de délai

Ces deux familles **mettent en pause** un workflow en cours d'exécution. La famille `approval` attend une décision humaine (human-in-the-loop). La famille `delay` attend une durée, une date-heure, un rappel de webhook externe, ou cadence une file d'éléments.

## Approval — Human-in-the-loop

Un operator, `request`. Il suspend l'exécution, notifie les approbateurs, et reprend une fois qu'une décision est enregistrée (ou que le timeout se déclenche). Nécessite que `app.auth` soit configuré.

| Prop        | Description                                                                                                                                                  |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `approvers` | `all-admins`, ou un tableau d'adresses e-mail / noms de rôles. **Requis.**                                                                                   |
| `message`   | Message affiché aux approbateurs (templatable). **Requis.**                                                                                                  |
| `options`   | Choix d'approbation, minimum 2 (`{ value, label? }`). Par défaut `[{ value: approve }, { value: reject }]`. La `value` choisie devient la sortie de l'étape. |
| `timeout`   | Durée d'attente (par ex. `24h`, `7d`). Aucun timeout par défaut.                                                                                             |
| `onTimeout` | En cas de timeout : `approve` (approbation automatique), `reject` (rejet automatique), ou `escalate` (notifier l'escalade).                                  |
| `notifyVia` | Canal de notification : `email` (par défaut), `webhook`, ou `both`.                                                                                          |

```yaml
- name: approveRefund
  type: approval
  operator: request
  props:
    approvers: all-admins
    message: 'Approve refund of ${{trigger.data.amount}} for order {{trigger.data.id}}?'
    options:
      - { value: approve, label: 'Approve refund' }
      - { value: reject, label: 'Deny' }
    timeout: 48h
    onTimeout: reject
    notifyVia: email
```

:::callout
**Branchez sur la décision.** La sortie de l'étape d'approbation (la `value` de l'option choisie) alimente naturellement un [`path/branch`](/fr/docs/automation-flow-control) afin que le workflow puisse emprunter des chemins différents selon approve ou reject.
:::

## Delay — Wait, Queue, Webhook

Trois operators qui mettent l'exécution en pause de différentes manières.

### wait

Met en pause pendant une durée fixe ou jusqu'à une date-heure précise.

| Prop       | Description                                                                                 |
| ---------- | ------------------------------------------------------------------------------------------- |
| `duration` | Délai sous forme de nombre + unité (`ms`/`s`/`m`/`h`/`d`), par ex. `30s`, `24h`, `7d`.      |
| `until`    | Date-heure ISO 8601 (ou gabarit) jusqu'à laquelle attendre, par ex. `2025-12-01T09:00:00Z`. |

```yaml
- name: cooldown
  type: delay
  operator: wait
  props: { duration: 15m }
```

### queue

Traite les éléments en file un par un avec un espacement configurable — idéal pour les API en aval à débit limité.

| Prop           | Description                                                                                                                 |
| -------------- | --------------------------------------------------------------------------------------------------------------------------- |
| `interval`     | Délai minimal entre le traitement de chaque élément — nombre + unité (`ms`/`s`/`m`/`h`), par ex. `500ms`, `2s`. **Requis.** |
| `maxQueueSize` | Nombre maximal d'éléments dans la file avant que les nouvelles entrées soient rejetées (par défaut illimité).               |

```yaml
- name: paceApiCalls
  type: delay
  operator: queue
  props: { interval: 1s, maxQueueSize: 1000 }
```

### webhook

Met en pause jusqu'à ce qu'un rappel de webhook externe soit reçu (par ex. la fin d'une tâche tierce asynchrone).

| Prop           | Description                                                                             |
| -------------- | --------------------------------------------------------------------------------------- |
| `callbackId`   | Identifiant de rappel personnalisé (templatable). Généré automatiquement s'il est omis. |
| `timeout`      | Temps maximal d'attente du rappel — nombre + unité, par ex. `1h`, `7d`.                 |
| `onTimeout`    | En cas de timeout : `continue`, `stop`, ou `error` (par défaut `error`).                |
| `expectedData` | Forme attendue utilisée pour valider la charge utile du rappel entrant.                 |

```yaml
- name: awaitProcessing
  type: delay
  operator: webhook
  props:
    callbackId: 'job-{{trigger.data.id}}'
    timeout: 2h
    onTimeout: error
```

## Pages connexes

- [Vue d'ensemble des actions](/fr/docs/automation-actions-overview) — propriétés de base et carte des familles.
- [Contrôle de flux](/fr/docs/automation-flow-control) — brancher sur une décision d'approbation.
- [HTTP et webhooks](/fr/docs/automation-http-actions) — réponses de webhook entrant et envois sortants.
- [Vue d'ensemble de l'authentification](/fr/docs/auth-overview) — `app.auth` (requis pour les approbations).
