> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ouraicalling.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Créer une automatisation

> Créez une automatisation Famulor à partir d’une définition, activez-la et validez-la avec une véritable exécution de test.

<Warning>
  **API Famulor 1.0 (héritée).** Cette page concerne uniquement Famulor 1.0 (`app.famulor.de`) et est conservée pour la compatibilité. Pour la plateforme actuelle, consultez la [référence API Famulor 2.0](/fr/api-reference/introduction).
</Warning>

Ce point de terminaison crée une automatisation à partir de sa définition (un déclencheur et ses étapes enchaînées), l’active, exécute une véritable exécution de test avec votre charge utile d’exemple, et rapporte le résultat étape par étape. L’exécution de test fait office de verrou : une automatisation dont le test échoue reste désactivée, et une automatisation déclenchée par un événement d’assistant n’est associée à l’assistant qu’après la réussite de son test.

Lorsqu’un modèle prêt à l’emploi correspond à votre besoin, [l’appliquer](/fr/api-v1/automations/apply-template) est plus simple que d’écrire une définition depuis zéro.

<Warning>
  L’exécution de test exécute réellement l’automatisation. Les définitions contenant des étapes qui envoient des messages ou des e-mails, ou démarrent des appels, sont refusées à moins que vous ne transmettiez explicitement `confirm_side_effects: true` — et si vous le faites, ces étapes envoient réellement pendant le test. Ciblez des destinataires qui vous appartiennent.
</Warning>

### Le format de la définition

L’objet `flow` est la définition de l’automatisation. La forme privilégiée est une liste à plat :

```json theme={null}
{
  "trigger": { ... },
  "steps": [ step1, step2, ... ]
}
```

Les étapes sont enchaînées au déclencheur dans l’ordre indiqué. La seule imbrication que vous écrivez vous-même se trouve à l’intérieur d’une étape qui en a besoin — les étapes conditionnelles d’une étape `BRANCH` se placent sous `onSuccessAction` / `onFailureAction`. (Un arbre imbriqué manuellement, où chaque étape se trouve sous le `nextAction` de la précédente, est également accepté.)

Une définition remplace toujours l’automatisation entière — elle n’est jamais fusionnée. Un déclencheur sans étapes est rejeté (`no_steps`) : une automatisation qui ne fait rien ne peut pas être activée.

#### Déclencheurs pris en charge (`trigger.settings`)

| Déclencheur                | pieceName / triggerName                                                                                           | Comportement                                                                                                                                                                                                                                                    |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Webhook                    | `@activepieces/piece-webhook` / `catch_webhook`                                                                   | Vous obtenez une `webhook_url` à appeler depuis des systèmes externes. La charge utile arrive enveloppée : référencez les champs sous la forme `{{trigger['body']['field']}}`. Testé de manière synchrone avec votre exemple.                                   |
| Appel téléphonique terminé | `@famulor/piece-famulor` / `phoneCallEnded`                                                                       | Nécessite `assistant_id`. Associé à l’assistant après un test réussi. Les champs de la charge utile se trouvent directement sur le déclencheur : `{{trigger['extracted_variables']['x']}}`, `{{trigger['customer_phone']}}`, …                                  |
| Appel entrant              | `@famulor/piece-famulor` / `inboundCall`                                                                          | Nécessite `assistant_id`. S’exécute avant que l’assistant ne réponde ; doit se terminer par une étape de réponse renvoyant une map à plat de chaînes.                                                                                                           |
| Nouvelle conversation      | `@famulor/piece-famulor` / `newConversation`                                                                      | Nécessite `assistant_id`.                                                                                                                                                                                                                                       |
| Conversation terminée      | déclencheur webhook + `bind_webhook: "conversation_ended"`                                                        | Nécessite `assistant_id`. Se déclenche à la fin d’un chat ; la charge utile arrive enveloppée, référencez donc les champs via `{{trigger['body']['...']}}`.                                                                                                     |
| Programmation (Schedule)   | `@activepieces/piece-schedule` / `every_x_minutes`, `every_day`, …                                                | Ne peut pas être déclenché à la demande — s’active en tant que `active_untested`, armé ; la première exécution planifiée en fait la preuve (consultez les exécutions).                                                                                          |
| Intégrations externes      | le déclencheur propre à l’intégration (nouvelle ligne de feuille de calcul, nouveau contact CRM, nouveau lead, …) | Votre compte connecté est associé automatiquement ; s’il est manquant ou expiré, vous obtenez une erreur `needs_connection` / `needs_reconnection` avec les étapes exactes pour la corriger dans l’application Famulor. S’active en tant que `active_untested`. |

Les étapes référencent la sortie des étapes précédentes par leur nom — `{{step_1['body']['field']}}` pour les étapes HTTP (leur JSON s’imbrique sous `body`). Formes d’étapes courantes : requêtes HTTP, transformations de code, branchements, délais, étapes de réponse, et actions de la plateforme Famulor (envoyer un SMS/WhatsApp, démarrer un appel, remettre un lead en file d’attente). Le moyen le plus simple d’apprendre la forme exacte d’une étape est de lire une automatisation existante avec [Récupérer une automatisation](/fr/api-v1/automations/get) ou d’appliquer un modèle et d’inspecter ce qu’il a construit.

### Corps de la requête

<ParamField body="name" type="string" required>
  Un nom court et lisible pour l’automatisation (255 caractères max.)
</ParamField>

<ParamField body="flow" type="object" required>
  La définition de l’automatisation — `{"trigger": {...}, "steps": [...]}` comme décrit ci-dessus. 1 Mo max.
</ParamField>

<ParamField body="sample" type="object">
  Une charge utile d’exemple de forme réaliste pour l’exécution de test (ce que le déclencheur recevra). Pour les événements d’assistant, un exemple canonique construit à partir des propres variables de l’assistant est utilisé en cas d’omission. 256 Ko max.
</ParamField>

<ParamField body="assistant_id" type="integer">
  Requis pour les automatisations déclenchées par un événement d’assistant (`phoneCallEnded`, `inboundCall`, `newConversation`, et `bind_webhook`) : l’assistant auquel cette automatisation s’associe. Elle commence à recevoir les événements réels de cet assistant une fois le test réussi. (Pour les déclencheurs de plateforme, sélectionner l’assistant dans `settings.input.assistant` du déclencheur fonctionne aussi — le paramètre explicite l’emporte.)
</ParamField>

<ParamField body="bind_webhook" type="string">
  Pour une définition déclenchée par webhook uniquement : l’associer à l’événement de fin de conversation de l’assistant. La seule valeur prise en charge est `conversation_ended`. Nécessite `assistant_id`.
</ParamField>

<ParamField body="confirm_side_effects" type="boolean">
  Requis (`true`) lorsque la définition contient des étapes qui envoient des messages ou des e-mails, démarrent des appels, ou effectuent des requêtes HTTP non-GET — l’exécution de test les exécute réellement.
</ParamField>

### Réponse

Renvoie `201` lorsque l’automatisation est active (`active` / `active_untested`), `200` lorsqu’elle a été construite mais que son exécution de test a échoué (`test_failed`), et `422` pour une définition qui n’a jamais atteint l’exécution de test (voir les codes d’erreur ci-dessous).

<ResponseField name="automation_id" type="string">
  L’ID de l’automatisation créée
</ResponseField>

<ResponseField name="webhook_url" type="string | null">
  Pour les automatisations déclenchées par webhook (y compris celles de fin de conversation) : l’URL que les systèmes externes appellent pour la déclencher. `null` pour les automatisations déclenchées par un événement d’assistant ou par une programmation.
</ResponseField>

<ResponseField name="status" type="string">
  `active` — l’exécution de test a réussi ; l’automatisation est active (et associée, pour les événements d’assistant).
  `active_untested` — le déclencheur ne peut pas être déclenché à la demande (programmations, intégrations externes) ; l’automatisation est active et armée, et le premier événement réel en fait la preuve.
  `test_failed` — l’exécution de test a échoué ; l’automatisation est restée désactivée. Consultez `test.steps` pour la classification par étape.
</ResponseField>

<ResponseField name="test" type="object">
  Le résultat de l’exécution de test

  <Expandable title="Propriétés de test">
    <ResponseField name="run_status" type="string">
      `SUCCEEDED`, `PAUSED`, `FAILED`, ou `not_tested` (déclencheurs non testables) ; rarement `no_run` lorsque le test n’a produit aucun enregistrement d’exécution. `PAUSED` compte comme un succès : l’exécution est mise en pause à une étape Delay en attendant son heure cible — chaque étape avant la pause s’est déjà exécutée.
    </ResponseField>

    <ResponseField name="steps" type="array">
      Résultat de l’exécution de test, étape par étape

      <Expandable title="Propriétés d’une étape">
        <ResponseField name="name" type="string">
          Le nom de l’étape (`trigger`, `step_1`, …)
        </ResponseField>

        <ResponseField name="status" type="string">
          `SUCCEEDED`, `FAILED` ou `PAUSED`
        </ResponseField>

        <ResponseField name="classification" type="string">
          `ok`, `paused_at_delay`, ou — pour les échecs — `wiring_error` (la définition est incorrecte : corrigez-la et réparez via [Mettre à jour une automatisation](/fr/api-v1/automations/update)), `missing_connection` (un compte doit d’abord être connecté dans l’application Famulor), `missing_record` (l’exemple référençait des données qui n’existent pas — souvent sans gravité).
        </ResponseField>

        <ResponseField name="error" type="string | null">
          Le message d’erreur de l’étape, en cas d’échec
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="response" type="object | string | null">
  Pour les automatisations testées de manière synchrone (déclencheurs webhook et entrants) : ce que l’automatisation a répondu pendant l’exécution de test
</ResponseField>

<ResponseField name="binding" type="object | null">
  Pour les automatisations déclenchées par un événement d’assistant : `{"type": "post_call" | "inbound" | "conversation" | "conversation_ended", "assistant_id": <id>, "bound": <bool>}`. `bound` vaut `true` uniquement après un test réussi.
</ResponseField>

### Codes d’erreur (422)

Les échecs définitifs renvoient `{"message": "...", "error": "<code>"}` et rien n’est activé. Codes notables :

| error                                                | Signification                                                                                                                                                                                                                 |
| ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `side_effects_require_confirmation`                  | La définition contient des étapes qui enverraient réellement pendant le test — réessayez avec `confirm_side_effects: true` après avoir vérifié les destinataires.                                                             |
| `no_steps`                                           | Le déclencheur n’a aucune étape qui lui est enchaînée.                                                                                                                                                                        |
| `invalid_definition` / `unsupported_trigger`         | Il manque le déclencheur à la définition, ou elle utilise un type de déclencheur non pris en charge.                                                                                                                          |
| `assistant_required` / `assistant_not_found`         | Le déclencheur a besoin d’un `assistant_id`, ou l’assistant n’appartient pas à votre compte.                                                                                                                                  |
| `binding_conflict`                                   | L’assistant a déjà une automatisation (ou un webhook personnalisé) pour cet événement — un assistant dispose d’un emplacement par type d’événement. Mettez plutôt à jour l’automatisation existante, ou supprimez-la d’abord. |
| `needs_connection` / `needs_reconnection`            | Le compte d’intégration du déclencheur doit d’abord être connecté (ou reconnecté) dans l’application Famulor — le message contient les étapes exactes.                                                                        |
| `import_failed` / `publish_failed` / `create_failed` | La définition a été rejetée ou n’a pas pu être activée.                                                                                                                                                                       |

<ResponseExample>
  ```json 201 Created (webhook, test passed) theme={null} theme={null}
  {
    "automation_id": "f4EaLhOW2zoEsXXSOJP2r",
    "webhook_url": "https://automate.famulor.ai/api/v1/webhooks/f4EaLhOW2zoEsXXSOJP2r",
    "status": "active",
    "test": {
      "run_status": "SUCCEEDED",
      "steps": [
        { "name": "trigger", "status": "SUCCEEDED", "classification": "ok", "error": null },
        { "name": "step_1", "status": "SUCCEEDED", "classification": "ok", "error": null }
      ]
    },
    "response": { "ok": "true", "echo": "hello" },
    "binding": null
  }
  ```

  ```json 201 Created (schedule, active_untested) theme={null} theme={null}
  {
    "automation_id": "aB3xYz01MnOpQrStUvWxY",
    "webhook_url": null,
    "status": "active_untested",
    "test": {
      "run_status": "not_tested",
      "steps": []
    },
    "response": null,
    "binding": null
  }
  ```

  ```json 422 Validation Error theme={null} theme={null}
  {
    "message": "This automation contains steps that would REALLY send messages, emails or start calls during the test run: Send SMS. Confirm with the user first — point those steps at a safe recipient the user owns — then retry with confirm_side_effects set to true.",
    "error": "side_effects_require_confirmation"
  }
  ```
</ResponseExample>

<Tip>
  Pages associées : [Lister les modèles d’automatisation](/fr/api-v1/automations/list-templates), [Appliquer un modèle d’automatisation](/fr/api-v1/automations/apply-template), et [Authentification](/fr/api-v1/authentication).
</Tip>
