
# Déclencheurs d'automatisation

Un déclencheur est l'événement unique qui démarre une automatisation. Sovrium propose **9 types de déclencheurs**. Chaque automatisation déclare exactement un objet `trigger` dont le `type` sélectionne la variante ; les propriétés restantes la configurent.

```yaml
automations:
  - name: order-webhook
    trigger:
      type: webhook
      method: POST
    actions:
      - { name: ack, type: webhook, operator: response, props: { status: 202 } }
```

## Catalogue des déclencheurs

| `type`               | Se déclenche lorsque…                                                          | Contexte clé exposé                          |
| -------------------- | ------------------------------------------------------------------------------ | -------------------------------------------- |
| `webhook`            | Une requête HTTP entrante atteint le point de terminaison de l'automatisation. | `{{trigger.body}}`, en-têtes, query          |
| `cron`               | Une planification cron s'écoule.                                               | heure planifiée                              |
| `record`             | Un enregistrement est créé, mis à jour ou supprimé dans une table surveillée.  | `{{trigger.data.*}}` (la ligne)              |
| `auth`               | Un événement d'authentification se produit (inscription, connexion, …).        | l'événement d'authentification + utilisateur |
| `form`               | Un formulaire de premier niveau est soumis.                                    | `{{trigger.data.*}}` (valeurs du formulaire) |
| `manual`             | Un administrateur clique sur un bouton ou appelle l'API de déclenchement.      | `{{trigger.inputData.*}}`                    |
| `automation-call`    | Une autre automatisation invoque celle-ci via l'action `automation/call`.      | `{{trigger.inputData.*}}`                    |
| `automation-failure` | Une automatisation surveillée échoue.                                          | l'exécution échouée + erreur                 |
| `comment`            | Un commentaire est créé sur un enregistrement.                                 | `$trigger.comment.*`, `$trigger.record.*`    |

## Déclencheur webhook

Expose un point de terminaison HTTP qui, lorsqu'il est atteint, démarre l'automatisation. Accepte une ou plusieurs méthodes et prend en charge l'authentification entrante, les réponses personnalisées, la validation de requête/query, la limitation de débit et la déduplication.

| Propriété             | Description                                                                                                                  |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `method`              | Méthode(s) HTTP à accepter — `GET`/`POST`/`PUT`/`PATCH`/`DELETE`, ou un tableau de celles-ci. **Requis.**                    |
| `secret`              | Secret pour la vérification de signature HMAC (par ex. `$env.WEBHOOK_SECRET`).                                               |
| `respondImmediately`  | Lorsqu'il vaut `true` (par défaut), répond `202` immédiatement ; lorsqu'il vaut `false`, attend la fin de l'exécution.       |
| `auth`                | Configuration d'authentification entrante — `type` vaut `bearer`, `apiKey`, `hmac` ou `basic` (voir le tableau ci-dessous).  |
| `response`            | Réponse personnalisée : `statusCode`/`status`, `body` (gabarit de chaîne ou JSON), `headers`.                                |
| `requestSchema`       | JSON Schema validant le corps de la requête.                                                                                 |
| `querySchema`         | JSON Schema validant les paramètres de query.                                                                                |
| `rateLimit`           | Configuration de limitation de débit `{ maxRequests, windowSeconds }` pour le point de terminaison.                          |
| `deduplicationKey`    | Gabarit calculant une clé de déduplication (par ex. `"{{body.orderId}}"`) — les clés répétées dans la fenêtre sont rejetées. |
| `deduplicationWindow` | Fenêtre de déduplication en secondes (par défaut 300).                                                                       |

**Options de `auth.type` entrant :** `bearer` (avec `token`, `prefix`), `apiKey` (avec `key`, `header`), `hmac` (avec `secret`, `algorithm`), `basic` (avec `username`, `password`). Toutes les valeurs d'identification prennent en charge `$env.VAR`.

```yaml
trigger:
  type: webhook
  method: [POST]
  auth: { type: hmac, secret: $env.STRIPE_SIGNING_SECRET, algorithm: sha256 }
  deduplicationKey: '{{body.id}}'
  deduplicationWindow: 600
```

## Déclencheur cron

Exécute l'automatisation selon une planification.

| Propriété    | Description                                                                                                                                                                                               |
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `expression` | Expression cron — standard à 5 champs ou à 6 champs avec secondes (par ex. `0 9 * * 1-5`). Aucun alias `@daily`/`@hourly` — utilisez l'équivalent numérique. **Validée au décodage de la configuration.** |
| `timezone`   | Fuseau horaire IANA (par ex. `America/New_York`). Vaut `UTC` par défaut. Validé par rapport à la base de données IANA.                                                                                    |

```yaml
trigger:
  type: cron
  expression: '0 9 * * 1-5'
  timezone: Europe/Paris
```

## Déclencheur d'enregistrement

Se déclenche lorsque des enregistrements changent dans une table.

| Propriété     | Description                                                                                     |
| ------------- | ----------------------------------------------------------------------------------------------- |
| `table`       | Nom de la table à surveiller. **Requis.**                                                       |
| `events`      | Tableau de `create` / `update` / `delete` (minimum 1). **Requis.**                              |
| `watchFields` | Lors d'un `update`, ne se déclenche que lorsque l'un de ces champs change.                      |
| `condition`   | Un groupe de conditions — ne se déclenche que lorsque la ligne modifiée correspond au prédicat. |

```yaml
trigger:
  type: record
  table: orders
  events: [create, update]
  watchFields: [status]
  condition:
    conditions: [{ field: '{{trigger.data.status}}', operator: equals, value: paid }]
```

## Déclencheur d'authentification

Se déclenche sur les événements du cycle de vie d'authentification.

| Propriété | Description                                                                                         |
| --------- | --------------------------------------------------------------------------------------------------- |
| `events`  | Tableau de `signUp`, `signIn`, `signOut`, `passwordReset`, `emailVerified` (minimum 1). **Requis.** |

```yaml
trigger:
  type: auth
  events: [signUp]
```

## Déclencheur de formulaire

Se déclenche lorsqu'un formulaire de premier niveau (`forms[].name`) est soumis.

| Propriété | Description                                                                                                                                          |
| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| `form`    | Référence `forms[].name`. **Requis.** _(Rupture forte : il s'agissait auparavant d'un chemin de page.)_ Voir [Formulaires](/fr/docs/forms-overview). |

```yaml
trigger:
  type: form
  form: contact-request
```

## Déclencheur manuel

Exécution initiée par un administrateur via un bouton ou un appel d'API.

| Propriété      | Description                                                                           |
| -------------- | ------------------------------------------------------------------------------------- |
| `label`        | Libellé du bouton dans l'interface d'administration (par ex. `Export Report`).        |
| `inputSchema`  | JSON Schema décrivant les champs de saisie requis fournis au moment du déclenchement. |
| `requiredRole` | Rôle d'authentification requis pour déclencher (par défaut `admin`).                  |

Les déclencheurs manuels sont les **seuls** déclencheurs éligibles à `aiAccess` (invocation MCP), puisqu'ils ne se déclenchent pas d'eux-mêmes.

```yaml
trigger:
  type: manual
  label: Sync inventory
  requiredRole: admin
  inputSchema: { warehouse: { type: string } }
```

## Déclencheur automation-call

Se déclenche lorsqu'une autre automatisation invoque celle-ci via l'action `automation/call` — permettant la composition de sous-workflows.

| Propriété     | Description                                                                                                         |
| ------------- | ------------------------------------------------------------------------------------------------------------------- |
| `inputSchema` | Contrat d'entrée attendu (de type JSON Schema). S'il est omis, accepte n'importe quelles `inputData` de l'appelant. |

```yaml
trigger:
  type: automation-call
  inputSchema: { customerId: { type: string } }
```

Voir [Contrôle de flux](/fr/docs/automation-flow-control) pour les actions `automation/call` et `automation/return`.

## Déclencheur automation-failure

Se déclenche lorsqu'une automatisation surveillée échoue — gestion d'échec composable sans configuration de notification par automatisation.

| Propriété     | Description                                                                                                  |
| ------------- | ------------------------------------------------------------------------------------------------------------ |
| `automations` | Tableau de noms d'automatisations (kebab-case) à surveiller. S'il est omis, se déclenche sur **tout** échec. |

```yaml
trigger:
  type: automation-failure
  automations: [nightly-sync, billing-run]
```

## Déclencheur de commentaire

Se déclenche lorsqu'un commentaire est créé sur un enregistrement dans une table avec commentaires activés.

| Propriété                | Description                                                                                                                       |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
| `table`                  | Nom de la table avec commentaires activés. **Requis.**                                                                            |
| `when`                   | `approved` (uniquement les commentaires modérés-approuvés), `created` (tout nouveau commentaire), ou `any`. Par défaut `created`. |
| `filter`                 | `{ topLevelOnly, repliesOnly, mentionsOnly }` (top-level et replies-only sont mutuellement exclusifs).                            |
| `respectReadPermissions` | Lorsqu'il vaut true, ne se déclenche que si le contexte déclencheur peut lire l'enregistrement.                                   |

Les déclencheurs de commentaire exposent `$trigger.comment.*`, `$trigger.record.*`, `$trigger.threadParticipants` et `$trigger.mentions`.

```yaml
trigger:
  type: comment
  table: tickets
  when: created
  filter: { mentionsOnly: true }
```

## Pages connexes

- [Vue d'ensemble des automatisations](/fr/docs/automations-overview) — anatomie et variables de gabarit.
- [Vue d'ensemble des actions](/fr/docs/automation-actions-overview) — ce qui s'exécute après le déclenchement d'un déclencheur.
- [Webhooks (tables)](/fr/docs/table-webhooks) — webhooks de table _sortants_ (distincts des déclencheurs webhook entrants).
- [Contrôle de flux](/fr/docs/automation-flow-control) — `automation/call` et `automation/return`.
