i18n - docs translations (#17433)
Created by Github action Co-authored-by: github-actions <github-actions@twenty.com>
This commit is contained in:
committed by
GitHub
parent
c8c821a692
commit
2353bc62cc
+109
-90
@@ -1,149 +1,168 @@
|
||||
---
|
||||
title: Send Emails from Workflows
|
||||
description: Send personalized emails automatically using workflow actions.
|
||||
title: Envoi d'e-mails via les workflows
|
||||
description: Envoyez automatiquement des e-mails personnalisés en utilisant des actions de workflows.
|
||||
image: /images/user-guide/workflows/workflow.png
|
||||
---
|
||||
|
||||
Automatically send emails when specific events occur in your CRM—welcome new contacts, follow up on opportunities, or notify team members.
|
||||
Envoyez automatiquement des e-mails lorsque des événements spécifiques se produisent dans votre CRM—accueillez les nouveaux contacts, assurez le suivi des opportunités ou informez les membres de l'équipe.
|
||||
|
||||
## Prerequisites
|
||||
## Prérequis
|
||||
|
||||
Before you can send emails from workflows:
|
||||
Avant de pouvoir envoyer des e-mails depuis des workflows :
|
||||
|
||||
1. Connect an email account under **Settings → Accounts**
|
||||
2. Ensure the account has sending permissions enabled
|
||||
1. Connectez un compte e-mail dans **Paramètres → Comptes**
|
||||
2. Assurez-vous que les autorisations d'envoi sont activées pour le compte
|
||||
|
||||
## Basic Email Workflow
|
||||
## Workflow d'e-mails de base
|
||||
|
||||
### Example: Welcome Email for New Contacts
|
||||
### Exemple : E-mail de bienvenue pour les nouveaux contacts
|
||||
|
||||
**Goal**: Send a welcome email when a new person is added to the CRM.
|
||||
**Objectif** : Envoyer un e-mail de bienvenue lorsqu'une nouvelle personne est ajoutée au CRM.
|
||||
|
||||
**Setup**:
|
||||
**Installation**:
|
||||
|
||||
1. **Create workflow**: Go to **Settings → Workflows** and click **+ New Workflow**
|
||||
1. **Créer un workflow** : Allez dans **Paramètres → Workflows** et cliquez sur **+ Nouveau workflow**
|
||||
|
||||
2. **Add trigger**: Select **Record is Created** → **People**
|
||||
2. **Ajouter un déclencheur** : Sélectionnez **Enregistrement créé** → **Personnes**
|
||||
|
||||
3. **Add Send Email action**:
|
||||
* Click **+** to add an action
|
||||
* Select **Send Email**
|
||||
* Configure the email:
|
||||
3. **Ajouter l'action Envoyer un e-mail** :
|
||||
* Cliquez sur **+** pour ajouter une action
|
||||
* Sélectionnez **Envoyer un e-mail**
|
||||
* Configurez l'e-mail :
|
||||
|
||||
| Field | Value |
|
||||
| ----------- | -------------------------------------- |
|
||||
| **To** | `{{trigger.object.email}}` |
|
||||
| **Subject** | `Welcome to {{Your Company Name}}` |
|
||||
| **Body** | `Hi {{trigger.object.firstName}}, ...` |
|
||||
| Champ | Valeur |
|
||||
| -------------------- | -------------------------------------- |
|
||||
| **À** | `{{trigger.object.email}}` |
|
||||
| **Objet** | `Bienvenue sur {{Your Company Name}}` |
|
||||
| **Corps du message** | `Hi {{trigger.object.firstName}}, ...` |
|
||||
|
||||
4. **Test and activate**: Test with a sample record, then activate
|
||||
4. **Tester et activer** : Testez avec un enregistrement d'exemple, puis activez
|
||||
|
||||
## Using Variables in Emails
|
||||
## Utiliser des variables dans les e-mails
|
||||
|
||||
Reference data from previous steps using `{{variable}}` syntax:
|
||||
Faites référence aux données des étapes précédentes en utilisant la syntaxe `{{variable}}` :
|
||||
|
||||
```text
|
||||
Hi {{trigger.object.firstName}},
|
||||
Bonjour {{trigger.object.firstName}},
|
||||
|
||||
Thank you for connecting with us!
|
||||
Merci d'avoir pris contact avec nous !
|
||||
|
||||
Your company, {{trigger.object.company.name}}, is now in our system.
|
||||
Votre entreprise, {{trigger.object.company.name}}, est maintenant dans notre système.
|
||||
|
||||
Best regards,
|
||||
The Team
|
||||
Cordialement,
|
||||
L'équipe
|
||||
```
|
||||
|
||||
### Available Variables from Triggers
|
||||
### Variables disponibles à partir des déclencheurs
|
||||
|
||||
| Trigger Type | Common Variables |
|
||||
| -------------------------- | -------------------------------------- |
|
||||
| **Record Created/Updated** | `{{trigger.object.fieldName}}` |
|
||||
| **Manual** | `{{trigger.selectedRecord.fieldName}}` |
|
||||
| **Webhook** | `{{trigger.body.fieldName}}` |
|
||||
| Type de déclencheur | Variables courantes |
|
||||
| ---------------------------------- | -------------------------------------- |
|
||||
| **Enregistrement créé/mis à jour** | `{{trigger.object.fieldName}}` |
|
||||
| **Manuel** | `{{trigger.selectedRecord.fieldName}}` |
|
||||
| **Webhook** | `{{trigger.body.fieldName}}` |
|
||||
|
||||
## Advanced: Conditional Emails
|
||||
## Avancé : E-mails conditionnels
|
||||
|
||||
### Example: Different Emails Based on Lead Source
|
||||
### Exemple : Différents e-mails selon la source du prospect
|
||||
|
||||
**Goal**: Send different welcome emails based on where the lead came from.
|
||||
**Objectif** : Envoyer différents e-mails de bienvenue selon l'origine du prospect.
|
||||
|
||||
**Setup**:
|
||||
**Installation**:
|
||||
|
||||
1. **Trigger**: Record is Created (People)
|
||||
1. **Déclencheur** : Enregistrement créé (Personnes)
|
||||
|
||||
2. **Add Filter action**:
|
||||
* Condition: `{{trigger.object.source}}` equals `"Website"`
|
||||
* If true → continue to website welcome email
|
||||
2. **Ajouter l'action Filtre** :
|
||||
* Condition : `{{trigger.object.source}}` est égal à `"Website"`
|
||||
* Si vrai → continuer vers l'e-mail de bienvenue du site web
|
||||
|
||||
3. **Branch for other sources**:
|
||||
* Create parallel branches for different sources
|
||||
* Each branch has its own Send Email action
|
||||
3. **Branche pour les autres sources** :
|
||||
* Créez des branches parallèles pour différentes sources
|
||||
* Chaque branche a sa propre action Envoyer un e-mail
|
||||
|
||||
## Sending Emails to Multiple Recipients
|
||||
## Envoi d'e-mails à plusieurs destinataires
|
||||
|
||||
### Example: Notify Team When Deal Closes
|
||||
### Exemple : Avertir l'équipe lorsqu'une opportunité est gagnée
|
||||
|
||||
**Goal**: Email the sales rep and their manager when an opportunity is won.
|
||||
**Objectif** : Envoyer un e-mail au commercial et à son responsable lorsqu'une opportunité est gagnée.
|
||||
|
||||
**Setup**:
|
||||
**Installation**:
|
||||
|
||||
1. **Trigger**: Record is Updated (Opportunities, Stage = "Closed Won")
|
||||
1. **Déclencheur** : Enregistrement mis à jour (Opportunités, Étape = "Fermé Gagné")
|
||||
|
||||
2. **Search Records**: Find the opportunity owner's manager
|
||||
2. **Rechercher des enregistrements** : Trouver le responsable du propriétaire de l'opportunité
|
||||
|
||||
3. **Send Email #1**: To opportunity owner
|
||||
* To: `{{trigger.object.owner.email}}`
|
||||
* Subject: `Congratulations on closing {{trigger.object.name}}!`
|
||||
3. **Envoyer l'e-mail #1** : Au propriétaire de l'opportunité
|
||||
* À : `{{trigger.object.owner.email}}`
|
||||
* Objet : `Congratulations on closing {{trigger.object.name}}!`
|
||||
|
||||
4. **Send Email #2**: To manager
|
||||
* To: `{{searchRecords.manager.email}}`
|
||||
* Subject: `Deal Won: {{trigger.object.name}}`
|
||||
4. **Envoyer l'e-mail #2** : Au responsable
|
||||
* À : `{{searchRecords.manager.email}}`
|
||||
* Objet : `Deal Won: {{trigger.object.name}}`
|
||||
|
||||
## Scheduled Follow-up Emails
|
||||
## E-mails de suivi planifiés
|
||||
|
||||
### Example: Follow Up 3 Days After Meeting
|
||||
### Exemple : Relancer 3 jours après la réunion
|
||||
|
||||
**Goal**: Send a follow-up email 3 days after a meeting is logged.
|
||||
**Objectif** : Envoyer un e-mail de relance 3 jours après l'enregistrement d'une réunion.
|
||||
|
||||
**Setup**:
|
||||
**Installation**:
|
||||
|
||||
1. **Trigger**: Record is Created (Activities, Type = "Meeting")
|
||||
1. **Déclencheur** : Enregistrement créé (Activités, Type = "Réunion")
|
||||
|
||||
2. **Delay action**: Wait 3 days
|
||||
2. **Action de délai** : Attendre 3 jours
|
||||
|
||||
3. **Send Email**:
|
||||
* To: Meeting attendee
|
||||
* Subject: Following up on our conversation
|
||||
* Body: Reference meeting details from trigger
|
||||
3. **Envoyer l'e-mail** :
|
||||
* À : Participant à la réunion
|
||||
* Objet : Suite à notre conversation
|
||||
* Corps : Faites référence aux détails de la réunion depuis le déclencheur
|
||||
|
||||
## Best Practices
|
||||
## Pièces jointes aux e-mails
|
||||
|
||||
### Email Content
|
||||
Vous pouvez joindre des fichiers aux e-mails envoyés à partir de workflows. La pièce jointe est un fichier statique que vous téléversez lors de la configuration du workflow.
|
||||
|
||||
* Keep subject lines concise and relevant
|
||||
* Personalize with recipient's name
|
||||
* Include a clear call to action
|
||||
* Test emails before activating
|
||||
### Comment ajouter une pièce jointe
|
||||
|
||||
### Deliverability
|
||||
1. Dans l'action **Envoyer un e-mail**, cliquez sur le bouton **Pièces jointes**
|
||||
2. Cliquez pour téléverser un fichier depuis votre ordinateur
|
||||
3. Le fichier sera joint à tous les e-mails envoyés par cette action
|
||||
|
||||
* Don't send too many emails too quickly
|
||||
* Use professional email signatures
|
||||
* Avoid spam trigger words
|
||||
* Ensure unsubscribe options for marketing emails
|
||||
### Cas d'utilisation courants
|
||||
|
||||
### Troubleshooting
|
||||
|
||||
* Verify email account is connected and active
|
||||
* Check recipient email address is valid
|
||||
* Review workflow runs for error messages
|
||||
* Test with your own email address first
|
||||
| Cas d'utilisation | Fichier d'exemple |
|
||||
| ------------------------------ | -------------------------------------- |
|
||||
| **E-mails de bienvenue** | Brochure de l'entreprise (PDF) |
|
||||
| **Séquences d'intégration** | Guide de prise en main |
|
||||
| **Suivis des ventes** | Catalogue de produits ou liste de prix |
|
||||
| **Confirmations d'événements** | Détails de l'événement ou programme |
|
||||
|
||||
<Note>
|
||||
**Coming soon**: Email attachments will be available in Q1 2026.
|
||||
Les pièces jointes sont statiques — le même fichier est envoyé à tous les destinataires. Pour les documents dynamiques (comme des devis personnalisés), générez et joignez des fichiers à l'aide d'une [fonction sans serveur](/l/fr/user-guide/workflows/how-tos/connect-to-other-tools/generate-pdf-from-twenty).
|
||||
</Note>
|
||||
|
||||
## Related
|
||||
## Meilleures pratiques
|
||||
|
||||
* [Workflow Triggers](/l/fr/user-guide/workflows/capabilities/workflow-triggers)
|
||||
* [Workflow Actions](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
### Contenu de l'e-mail
|
||||
|
||||
* Conservez des lignes d'objet concises et pertinentes
|
||||
* Personnalisez avec le nom du destinataire
|
||||
* Incluez un appel à l'action clair
|
||||
* Testez les e-mails avant l'activation
|
||||
|
||||
### Délivrabilité
|
||||
|
||||
* N'envoyez pas trop d'e-mails trop rapidement
|
||||
* Utilisez des signatures d'e-mail professionnelles
|
||||
* Évitez les mots déclencheurs de spam
|
||||
* Assurez-vous de proposer des options de désabonnement pour les e-mails marketing
|
||||
|
||||
### Résolution des problèmes
|
||||
|
||||
* Vérifiez que le compte e-mail est connecté et actif
|
||||
* Vérifiez que l'adresse e-mail du destinataire est valide
|
||||
* Examinez les exécutions de workflows pour les messages d'erreur
|
||||
* Testez d'abord avec votre propre adresse e-mail
|
||||
|
||||
## Articles connexes
|
||||
|
||||
* [Déclencheurs de workflows](/l/fr/user-guide/workflows/capabilities/workflow-triggers)
|
||||
* [Actions de workflows](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
|
||||
+50
-50
@@ -1,90 +1,90 @@
|
||||
---
|
||||
title: Use Branches in Workflows
|
||||
description: Understand how branches work and how to control which path is executed.
|
||||
title: Utiliser les branches dans les flux de travail
|
||||
description: Comprendre le fonctionnement des branches et comment contrôler le chemin exécuté.
|
||||
---
|
||||
|
||||
## How Branches Work
|
||||
## Fonctionnement des branches
|
||||
|
||||
In the workflow editor, you can create multiple paths (branches) going out from a single node. This allows you to build complex automations with different outcomes.
|
||||
Dans l'éditeur de flux de travail, vous pouvez créer plusieurs chemins (branches) partant d'un seul nœud. Cela vous permet de créer des automatisations complexes avec des résultats différents.
|
||||
|
||||
**Important**: When a workflow runs, **all branches execute in parallel by default**. There is no built-in "if/else" logic to choose one branch over another—every path will run simultaneously.
|
||||
**Important** : Lorsqu'un flux de travail s'exécute, **toutes les branches s'exécutent en parallèle par défaut**. Il n'existe pas de logique "if/else" intégrée pour choisir une branche plutôt qu'une autre — chaque chemin s'exécutera simultanément.
|
||||
|
||||
## Controlling Which Branch Runs
|
||||
## Contrôler quelle branche s'exécute
|
||||
|
||||
To execute only one branch based on specific conditions, **add a Filter node at the beginning of each branch**.
|
||||
Pour exécuter une seule branche selon des conditions spécifiques, **ajoutez un nœud Filter au début de chaque branche**.
|
||||
|
||||
### Example Setup
|
||||
### Exemple de configuration
|
||||
|
||||
1. Create your workflow with multiple branches from a single node
|
||||
2. Add a **Filter** node as the first step in each branch
|
||||
3. Set conditions on each Filter to determine when that branch should continue
|
||||
4. Only the branch(es) whose Filter conditions are met will proceed
|
||||
1. Créez votre flux de travail avec plusieurs branches à partir d'un seul nœud
|
||||
2. Ajoutez un nœud **Filter** comme première étape de chaque branche
|
||||
3. Définissez des conditions sur chaque Filter pour déterminer quand cette branche doit continuer
|
||||
4. Seules les branches dont les conditions du Filter sont satisfaites continueront
|
||||
|
||||
<img src="/images/user-guide/workflows/branches-with-filters.png" style={{width:'100%'}} />
|
||||
|
||||
### How Filters Work
|
||||
### Fonctionnement des nœuds Filter
|
||||
|
||||
* If the Filter condition is **met**: The branch continues executing
|
||||
* If the Filter condition is **not met**: The branch stops at the Filter node
|
||||
* Si la condition du Filter est **remplie** : La branche continue son exécution
|
||||
* Si la condition du Filter **n'est pas remplie** : La branche s'arrête au nœud Filter
|
||||
|
||||
This effectively creates conditional logic where only the appropriate branch runs based on your data.
|
||||
Cela crée effectivement une logique conditionnelle où seule la branche appropriée s'exécute en fonction de vos données.
|
||||
|
||||
## Example: Route by Deal Size
|
||||
## Exemple : Routage selon le montant de l'affaire
|
||||
|
||||
**Scenario**: When a deal is closed, send different notifications based on deal size.
|
||||
**Scénario** : Lorsqu'une affaire est conclue, envoyez différentes notifications selon le montant de l'affaire.
|
||||
|
||||
1. **Trigger**: Opportunity updated (Stage = Closed Won)
|
||||
2. **Branch 1**: Filter for Amount > $10,000 → Send Slack message to #big-deals
|
||||
3. **Branch 2**: Filter for Amount ≤ $10,000 → Send email to sales manager
|
||||
1. **Déclencheur** : Opportunité mise à jour (Étape = Fermée gagnée)
|
||||
2. **Branche 1** : Filter pour Montant > 10 000 $ → Envoyer un message Slack dans #big-deals
|
||||
3. **Branche 2** : Filter pour Montant ≤ 10 000 $ → Envoyer un e-mail au responsable commercial
|
||||
|
||||
Both branches start, but only the one matching the deal amount will continue past its Filter.
|
||||
Les deux branches démarrent, mais seule celle qui correspond au montant de l'affaire continuera au-delà de son Filter.
|
||||
|
||||
## Creating Branches
|
||||
## Création de branches
|
||||
|
||||
<Note>
|
||||
To create a new branch from an existing step, click the **+** button on the step and add your action. You can add multiple branches by clicking **+** multiple times.
|
||||
Pour créer une nouvelle branche à partir d'une étape existante, cliquez sur le bouton **+** sur l'étape et ajoutez votre action. Vous pouvez ajouter plusieurs branches en cliquant plusieurs fois sur **+**.
|
||||
</Note>
|
||||
|
||||
1. In the workflow editor, select the step you want to branch from
|
||||
2. Click the **+** button to add an action
|
||||
3. This creates one branch
|
||||
4. Click **+** again on the same step to create additional branches
|
||||
5. Each branch can have its own sequence of actions
|
||||
1. Dans l'éditeur de flux de travail, sélectionnez l'étape à partir de laquelle vous souhaitez créer une branche
|
||||
2. Cliquez sur le bouton **+** pour ajouter une action
|
||||
3. Cela crée une branche
|
||||
4. Cliquez de nouveau sur **+** sur la même étape pour créer d'autres branches
|
||||
5. Chaque branche peut avoir sa propre séquence d'actions
|
||||
|
||||
## Merging Branches Back Together
|
||||
## Fusionner les branches
|
||||
|
||||
After parallel branches complete their work, you can merge them back into a single path:
|
||||
Une fois que les branches parallèles ont terminé leur travail, vous pouvez les fusionner de nouveau en un seul chemin :
|
||||
|
||||
1. Complete your branched actions
|
||||
2. Add a new step that should run after all branches
|
||||
3. Drag a connection from the last step of each branch to this new step
|
||||
4. The merged step waits for all connected branches to complete before executing
|
||||
1. Terminez vos actions dans les branches
|
||||
2. Ajoutez une nouvelle étape qui doit s'exécuter après toutes les branches
|
||||
3. Faites glisser une connexion depuis la dernière étape de chaque branche vers cette nouvelle étape
|
||||
4. L'étape fusionnée attend que toutes les branches connectées soient terminées avant de s'exécuter
|
||||
|
||||
### Example: Process Then Notify
|
||||
### Exemple : Traiter puis notifier
|
||||
|
||||
```
|
||||
Trigger
|
||||
Déclencheur
|
||||
│
|
||||
├── Branch A: Update Customer Record
|
||||
├── Branche A : Mettre à jour l'enregistrement client
|
||||
│
|
||||
└── Branch B: Create Support Ticket
|
||||
└── Branche B : Créer un ticket d'assistance
|
||||
|
||||
↘ ↙
|
||||
|
||||
Merged Step: Send Confirmation Email
|
||||
Étape fusionnée : Envoyer un e-mail de confirmation
|
||||
```
|
||||
|
||||
The confirmation email sends only after both the customer update and ticket creation are done.
|
||||
L'e-mail de confirmation n'est envoyé qu'après la mise à jour du client et la création du ticket.
|
||||
|
||||
## Best Practices
|
||||
## Meilleures pratiques
|
||||
|
||||
* Always use **Filter nodes** at the start of branches when you want conditional execution
|
||||
* Keep branch conditions **mutually exclusive** to avoid duplicate actions
|
||||
* Test your workflows with different data to ensure the correct branches run
|
||||
* **Rename branch steps** descriptively so it's clear what each path does
|
||||
* **Merge branches** when you need a final action after parallel processing
|
||||
* Utilisez toujours des **nœuds Filter** au début des branches lorsque vous souhaitez une exécution conditionnelle
|
||||
* Gardez des conditions de branche **mutuellement exclusives** pour éviter les actions en double
|
||||
* Testez vos flux de travail avec différentes données pour vous assurer que les bonnes branches s'exécutent
|
||||
* **Renommez les étapes de branche** de manière descriptive afin qu'il soit clair ce que fait chaque chemin
|
||||
* **Fusionnez les branches** lorsque vous avez besoin d'une action finale après un traitement en parallèle
|
||||
|
||||
## Related
|
||||
## Articles connexes
|
||||
|
||||
* [Workflows FAQ](/l/fr/user-guide/workflows/how-tos/need-more-help/workflows-faq) — answers about parallel execution
|
||||
* [Workflow Actions](/l/fr/user-guide/workflows/capabilities/workflow-actions) — available actions for branches
|
||||
* [FAQ sur les flux de travail](/l/fr/user-guide/workflows/how-tos/need-more-help/workflows-faq) — réponses concernant l'exécution parallèle
|
||||
* [Actions de workflows](/l/fr/user-guide/workflows/capabilities/workflow-actions) — actions disponibles pour les branches
|
||||
|
||||
@@ -1,180 +1,176 @@
|
||||
---
|
||||
title: Use Iterator
|
||||
description: Loop through arrays of records to perform actions on each item.
|
||||
title: Utiliser l'itérateur
|
||||
description: Parcourez des tableaux d'enregistrements pour exécuter des actions sur chaque élément.
|
||||
image: /images/user-guide/workflows/workflow.png
|
||||
---
|
||||
|
||||
Iterator lets you loop through an array of records and perform actions on each one. It's essential for workflows that need to process multiple records returned by Search Records or received via webhooks.
|
||||
L'itérateur vous permet de parcourir un tableau d'enregistrements et d'exécuter des actions sur chacun. Il est essentiel pour les workflows qui doivent traiter plusieurs enregistrements renvoyés par Rechercher des enregistrements ou reçus via des webhooks.
|
||||
|
||||
<Note>
|
||||
Iterator is currently in beta. Activate it under **Settings → Releases → Lab**.
|
||||
</Note>
|
||||
## Quand utiliser l'itérateur
|
||||
|
||||
## When to Use Iterator
|
||||
| Scénario | Exemple |
|
||||
| -------------------------------------- | ------------------------------------------------------------------ |
|
||||
| **Traiter les résultats de recherche** | Envoyer un e-mail à chaque personne trouvée |
|
||||
| **Gérer les tableaux de webhooks** | Créer des enregistrements pour chaque élément, dans l'ordre |
|
||||
| **Mises à jour en masse** | Mettre à jour plusieurs enregistrements avec des valeurs calculées |
|
||||
| **Notifications** | Avertir plusieurs personnes d'un événement |
|
||||
|
||||
| Scenario | Example |
|
||||
| -------------------------- | ---------------------------------------------- |
|
||||
| **Process search results** | Send email to each person found |
|
||||
| **Handle webhook arrays** | Create records for each item in order |
|
||||
| **Bulk updates** | Update multiple records with calculated values |
|
||||
| **Notifications** | Alert multiple people about an event |
|
||||
## Comprendre l'itérateur
|
||||
|
||||
## Understanding Iterator
|
||||
L'itérateur attend un **tableau** en entrée. Il va ensuite :
|
||||
|
||||
Iterator expects an **array** as input. It then:
|
||||
1. Prend le premier élément du tableau
|
||||
2. Exécute toutes les actions à l'intérieur de l'itérateur avec cet élément
|
||||
3. Passe à l'élément suivant
|
||||
4. Répète jusqu'à ce que tous les éléments soient traités
|
||||
|
||||
1. Takes the first item from the array
|
||||
2. Runs all actions inside the iterator with that item
|
||||
3. Moves to the next item
|
||||
4. Repeats until all items are processed
|
||||
## Configuration de base
|
||||
|
||||
## Basic Setup
|
||||
### Exemple : envoyer un e-mail à toutes les personnes dans les résultats de recherche
|
||||
|
||||
### Example: Email Everyone in Search Results
|
||||
**Objectif** : Trouver tous les contacts d'une entreprise spécifique et envoyer à chacun un e-mail personnalisé.
|
||||
|
||||
**Goal**: Find all contacts in a specific company and send each one a personalized email.
|
||||
### Étape 1 : Rechercher des enregistrements
|
||||
|
||||
### Step 1: Search for Records
|
||||
1. Ajoutez l'action **Rechercher des enregistrements**
|
||||
2. Objet : **Personnes**
|
||||
3. Filtre : Entreprise égale à "Acme Inc"
|
||||
4. Cela renvoie un tableau de personnes
|
||||
|
||||
1. Add **Search Records** action
|
||||
2. Object: **People**
|
||||
3. Filter: Company equals "Acme Inc"
|
||||
4. This returns an array of people
|
||||
### Étape 2 : Vérifier que des résultats existent
|
||||
|
||||
### Step 2: Check Results Exist
|
||||
1. Ajoutez l'action **Filtre**
|
||||
2. Condition : `{{searchRecords.length}}` est supérieur à 0
|
||||
3. Cela évite les erreurs de l'itérateur sur des résultats vides
|
||||
|
||||
1. Add **Filter** action
|
||||
2. Condition: `{{searchRecords.length}}` is greater than 0
|
||||
3. This prevents Iterator errors on empty results
|
||||
### Étape 3 : Ajouter un itérateur
|
||||
|
||||
### Step 3: Add Iterator
|
||||
1. Ajoutez une action **Itérateur**
|
||||
2. Entrée du tableau : sélectionnez `{{searchRecords}}`
|
||||
3. Cela crée une boucle
|
||||
|
||||
1. Add **Iterator** action
|
||||
2. Array input: Select `{{searchRecords}}`
|
||||
3. This creates a loop
|
||||
### Étape 4 : Ajouter des actions dans l'itérateur
|
||||
|
||||
### Step 4: Add Actions Inside Iterator
|
||||
Les actions placées dans l'itérateur s'exécutent pour chaque élément :
|
||||
|
||||
Actions placed after Iterator run for each item:
|
||||
1. Ajoutez une action **Envoyer un e-mail** (dans l'itérateur)
|
||||
2. À : `{{iterator.currentItem.email}}`
|
||||
3. Objet : Bonjour `{{iterator.currentItem.firstName}}` !
|
||||
4. Corps : Message personnalisé utilisant les champs de l'élément en cours
|
||||
|
||||
1. Add **Send Email** action (inside iterator)
|
||||
2. To: `{{iterator.currentItem.email}}`
|
||||
3. Subject: Hello `{{iterator.currentItem.firstName}}`!
|
||||
4. Body: Personalized message using current item fields
|
||||
### Résultat
|
||||
|
||||
### Result
|
||||
Si l'action Rechercher des enregistrements renvoie 5 personnes, l'itérateur :
|
||||
|
||||
If Search Records returns 5 people, the Iterator:
|
||||
* Envoie un e-mail à la personne 1
|
||||
* Envoie un e-mail à la personne 2
|
||||
* ... continue pour les 5
|
||||
|
||||
* Sends email to person 1
|
||||
* Sends email to person 2
|
||||
* ... continues for all 5
|
||||
## Accéder aux données de l'élément en cours
|
||||
|
||||
## Accessing Current Item Data
|
||||
Dans l'itérateur, utilisez `{{iterator.currentItem}}` pour accéder à l'enregistrement en cours :
|
||||
|
||||
Inside Iterator, use `{{iterator.currentItem}}` to access the current record:
|
||||
| Variable | Description |
|
||||
| --------------------------------------- | --------------------------------------------------------- |
|
||||
| `{{iterator.currentItem}}` | L'objet de l'enregistrement en cours dans son intégralité |
|
||||
| `{{iterator.currentItem.id}}` | ID de l'enregistrement |
|
||||
| `{{iterator.currentItem.email}}` | Champ e-mail |
|
||||
| `{{iterator.currentItem.company.name}}` | Nom de l'entreprise associée |
|
||||
| `{{iterator.index}}` | Position actuelle dans le tableau (indexé à partir de 0) |
|
||||
|
||||
| Variable | Description |
|
||||
| --------------------------------------- | ----------------------------------- |
|
||||
| `{{iterator.currentItem}}` | The entire current record object |
|
||||
| `{{iterator.currentItem.id}}` | Record ID |
|
||||
| `{{iterator.currentItem.email}}` | Email field |
|
||||
| `{{iterator.currentItem.company.name}}` | Related company name |
|
||||
| `{{iterator.index}}` | Current position in array (0-based) |
|
||||
## Modèles courants
|
||||
|
||||
## Common Patterns
|
||||
### Mettre à jour plusieurs enregistrements
|
||||
|
||||
### Update Multiple Records
|
||||
|
||||
**Goal**: Mark all overdue tasks as "Late"
|
||||
**Objectif** : Marquer toutes les tâches en retard comme "En retard"
|
||||
|
||||
```
|
||||
1. Search Records (Tasks, Due Date < Today, Status ≠ Completed)
|
||||
2. Filter (length > 0)
|
||||
3. Iterator (searchRecords)
|
||||
└── Update Record
|
||||
- Object: Tasks
|
||||
- Record: {{iterator.currentItem.id}}
|
||||
- Status: Late
|
||||
1. Rechercher des enregistrements (Tâches, Date d'échéance < Aujourd'hui, Statut ≠ Terminé)
|
||||
2. Filtre (longueur > 0)
|
||||
3. Itérateur (searchRecords)
|
||||
└── Mettre à jour l'enregistrement
|
||||
- Objet : Tâches
|
||||
- Enregistrement : {{iterator.currentItem.id}}
|
||||
- Statut : En retard
|
||||
```
|
||||
|
||||
### Create Records from Array
|
||||
### Créer des enregistrements à partir d'un tableau
|
||||
|
||||
**Goal**: Webhook receives order with multiple items, create a record for each
|
||||
**Objectif** : Le webhook reçoit une commande avec plusieurs éléments, créer un enregistrement pour chacun
|
||||
|
||||
```
|
||||
1. Webhook Trigger (receives items array)
|
||||
2. Filter (items.length > 0)
|
||||
3. Iterator (trigger.body.items)
|
||||
└── Create Record
|
||||
- Object: Order Items
|
||||
- Name: {{iterator.currentItem.name}}
|
||||
- Quantity: {{iterator.currentItem.qty}}
|
||||
- Related Order: {{trigger.body.orderId}}
|
||||
1. Déclencheur Webhook (reçoit un tableau d'éléments)
|
||||
2. Filtre (items.length > 0)
|
||||
3. Itérateur (trigger.body.items)
|
||||
└── Créer un enregistrement
|
||||
- Objet : Articles de commande
|
||||
- Nom : {{iterator.currentItem.name}}
|
||||
- Quantité : {{iterator.currentItem.qty}}
|
||||
- Commande associée : {{trigger.body.orderId}}
|
||||
```
|
||||
|
||||
### Conditional Processing Inside Loop
|
||||
### Traitement conditionnel dans la boucle
|
||||
|
||||
**Goal**: Only send email to contacts with valid emails
|
||||
**Objectif** : N'envoyer un e-mail qu'aux contacts avec des adresses valides
|
||||
|
||||
```
|
||||
1. Search Records (People)
|
||||
2. Iterator (searchRecords)
|
||||
└── Filter (currentItem.email is not empty)
|
||||
└── Send Email
|
||||
- To: {{iterator.currentItem.email}}
|
||||
1. Rechercher des enregistrements (Personnes)
|
||||
2. Itérateur (searchRecords)
|
||||
└── Filtre (currentItem.email n'est pas vide)
|
||||
└── Envoyer un e-mail
|
||||
- À : {{iterator.currentItem.email}}
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
## Résolution des problèmes
|
||||
|
||||
### "Iterator expects an array"
|
||||
### "L'itérateur attend un tableau"
|
||||
|
||||
**Cause**: You passed a single record instead of an array.
|
||||
**Cause** : Vous avez passé un seul enregistrement au lieu d'un tableau.
|
||||
|
||||
**Fix**: Make sure you're passing the result of Search Records or an array field, not a single record.
|
||||
**Correctif** : Assurez-vous de passer le résultat de Rechercher des enregistrements ou un champ de type tableau, pas un seul enregistrement.
|
||||
|
||||
```
|
||||
✅ Correct: {{searchRecords}}
|
||||
❌ Wrong: {{searchRecords[0]}}
|
||||
✅ Correct : {{searchRecords}}
|
||||
❌ Incorrect : {{searchRecords[0]}}
|
||||
```
|
||||
|
||||
### Iterator Doesn't Run
|
||||
### L'itérateur ne s'exécute pas
|
||||
|
||||
**Cause**: The array is empty.
|
||||
**Cause** : Le tableau est vide.
|
||||
|
||||
**Fix**: Add a Filter before Iterator to check array length:
|
||||
**Correctif** : Ajoutez un filtre avant l'itérateur pour vérifier la longueur du tableau :
|
||||
|
||||
```
|
||||
Filter: {{searchRecords.length}} > 0
|
||||
Filtre : {{searchRecords.length}} > 0
|
||||
```
|
||||
|
||||
### Actions Run Too Many Times
|
||||
### Les actions s'exécutent trop de fois
|
||||
|
||||
**Cause**: Search Records returned more records than expected.
|
||||
**Cause** : Rechercher des enregistrements a renvoyé plus d'enregistrements que prévu.
|
||||
|
||||
**Fix**:
|
||||
**Correctif** :
|
||||
|
||||
* Add more specific filters to Search Records
|
||||
* Set a limit on Search Records (max 200)
|
||||
* Add Filter inside Iterator for additional conditions
|
||||
* Ajoutez des filtres plus spécifiques à Rechercher des enregistrements
|
||||
* Définissez une limite sur Rechercher des enregistrements (max 200)
|
||||
* Ajoutez un filtre dans l'itérateur pour des conditions supplémentaires
|
||||
|
||||
## Performance Considerations
|
||||
## Considérations relatives aux performances
|
||||
|
||||
* **Credit usage**: Each iteration consumes credits for its actions
|
||||
* **Time**: Large arrays take longer to process
|
||||
* **Limits**: Consider batching very large operations
|
||||
* **Rate limits**: External API calls may hit rate limits with many iterations
|
||||
* **Utilisation de crédits** : Chaque itération consomme des crédits pour ses actions
|
||||
* **Temps** : Les grands tableaux prennent plus de temps à traiter
|
||||
* **Limites** : Envisagez de traiter par lots les opérations très volumineuses
|
||||
* **Limites de débit** : Les appels d'API externes peuvent atteindre des limites de débit avec de nombreuses itérations
|
||||
|
||||
## Best Practices
|
||||
## Meilleures pratiques
|
||||
|
||||
1. **Always check array length** before Iterator to avoid errors
|
||||
2. **Add filters inside loops** when not all items need processing
|
||||
3. **Rename your Iterator step** to describe what it's looping through
|
||||
4. **Test with small arrays** before processing large datasets
|
||||
5. **Monitor workflow runs** to ensure iterations complete as expected
|
||||
1. **Vérifiez toujours la longueur du tableau** avant l'itérateur pour éviter les erreurs
|
||||
2. **Ajoutez des filtres dans les boucles** quand tous les éléments n'ont pas besoin d'être traités
|
||||
3. **Renommez votre étape Itérateur** pour décrire ce qu'elle parcourt
|
||||
4. **Testez avec de petits tableaux** avant de traiter de grands ensembles de données
|
||||
5. **Surveillez l'exécution des workflows** pour vous assurer que les itérations se terminent comme prévu
|
||||
|
||||
## Related
|
||||
## Articles connexes
|
||||
|
||||
* [Workflow Actions](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [How to Use Branches](/l/fr/user-guide/workflows/capabilities/use-branches-in-workflows)
|
||||
* [Workflows FAQ](/l/fr/user-guide/workflows/how-tos/need-more-help/workflows-faq)
|
||||
* [Actions de workflows](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Comment utiliser les branches](/l/fr/user-guide/workflows/capabilities/use-branches-in-workflows)
|
||||
* [FAQ sur les workflows](/l/fr/user-guide/workflows/how-tos/need-more-help/workflows-faq)
|
||||
|
||||
+144
-144
@@ -1,311 +1,311 @@
|
||||
---
|
||||
title: Workflow Actions
|
||||
description: Learn about the actions available in Twenty workflows.
|
||||
title: Actions de flux de travail
|
||||
description: Découvrez les actions disponibles dans les workflows de Twenty.
|
||||
---
|
||||
|
||||
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
|
||||
|
||||
## About Actions
|
||||
## À propos des actions
|
||||
|
||||
Actions define what happens after a trigger fires. You can chain multiple actions together to build complex automations.
|
||||
Les actions définissent ce qui se passe après le déclenchement d'un déclencheur. Vous pouvez enchaîner plusieurs actions pour créer des automatisations complexes.
|
||||
|
||||
<Tip>
|
||||
* Use the variable picker (click the `(x+)` icon) to browse available data from previous steps
|
||||
* Hover over any input field to see which step a variable comes from — helpful when the same field (e.g., ID) exists in multiple previous steps
|
||||
* Give each action a descriptive name for easier maintenance
|
||||
* Utilisez le sélecteur de variables (cliquez sur l'icône `(x+)`) pour parcourir les données disponibles provenant des étapes précédentes
|
||||
* Survolez n'importe quel champ de saisie pour voir de quelle étape provient une variable — utile lorsque le même champ (par ex., ID) existe dans plusieurs étapes précédentes
|
||||
* Donnez à chaque action un nom explicite pour faciliter la maintenance
|
||||
</Tip>
|
||||
|
||||
## Record Actions
|
||||
## Actions sur les enregistrements
|
||||
|
||||
<img src="/images/user-guide/workflows/workflow_actions.png" style={{width:'100%'}} />
|
||||
|
||||
### Create a Record
|
||||
### Créer un enregistrement
|
||||
|
||||
Adds a new record to a selected object.
|
||||
Ajoute un nouvel enregistrement à un objet sélectionné.
|
||||
|
||||
**Configuration**:
|
||||
|
||||
* Select the target object
|
||||
* Fill out the required and optional fields
|
||||
* Use data from previous steps or input values manually to populate fields
|
||||
* Sélectionnez l'objet cible
|
||||
* Remplissez les champs requis et optionnels
|
||||
* Utilisez les données des étapes précédentes ou saisissez des valeurs manuellement pour remplir les champs
|
||||
|
||||
**Output**: The newly created record data is available for use in subsequent steps.
|
||||
**Sortie**: Les données de l'enregistrement nouvellement créé sont disponibles pour une utilisation dans les étapes suivantes.
|
||||
|
||||
### Update Record
|
||||
### Mettre à jour un enregistrement
|
||||
|
||||
Modifies an existing record in a selected object.
|
||||
Modifie un enregistrement existant dans un objet sélectionné.
|
||||
|
||||
<img src="/images/user-guide/workflows/update_record.png" style={{width:'100%'}} />
|
||||
|
||||
**Configuration**:
|
||||
|
||||
* Select the target object
|
||||
* Choose the specific record to update.
|
||||
* You can either choose a fixed record, using the drop down menu displaying all available records.
|
||||
* Or you can have the record dynamically selected, by designating a record found in a previous step, using the `(x+)`. You cannot search for the record based on different criteria at this stage. If you've not yet identified the record, add a `Search Record` step before this `Update Record` step.
|
||||
* Select fields to modify and enter new values
|
||||
* Sélectionnez l'objet cible
|
||||
* Choisissez l'enregistrement spécifique à mettre à jour.
|
||||
* Vous pouvez choisir un enregistrement fixe, à l'aide du menu déroulant affichant tous les enregistrements disponibles.
|
||||
* Ou vous pouvez sélectionner l'enregistrement de façon dynamique, en désignant un enregistrement trouvé lors d'une étape précédente, à l'aide du `(x+)`. Vous ne pouvez pas rechercher l'enregistrement selon différents critères à ce stade. Si vous n'avez pas encore identifié l'enregistrement, ajoutez une étape `Search Record` avant cette étape `Update Record`.
|
||||
* Sélectionnez les champs à modifier et entrez de nouvelles valeurs
|
||||
|
||||
**Output**: The updated record data is available for use in subsequent steps.
|
||||
**Sortie**: Les données de l'enregistrement mis à jour sont disponibles pour une utilisation dans les étapes suivantes.
|
||||
|
||||
### Delete Record
|
||||
### Supprimer un enregistrement
|
||||
|
||||
Removes a record from a selected object.
|
||||
Supprime un enregistrement d'un objet sélectionné.
|
||||
|
||||
**Configuration**:
|
||||
|
||||
* Select the target object
|
||||
* Choose the specific record to delete
|
||||
* Sélectionnez l'objet cible
|
||||
* Choisissez l'enregistrement spécifique à supprimer
|
||||
|
||||
**Output**: The deleted record data remains available for use in subsequent steps.
|
||||
**Sortie**: Les données de l'enregistrement supprimé restent disponibles pour une utilisation dans les étapes suivantes.
|
||||
|
||||
### Search Records
|
||||
### Rechercher des enregistrements
|
||||
|
||||
Finds records within a selected object using filter conditions.
|
||||
Trouve des enregistrements dans un objet sélectionné en utilisant des conditions de filtre.
|
||||
|
||||
**Configuration**:
|
||||
|
||||
* Select the object to search
|
||||
* Set filter criteria to narrow results
|
||||
* Configure sorting and limits
|
||||
* Sélectionnez l'objet à rechercher
|
||||
* Définissez les critères de filtre pour restreindre les résultats
|
||||
* Configurez le tri et les limites
|
||||
|
||||
**Output**: Returns matching records that can be used in subsequent steps.
|
||||
**Sortie**: Renvoie les enregistrements correspondants qui peuvent être utilisés dans les étapes suivantes.
|
||||
|
||||
<Note>
|
||||
**Limit**: Search Records returns a maximum of **200 records**. If you need to process more, add specific filters to reduce results or use scheduled workflows to process in batches.
|
||||
**Limite**: Search Records renvoie un maximum de **200 enregistrements**. Si vous devez en traiter davantage, ajoutez des filtres spécifiques pour réduire les résultats ou utilisez des workflows planifiés pour traiter par lots.
|
||||
</Note>
|
||||
|
||||
**Best Practice**: Use [branches](/l/fr/user-guide/workflows/capabilities/workflow-branches) after Search Records to handle "found" vs "not found" scenarios.
|
||||
**Meilleure pratique**: Utilisez [branches](/l/fr/user-guide/workflows/capabilities/workflow-branches) après Search Records pour gérer les scénarios "trouvé" vs "non trouvé".
|
||||
|
||||
### Upsert Record
|
||||
### Créer ou mettre à jour un enregistrement
|
||||
|
||||
Creates a new record or updates an existing one based on matching criteria. This is useful when you're not sure if a record already exists.
|
||||
Crée un nouvel enregistrement ou met à jour un enregistrement existant en fonction de critères de correspondance. C'est utile lorsque vous n'êtes pas certain qu'un enregistrement existe déjà.
|
||||
|
||||
<img src="/images/user-guide/workflows/upsert_double_identifier.png" style={{width:'100%'}} />
|
||||
|
||||
**Configuration**:
|
||||
|
||||
* Select the target object
|
||||
* Note which fields can be used for matching: email for People, domain for Companies, ID for any object, or any field marked as Unique. You'll need to populate at least one of these below.
|
||||
* Fill out the field values. Do not forget to populate at least one of the unique identifiers.
|
||||
* Sélectionnez l'objet cible
|
||||
* Notez quels champs peuvent être utilisés pour la correspondance : adresse e-mail pour les Contacts, domaine pour les Entreprises, ID pour tout objet, ou tout champ marqué comme unique. Vous devrez renseigner au moins l'un des éléments ci-dessous.
|
||||
* Renseignez les valeurs des champs. N'oubliez pas de renseigner au moins un des identifiants uniques.
|
||||
|
||||
<Note>
|
||||
**Matching usually works even better when adding only one unique identifier.** For example, the screenshot below will match companies based on their domain. The ID is not necessarily needed.
|
||||
**La correspondance fonctionne généralement encore mieux lorsque vous n'ajoutez qu'un seul identifiant unique.** Par exemple, la capture d'écran ci-dessous fera correspondre les entreprises en fonction de leur domaine. L'ID n'est pas forcément nécessaire.
|
||||
</Note>
|
||||
|
||||
<img src="/images/user-guide/workflows/upsert_simple_identifier.png" style={{width:'100%'}} />
|
||||
|
||||
* Use data from previous steps to populate fields
|
||||
* Utilisez les données des étapes précédentes pour remplir les champs
|
||||
|
||||
**How it works**:
|
||||
**Comment ça marche**:
|
||||
|
||||
1. Searches for a record matching your criteria
|
||||
2. If found → updates the existing record
|
||||
3. If not found → creates a new record
|
||||
1. Recherche un enregistrement correspondant à vos critères
|
||||
2. S'il est trouvé → met à jour l'enregistrement existant
|
||||
3. S'il n'est pas trouvé → crée un nouvel enregistrement
|
||||
|
||||
**Output**: The created or updated record data is available for use in subsequent steps.
|
||||
**Sortie**: Les données de l'enregistrement créé ou mis à jour sont disponibles pour une utilisation dans les étapes suivantes.
|
||||
|
||||
## Flow Actions
|
||||
## Actions de flux de travail
|
||||
|
||||
### Iterator
|
||||
### Itérateur
|
||||
|
||||
**Loops through an array of records** returned from a previous step, allowing you to perform actions on each record individually.
|
||||
**Parcourt un tableau d'enregistrements** renvoyé par une étape précédente, vous permettant d'effectuer des actions sur chaque enregistrement individuellement.
|
||||
|
||||
**Configuration**:
|
||||
|
||||
* Select the array of records from a previous step (e.g., results from Search Records, from a Manual trigger with Bulk availability, from a code node)
|
||||
* Define the actions to perform on each record in the loop.
|
||||
* Sélectionnez le tableau d'enregistrements depuis une étape précédente (par ex., résultats de Rechercher des enregistrements, d'un déclencheur manuel avec exécution par lots, d'un nœud de code)
|
||||
* Définissez les actions à effectuer sur chaque enregistrement dans la boucle.
|
||||
|
||||
<Note>
|
||||
- You can add several actions within an iterator.
|
||||
- When using branches inside an iterator, make sure the last step of each branch connects back to the iterator to close the loop.
|
||||
- Vous pouvez ajouter plusieurs actions au sein d'un itérateur.
|
||||
- Lorsque vous utilisez des branches à l'intérieur d'un itérateur, assurez-vous que la dernière étape de chaque branche revient à l'itérateur pour fermer la boucle.
|
||||
</Note>
|
||||
|
||||
* Access `Current Item` Fields: to use fields from the record currently being processed, click on the **Iterator** step, then select **Current item**. The list of available fields from that record will be displayed and can be selected for use in subsequent actions.
|
||||
* Accéder aux champs `Current Item`: pour utiliser les champs de l'enregistrement en cours de traitement, cliquez sur l'étape **Iterator**, puis sélectionnez **Current item**. La liste des champs disponibles de cet enregistrement s'affichera et pourra être sélectionnée pour une utilisation dans les actions suivantes.
|
||||
|
||||
<VimeoEmbed videoId="1146577247" title="Video demonstration" />
|
||||
<VimeoEmbed videoId="1146577247" title="Démonstration vidéo" />
|
||||
|
||||
### Filter
|
||||
### Filtre
|
||||
|
||||
Filters records based on specified conditions, allowing only records that meet the criteria to pass through.
|
||||
Filtre les enregistrements selon des conditions spécifiées, ne laissant passer que ceux qui répondent aux critères.
|
||||
|
||||
**Configuration**:
|
||||
|
||||
* Select the record to filter
|
||||
* Define filter conditions and criteria
|
||||
* Configure which records should pass through to subsequent steps
|
||||
* Sélectionnez l'enregistrement à filtrer
|
||||
* Définissez les conditions de filtre et les critères
|
||||
* Configurez quels enregistrements doivent passer aux étapes suivantes
|
||||
|
||||
<Note>
|
||||
1. **Output**: Filter nodes don't return data—they act as gates. If the conditions are met, the workflow continues. If not, the workflow stops at that branch.
|
||||
2. The `IS` operator can be used with numeric fields. It performs as an `EQUAL`.
|
||||
1. **Sortie**: Les nœuds de filtre ne renvoient pas de données — ils agissent comme des portes. Si les conditions sont remplies, le flux de travail continue. Sinon, le flux de travail s'arrête à cette branche.
|
||||
2. L'opérateur `IS` peut être utilisé avec des champs numériques. Il équivaut à `EQUAL`.
|
||||
</Note>
|
||||
|
||||
### Delay
|
||||
### Délai
|
||||
|
||||
Pauses workflow execution for a specified duration or until a specific date/time.
|
||||
Met en pause l'exécution du flux de travail pendant une durée spécifiée ou jusqu'à une date/heure spécifique.
|
||||
|
||||
**Delay Types**:
|
||||
**Types de délai**:
|
||||
|
||||
| Type | Description |
|
||||
| ------------------ | ------------------------------------------------------------------ |
|
||||
| **Duration** | Wait for a specific amount of time (days, hours, minutes, seconds) |
|
||||
| **Scheduled Date** | Wait until a specific date and time |
|
||||
| Type | Description |
|
||||
| ------------------ | ---------------------------------------------------------------- |
|
||||
| **Durée** | Attendre une durée spécifique (jours, heures, minutes, secondes) |
|
||||
| **Date planifiée** | Attendre jusqu'à une date et une heure spécifiques |
|
||||
|
||||
**Configuration for Duration**:
|
||||
**Configuration pour la durée**:
|
||||
|
||||
* Set days, hours, minutes, and/or seconds
|
||||
* Combine multiple units (e.g., 2 days and 4 hours)
|
||||
* Définissez des jours, des heures, des minutes et/ou des secondes
|
||||
* Combinez plusieurs unités (par ex., 2 jours et 4 heures)
|
||||
|
||||
**Configuration for Scheduled Date**:
|
||||
**Configuration pour la date planifiée**:
|
||||
|
||||
* Select a date and time
|
||||
* Can reference a date field from a previous step (e.g., follow up 3 days after a meeting)
|
||||
* Sélectionnez une date et une heure
|
||||
* Peut référencer un champ de date d'une étape précédente (par ex., relancer 3 jours après une réunion)
|
||||
|
||||
**Use cases**:
|
||||
**Cas d'utilisation**:
|
||||
|
||||
* Wait 24 hours before sending a follow-up email
|
||||
* Pause until an opportunity's close date
|
||||
* Schedule actions for business hours
|
||||
* Attendre 24 heures avant d'envoyer un e-mail de relance
|
||||
* Mettre en pause jusqu'à la date de clôture d'une opportunité
|
||||
* Planifier des actions pendant les heures ouvrées
|
||||
|
||||
<Note>
|
||||
The scheduled date cannot be in the past. If a date field from a previous step is used and the date has already passed, the workflow will fail.
|
||||
La date planifiée ne peut pas être dans le passé. Si un champ de date d'une étape précédente est utilisé et que la date est déjà passée, le flux de travail échouera.
|
||||
</Note>
|
||||
|
||||
**Limits & Credits**:
|
||||
**Limites et crédits**:
|
||||
|
||||
* **No maximum duration limit**—you can set delays of minutes, days, weeks, or longer
|
||||
* **1 credit consumed** when the Delay node executes, regardless of duration
|
||||
* **No credits consumed** while waiting—a 5-minute delay costs the same as a 5-day delay
|
||||
* **Aucune limite de durée maximale** — vous pouvez définir des délais de quelques minutes, jours, semaines, ou plus
|
||||
* **1 crédit consommé** lorsque le nœud Délai s'exécute, quelle que soit la durée
|
||||
* **Aucun crédit consommé** pendant l'attente — un délai de 5 minutes coûte autant qu'un délai de 5 jours
|
||||
|
||||
## Communication Actions
|
||||
## Actions de communication
|
||||
|
||||
### Send Email
|
||||
### Envoyer l'email
|
||||
|
||||
Sends an email from your workflow. This is great for templated group emails. Emails will look like the ones you send from your mailbox.
|
||||
Not suited for newsletters (which require richer formatting) or automated email sequences.
|
||||
Envoie un e-mail à partir de votre flux de travail. Idéal pour des e-mails groupés basés sur des modèles. Les e-mails auront l'apparence de ceux que vous envoyez depuis votre boîte aux lettres.
|
||||
Ne convient pas aux newsletters (qui nécessitent un formatage plus riche) ni aux séquences d'e-mails automatisées.
|
||||
|
||||
**Prerequisites**: Add an email account in Settings → Accounts
|
||||
**Prérequis**: Ajoutez un compte de messagerie dans Paramètres → Comptes
|
||||
|
||||
**Configuration**:
|
||||
|
||||
* Select the sender email account
|
||||
* Sélectionnez le compte e-mail de l'expéditeur
|
||||
|
||||
<Note>
|
||||
You can only send emails from mailboxes synced to your own Twenty account. Sending from other team members' mailboxes (e.g., the account owner's email) is on the roadmap.
|
||||
Vous pouvez uniquement envoyer des e-mails à partir de boîtes aux lettres synchronisées avec votre propre compte Twenty. L'envoi depuis les boîtes aux lettres d'autres membres de l'équipe (par ex., l'e-mail du propriétaire du compte) est sur la feuille de route.
|
||||
</Note>
|
||||
|
||||
For all the following steps, you can reference variables from previous steps for personalization.
|
||||
Pour toutes les étapes suivantes, vous pouvez référencer des variables des étapes précédentes pour la personnalisation.
|
||||
|
||||
* Enter recipient email address.
|
||||
* Entrez l'adresse e-mail du destinataire.
|
||||
|
||||
<Note>
|
||||
Only one recipient is possible at the moment.
|
||||
Un seul destinataire est possible pour le moment.
|
||||
</Note>
|
||||
|
||||
* Set subject line.
|
||||
* Compose message body. You can format links, create numbered list, bullet point lists, add attachments.
|
||||
* Définissez la ligne d'objet.
|
||||
* Rédigez le corps du message. Vous pouvez formater des liens, créer des listes numérotées, des listes à puces, ajouter des pièces jointes.
|
||||
|
||||
<Note>
|
||||
Adding HTML signatures is not possible at the moment.
|
||||
L'ajout de signatures HTML n'est pas possible pour le moment.
|
||||
</Note>
|
||||
|
||||
### Form
|
||||
### Formulaire
|
||||
|
||||
Prompts a form during workflow execution to collect user input. The responses can then be used in subsequent steps to create records, send emails, or execute any other action based on the input.
|
||||
Affiche un formulaire lors de l'exécution du flux de travail pour recueillir les saisies de l'utilisateur. Les réponses peuvent ensuite être utilisées dans les étapes suivantes pour créer des enregistrements, envoyer des e-mails ou exécuter toute autre action selon la saisie.
|
||||
|
||||
<Warning>
|
||||
**Forms are designed for manual triggers only**. For workflows with other triggers (Record Created, Updated, etc.), forms are only accessible via the workflow run interface, which is not the expected user experience. A notifications center will be released in 2026 to properly support forms in automated workflows.
|
||||
**Les formulaires sont conçus uniquement pour les déclencheurs manuels**. Pour les flux de travail avec d'autres déclencheurs (Enregistrement créé, mis à jour, etc.), les formulaires ne sont accessibles que via l'interface de l'exécution de flux de travail, ce qui n'est pas l'expérience utilisateur attendue. Un centre de notifications sera lancé en 2026 pour supporter correctement les formulaires dans les flux de travail automatisés.
|
||||
</Warning>
|
||||
|
||||
**Configuration**:
|
||||
|
||||
* Configure the fields that users will be asked to fill. For each field, choose
|
||||
* a type among text, number, date, a given record, a select field. Select fields from all objects are available.
|
||||
* a label
|
||||
* a default value under `Placeholder` (optional)
|
||||
* Edit the form title
|
||||
* Configurez les champs que les utilisateurs devront remplir. Pour chaque champ, choisissez
|
||||
* un type parmi texte, nombre, date, un enregistrement donné, un champ de sélection. Les champs de sélection de tous les objets sont disponibles.
|
||||
* une étiquette
|
||||
* une valeur par défaut sous `Placeholder` (facultatif)
|
||||
* Modifiez le titre du formulaire
|
||||
|
||||
**Output**: Form responses are available for use in subsequent steps.
|
||||
**Sortie**: Les réponses au formulaire sont disponibles pour une utilisation dans les étapes suivantes.
|
||||
|
||||
**Example**: The "Quick Lead" workflow is available by default in all workspaces, available anywhere in the Command Menu `Cmd + K`.
|
||||
**Exemple**: Le flux de travail "Quick Lead" est disponible par défaut dans tous les espaces de travail, accessible partout dans le menu de commande `Cmd + K`.
|
||||
|
||||
**How to fill the form**:
|
||||
**Comment remplir le formulaire**:
|
||||
|
||||
* Trigger your manual workflow from the command menu `Cmd K`
|
||||
* Fill the form that is displayed in the side panel and click `Submit`.
|
||||
* Déclenchez votre flux de travail manuel depuis le menu de commande `Cmd K`
|
||||
* Remplissez le formulaire affiché dans le panneau latéral et cliquez sur `Submit`.
|
||||
|
||||
<Note>
|
||||
The fields cannot be made mandatory.
|
||||
Les champs ne peuvent pas être rendus obligatoires.
|
||||
</Note>
|
||||
|
||||
<VimeoEmbed videoId="1147277989" title="Video demonstration" />
|
||||
<VimeoEmbed videoId="1147277989" title="Démonstration vidéo" />
|
||||
|
||||
## Integration Actions
|
||||
## Actions d'intégration
|
||||
|
||||
### Code
|
||||
|
||||
Runs custom JavaScript within your workflow.
|
||||
Exécute du JavaScript personnalisé dans votre flux de travail.
|
||||
|
||||
**Configuration**:
|
||||
|
||||
* Access variables from previous steps. You can edit the variables names dynamically.
|
||||
* Accédez aux variables des étapes précédentes. Vous pouvez modifier dynamiquement les noms des variables.
|
||||
|
||||
<VimeoEmbed videoId="1147281795" title="Video demonstration" />
|
||||
<VimeoEmbed videoId="1147281795" title="Démonstration vidéo" />
|
||||
|
||||
* Write JavaScript code in the editor
|
||||
* Return variables for use in subsequent steps
|
||||
* Test code directly in the step
|
||||
* Écrivez le code JavaScript dans l'éditeur
|
||||
* Retournez des variables pour une utilisation dans les étapes suivantes
|
||||
* Testez le code directement dans l'étape
|
||||
|
||||
<Note>
|
||||
If you need to use external API keys in your code, you must input them directly in the function body. You cannot configure API keys elsewhere and reference them in the serverless function.
|
||||
Si vous devez utiliser des clés d'API externes dans votre code, vous devez les saisir directement dans le corps de la fonction. Vous ne pouvez pas configurer des clés d'API ailleurs et les référencer dans la fonction serverless.
|
||||
</Note>
|
||||
|
||||
<Tip>
|
||||
**Working with arrays?** Arrays from external systems or previous steps may come as strings. See [How to handle arrays in Code actions](/l/fr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions) for the solution.
|
||||
**Vous travaillez avec des tableaux ?** Les tableaux provenant de systèmes externes ou d'étapes précédentes peuvent arriver sous forme de chaînes de caractères. Voir [Gérer les tableaux dans les actions Code](/l/fr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions) pour la solution.
|
||||
</Tip>
|
||||
|
||||
<Tip>
|
||||
Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
|
||||
Cliquez sur l'icône carrée en haut à droite de l'éditeur de code pour l'afficher en plein écran — utile car la largeur par défaut de l'éditeur est limitée.
|
||||
</Tip>
|
||||
|
||||
### HTTP Request
|
||||
### Requête HTTP
|
||||
|
||||
Sends a request to an external API as part of your workflow.
|
||||
Envoie une requête à une API externe dans le cadre de votre flux de travail.
|
||||
|
||||
<img src="/images/user-guide/workflows/http_action.png" style={{width:'100%'}} />
|
||||
|
||||
**Configuration**:
|
||||
|
||||
* Enter the API endpoint URL. Using parameters from previous steps is possible.
|
||||
* Select HTTP method (GET, POST, PUT, PATCH, DELETE)
|
||||
* Add required headers and values
|
||||
* Provide sample response for structure preview
|
||||
* Entrez l'URL du point de terminaison de l'API. Il est possible d'utiliser des paramètres issus des étapes précédentes.
|
||||
* Sélectionnez la méthode HTTP (GET, POST, PUT, PATCH, DELETE)
|
||||
* Ajoutez les en-têtes et valeurs requis
|
||||
* Fournissez un exemple de réponse pour l'aperçu de la structure
|
||||
|
||||
## AI Actions
|
||||
## Actions d'IA
|
||||
|
||||
### AI Agent - Coming Soon
|
||||
### Agent IA - Bientôt disponible
|
||||
|
||||
Runs an AI agent within your workflow to perform intelligent tasks.
|
||||
Exécute un agent IA au sein de votre flux de travail pour effectuer des tâches intelligentes.
|
||||
|
||||
**Configuration**:
|
||||
|
||||
* **Agent**: Select an existing AI agent or use the default agent
|
||||
* **Prompt**: Write the instruction for the AI agent
|
||||
* Reference variables from previous steps in the prompt
|
||||
* **Agent**: Sélectionnez un agent IA existant ou utilisez l'agent par défaut
|
||||
* **Prompt**: Écrivez l'instruction pour l'agent IA
|
||||
* Référencez des variables des étapes précédentes dans le prompt
|
||||
|
||||
**What AI Agents can do**:
|
||||
**Ce que les agents IA peuvent faire**:
|
||||
|
||||
* Analyze and summarize data
|
||||
* Classify or categorize records
|
||||
* Generate text content
|
||||
* Make decisions based on data
|
||||
* Interact with your CRM data using tools
|
||||
* Analyser et résumer des données
|
||||
* Classer ou catégoriser des enregistrements
|
||||
* Générer du contenu textuel
|
||||
* Prendre des décisions basées sur des données
|
||||
* Interagir avec vos données CRM à l'aide d'outils
|
||||
|
||||
**Output**: The AI agent's response is available for use in subsequent steps. If the agent has a structured output schema, the response will follow that format.
|
||||
**Sortie**: La réponse de l'agent IA est disponible pour une utilisation dans les étapes suivantes. Si l'agent a un schéma de sortie structuré, la réponse suivra ce format.
|
||||
|
||||
<Note>
|
||||
AI Agent actions consume workflow credits based on the AI model used. See [Workflow Credits](/l/fr/user-guide/workflows/capabilities/workflow-credits) for details.
|
||||
Les actions d'agent IA consomment des crédits de flux de travail en fonction du modèle d'IA utilisé. Voir [Crédits de flux de travail](/l/fr/user-guide/workflows/capabilities/workflow-credits) pour plus de détails.
|
||||
</Note>
|
||||
|
||||
<Note>
|
||||
AI agents respect role-based permissions. You can assign specific roles to agents under **Settings → Roles** to control what data they can access. See [Permissions](/l/fr/user-guide/permissions-access/capabilities/permissions) for details.
|
||||
Les agents IA respectent les autorisations basées sur les rôles. Vous pouvez attribuer des rôles spécifiques aux agents dans **Paramètres → Rôles** pour contrôler les données auxquelles ils peuvent accéder. Voir [Autorisations](/l/fr/user-guide/permissions-access/capabilities/permissions) pour plus de détails.
|
||||
</Note>
|
||||
|
||||
@@ -1,66 +1,66 @@
|
||||
---
|
||||
title: Workflow Branches
|
||||
description: Create parallel paths and conditional logic in your workflows.
|
||||
title: Branches de flux de travail},{
|
||||
description: Créez des chemins parallèles et une logique conditionnelle dans vos flux de travail.
|
||||
---
|
||||
|
||||
Branches allow you to split your workflow into multiple paths that can run simultaneously or conditionally based on your data.
|
||||
Les branches vous permettent de scinder votre flux de travail en plusieurs chemins pouvant s’exécuter simultanément ou de façon conditionnelle selon vos données.
|
||||
|
||||
<img src="/images/user-guide/workflows/branches.png" style={{width:'100%'}} />
|
||||
|
||||
## How Branches Work
|
||||
## Fonctionnement des branches
|
||||
|
||||
When you create multiple connections from a single node, each path becomes a branch. By default, **all branches execute in parallel**—they don't wait for each other.
|
||||
Lorsque vous créez plusieurs connexions à partir d’un seul nœud, chaque chemin devient une branche. Par défaut, **toutes les branches s’exécutent en parallèle** — elles ne s’attendent pas les unes les autres.
|
||||
|
||||
## Creating Branches
|
||||
## Création de branches
|
||||
|
||||
### Add a New Branch
|
||||
### Ajouter une nouvelle branche
|
||||
|
||||
1. **Right-click on the main canvas** of the workflow (not on an existing node)
|
||||
2. Click **Add node**
|
||||
3. Choose the node type for your new branch
|
||||
4. Drag an arrow from the bottom of the previous step to the top of this new action
|
||||
5. Repeat to add more branches from the same node
|
||||
1. **Cliquez avec le bouton droit sur la zone de travail principale** du flux de travail (et non sur un nœud existant)
|
||||
2. Cliquez sur **Ajouter un nœud**
|
||||
3. Choisissez le type de nœud pour votre nouvelle branche
|
||||
4. Faites glisser une flèche depuis le bas de l’étape précédente vers le haut de cette nouvelle action
|
||||
5. Répétez pour ajouter d’autres branches à partir du même nœud
|
||||
|
||||
<Note>
|
||||
Each branch is independent. Adding a branch doesn't affect other existing paths from that node.
|
||||
Chaque branche est indépendante. L’ajout d’une branche n’affecte pas les autres chemins existants à partir de ce nœud.
|
||||
</Note>
|
||||
|
||||
### Visual Layout
|
||||
### Disposition visuelle
|
||||
|
||||
Branches appear as parallel paths in the workflow editor. You can drag nodes to rearrange the visual layout without affecting execution.
|
||||
Les branches apparaissent comme des chemins parallèles dans l’éditeur de flux de travail. Vous pouvez faire glisser les nœuds pour réorganiser la disposition visuelle sans affecter l’exécution.
|
||||
|
||||
## Conditional Branches
|
||||
## Branches conditionnelles
|
||||
|
||||
Since all branches run by default, use **Filter** nodes to control which paths actually execute:
|
||||
Puisque toutes les branches s’exécutent par défaut, utilisez des nœuds **Filtre** pour contrôler quels chemins s’exécutent réellement :
|
||||
|
||||
| Branch | Filter Condition | Action |
|
||||
| ------ | --------------------- | -------------------------- |
|
||||
| A | Stage = "Won" | Send congratulations email |
|
||||
| B | Stage = "Lost" | Create follow-up task |
|
||||
| C | Stage = "Negotiation" | Notify manager |
|
||||
| Branche | Condition de filtre | Action |
|
||||
| ------- | --------------------- | ---------------------------------- |
|
||||
| A | Étape = "Gagnée" | Envoyer un e-mail de félicitations |
|
||||
| B | Étape = "Perdue" | Créer une tâche de suivi |
|
||||
| C | Étape = "Négociation" | Notifier le responsable |
|
||||
|
||||
1. Create branches from your trigger or action
|
||||
2. Add a **Filter** node as the first step of each branch
|
||||
3. Configure each filter with mutually exclusive conditions
|
||||
4. Add your actions after each filter
|
||||
1. Créez des branches à partir de votre déclencheur ou action
|
||||
2. Ajoutez un nœud **Filtre** comme première étape de chaque branche
|
||||
3. Configurez chaque filtre avec des conditions mutuellement exclusives
|
||||
4. Ajoutez vos actions après chaque filtre
|
||||
|
||||
Only the branch(es) where the filter condition is met will continue executing.
|
||||
Seules les branches pour lesquelles la condition du filtre est remplie poursuivront l’exécution.
|
||||
|
||||
## Merging Branches
|
||||
## Fusion de branches
|
||||
|
||||
**Branches don't automatically merge.** Each branch runs independently until it ends. You have full flexibility in how you handle this:
|
||||
**Les branches ne fusionnent pas automatiquement.** Chaque branche s’exécute indépendamment jusqu’à sa fin. Vous avez toute latitude quant à la manière de gérer cela :
|
||||
|
||||
* **Option 1: Keep branches separate**
|
||||
Each branch handles its own follow-up actions independently. This is the simplest approach when branches don't need to converge.
|
||||
* **Option 1 : Garder les branches séparées**
|
||||
Chaque branche gère ses propres actions de suivi de manière indépendante. C’est l’approche la plus simple lorsque les branches n’ont pas besoin de converger.
|
||||
|
||||
* **Option 2: Merge branches manually**
|
||||
When creating your workflow, you can manually connect multiple branches to the same downstream action. Simply drag arrows from the end of each branch to a common node.
|
||||
* **Option 2 : Fusionner les branches manuellement**
|
||||
Lors de la création de votre flux de travail, vous pouvez connecter manuellement plusieurs branches à la même action en aval. Il suffit de faire glisser des flèches depuis la fin de chaque branche vers un nœud commun.
|
||||
|
||||
<Note>
|
||||
While you can use a [Delay](/l/fr/user-guide/workflows/capabilities/workflow-actions#delay) node to pause execution, it's not currently configurable to wait "until another branch ends."
|
||||
Bien que vous puissiez utiliser un nœud [Delay](/l/fr/user-guide/workflows/capabilities/workflow-actions#delay) pour mettre l’exécution en pause, il n’est pas actuellement configurable pour attendre "jusqu’à ce qu’une autre branche se termine".
|
||||
</Note>
|
||||
|
||||
## Related
|
||||
## Contenus associés
|
||||
|
||||
* [How to Use Branches in Workflows](/l/fr/user-guide/workflows/capabilities/use-branches-in-workflows) - Step-by-step guide
|
||||
* [Workflow Actions](/l/fr/user-guide/workflows/capabilities/workflow-actions) - Available actions including Filter
|
||||
* [Comment utiliser les branches dans les flux de travail](/l/fr/user-guide/workflows/capabilities/use-branches-in-workflows) - Guide étape par étape
|
||||
* [Actions de flux de travail](/l/fr/user-guide/workflows/capabilities/workflow-actions) - Actions disponibles, y compris Filtre
|
||||
|
||||
@@ -1,76 +1,76 @@
|
||||
---
|
||||
title: Workflow Credits
|
||||
description: Understand workflow credit consumption and management.
|
||||
title: Crédits de flux de travail
|
||||
description: Comprendre la consommation et la gestion des crédits de flux de travail.
|
||||
---
|
||||
|
||||
Workflow credits power your automations in Twenty. Understanding how they work helps you optimize costs and manage your automation budget effectively.
|
||||
Les crédits de flux de travail alimentent vos automatisations dans Twenty. Comprendre comment ils fonctionnent vous aide à optimiser les coûts et gérer efficacement votre budget d'automatisation.
|
||||
|
||||
## Credit Allocation
|
||||
## Allocation des crédits
|
||||
|
||||
Workflow credits are allocated based on your billing cycle, not your plan tier:
|
||||
Les crédits de flux de travail sont alloués en fonction de votre cycle de facturation, et non de votre niveau de forfait :
|
||||
|
||||
| Billing Cycle | Credits |
|
||||
| ------------------------ | --------------------------- |
|
||||
| **Monthly subscription** | 5 million credits per month |
|
||||
| **Yearly subscription** | 50 million credits per year |
|
||||
| Cycle de facturation | Crédits |
|
||||
| ---------------------- | ------------------------------ |
|
||||
| **Abonnement mensuel** | 5 millions de crédits par mois |
|
||||
| **Abonnement annuel** | 50 millions de crédits par an |
|
||||
|
||||
<Note>
|
||||
5 million monthly credits are generous for standard automations. Most teams won't exceed this limit with typical workflow usage. Additional credits are primarily needed for advanced Code actions and AI-powered workflows.
|
||||
5 millions de crédits mensuels suffisent largement pour les automatisations standard. La plupart des équipes ne dépasseront pas cette limite avec une utilisation typique des flux de travail. Des crédits supplémentaires sont principalement nécessaires pour les actions de Code avancées et les flux de travail alimentés par l'IA.
|
||||
</Note>
|
||||
|
||||
## How Credit Consumption Works
|
||||
## Comment fonctionne la consommation de crédits
|
||||
|
||||
Credits are consumed when workflows execute, not when you create them. Each workflow action consumes credits based on its complexity:
|
||||
Les crédits sont consommés lors de l'exécution des flux de travail, et non lors de leur création. Chaque action du flux de travail consomme des crédits en fonction de sa complexité :
|
||||
|
||||
### Credit Consumption by Action Type
|
||||
### Consommation de crédits par type d'action
|
||||
|
||||
* **Basic internal operations**: Very low credit consumption
|
||||
* Search Records
|
||||
* Create Record
|
||||
* Update Record
|
||||
* Delete Record
|
||||
* Form actions
|
||||
* **Opérations internes de base** : Très faible consommation de crédits
|
||||
* Rechercher des enregistrements
|
||||
* Créer un enregistrement
|
||||
* Mettre à jour un enregistrement
|
||||
* Supprimer un enregistrement
|
||||
* Actions de formulaire
|
||||
|
||||
* **Complex operations**: Higher credit consumption
|
||||
* Code actions (JavaScript execution)
|
||||
* HTTP Requests to external services
|
||||
* **Opérations complexes** : Consommation de crédits plus élevée
|
||||
* Actions de code (exécution JavaScript)
|
||||
* Requêtes HTTP vers des services externes
|
||||
|
||||
* **AI features**: Higher credit consumption
|
||||
* AI Agent actions consume credits based on the AI model used
|
||||
* More complex prompts and longer outputs use more credits
|
||||
* **Fonctionnalités d'IA** : Consommation de crédits plus élevée
|
||||
* Les actions de l'agent IA consomment des crédits en fonction du modèle d'IA utilisé
|
||||
* Des requêtes plus complexes et des réponses plus longues utilisent davantage de crédits
|
||||
|
||||
* **Delay actions**: Minimal credit consumption
|
||||
* The Delay node consumes **1 credit** when it executes
|
||||
* **No credits are consumed** during the wait period
|
||||
* A 5-minute delay costs the same as a 5-day delay
|
||||
* **Actions de type Delay** : Consommation de crédits minimale
|
||||
* Le nœud Delay consomme **1 crédit** lors de son exécution
|
||||
* **Aucun crédit n'est consommé** pendant la période d'attente
|
||||
* Un délai de 5 minutes coûte autant qu'un délai de 5 jours
|
||||
|
||||
### Real-Time Deduction
|
||||
### Déduction en temps réel
|
||||
|
||||
Credits are deducted in real-time as workflows execute. This means:
|
||||
Les crédits sont déduits en temps réel au fur et à mesure des exécutions des flux de travail. Cela signifie :
|
||||
|
||||
* Draft workflows don't consume credits
|
||||
* Only active, running workflows use your credit allocation
|
||||
* Failed workflows still consume credits for completed steps
|
||||
* Les flux de travail en brouillon ne consomment pas de crédits
|
||||
* Seuls les flux de travail actifs et en cours d'exécution utilisent votre allocation de crédits
|
||||
* Les flux de travail échoués consomment tout de même des crédits pour les étapes complétées
|
||||
|
||||
## Managing Credits
|
||||
## Gestion des crédits
|
||||
|
||||
### Check Credit Usage
|
||||
### Vérifier l'utilisation des crédits
|
||||
|
||||
1. Go to **Settings → Billing**
|
||||
2. View your current credit consumption and remaining balance
|
||||
3. Monitor usage patterns to optimize your workflows
|
||||
1. Allez dans **Paramètres → Facturation**
|
||||
2. Consultez votre consommation actuelle de crédits et votre solde restant
|
||||
3. Surveillez les habitudes d'utilisation pour optimiser vos flux de travail
|
||||
|
||||
### Purchasing Additional Credits
|
||||
### Achat de crédits supplémentaires
|
||||
|
||||
If you need more credits beyond your plan allocation:
|
||||
Si vous avez besoin de plus de crédits que votre allocation de plan :
|
||||
|
||||
1. Go to **Settings → Billing**
|
||||
2. Click on the option to purchase additional credits. Packages of different sizes are available.
|
||||
3. Credits are added to your current balance
|
||||
1. Allez dans **Paramètres → Facturation**
|
||||
2. Cliquez sur l'option pour acheter des crédits supplémentaires. Des forfaits de différentes tailles sont disponibles.
|
||||
3. Les crédits sont ajoutés à votre solde actuel
|
||||
|
||||
## Best Practices
|
||||
## Meilleures pratiques
|
||||
|
||||
* **Batch Processing**: Use bulk operations and Iterator actions efficiently
|
||||
* **Manual Trigger Optimization**: For manual triggers, choose `Bulk` availability to process multiple records in a single workflow run
|
||||
* Optimize Code actions for efficiency
|
||||
* Batch operations to reduce individual action calls
|
||||
* **Traitement par lots** : Utilisez efficacement les opérations en masse et les actions d'itérateur
|
||||
* **Optimisation du déclencheur manuel** : Pour les déclencheurs manuels, choisissez `Bulk` pour traiter plusieurs enregistrements en une seule exécution de flux de travail
|
||||
* Optimisez les actions de code pour l'efficacité
|
||||
* Opérations par lots pour réduire les appels d'actions individuels
|
||||
|
||||
@@ -1,92 +1,92 @@
|
||||
---
|
||||
title: Workflow Runs
|
||||
description: Monitor and manage workflow executions.
|
||||
title: Exécutions de workflows
|
||||
description: Surveiller et gérer les exécutions de flux de travail.
|
||||
image: /images/user-guide/workflows/workflow.png
|
||||
---
|
||||
|
||||
## About Runs
|
||||
## À propos des Exécutions
|
||||
|
||||
A **Run** is a record of a workflow execution. Every time a workflow is triggered—whether by a record event, schedule, manual action, or webhook—a new run is created.
|
||||
Une **Exécution** est un enregistrement de l'exécution du flux de travail. Chaque fois qu'un flux de travail est déclenché — qu'il s'agisse d'un événement d'enregistrement, d'une planification, d'une action manuelle ou d'un webhook — une nouvelle exécution est créée.
|
||||
|
||||
## Viewing Runs
|
||||
## Visualisation des exécutions
|
||||
|
||||
### From the Workflow Editor
|
||||
### Depuis l'éditeur de flux de travail
|
||||
|
||||
1. Open the workflow you want to monitor
|
||||
2. Click the **Runs** panel on the right side
|
||||
3. See a list of recent runs with their status
|
||||
1. Ouvrez le flux de travail que vous souhaitez surveiller
|
||||
2. Cliquez sur le panneau **Exécutions** à droite
|
||||
3. Affichez une liste des exécutions récentes avec leur statut
|
||||
|
||||
### From the Workflow Runs View
|
||||
### Depuis la vue Exécutions de flux de travail
|
||||
|
||||
1. Go to **Workflow Runs** in the sidebar
|
||||
2. View runs across all workflows
|
||||
3. Filter by status, workflow, or date
|
||||
1. Accédez à **Exécutions de flux de travail** dans la barre latérale
|
||||
2. Affichez les exécutions dans l'ensemble des flux de travail
|
||||
3. Filtrez par statut, flux de travail ou date
|
||||
|
||||
## Run Statuses
|
||||
## Statuts des exécutions
|
||||
|
||||
| Status | Description |
|
||||
| ------------- | ------------------------------------------------------------------------ |
|
||||
| **Running** | Workflow is currently executing |
|
||||
| **Completed** | Workflow finished successfully |
|
||||
| **Failed** | Workflow encountered an error and stopped |
|
||||
| **Waiting** | Workflow is paused (e.g., waiting for a Delay action or Form submission) |
|
||||
| Statut | Description |
|
||||
| ---------------------- | ---------------------------------------------------------------------------------------------------------- |
|
||||
| **Exécution en cours** | Le flux de travail est en cours d'exécution |
|
||||
| **Terminé** | Le flux de travail s'est terminé avec succès |
|
||||
| **Échec** | Le flux de travail a rencontré une erreur et s'est arrêté |
|
||||
| **En attente** | Le flux de travail est en pause (par exemple, en attente d'une action Delay ou de l'envoi d'un formulaire) |
|
||||
|
||||
## Run Details
|
||||
## Détails de l'exécution
|
||||
|
||||
Click on any run to see:
|
||||
Cliquez sur une exécution pour voir :
|
||||
|
||||
* **Status**: Current state of the run
|
||||
* **Started at**: When the run began
|
||||
* **Duration**: How long the run took
|
||||
* **Trigger data**: The input that started the workflow
|
||||
* **Step outputs**: Data returned by each step
|
||||
* **Error messages**: If the run failed, what went wrong
|
||||
* **Statut** : État actuel de l'exécution
|
||||
* **Heure de début** : Moment où l'exécution a commencé
|
||||
* **Durée** : Temps nécessaire à l'exécution
|
||||
* **Données du déclencheur** : Les données qui ont déclenché le flux de travail
|
||||
* **Résultats des étapes** : Données renvoyées par chaque étape
|
||||
* **Messages d'erreur** : Si l'exécution a échoué, ce qui s'est mal passé
|
||||
|
||||
## Step-by-Step Execution
|
||||
## Exécution étape par étape
|
||||
|
||||
Each run shows the progression through your workflow:
|
||||
Chaque exécution montre la progression au sein de votre flux de travail :
|
||||
|
||||
1. See which steps completed successfully
|
||||
2. Identify where failures occurred
|
||||
3. View the data passed between steps
|
||||
4. Debug issues by examining step inputs and outputs
|
||||
1. Voir quelles étapes se sont terminées avec succès
|
||||
2. Identifier où les échecs se sont produits
|
||||
3. Afficher les données transmises entre les étapes
|
||||
4. Déboguez les problèmes en examinant les entrées et sorties des étapes
|
||||
|
||||
## Error Handling
|
||||
## Gestion des erreurs
|
||||
|
||||
When a run fails:
|
||||
Lorsqu'une exécution échoue :
|
||||
|
||||
1. Open the failed run
|
||||
2. Find the step that caused the failure
|
||||
3. Check the error message for details
|
||||
4. Common issues:
|
||||
* Missing required fields
|
||||
* Invalid data format
|
||||
* External API errors
|
||||
* Permission issues
|
||||
1. Ouvrez l'exécution échouée
|
||||
2. Trouvez l'étape à l'origine de l'échec
|
||||
3. Consultez le message d'erreur pour plus de détails
|
||||
4. Problèmes courants :
|
||||
* Champs obligatoires manquants
|
||||
* Format de données invalide
|
||||
* Erreurs d'API externes
|
||||
* Problèmes d'autorisations
|
||||
|
||||
## Re-running Workflows
|
||||
## Réexécuter les flux de travail
|
||||
|
||||
If a run fails, you can:
|
||||
Si une exécution échoue, vous pouvez :
|
||||
|
||||
* Fix the underlying issue and wait for the next trigger
|
||||
* For manual workflows, trigger again with the same or updated data
|
||||
* Review the workflow logic to prevent future failures
|
||||
* Corrigez le problème sous-jacent et attendez le prochain déclenchement
|
||||
* Pour les flux de travail manuels, déclenchez à nouveau avec les mêmes données ou des données mises à jour
|
||||
* Révisez la logique du flux de travail pour éviter de futurs échecs
|
||||
|
||||
## Performance Tips
|
||||
## Conseils de performances
|
||||
|
||||
### Managing Run History
|
||||
### Gestion de l'historique des exécutions
|
||||
|
||||
* Runs are retained for historical reference
|
||||
* Very old runs may be archived automatically
|
||||
* Export run data if you need to keep records
|
||||
* Les exécutions sont conservées à des fins d'historique
|
||||
* Les exécutions très anciennes peuvent être archivées automatiquement
|
||||
* Exportez les données d'exécution si vous devez conserver des enregistrements
|
||||
|
||||
### Monitoring Best Practices
|
||||
### Meilleures pratiques de surveillance
|
||||
|
||||
* Check runs regularly after activating new workflows
|
||||
* Review failed runs to identify patterns
|
||||
* Vérifiez régulièrement les exécutions après l'activation de nouveaux flux de travail
|
||||
* Passez en revue les exécutions échouées pour identifier des tendances
|
||||
|
||||
## Related
|
||||
## Articles connexes
|
||||
|
||||
* [Workflow Triggers](/l/fr/user-guide/workflows/capabilities/workflow-triggers)
|
||||
* [Workflow Actions](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Workflow Troubleshooting](/l/fr/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting)
|
||||
* [Déclencheurs de flux de travail](/l/fr/user-guide/workflows/capabilities/workflow-triggers)
|
||||
* [Actions de flux de travail](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Dépannage des flux de travail](/l/fr/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting)
|
||||
|
||||
@@ -1,136 +1,136 @@
|
||||
---
|
||||
title: Workflow Triggers
|
||||
description: Learn about the different triggers that start your workflows.
|
||||
title: Déclencheurs de flux de travail
|
||||
description: Découvrez les différents déclencheurs qui démarrent vos flux de travail.
|
||||
---
|
||||
|
||||
## About Triggers
|
||||
## À propos des déclencheurs
|
||||
|
||||
Workflows always start with a single trigger that defines when the automation should run.
|
||||
Les flux de travail commencent toujours par un seul déclencheur qui définit quand l’automatisation doit s’exécuter.
|
||||
|
||||
<img src="/images/user-guide/workflows/workflow_triggers.png" style={{width:'100%'}} />
|
||||
|
||||
<Tip>
|
||||
**Advanced objects are supported!** Beyond standard CRM objects (People, Companies, Opportunities), you can also trigger workflows and perform actions on:
|
||||
**Des objets avancés sont pris en charge !** Au-delà des objets CRM standard (Personnes, Entreprises, Opportunités), vous pouvez aussi déclencher des flux de travail et effectuer des actions sur :
|
||||
|
||||
* Workspace Members
|
||||
* Calendar Events
|
||||
* Messages (Emails)
|
||||
* Tasks, Notes, and many other system objects
|
||||
* Membres de l'espace de travail
|
||||
* Événements de calendrier
|
||||
* Messages (e-mails)
|
||||
* Tâches, notes et de nombreux autres objets système
|
||||
|
||||
This opens up powerful automations like notifying team members when calendar events are created, or processing incoming emails automatically.
|
||||
Cela permet des automatisations puissantes, comme avertir les membres de l'équipe lorsque des événements de calendrier sont créés, ou traiter automatiquement les e-mails entrants.
|
||||
</Tip>
|
||||
|
||||
## Record is Created
|
||||
## Un enregistrement est créé
|
||||
|
||||
Starts the workflow when a new record is created in a selected object (People, Companies, Opportunities, or any custom object).
|
||||
Démarre le flux de travail lorsqu'un nouvel enregistrement est créé dans un objet sélectionné (Personnes, Entreprises, Opportunités, ou tout objet personnalisé).
|
||||
|
||||
**Configuration**: Select the object type to monitor for new records.
|
||||
**Configuration**: Sélectionnez le type d'objet à surveiller pour les nouveaux enregistrements.
|
||||
|
||||
<Note>
|
||||
* This trigger is great for records created by csv, mailbox and calendar synchronization, API.
|
||||
* **It is not recommended for records created manually**: with this trigger, workflows start as soon as the record is created. Since Twenty UI offers auto-save on the fly (there is not an edit mode and then a validation to save records), the workflow will be triggered before the user inputs all the fields.
|
||||
To trigger this workflow on records created manually, it is recommended to use the trigger `Record is created or updated` instead.
|
||||
* Ce déclencheur est idéal pour les enregistrements créés via csv, la synchronisation de la boîte aux lettres et du calendrier, ou l'API.
|
||||
* **Il n'est pas recommandé pour les enregistrements créés manuellement** : avec ce déclencheur, les flux de travail démarrent dès que l'enregistrement est créé. Comme l'interface Twenty propose l'enregistrement automatique à la volée (il n'y a pas de mode édition suivi d'une validation pour enregistrer les enregistrements), le flux de travail sera déclenché avant que l'utilisateur ne renseigne tous les champs.
|
||||
Pour déclencher ce flux de travail sur des enregistrements créés manuellement, il est recommandé d'utiliser plutôt le déclencheur `Record is created or updated`.
|
||||
</Note>
|
||||
|
||||
## Record is Updated
|
||||
## Un enregistrement est mis à jour
|
||||
|
||||
Starts the workflow when changes are made to an existing record.
|
||||
Démarre le flux de travail lorsque des modifications sont apportées à un enregistrement existant.
|
||||
|
||||
**Configuration**:
|
||||
|
||||
* Select the object type
|
||||
* Optionally specify which fields to monitor for changes
|
||||
* Sélectionnez le type d'objet
|
||||
* Spécifiez éventuellement quels champs surveiller pour les changements
|
||||
|
||||
## Record is Updated or Created
|
||||
## Un enregistrement est mis à jour ou créé
|
||||
|
||||
Starts the workflow when a record is either created or updated in a selected object.
|
||||
Démarre le flux de travail lorsqu'un enregistrement est soit créé soit mis à jour dans un objet sélectionné.
|
||||
|
||||
**Why This Matters**: This trigger is particularly helpful because records created via different methods behave differently:
|
||||
**Pourquoi est-ce important**: Ce déclencheur est particulièrement utile car les enregistrements créés par différentes méthodes se comportent différemment :
|
||||
|
||||
* **API/CSV imports**: Records are created with all fields populated immediately
|
||||
* **Manual creation**: Records are created first, then fields are added in subsequent updates
|
||||
* **Importations API/CSV** : Les enregistrements sont créés avec tous les champs remplis immédiatement
|
||||
* **Création manuelle** : Les enregistrements sont créés d'abord, puis les champs sont ajoutés lors de mises à jour ultérieures
|
||||
|
||||
**Configuration**:
|
||||
|
||||
* Select the object type to monitor
|
||||
* Optionally specify which fields to monitor for changes
|
||||
* The workflow will trigger both on initial creation and any subsequent updates
|
||||
* Sélectionnez le type d'objet à surveiller
|
||||
* Spécifiez éventuellement quels champs surveiller pour les changements
|
||||
* Le flux de travail se déclenchera à la fois lors de la création initiale et lors de mises à jour ultérieures
|
||||
|
||||
## Record is Deleted
|
||||
## Un enregistrement est supprimé
|
||||
|
||||
Starts the workflow when a record is removed from an object.
|
||||
Démarre le flux de travail lorsqu'un enregistrement est supprimé d'un objet.
|
||||
|
||||
**Configuration**: Select the object type to monitor for deletions.
|
||||
**Configuration**: Sélectionnez le type d'objet à surveiller pour les suppressions.
|
||||
|
||||
## Manual Trigger
|
||||
## Déclencheur manuel
|
||||
|
||||
Starts the workflow when triggered by a user action. This trigger can be accessed through the `Cmd+K` menu or via a custom button that will be displayed in the top navbar after selecting record(s).
|
||||
Démarre le flux de travail lorsqu'il est déclenché par une action de l'utilisateur. Ce déclencheur est accessible via le menu `Cmd+K` ou via un bouton personnalisé qui s'affichera dans la barre de navigation supérieure après avoir sélectionné un ou plusieurs enregistrements.
|
||||
|
||||
<img src="/images/user-guide/workflows/add_to_newsletter_button.png" style={{width:'100%'}} />
|
||||
|
||||
**Availability Configuration**:
|
||||
Choose how the workflow should handle record selection:
|
||||
**Configuration de disponibilité**:
|
||||
Choisissez comment le flux de travail doit gérer la sélection des enregistrements :
|
||||
|
||||
* **Global**: No record is required to trigger this workflow. The workflow is triggered from the command menu `Cmd + K` anywhere (from any object) and does not use record(s) as input.
|
||||
* **Global** : Aucun enregistrement n'est requis pour déclencher ce flux de travail. Le flux de travail est déclenché depuis le menu de commande `Cmd + K` n'importe où (à partir de n'importe quel objet) et n'utilise aucun enregistrement en entrée.
|
||||
|
||||
* **Single**: The selected record(s) will be passed to your workflow. This is configured for a given object. Several records can be selected before triggering the workflow. The workflow will run from beginning to end as many times as there are records selected.
|
||||
* L’enregistrement ou les enregistrements sélectionnés seront transmis à votre flux de travail. Cela est configuré pour un objet donné. Plusieurs enregistrements peuvent être sélectionnés avant de déclencher le flux de travail. Le flux de travail s'exécutera de bout en bout autant de fois qu'il y a d'enregistrements sélectionnés.
|
||||
|
||||
<Note>
|
||||
**Soft limit: 100 runs/minute**. Beyond this, workflows remain in "Not Started" status and are processed gradually—either by a background job or when another workflow enters the queue. This means you can select more than 100 records with a Single trigger; execution will just be slower.
|
||||
**Limite souple : 100 exécutions/minute**. Au-delà de cela, les flux de travail restent au statut "Not Started" et sont traités progressivement — soit par une tâche en arrière-plan, soit lorsqu'un autre flux de travail entre dans la file d'attente. Cela signifie que vous pouvez sélectionner plus de 100 enregistrements avec un déclencheur unique ; l'exécution sera simplement plus lente.
|
||||
</Note>
|
||||
|
||||
* **Bulk**: The selected record(s) will be passed to your workflow. This is configured for a given object. Several records can be selected before triggering the workflow. The workflow will run once, providing the entire list of records as input. This means the workflow needs to contain an [Iterator action](/l/fr/user-guide/workflows/capabilities/workflow-actions#iterator).
|
||||
* **En masse** : Les enregistrements sélectionnés seront passés à votre flux de travail. Cela est configuré pour un objet donné. Plusieurs enregistrements peuvent être sélectionnés avant de déclencher le flux de travail. Le flux de travail s'exécutera une fois, en fournissant la liste entière des enregistrements comme entrée. Cela signifie que le flux de travail doit contenir une [Action d'itération](/l/fr/user-guide/workflows/capabilities/workflow-actions#iterator).
|
||||
|
||||
<Note>
|
||||
This is more advanced, and best for people who want to optimize the number of workflow runs.
|
||||
C'est plus avancé, et idéal pour les personnes qui souhaitent optimiser le nombre d'exécutions de flux de travail.
|
||||
</Note>
|
||||
|
||||
<img src="/images/user-guide/workflows/manual_trigger.png" style={{width:'100%'}} />
|
||||
|
||||
**Additional Configuration**:
|
||||
**Configuration supplémentaire**:
|
||||
|
||||
* Select the target object (for Single and Bulk availability)
|
||||
* Choose a command icon for the workflow trigger
|
||||
* Configure navbar placement (Pinned or Not Pinned)
|
||||
* Sélectionnez l'objet cible (pour disponibilité Unique et en masse)
|
||||
* Choisissez une icône de commande pour le déclencheur de flux de travail
|
||||
* Configurez le placement dans la barre de navigation (Épinglé ou Non épinglé)
|
||||
|
||||
**Access Methods**:
|
||||
**Méthodes d'accès**:
|
||||
|
||||
* `Cmd+K` menu to find and launch manual workflows
|
||||
* Custom button in the top navbar (if configured)
|
||||
* Menu `Cmd+K` pour trouver et lancer des flux de travail manuels
|
||||
* Bouton personnalisé dans la barre de navigation supérieure (si configuré)
|
||||
|
||||
## Time-Based Trigger: On a Schedule
|
||||
## Déclencheur basé sur le temps : sur un planning
|
||||
|
||||
Starts the workflow on a recurring basis you define.
|
||||
Démarre le flux de travail sur une base récurrente que vous définissez.
|
||||
|
||||
**Configuration**:
|
||||
|
||||
* Select time unit (minutes, hours, days)
|
||||
* Enter a value or use custom cron expressions for advanced scheduling
|
||||
* Sélectionnez l'unité de temps (minutes, heures, jours)
|
||||
* Entrez une valeur ou utilisez des expressions cron personnalisées pour une planification avancée
|
||||
|
||||
<Note>
|
||||
**Timezone**: Scheduled workflows run in **UTC**. When setting hours for daily schedules, convert your local time to UTC.
|
||||
**Fuseau horaire** : Les flux de travail planifiés s'exécutent en **UTC**. Lors de la définition des heures pour les plannings quotidiens, convertissez votre heure locale en UTC.
|
||||
</Note>
|
||||
|
||||
## External Trigger: Webhook
|
||||
## Déclencheur externe : Webhook
|
||||
|
||||
Starts the workflow when a GET or POST request is received from an external service.
|
||||
Démarre le flux de travail lorsqu'une requête GET ou POST est reçue d'un service externe.
|
||||
|
||||
<img src="/images/user-guide/workflows/webhook_trigger.png" style={{width:'100%'}} />
|
||||
|
||||
**Configuration**:
|
||||
|
||||
* The workflow provides a unique webhook URL—copy this and add it to your external system as the endpoint to call.
|
||||
* For POST requests, define the expected body structure so Twenty knows what data to expect. Add here the fields you will receive that will be needed below in your workflow.
|
||||
* Configure authentication (coming soon).
|
||||
* Le flux de travail fournit une URL de webhook unique — copiez-la et ajoutez-la à votre système externe comme point de terminaison à appeler.
|
||||
* Pour les requêtes POST, définissez la structure attendue du corps afin que Twenty sache quelles données attendre. Ajoutez ici les champs que vous recevrez et qui seront nécessaires plus bas dans votre flux de travail.
|
||||
* Configurez l'authentification (bientôt disponible).
|
||||
|
||||
## Choosing the Right Trigger
|
||||
## Choisir le bon déclencheur
|
||||
|
||||
| Use Case | Recommended Trigger |
|
||||
| --------------------------- | ---------------------------- |
|
||||
| New leads need processing | Record is Created |
|
||||
| Data changes need sync | Record is Updated |
|
||||
| Import/manual data handling | Record is Updated or Created |
|
||||
| Cleanup after deletion | Record is Deleted |
|
||||
| User-initiated action | Launch Manually |
|
||||
| Recurring reports | On a Schedule |
|
||||
| External integration | Webhook or On a Schedule |
|
||||
| Cas d'utilisation | Déclencheur recommandé |
|
||||
| ------------------------------------------------------------ | ---------------------------------------- |
|
||||
| Les nouveaux prospects doivent être traités | Un enregistrement est créé |
|
||||
| Les modifications de données nécessitent une synchronisation | Un enregistrement est mis à jour |
|
||||
| Import/gestion manuelle des données | Un enregistrement est mis à jour ou créé |
|
||||
| Nettoyage après suppression | Un enregistrement est supprimé |
|
||||
| Action initiée par l'utilisateur | Lancer manuellement |
|
||||
| Rapports récurrents | À une heure programmée |
|
||||
| Intégration externe | Webhook ou sur un planning |
|
||||
|
||||
@@ -1,85 +1,85 @@
|
||||
---
|
||||
title: Workflow Versions
|
||||
description: Manage workflow versions and drafts.
|
||||
title: Versions de Workflow
|
||||
description: Gérer les versions et les brouillons de workflows.
|
||||
image: /images/user-guide/workflows/workflow.png
|
||||
---
|
||||
|
||||
## About Versions
|
||||
## À propos des versions
|
||||
|
||||
Every time you activate a workflow, a new version is created. This allows you to track changes over time and revert to previous configurations if needed.
|
||||
Chaque fois que vous activez un workflow, une nouvelle version est créée. Cela vous permet de suivre les modifications dans le temps et de revenir aux configurations précédentes si nécessaire.
|
||||
|
||||
## Version Statuses
|
||||
## Statuts des versions
|
||||
|
||||
| Status | Description |
|
||||
| --------------- | -------------------------------------- |
|
||||
| **Draft** | Being edited, not yet published |
|
||||
| **Active** | Live version responding to triggers |
|
||||
| **Deactivated** | Previously active but manually stopped |
|
||||
| **Archived** | Past versions kept for history |
|
||||
| Statut | Description |
|
||||
| ------------- | ------------------------------------------------- |
|
||||
| **Brouillon** | En cours d'édition, pas encore publié |
|
||||
| **Actif** | Version active répondant aux déclencheurs |
|
||||
| **Désactivé** | Auparavant actif, mais arrêté manuellement |
|
||||
| **Archivé** | Versions antérieures conservées pour l'historique |
|
||||
|
||||
## Working with Drafts
|
||||
## Travailler avec des brouillons
|
||||
|
||||
When you edit an active workflow, your changes are saved as a **draft**. The active version continues to run while you work on updates.
|
||||
Lorsque vous modifiez un workflow actif, vos modifications sont enregistrées en tant que **brouillon**. La version active continue de s'exécuter pendant que vous travaillez sur des mises à jour.
|
||||
|
||||
Once you're done editing, you can:
|
||||
Une fois vos modifications terminées, vous pouvez :
|
||||
|
||||
* **Activate**: Publish the draft as the new active version (the previous version is archived)
|
||||
* **Discard**: Delete the draft and keep the current active version
|
||||
* **Activer** : Publier le brouillon comme nouvelle version active (la version précédente est archivée)
|
||||
* **Abandonner** : Supprimer le brouillon et conserver la version active actuelle
|
||||
|
||||
## Version History
|
||||
## Historique des versions
|
||||
|
||||
### Viewing Past Versions
|
||||
### Afficher les versions précédentes
|
||||
|
||||
1. Open the workflow
|
||||
2. Click the **Versions** tab
|
||||
3. See all previous versions with timestamps
|
||||
1. Ouvrez le workflow
|
||||
2. Cliquez sur l'onglet **Versions**
|
||||
3. Affichez toutes les versions précédentes avec leurs horodatages
|
||||
|
||||
### Restoring a Version
|
||||
### Restaurer une version
|
||||
|
||||
1. Find the version you want to restore
|
||||
2. Click **Use as draft**
|
||||
3. The version is copied to a new draft
|
||||
4. Make any necessary updates
|
||||
5. Activate when ready
|
||||
1. Trouvez la version que vous souhaitez restaurer
|
||||
2. Cliquez sur **Utiliser comme brouillon**
|
||||
3. La version est copiée dans un nouveau brouillon
|
||||
4. Effectuez les mises à jour nécessaires
|
||||
5. Activez lorsque vous êtes prêt
|
||||
|
||||
## Best Practices
|
||||
## Meilleures pratiques
|
||||
|
||||
### Version Management
|
||||
### Gestion des versions
|
||||
|
||||
* Activate only when ready for production
|
||||
* Keep meaningful changes between versions
|
||||
* Document major changes in workflow names or descriptions
|
||||
* Test in draft mode before activating
|
||||
* N'activez que lorsque vous êtes prêt pour la mise en production
|
||||
* Conservez des modifications significatives d'une version à l'autre.
|
||||
* Documentez les modifications majeures dans les noms ou les descriptions de workflows
|
||||
* Testez en mode brouillon avant d'activer
|
||||
|
||||
### Reverting Changes
|
||||
### Annulation des modifications
|
||||
|
||||
* If a new version causes issues, restore the previous version
|
||||
* Use the version history to track what changed
|
||||
* Always test restored versions before activating
|
||||
* Si une nouvelle version pose des problèmes, restaurez la version précédente
|
||||
* Utilisez l'historique des versions pour suivre ce qui a changé
|
||||
* Testez toujours les versions restaurées avant de les activer
|
||||
|
||||
## Common Workflows
|
||||
## Workflows courants
|
||||
|
||||
### Quick Edit
|
||||
### Modification rapide
|
||||
|
||||
1. Make minor changes to an active workflow
|
||||
2. Test in draft mode
|
||||
3. Activate the new version
|
||||
1. Apportez des modifications mineures à un workflow actif
|
||||
2. Testez en mode brouillon
|
||||
3. Activez la nouvelle version
|
||||
|
||||
### Major Revision
|
||||
### Révision majeure
|
||||
|
||||
1. Use the previous version as a starting point
|
||||
2. Make significant changes in draft
|
||||
3. Thoroughly test all scenarios
|
||||
4. Activate when confident
|
||||
1. Utilisez la version précédente comme point de départ
|
||||
2. Apportez des modifications importantes dans un brouillon
|
||||
3. Testez minutieusement tous les scénarios
|
||||
4. Activez lorsque vous êtes confiant
|
||||
|
||||
### Rollback
|
||||
### Retour en arrière
|
||||
|
||||
1. Identify the issue with the current version
|
||||
2. Find the last working version in history
|
||||
3. Click **Use as draft**
|
||||
4. Activate to restore the old behavior
|
||||
1. Identifiez le problème avec la version actuelle
|
||||
2. Trouvez la dernière version fonctionnelle dans l'historique
|
||||
3. Cliquez sur **Utiliser comme brouillon**
|
||||
4. Activez pour rétablir l'ancien comportement
|
||||
|
||||
## Related
|
||||
## Articles connexes
|
||||
|
||||
* [Getting Started with Workflows](/l/fr/user-guide/workflows/overview)
|
||||
* [Workflow Runs](/l/fr/user-guide/workflows/capabilities/workflow-runs)
|
||||
* [Prise en main des workflows](/l/fr/user-guide/workflows/overview)
|
||||
* [Exécutions de workflows](/l/fr/user-guide/workflows/capabilities/workflow-runs)
|
||||
|
||||
+19
-19
@@ -1,24 +1,24 @@
|
||||
---
|
||||
title: Handle Arrays in Code Actions
|
||||
description: Learn how to properly handle array inputs in workflow Code actions.
|
||||
title: Gérer les tableaux dans les actions Code
|
||||
description: Apprenez à gérer correctement les entrées de type tableau dans les actions Code des workflows.
|
||||
---
|
||||
|
||||
When working with arrays in Code actions, you may encounter two common challenges:
|
||||
Lorsque vous travaillez avec des tableaux dans les actions Code, vous pouvez rencontrer deux difficultés courantes :
|
||||
|
||||
1. **Arrays passed as strings** — data from external systems or previous steps arrives as a string instead of an actual array
|
||||
2. **Can't select individual items** — you can only select the entire array, not specific fields within it
|
||||
1. **Tableaux passés sous forme de chaînes** — les données provenant de systèmes externes ou d'étapes précédentes arrivent sous forme de chaîne plutôt que sous forme de véritable tableau
|
||||
2. **Impossible de sélectionner des éléments individuellement** — vous ne pouvez sélectionner que le tableau entier, pas des champs spécifiques à l'intérieur
|
||||
|
||||
Both can be solved with a Code node.
|
||||
Les deux peuvent être résolus avec un nœud Code.
|
||||
|
||||
## Parsing Arrays from Strings
|
||||
## Analyse des tableaux à partir de chaînes
|
||||
|
||||
Arrays are often passed between workflow steps as strings or JSON rather than native arrays. This happens when:
|
||||
Les tableaux sont souvent transmis entre les étapes d'un workflow sous forme de chaînes ou de JSON plutôt que comme tableaux natifs. Cela se produit lorsque :
|
||||
|
||||
* Receiving data from external APIs via HTTP Request
|
||||
* Processing webhook payloads
|
||||
* Passing data between workflow steps
|
||||
* Réception de données depuis des API externes via HTTP Request
|
||||
* Traitement des charges utiles des webhooks
|
||||
* Transmission de données entre les étapes du workflow
|
||||
|
||||
**Solution**: Add this pattern at the start of your Code action:
|
||||
**Solution** : Ajoutez ce modèle au début de votre action Code :
|
||||
|
||||
```javascript
|
||||
export const main = async (params: {
|
||||
@@ -39,13 +39,13 @@ export const main = async (params: {
|
||||
};
|
||||
```
|
||||
|
||||
The key line `typeof users === "string" ? JSON.parse(users) : users` checks if the input is a string, parses it if needed, or uses it directly if it's already an array.
|
||||
La ligne clé `typeof users === "string" ? JSON.parse(users) : users` vérifie si l'entrée est une chaîne, l'analyse si nécessaire, ou l'utilise directement si c'est déjà un tableau.
|
||||
|
||||
## Extracting Individual Fields from Arrays
|
||||
## Extraction de champs individuels à partir de tableaux
|
||||
|
||||
A webhook might return an array like `answers: [...]`, but in subsequent workflow steps you can only select the **entire array** — not individual items within it.
|
||||
Un webhook peut renvoyer un tableau comme `answers: [...]`, mais dans les étapes de workflow suivantes vous ne pouvez sélectionner que le tableau entier — pas des éléments individuels à l'intérieur.
|
||||
|
||||
**Solution**: Add a Code node to extract specific fields and return them as a structured object:
|
||||
**Solution** : Ajoutez un nœud Code pour extraire des champs spécifiques et les renvoyer sous forme d'objet structuré :
|
||||
|
||||
```javascript
|
||||
export const main = async (params: {
|
||||
@@ -71,12 +71,12 @@ export const main = async (params: {
|
||||
};
|
||||
```
|
||||
|
||||
The Code node returns a structured object instead of an array. In subsequent steps, you can now select individual fields like `answer.firstname` and `answer.name` from the variable picker.
|
||||
Le nœud Code renvoie un objet structuré au lieu d'un tableau. Dans les étapes suivantes, vous pouvez maintenant sélectionner des champs individuels comme `answer.firstname` et `answer.name` à partir du sélecteur de variables.
|
||||
|
||||
<Note>
|
||||
We're actively working on making array handling easier in future updates.
|
||||
Nous travaillons activement à faciliter la gestion des tableaux dans de futures mises à jour.
|
||||
</Note>
|
||||
|
||||
<Tip>
|
||||
Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
|
||||
Cliquez sur l'icône carrée en haut à droite de l'éditeur de code pour l'afficher en plein écran — utile car la largeur par défaut de l'éditeur est limitée.
|
||||
</Tip>
|
||||
|
||||
+50
-50
@@ -1,31 +1,31 @@
|
||||
---
|
||||
title: Bring Product Data into Twenty
|
||||
description: Sync product catalog data from a data warehouse into your CRM on a schedule.
|
||||
title: Importer les données de produits dans Twenty
|
||||
description: Synchronisez les données du catalogue de produits depuis un entrepôt de données vers votre CRM selon une planification.
|
||||
---
|
||||
|
||||
Use this pattern to keep Twenty in sync with product data from your data warehouse (e.g., Snowflake, BigQuery, PostgreSQL).
|
||||
Utilisez ce modèle pour garder Twenty synchronisé avec les données produits de votre entrepôt de données (par ex. Snowflake, BigQuery, PostgreSQL).
|
||||
|
||||
## Workflow Structure
|
||||
## Structure du flux de travail
|
||||
|
||||
1. **Trigger**: On a Schedule
|
||||
2. **Code**: Query your data warehouse
|
||||
3. **Code** (optional): Format data as array
|
||||
4. **Iterator**: Loop through each product
|
||||
5. **Upsert Record**: Create or update in Twenty
|
||||
1. **Déclencheur** : Selon une planification
|
||||
2. **Code** : Interroger votre entrepôt de données
|
||||
3. **Code** (facultatif) : Formater les données en tableau
|
||||
4. **Iterator** : Parcourir chaque produit
|
||||
5. **Upsert Record** : Créer ou mettre à jour dans Twenty
|
||||
|
||||
<img src="/images/user-guide/workflows/create_users_workflow.png" style={{width:'100%'}} />
|
||||
|
||||
## Step 1: Schedule the Trigger
|
||||
## Étape 1 : Planifier le déclencheur
|
||||
|
||||
Set the workflow to run at a frequency matching your data freshness needs:
|
||||
Définissez le flux de travail pour s'exécuter à une fréquence correspondant à vos besoins d'actualisation des données :
|
||||
|
||||
* Every 5 minutes for near real-time sync
|
||||
* Every hour for less critical data
|
||||
* Daily for batch updates
|
||||
* Toutes les 5 minutes pour une synchronisation quasi en temps réel
|
||||
* Toutes les heures pour des données moins critiques
|
||||
* Quotidiennement pour des mises à jour par lots
|
||||
|
||||
## Step 2: Query Your Data Warehouse
|
||||
## Étape 2 : Interroger votre entrepôt de données
|
||||
|
||||
Add a **Code** action to fetch recent data:
|
||||
Ajoutez une action **Code** pour récupérer les données récentes :
|
||||
|
||||
```javascript
|
||||
export const main = async () => {
|
||||
@@ -54,14 +54,14 @@ export const main = async () => {
|
||||
```
|
||||
|
||||
<Tip>
|
||||
Filter by `updated_at >= last X minutes` to retrieve only recently changed records. This keeps the sync efficient.
|
||||
Filtrez par `updated_at >= last X minutes` pour ne récupérer que les enregistrements récemment modifiés. Cela rend la synchronisation plus efficace.
|
||||
</Tip>
|
||||
|
||||
## Step 3: Format Data (Optional)
|
||||
## Étape 3 : Formater les données (facultatif)
|
||||
|
||||
If your warehouse returns data in a format that needs transformation, add another **Code** action. Common transformations include type conversions, field renaming, and data cleanup.
|
||||
Si votre entrepôt renvoie des données dans un format nécessitant une transformation, ajoutez une autre action **Code**. Les transformations courantes incluent les conversions de type, le renommage de champs et le nettoyage des données.
|
||||
|
||||
### Example: User Data with Boolean and Status Fields
|
||||
### Exemple : données utilisateur avec champs booléens et de statut
|
||||
|
||||
```javascript
|
||||
export const main = async (params: {
|
||||
@@ -86,7 +86,7 @@ export const main = async (params: {
|
||||
};
|
||||
```
|
||||
|
||||
### Example: Product Data with Type Conversions
|
||||
### Exemple : données produit avec conversions de type
|
||||
|
||||
```javascript
|
||||
export const main = async (params: { products: any }) => {
|
||||
@@ -107,7 +107,7 @@ export const main = async (params: { products: any }) => {
|
||||
};
|
||||
```
|
||||
|
||||
### Example: Date and Currency Formatting
|
||||
### Exemple : formatage des dates et des devises
|
||||
|
||||
```javascript
|
||||
export const main = async (params: { deals: any }) => {
|
||||
@@ -131,52 +131,52 @@ export const main = async (params: { deals: any }) => {
|
||||
};
|
||||
```
|
||||
|
||||
### Common Transformations
|
||||
### Transformations courantes
|
||||
|
||||
| Source Format | Target Format | Code |
|
||||
| Format source | Format cible | Code |
|
||||
| -------------------- | ---------------- | ---------------------------------------- |
|
||||
| `"true"` / `"false"` | `true` / `false` | `v === true \|\| v === "true"` |
|
||||
| `"123.45"` | `123.45` | `parseFloat(value)` |
|
||||
| `"active"` | `"ACTIVE"` | `value.toUpperCase()` |
|
||||
| `1704067200` (Unix) | ISO date | `new Date(v * 1000).toISOString()` |
|
||||
| `1704067200` (Unix) | Date ISO | `new Date(v * 1000).toISOString()` |
|
||||
| `"$1,234.56"` | `1234.56` | `parseFloat(v.replace(/[^0-9.-]/g, ""))` |
|
||||
| `null` / `undefined` | `""` | `value \|\| ""` |
|
||||
|
||||
## Step 4: Iterate Through Products
|
||||
## Étape 4 : Itérer sur les produits
|
||||
|
||||
Add an **Iterator** action:
|
||||
Ajoutez une action **Itérateur** :
|
||||
|
||||
* Input: `{{code.products}}`
|
||||
* Entrée : `{{code.products}}`
|
||||
|
||||
This loops through each product in the array.
|
||||
Cela parcourt chaque produit du tableau.
|
||||
|
||||
## Step 5: Upsert Each Record
|
||||
## Étape 5 : Effectuer un upsert pour chaque enregistrement
|
||||
|
||||
Inside the iterator, add an **Upsert Record** action:
|
||||
À l'intérieur de l'itérateur, ajoutez une action **Upsert Record** :
|
||||
|
||||
| Setting | Value |
|
||||
| ------------ | -------------------------------------- |
|
||||
| **Object** | Your custom Product object |
|
||||
| **Match by** | External ID or SKU (unique identifier) |
|
||||
| **Name** | `{{iterator.item.name}}` |
|
||||
| **SKU** | `{{iterator.item.sku}}` |
|
||||
| **Price** | `{{iterator.item.price}}` |
|
||||
| Paramètre | Valeur |
|
||||
| ---------------------- | -------------------------------------- |
|
||||
| **Objet** | Votre objet Produit personnalisé |
|
||||
| **Correspondance par** | ID externe ou SKU (identifiant unique) |
|
||||
| **Nom** | `{{iterator.item.name}}` |
|
||||
| **SKU** | `{{iterator.item.sku}}` |
|
||||
| **Prix** | `{{iterator.item.price}}` |
|
||||
|
||||
<Tip>
|
||||
Use **Upsert** (update or create) instead of building separate branches for create vs. update. It's faster to build and easier to debug.
|
||||
Utilisez **Upsert** (mettre à jour ou créer) au lieu de construire des branches distinctes pour la création et la mise à jour. C'est plus rapide à construire et plus facile à déboguer.
|
||||
</Tip>
|
||||
|
||||
## Example Use Cases
|
||||
## Exemples de cas d'utilisation
|
||||
|
||||
| Source | Data |
|
||||
| ----------------------- | ----------------------------------- |
|
||||
| **ERP system** | Product catalog, pricing, inventory |
|
||||
| **E-commerce platform** | Orders, customers, product updates |
|
||||
| **Data warehouse** | Aggregated metrics, enriched data |
|
||||
| **Inventory system** | Stock levels, reorder alerts |
|
||||
| Source | Données |
|
||||
| --------------------------------- | ------------------------------------------------ |
|
||||
| **Système ERP** | Catalogue de produits, tarification, stocks |
|
||||
| **Plateforme e-commerce** | Commandes, clients, mises à jour des produits |
|
||||
| **Entrepôt de données** | Indicateurs agrégés, données enrichies |
|
||||
| **Système de gestion des stocks** | Niveaux de stock, alertes de réapprovisionnement |
|
||||
|
||||
## Related
|
||||
## Articles connexes
|
||||
|
||||
* [Workflow Triggers](/l/fr/user-guide/workflows/capabilities/workflow-triggers)
|
||||
* [Workflow Actions](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Handle Arrays in Code Actions](/l/fr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
|
||||
* [Déclencheurs de workflows](/l/fr/user-guide/workflows/capabilities/workflow-triggers)
|
||||
* [Actions de workflows](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Gérer les tableaux dans les actions Code](/l/fr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
|
||||
|
||||
+39
-39
@@ -1,27 +1,27 @@
|
||||
---
|
||||
title: Bring Typeform Submissions into Twenty
|
||||
description: Handle Typeform's webhook payload to create leads from form submissions.
|
||||
title: Importer les réponses de Typeform dans Twenty
|
||||
description: Gérez la charge utile du webhook de Typeform pour créer des prospects à partir des réponses au formulaire.
|
||||
---
|
||||
|
||||
For standard webhook setup, see [Set Up a Webhook Trigger](/l/fr/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger). This article covers the specific handling required for Typeform's custom payload structure.
|
||||
Pour la configuration standard d'un webhook, voir [Configurer un déclencheur de webhook](/l/fr/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger). Cet article couvre le traitement spécifique nécessaire pour la structure de charge utile personnalisée de Typeform.
|
||||
|
||||
### Step 1: Create a Webhook Workflow
|
||||
### Étape 1 : Créer un flux de travail de webhook
|
||||
|
||||
1. Go to **Settings → Workflows**
|
||||
2. Click **+ New Workflow**
|
||||
3. Select **Webhook** as the trigger
|
||||
4. Copy the webhook URL
|
||||
1. Allez dans **Paramètres → Flux de travail**
|
||||
2. Cliquez sur **+ Nouveau flux de travail**
|
||||
3. Sélectionnez **Webhook** comme déclencheur
|
||||
4. Copiez l'URL du webhook
|
||||
|
||||
### Step 2: Configure Typeform
|
||||
### Étape 2 : Configurer Typeform
|
||||
|
||||
1. In Typeform, open your form
|
||||
2. Go to **Connect → Webhooks**
|
||||
3. Paste your Twenty webhook URL
|
||||
4. Save
|
||||
1. Dans Typeform, ouvrez votre formulaire
|
||||
2. Allez dans **Connect → Webhooks**
|
||||
3. Collez l'URL du webhook Twenty
|
||||
4. Enregistrer
|
||||
|
||||
### Step 3: Understand the Typeform Payload
|
||||
### Étape 3 : Comprendre la charge utile de Typeform
|
||||
|
||||
Typeform sends a nested JSON structure. Here's a simplified example:
|
||||
Typeform envoie une structure JSON imbriquée. Voici un exemple simplifié :
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -60,15 +60,15 @@ Typeform sends a nested JSON structure. Here's a simplified example:
|
||||
}
|
||||
```
|
||||
|
||||
Key things to note:
|
||||
Points clés à noter :
|
||||
|
||||
* Form data is nested under `form_response`
|
||||
* **Answers are returned as an array**, not as named fields
|
||||
* Each answer includes the field type and title for reference
|
||||
* Les données du formulaire sont imbriquées sous `form_response`
|
||||
* **Les réponses sont renvoyées sous forme de tableau**, et non comme des champs nommés
|
||||
* Chaque réponse inclut le type et le titre du champ à titre de référence
|
||||
|
||||
### Step 4: Extract Fields from the Answers Array
|
||||
### Étape 4 : Extraire les champs du tableau des réponses
|
||||
|
||||
Since `answers` is an array, you can only select the entire array in subsequent steps — not individual fields. Add a **Code** action to extract the fields you need:
|
||||
Comme `answers` est un tableau, vous ne pouvez sélectionner que le tableau entier dans les étapes suivantes — pas des champs individuels. Ajoutez une action **Code** pour extraire les champs dont vous avez besoin :
|
||||
|
||||
```javascript
|
||||
export const main = async (params: {
|
||||
@@ -100,31 +100,31 @@ export const main = async (params: {
|
||||
};
|
||||
```
|
||||
|
||||
Now in subsequent steps, you can select `contact.firstName`, `contact.email`, etc. from the variable picker.
|
||||
Dans les étapes suivantes, vous pouvez sélectionner `contact.firstName`, `contact.email`, etc. à partir du sélecteur de variables.
|
||||
|
||||
<Tip>
|
||||
For more details on handling arrays in Code actions, see [Handle Arrays in Code Actions](/l/fr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
|
||||
Pour plus de détails sur la gestion des tableaux dans les actions Code, voir [Gérer les tableaux dans les actions Code](/l/fr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
|
||||
</Tip>
|
||||
|
||||
### Step 5: Create the Record
|
||||
### Étape 5 : Créer l'enregistrement
|
||||
|
||||
Add a **Create Record** action:
|
||||
Ajoutez une action **Créer un enregistrement** :
|
||||
|
||||
| Field | Value |
|
||||
| -------------- | ---------------------------------------------------- |
|
||||
| **Object** | People |
|
||||
| **First Name** | `{{code.contact.firstName}}` |
|
||||
| **Last Name** | `{{code.contact.lastName}}` |
|
||||
| **Email** | `{{code.contact.email}}` |
|
||||
| **Company** | Search or create based on `{{code.contact.company}}` |
|
||||
| Champ | Valeur |
|
||||
| ------------------ | ------------------------------------------------------------- |
|
||||
| **Objet** | Personnes |
|
||||
| **Prénom** | `{{code.contact.firstName}}` |
|
||||
| **Nom de famille** | `{{code.contact.lastName}}` |
|
||||
| **E-mail** | `{{code.contact.email}}` |
|
||||
| **Entreprise** | Rechercher ou créer en fonction de `{{code.contact.company}}` |
|
||||
|
||||
### Step 6: Test and Activate
|
||||
### Étape 6 : Tester et activer
|
||||
|
||||
1. Submit a test response in Typeform
|
||||
2. Check the workflow run to verify data was captured
|
||||
3. Activate the workflow
|
||||
1. Soumettez une réponse de test dans Typeform
|
||||
2. Vérifiez l'exécution du flux de travail pour confirmer que les données ont été capturées
|
||||
3. Activez le flux de travail
|
||||
|
||||
## Related
|
||||
## Articles connexes
|
||||
|
||||
* [Set Up a Webhook Trigger](/l/fr/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger)
|
||||
* [Handle Arrays in Code Actions](/l/fr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
|
||||
* [Configurer un déclencheur de webhook](/l/fr/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger)
|
||||
* [Gérer les tableaux dans les actions Code](/l/fr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
|
||||
|
||||
+228
@@ -0,0 +1,228 @@
|
||||
---
|
||||
title: Générer un PDF depuis Twenty
|
||||
description: Créez un flux de travail pour générer et joindre un PDF (par exemple un devis) à un enregistrement.
|
||||
---
|
||||
|
||||
Générez ou récupérez automatiquement un PDF et joignez-le à un enregistrement dans Twenty. Cette fonctionnalité est couramment utilisée pour créer des devis, des factures ou des rapports liés aux Entreprises, aux Opportunités ou à d'autres objets.
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
Ce flux de travail utilise un **Déclencheur manuel** afin que les utilisateurs puissent générer un PDF à la demande pour tout enregistrement sélectionné. Une **Fonction sans serveur** gère :
|
||||
|
||||
1. Téléchargement du PDF depuis une URL (provenant d'un service de génération de PDF)
|
||||
2. Téléversement du fichier dans Twenty
|
||||
3. Création d'une pièce jointe liée à l'enregistrement
|
||||
|
||||
## Prérequis
|
||||
|
||||
Avant de configurer le flux de travail :
|
||||
|
||||
1. **Créer une clé API** : Allez dans **Settings → APIs** et créez une nouvelle clé API. Vous aurez besoin de ce jeton pour la fonction sans serveur.
|
||||
2. **Configurer un service de génération de PDF** (facultatif) : Si vous souhaitez générer des PDF dynamiquement (par exemple, des devis), utilisez un service comme Carbone, PDFMonkey ou DocuSeal pour créer le PDF et obtenir une URL de téléchargement.
|
||||
|
||||
## Configuration pas à pas
|
||||
|
||||
### Étape 1 : Configurer le déclencheur
|
||||
|
||||
1. Allez dans **Flux de travail** et créez un nouveau flux de travail
|
||||
2. Sélectionnez **Déclencheur manuel**
|
||||
3. Choisissez l'objet auquel vous souhaitez joindre des PDF (par exemple, **Entreprise** ou **Opportunité**)
|
||||
|
||||
<Tip>
|
||||
Avec un déclencheur manuel, les utilisateurs peuvent exécuter ce flux de travail à l'aide d'un bouton qui apparaît en haut à droite une fois un enregistrement sélectionné, afin de générer et de joindre un PDF.
|
||||
</Tip>
|
||||
|
||||
### Étape 2 : Ajouter une fonction sans serveur
|
||||
|
||||
1. Ajoutez une action **Fonction sans serveur**
|
||||
2. Créez une nouvelle fonction avec le code ci-dessous
|
||||
3. Configurez les paramètres d'entrée
|
||||
|
||||
#### Paramètres d'entrée
|
||||
|
||||
| Paramètre | Valeur |
|
||||
| ----------- | ----------------------- |
|
||||
| `companyId` | `{{trigger.object.id}}` |
|
||||
|
||||
<Note>
|
||||
Si vous joignez à un objet différent (Personne, Opportunité, etc.), renommez le paramètre en conséquence (par exemple, `personId`, `opportunityId`) et mettez à jour la fonction sans serveur.
|
||||
</Note>
|
||||
|
||||
#### Code de la fonction sans serveur
|
||||
|
||||
```typescript
|
||||
export const main = async (
|
||||
params: { companyId: string },
|
||||
) => {
|
||||
const { companyId } = params;
|
||||
|
||||
// Replace with your Twenty GraphQL endpoint
|
||||
// Cloud: https://api.twenty.com/graphql
|
||||
// Self-hosted: https://your-domain.com/graphql
|
||||
const graphqlEndpoint = 'https://api.twenty.com/graphql';
|
||||
|
||||
// Replace with your API key from Settings → APIs
|
||||
const authToken = 'YOUR_API_KEY';
|
||||
|
||||
// Replace with your PDF URL
|
||||
// This could be from a PDF generation service or a static URL
|
||||
const pdfUrl = 'https://your-pdf-service.com/generated-quote.pdf';
|
||||
const filename = 'quote.pdf';
|
||||
|
||||
// Step 1: Download the PDF file
|
||||
const pdfResponse = await fetch(pdfUrl);
|
||||
|
||||
if (!pdfResponse.ok) {
|
||||
throw new Error(`Failed to download PDF: ${pdfResponse.status}`);
|
||||
}
|
||||
|
||||
const pdfBlob = await pdfResponse.blob();
|
||||
const pdfFile = new File([pdfBlob], filename, { type: 'application/pdf' });
|
||||
|
||||
// Step 2: Upload the file via GraphQL multipart upload
|
||||
const uploadMutation = `
|
||||
mutation UploadFile($file: Upload!, $fileFolder: FileFolder) {
|
||||
uploadFile(file: $file, fileFolder: $fileFolder) {
|
||||
path
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const uploadForm = new FormData();
|
||||
uploadForm.append('operations', JSON.stringify({
|
||||
query: uploadMutation,
|
||||
variables: { file: null, fileFolder: 'Attachment' },
|
||||
}));
|
||||
uploadForm.append('map', JSON.stringify({ '0': ['variables.file'] }));
|
||||
uploadForm.append('0', pdfFile);
|
||||
|
||||
const uploadResponse = await fetch(graphqlEndpoint, {
|
||||
method: 'POST',
|
||||
headers: { Authorization: `Bearer ${authToken}` },
|
||||
body: uploadForm,
|
||||
});
|
||||
|
||||
const uploadResult = await uploadResponse.json();
|
||||
|
||||
if (uploadResult.errors?.length) {
|
||||
throw new Error(`Upload failed: ${uploadResult.errors[0].message}`);
|
||||
}
|
||||
|
||||
const filePath = uploadResult.data?.uploadFile?.path;
|
||||
|
||||
if (!filePath) {
|
||||
throw new Error('No file path returned from upload');
|
||||
}
|
||||
|
||||
// Step 3: Create the attachment linked to the company
|
||||
const attachmentMutation = `
|
||||
mutation CreateAttachment($data: AttachmentCreateInput!) {
|
||||
createAttachment(data: $data) {
|
||||
id
|
||||
name
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const attachmentResponse = await fetch(graphqlEndpoint, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
Authorization: `Bearer ${authToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
query: attachmentMutation,
|
||||
variables: {
|
||||
data: {
|
||||
name: filename,
|
||||
fullPath: filePath,
|
||||
companyId,
|
||||
},
|
||||
},
|
||||
}),
|
||||
});
|
||||
|
||||
const attachmentResult = await attachmentResponse.json();
|
||||
|
||||
if (attachmentResult.errors?.length) {
|
||||
throw new Error(`Attachment creation failed: ${attachmentResult.errors[0].message}`);
|
||||
}
|
||||
|
||||
return attachmentResult.data?.createAttachment;
|
||||
};
|
||||
```
|
||||
|
||||
### Étape 3 : Personnaliser selon votre cas d'utilisation
|
||||
|
||||
#### Pour joindre à un objet différent
|
||||
|
||||
Remplacez `companyId` par le champ approprié :
|
||||
|
||||
| Objet | Nom du champ |
|
||||
| ------------------ | -------------------- |
|
||||
| Entreprise | `companyId` |
|
||||
| Personne | `personId` |
|
||||
| Opportunité | `opportunityId` |
|
||||
| Objet personnalisé | `yourCustomObjectId` |
|
||||
|
||||
Mettez à jour à la fois le paramètre de la fonction et l'objet `variables.data` dans la mutation de pièce jointe.
|
||||
|
||||
#### Pour utiliser une URL de PDF dynamique
|
||||
|
||||
Si vous utilisez un service de génération de PDF, vous pouvez :
|
||||
|
||||
1. Commencez par créer une action HTTP Request pour générer le PDF
|
||||
2. Transmettez l'URL du PDF retournée à la fonction sans serveur en tant que paramètre
|
||||
|
||||
```typescript
|
||||
export const main = async (
|
||||
params: { companyId: string; pdfUrl: string; filename: string },
|
||||
) => {
|
||||
const { companyId, pdfUrl, filename } = params;
|
||||
// ... rest of the function
|
||||
};
|
||||
```
|
||||
|
||||
### Étape 4 : Tester et activer
|
||||
|
||||
1. Enregistrez le flux de travail
|
||||
2. Accédez à un enregistrement d'Entreprise
|
||||
3. Cliquez sur le menu **⋮** et sélectionnez votre flux de travail
|
||||
4. Vérifiez la section **Pièces jointes** de l'enregistrement pour confirmer que le PDF a été joint
|
||||
5. Activez le flux de travail
|
||||
|
||||
## Combiner avec des services de génération de PDF
|
||||
|
||||
Pour créer des devis ou des factures dynamiques :
|
||||
|
||||
### Exemple : Générer un devis → Joindre le PDF
|
||||
|
||||
| Étape | Action | Objectif |
|
||||
| ----- | ------------------------------- | ----------------------------------------------------------------------- |
|
||||
| 1 | Déclencheur manuel (Entreprise) | L'utilisateur lance l'action depuis un enregistrement |
|
||||
| 2 | Rechercher un enregistrement | Obtenir les détails de l'Opportunité ou des lignes d'articles |
|
||||
| 3 | Requête HTTP | Appeler l'API de génération de PDF avec les données de l'enregistrement |
|
||||
| 4 | Fonction sans serveur | Télécharger et joindre le PDF généré |
|
||||
|
||||
### Services populaires de génération de PDF
|
||||
|
||||
* **Carbone** - Génération de documents basée sur des modèles
|
||||
* **PDFMonkey** - Création de PDF dynamiques à partir de modèles
|
||||
* **DocuSeal** - Plateforme d'automatisation de documents
|
||||
* **Documint** - Génération de documents axée sur l'API
|
||||
|
||||
Chaque service fournit une API qui renvoie une URL de PDF, que vous pouvez ensuite transmettre à la fonction sans serveur.
|
||||
|
||||
## Résolution des problèmes
|
||||
|
||||
| Problème | Solution |
|
||||
| ----------------------------------------- | ----------------------------------------------------------------------------- |
|
||||
| "Échec du téléchargement du PDF" | Vérifiez que l'URL du PDF est accessible et renvoie un PDF valide |
|
||||
| "Échec du téléversement" | Vérifiez que votre clé API est valide et dispose des autorisations d'écriture |
|
||||
| "Échec de la création de la pièce jointe" | Assurez-vous que le nom du champ d'ID d'objet correspond à votre objet cible |
|
||||
|
||||
## Articles connexes
|
||||
|
||||
* [Déclencheurs de workflows](/l/fr/user-guide/workflows/capabilities/workflow-triggers)
|
||||
* [Fonctions sans serveur](/l/fr/user-guide/workflows/capabilities/workflow-actions#serverless-function)
|
||||
* [Générer un devis ou une facture depuis Twenty](/l/fr/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty)
|
||||
+57
-56
@@ -1,52 +1,52 @@
|
||||
---
|
||||
title: Generate a Quote or Invoice from Twenty
|
||||
description: Automatically create invoices in external tools when deals close.
|
||||
title: Générer un devis ou une facture depuis Twenty
|
||||
description: Créer automatiquement des factures dans des outils externes lorsque des affaires se clôturent.
|
||||
---
|
||||
|
||||
Automatically send deal data to your invoicing system (Stripe, QuickBooks, Xero, etc.) when an opportunity is won.
|
||||
Envoyez automatiquement les données de l'affaire vers votre système de facturation (Stripe, QuickBooks, Xero, etc.) lorsqu'une opportunité est gagnée.
|
||||
|
||||
## Workflow Structure
|
||||
## Structure du flux de travail
|
||||
|
||||
1. **Trigger**: Record is Updated (Opportunity)
|
||||
2. **Filter**: Stage = Closed Won
|
||||
3. **Search Record**: Get Company details
|
||||
4. **Code** (optional): Format payload
|
||||
5. **HTTP Request**: Send to invoicing system
|
||||
1. **Déclencheur** : L'enregistrement est mis à jour (Opportunité)
|
||||
2. **Filtre** : Étape = Closed Won
|
||||
3. **Rechercher un enregistrement** : Obtenir les détails de l'Entreprise
|
||||
4. **Code** (facultatif) : Mettre en forme la charge utile
|
||||
5. **Requête HTTP** : Envoyer au système de facturation
|
||||
|
||||
## Step 1: Set Up the Trigger
|
||||
## Étape 1 : Configurer le déclencheur
|
||||
|
||||
1. Create a new workflow
|
||||
2. Select **Record is Updated** trigger
|
||||
3. Choose **Opportunity** as the object
|
||||
1. Créer un nouveau workflow
|
||||
2. Sélectionnez le déclencheur **L'enregistrement est mis à jour**
|
||||
3. Choisissez **Opportunité** comme objet
|
||||
|
||||
## Step 2: Filter for Closed Won
|
||||
## Étape 2 : Filtrer pour Closed Won
|
||||
|
||||
Add a **Filter** action to only continue when the deal is won:
|
||||
Ajoutez une action **Filtre** pour ne continuer que lorsque l'affaire est gagnée :
|
||||
|
||||
| Setting | Value |
|
||||
| ------------- | --------------------------------- |
|
||||
| **Field** | Stage |
|
||||
| **Condition** | Equals |
|
||||
| **Value** | `CLOSED_WON` (or your stage name) |
|
||||
| Paramètre | Valeur |
|
||||
| ------------- | --------------------------------------- |
|
||||
| **Champ** | Étape |
|
||||
| **Condition** | Égal à |
|
||||
| **Valeur** | `CLOSED_WON` (ou le nom de votre étape) |
|
||||
|
||||
<Tip>
|
||||
The trigger fires on any Opportunity update. The Filter ensures the workflow only continues when the stage changes to Closed Won.
|
||||
Le déclencheur se déclenche lors de toute mise à jour de l'Opportunité. Le Filtre garantit que le flux de travail ne continue que lorsque l'étape passe à Closed Won.
|
||||
</Tip>
|
||||
|
||||
## Step 3: Get Company Details
|
||||
## Étape 3 : Obtenir les détails de l'Entreprise
|
||||
|
||||
The Opportunity record may not include all Company fields you need for the invoice. Add a **Search Record** action:
|
||||
L'enregistrement de l'Opportunité peut ne pas inclure tous les champs de l'Entreprise dont vous avez besoin pour la facture. Ajoutez une action **Rechercher un enregistrement** :
|
||||
|
||||
| Setting | Value |
|
||||
| ------------ | ---------------------------------------- |
|
||||
| **Object** | Company |
|
||||
| **Match by** | ID equals `{{trigger.object.companyId}}` |
|
||||
| Paramètre | Valeur |
|
||||
| ---------------------- | ---------------------------------------- |
|
||||
| **Objet** | Entreprise |
|
||||
| **Correspondance par** | ID égal à `{{trigger.object.companyId}}` |
|
||||
|
||||
This retrieves the full Company record with billing address, tax ID, etc.
|
||||
Cela récupère l'enregistrement complet de l'Entreprise avec l'adresse de facturation, l'ID fiscal, etc.
|
||||
|
||||
## Step 4: Format the Payload (Optional)
|
||||
## Étape 4 : Formater la charge utile (facultatif)
|
||||
|
||||
If your invoicing system expects a specific format, add a **Code** action:
|
||||
Si votre système de facturation attend un format spécifique, ajoutez une action **Code** :
|
||||
|
||||
```javascript
|
||||
export const main = async (params: {
|
||||
@@ -84,18 +84,18 @@ export const main = async (params: {
|
||||
};
|
||||
```
|
||||
|
||||
## Step 5: Send to Invoicing System
|
||||
## Étape 5 : Envoyer au système de facturation
|
||||
|
||||
Add an **HTTP Request** action:
|
||||
Ajoutez une action **Requête HTTP** :
|
||||
|
||||
| Setting | Value |
|
||||
| ----------- | ----------------------------------------- |
|
||||
| **Method** | POST |
|
||||
| **URL** | Your invoicing API endpoint |
|
||||
| **Headers** | `Authorization: Bearer YOUR_API_KEY` |
|
||||
| **Body** | `{{code.invoice}}` or map fields directly |
|
||||
| Paramètre | Valeur |
|
||||
| ------------ | ---------------------------------------------------------------- |
|
||||
| **Méthode** | POST |
|
||||
| **URL** | Votre point de terminaison API de facturation |
|
||||
| **En-têtes** | `Authorization: Bearer YOUR_API_KEY` |
|
||||
| **Corps** | `{{code.invoice}}` ou faites correspondre les champs directement |
|
||||
|
||||
### Example: Stripe Invoice
|
||||
### Exemple : Facture Stripe
|
||||
|
||||
```
|
||||
POST https://api.stripe.com/v1/invoices
|
||||
@@ -109,7 +109,7 @@ Body:
|
||||
days_until_due: 30
|
||||
```
|
||||
|
||||
### Example: QuickBooks Invoice
|
||||
### Exemple : Facture QuickBooks
|
||||
|
||||
```
|
||||
POST https://quickbooks.api.intuit.com/v3/company/{realmId}/invoice
|
||||
@@ -120,24 +120,25 @@ Headers:
|
||||
Body: {{code.invoice}}
|
||||
```
|
||||
|
||||
## Complete Workflow Summary
|
||||
## Récapitulatif complet du flux de travail
|
||||
|
||||
| Step | Action | Purpose |
|
||||
| ---- | ----------------------- | ------------------------------------ |
|
||||
| 1 | Trigger: Record Updated | Fires when any Opportunity changes |
|
||||
| 2 | Filter | Only proceed if Stage = Closed Won |
|
||||
| 3 | Search Record | Get full Company details for billing |
|
||||
| 4 | Code | Format data for invoicing API |
|
||||
| 5 | HTTP Request | Create invoice in external system |
|
||||
| Étape | Action | Objectif |
|
||||
| ----- | --------------------------------------- | ------------------------------------------------------------ |
|
||||
| 1 | Déclencheur : Enregistrement mis à jour | Se déclenche à chaque modification d'une Opportunité |
|
||||
| 2 | Filtre | Ne poursuivre que si Étape = Closed Won |
|
||||
| 3 | Rechercher un enregistrement | Obtenir tous les détails de l'Entreprise pour la facturation |
|
||||
| 4 | Code | Mettre en forme les données pour l'API de facturation |
|
||||
| 5 | Requête HTTP | Créer la facture dans le système externe |
|
||||
|
||||
## Tips
|
||||
## Conseils
|
||||
|
||||
* **Store external IDs**: Save the invoice ID returned by the API back to the Opportunity using an **Update Record** action
|
||||
* **Error handling**: Add a branch to send a notification if the HTTP request fails
|
||||
* **Test first**: Use your invoicing system's sandbox/test mode before going live
|
||||
* **Stockez les ID externes** : Enregistrez l'ID de la facture renvoyé par l'API dans l'Opportunité à l'aide d'une action **Mettre à jour l'enregistrement**
|
||||
* **Gestion des erreurs** : Ajoutez une branche pour envoyer une notification si la requête HTTP échoue
|
||||
* **Testez d'abord** : Utilisez le mode bac à sable/test de votre système de facturation avant la mise en production
|
||||
|
||||
## Related
|
||||
## Articles connexes
|
||||
|
||||
* [Workflow Triggers](/l/fr/user-guide/workflows/capabilities/workflow-triggers)
|
||||
* [Workflow Actions](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Closed Won Automations](/l/fr/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
|
||||
* [Générer un PDF à partir de Twenty](/l/fr/user-guide/workflows/how-tos/connect-to-other-tools/generate-pdf-from-twenty) — joindre les PDF générés aux enregistrements
|
||||
* [Déclencheurs de flux de travail](/l/fr/user-guide/workflows/capabilities/workflow-triggers)
|
||||
* [Actions de flux de travail](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Automatisations Closed Won](/l/fr/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
|
||||
|
||||
+64
-64
@@ -1,44 +1,44 @@
|
||||
---
|
||||
title: Set Up a Webhook Trigger
|
||||
description: Receive data from external services to trigger workflows.
|
||||
title: Configurer un déclencheur de webhook
|
||||
description: Recevez des données de services externes pour déclencher des flux de travail.
|
||||
image: /images/user-guide/workflows/workflow.png
|
||||
---
|
||||
|
||||
Webhook triggers allow external services to start your workflows by sending data to a unique URL. Use them to connect forms, third-party apps, and custom integrations.
|
||||
Les déclencheurs de webhook permettent à des services externes de démarrer vos flux de travail en envoyant des données vers une URL unique. Utilisez-les pour connecter des formulaires, des applications tierces et des intégrations personnalisées.
|
||||
|
||||
## When to Use Webhooks
|
||||
## Quand utiliser les webhooks
|
||||
|
||||
| Use Case | Example |
|
||||
| ----------------------- | --------------------------------------- |
|
||||
| **Web forms** | Contact form submissions create leads |
|
||||
| **Third-party apps** | Stripe payment → create customer record |
|
||||
| **Custom integrations** | Your app → Twenty automation |
|
||||
| **No-code tools** | Zapier, Make, n8n connections |
|
||||
| Cas d'utilisation | Exemple |
|
||||
| ------------------------------- | -------------------------------------------------------------- |
|
||||
| **Formulaires web** | Les soumissions de formulaires de contact créent des prospects |
|
||||
| **Applications tierces** | Paiement Stripe → création d'un enregistrement client |
|
||||
| **Intégrations personnalisées** | Votre application → automatisation dans Twenty |
|
||||
| **Outils sans code** | Connexions Zapier, Make, n8n |
|
||||
|
||||
## Step-by-Step Setup
|
||||
## Configuration pas à pas
|
||||
|
||||
### Step 1: Create the Workflow
|
||||
### Étape 1 : Créer le flux de travail
|
||||
|
||||
1. Go to **Settings → Workflows**
|
||||
2. Click **+ New Workflow**
|
||||
3. Name it (e.g., "Website Form Submission")
|
||||
1. Allez dans **Paramètres → Flux de travail**
|
||||
2. Cliquez sur **+ Nouveau flux de travail**
|
||||
3. Nommez-le (par exemple, "Soumission de formulaire de site web")
|
||||
|
||||
### Step 2: Configure the Webhook Trigger
|
||||
### Étape 2 : Configurer le déclencheur de webhook
|
||||
|
||||
1. Click on the trigger block
|
||||
2. Select **Webhook**
|
||||
3. You'll receive a unique webhook URL like:
|
||||
1. Cliquez sur le bloc de déclenchement
|
||||
2. Sélectionnez **Webhook**
|
||||
3. Vous recevrez une URL de webhook unique, par exemple :
|
||||
```
|
||||
https://api.twenty.com/webhooks/workflow/abc123...
|
||||
```
|
||||
4. Copy this URL—you'll need it for your external service
|
||||
4. Copiez cette URL — vous en aurez besoin pour votre service externe
|
||||
|
||||
### Step 3: Define Expected Data Structure
|
||||
### Étape 3 : Définir la structure de données attendue
|
||||
|
||||
For **POST** requests, define the expected body structure:
|
||||
Pour les requêtes **POST**, définissez la structure du corps attendue :
|
||||
|
||||
1. Click **Define expected body**
|
||||
2. Enter a sample JSON that matches what your service will send:
|
||||
1. Cliquez sur **Définir le corps attendu**
|
||||
2. Saisissez un JSON d'exemple correspondant à ce que votre service enverra :
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -50,30 +50,30 @@ For **POST** requests, define the expected body structure:
|
||||
}
|
||||
```
|
||||
|
||||
3. Click **Save**—this creates variables you can use in subsequent steps
|
||||
3. Cliquez sur **Enregistrer** — cela crée des variables que vous pouvez utiliser dans les étapes suivantes
|
||||
|
||||
### Step 4: Add Actions
|
||||
### Étape 4 : Ajouter des actions
|
||||
|
||||
Now add actions that use the webhook data:
|
||||
Ajoutez maintenant des actions qui utilisent les données du webhook :
|
||||
|
||||
**Example: Create a Person record**
|
||||
**Exemple : Créer un enregistrement de personne**
|
||||
|
||||
1. Add **Create Record** action
|
||||
2. Select **People** object
|
||||
3. Map fields:
|
||||
1. Ajoutez l'action **Créer un enregistrement**
|
||||
2. Sélectionnez l'objet **People**
|
||||
3. Associez les champs :
|
||||
|
||||
| Field | Value |
|
||||
| ---------- | ---------------------------------------------------- |
|
||||
| First Name | `{{trigger.body.firstName}}` |
|
||||
| Last Name | `{{trigger.body.lastName}}` |
|
||||
| Email | `{{trigger.body.email}}` |
|
||||
| Company | Search or create based on `{{trigger.body.company}}` |
|
||||
| Champ | Valeur |
|
||||
| -------------- | ------------------------------------------------------------- |
|
||||
| Prénom | `{{trigger.body.firstName}}` |
|
||||
| Nom de famille | `{{trigger.body.lastName}}` |
|
||||
| E-mail | `{{trigger.body.email}}` |
|
||||
| Entreprise | Rechercher ou créer en fonction de `{{trigger.body.company}}` |
|
||||
|
||||
### Step 5: Test the Webhook
|
||||
### Étape 5 : Tester le webhook
|
||||
|
||||
Before activating, test your webhook:
|
||||
Avant l'activation, testez votre webhook :
|
||||
|
||||
**Using cURL**:
|
||||
**Avec cURL** :
|
||||
|
||||
```bash
|
||||
curl -X POST https://api.twenty.com/webhooks/workflow/abc123... \
|
||||
@@ -81,22 +81,22 @@ curl -X POST https://api.twenty.com/webhooks/workflow/abc123... \
|
||||
-d '{"firstName":"Test","lastName":"User","email":"test@example.com"}'
|
||||
```
|
||||
|
||||
**Using Postman or similar**:
|
||||
**Avec Postman ou équivalent** :
|
||||
|
||||
1. Create a POST request to your webhook URL
|
||||
2. Set Content-Type header to `application/json`
|
||||
3. Add your test JSON body
|
||||
4. Send and check workflow runs
|
||||
1. Créez une requête POST vers votre URL de webhook
|
||||
2. Définissez l'en-tête Content-Type sur `application/json`
|
||||
3. Ajoutez votre corps JSON de test
|
||||
4. Envoyez et vérifiez les exécutions du flux de travail
|
||||
|
||||
### Step 6: Activate
|
||||
### Étape 6 : Activer
|
||||
|
||||
Once tested, click **Activate** to make the workflow live.
|
||||
Une fois testé, cliquez sur **Activer** pour rendre le flux de travail actif.
|
||||
|
||||
## Handling Different Data Structures
|
||||
## Gestion de différentes structures de données
|
||||
|
||||
### Nested Data
|
||||
### Données imbriquées
|
||||
|
||||
If your webhook sends nested data:
|
||||
Si votre webhook envoie des données imbriquées :
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -108,11 +108,11 @@ If your webhook sends nested data:
|
||||
}
|
||||
```
|
||||
|
||||
Reference with: `{{trigger.body.contact.email}}`
|
||||
Faites référence avec : `{{trigger.body.contact.email}}`
|
||||
|
||||
### Arrays
|
||||
### Tableaux
|
||||
|
||||
If data includes arrays:
|
||||
Si les données comprennent des tableaux :
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -123,11 +123,11 @@ If data includes arrays:
|
||||
}
|
||||
```
|
||||
|
||||
How you handle arrays depends on your use case:
|
||||
La manière de gérer les tableaux dépend de votre cas d'utilisation :
|
||||
|
||||
**Unknown number of items → Use Iterator**
|
||||
**Nombre d'éléments inconnu → Utilisez Iterator**
|
||||
|
||||
If you need to process each item in the array (e.g., create a record for each), add a **Code** action to parse the array, then use **Iterator**:
|
||||
Si vous devez traiter chaque élément du tableau (par exemple, créer un enregistrement pour chacun), ajoutez une action **Code** pour analyser le tableau, puis utilisez **Iterator** :
|
||||
|
||||
```javascript
|
||||
export const main = async (params: { items: any }) => {
|
||||
@@ -138,11 +138,11 @@ export const main = async (params: { items: any }) => {
|
||||
};
|
||||
```
|
||||
|
||||
Then use Iterator to loop through: `{{code.items}}`
|
||||
Utilisez ensuite Iterator pour itérer sur : `{{code.items}}`
|
||||
|
||||
**Known/specific fields → Extract to named fields**
|
||||
**Champs connus/spécifiques → Extraire dans des champs nommés**
|
||||
|
||||
If the array contains specific fields you want to access individually (e.g., form answers where position 0 is always "first name", position 1 is always "last name"), add a **Code** action to extract them:
|
||||
Si le tableau contient des champs spécifiques auxquels vous souhaitez accéder individuellement (par exemple, des réponses de formulaire où la position 0 est toujours "prénom", la position 1 est toujours "nom"), ajoutez une action **Code** pour les extraire :
|
||||
|
||||
```javascript
|
||||
export const main = async (params: { items: any }) => {
|
||||
@@ -159,13 +159,13 @@ export const main = async (params: { items: any }) => {
|
||||
};
|
||||
```
|
||||
|
||||
Now you can select `product.name` and `product.qty` individually in subsequent steps.
|
||||
Vous pouvez maintenant sélectionner `product.name` et `product.qty` individuellement dans les étapes suivantes.
|
||||
|
||||
<Tip>
|
||||
For more details on handling arrays, see [Handle Arrays in Code Actions](/l/fr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
|
||||
Pour plus de détails sur la gestion des tableaux, voir [Gérer les tableaux dans les actions Code](/l/fr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
|
||||
</Tip>
|
||||
|
||||
## Related
|
||||
## Connexes
|
||||
|
||||
* [Workflow Triggers](/l/fr/user-guide/workflows/capabilities/workflow-triggers)
|
||||
* [Workflow Actions](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Déclencheurs de flux de travail](/l/fr/user-guide/workflows/capabilities/workflow-triggers)
|
||||
* [Actions de flux de travail](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
|
||||
+98
-98
@@ -1,85 +1,85 @@
|
||||
---
|
||||
title: Closed Won Automations
|
||||
description: Automate post-win activities when opportunities close.
|
||||
title: Automatisations « Closed Won »
|
||||
description: Automatisez les activités post-gain lorsque des opportunités sont clôturées.
|
||||
---
|
||||
|
||||
When a deal closes, multiple things need to happen: update company status, notify team members, create onboarding tasks. Automate all of this with a single workflow.
|
||||
Lorsqu'une affaire se clôture, plusieurs actions doivent avoir lieu : mettre à jour le statut de l'entreprise, notifier les membres de l'équipe, créer des tâches d'intégration. Automatisez tout cela avec un seul flux de travail.
|
||||
|
||||
## The Problem
|
||||
## Le problème
|
||||
|
||||
When an opportunity moves to "Closed Won":
|
||||
Lorsqu'une opportunité passe à "Closed Won":
|
||||
|
||||
* Company type needs to change from "Prospect" to "Customer"
|
||||
* Onboarding tasks need to be created
|
||||
* Customer success team needs to be notified
|
||||
* Sales rep needs confirmation
|
||||
* Le type d'entreprise doit passer de "Prospect" à "Customer"
|
||||
* Des tâches d'intégration doivent être créées
|
||||
* L'équipe Customer Success doit être informée
|
||||
* Le commercial a besoin d'une confirmation
|
||||
|
||||
Doing this manually is time-consuming and error-prone.
|
||||
Faire cela manuellement est chronophage et sujet aux erreurs.
|
||||
|
||||
## The Solution
|
||||
## La solution
|
||||
|
||||
Create a workflow that handles all post-win activities automatically.
|
||||
Créez un flux de travail qui gère automatiquement toutes les activités post-gain.
|
||||
|
||||
## Complete Workflow Setup
|
||||
## Configuration complète du flux de travail
|
||||
|
||||
### Step 1: Create the Workflow
|
||||
### Étape 1 : Créer le flux de travail
|
||||
|
||||
1. Go to **Settings → Workflows**
|
||||
2. Click **+ New Workflow**
|
||||
3. Name it "Deal Won - Post-Win Automation"
|
||||
1. Allez dans **Paramètres → Flux de travail**
|
||||
2. Cliquez sur **+ Nouveau flux de travail**
|
||||
3. Nommez-le "Affaire gagnée - Automatisation post-gain"
|
||||
|
||||
### Step 2: Configure the Trigger
|
||||
### Étape 2 : Configurer le déclencheur
|
||||
|
||||
1. Select **Record is Updated**
|
||||
2. Choose **Opportunities**
|
||||
3. Under "Fields to monitor", select **Stage**
|
||||
1. Sélectionnez **L'enregistrement est mis à jour**
|
||||
2. Choisissez **Opportunités**
|
||||
3. Dans "Champs à surveiller", sélectionnez **Étape**
|
||||
|
||||
### Step 3: Add Stage Filter
|
||||
### Étape 3 : Ajouter un filtre d'étape
|
||||
|
||||
1. Add **Filter** action
|
||||
2. Condition: `{{trigger.object.stage}}` equals "Closed Won"
|
||||
1. Ajoutez l'action **Filtre**
|
||||
2. Condition : `{{trigger.object.stage}}` est égal à "Closed Won"
|
||||
|
||||
### Step 4: Update Company Type
|
||||
### Étape 4 : Mettre à jour le type d'entreprise
|
||||
|
||||
1. Add **Update Record** action
|
||||
2. Configure:
|
||||
1. Ajoutez l'action **Mettre à jour l'enregistrement**
|
||||
2. Configurer:
|
||||
|
||||
| Field | Value |
|
||||
| ------------------- | ------------------------------- |
|
||||
| **Object** | Companies |
|
||||
| **Record** | `{{trigger.object.company.id}}` |
|
||||
| **Type** | Customer |
|
||||
| **First Deal Date** | `{{trigger.object.closedAt}}` |
|
||||
| **Account Owner** | `{{trigger.object.owner.id}}` |
|
||||
| Champ | Valeur |
|
||||
| ------------------------------- | ------------------------------- |
|
||||
| **Objet** | Entreprises |
|
||||
| **Enregistrement** | `{{trigger.object.company.id}}` |
|
||||
| **Type** | Client |
|
||||
| **Date de la première affaire** | `{{trigger.object.closedAt}}` |
|
||||
| **Propriétaire du compte** | `{{trigger.object.owner.id}}` |
|
||||
|
||||
### Step 5: Create Onboarding Task
|
||||
### Étape 5 : Créer une tâche d'intégration
|
||||
|
||||
1. Add **Create Record** action
|
||||
2. Configure:
|
||||
1. Ajoutez l'action **Créer un enregistrement**
|
||||
2. Configurer:
|
||||
|
||||
| Field | Value |
|
||||
| ----------------------- | ---------------------------------------------------------------------------------------------------- |
|
||||
| **Object** | Tasks |
|
||||
| **Title** | `Onboarding: {{trigger.object.name}}` |
|
||||
| **Assignee** | Customer Success team member |
|
||||
| **Due Date** | 3 days from now |
|
||||
| **Priority** | High |
|
||||
| **Related Company** | `{{trigger.object.company.id}}` |
|
||||
| **Related Opportunity** | `{{trigger.object.id}}` |
|
||||
| **Description** | `New customer onboarding for {{trigger.object.company.name}}. Deal value: {{trigger.object.amount}}` |
|
||||
| Champ | Valeur |
|
||||
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
|
||||
| **Objet** | Tâches |
|
||||
| **Titre** | `Onboarding: {{trigger.object.name}}` |
|
||||
| **Assigné(e)** | Membre de l'équipe Customer Success |
|
||||
| **Date d'échéance** | Dans 3 jours |
|
||||
| **Priorité** | Élevée |
|
||||
| **Entreprise associée** | `{{trigger.object.company.id}}` |
|
||||
| **Opportunité associée** | `{{trigger.object.id}}` |
|
||||
| **Description** | `Intégration d'un nouveau client pour {{trigger.object.company.name}}. Valeur de l'affaire : {{trigger.object.amount}}` |
|
||||
|
||||
### Step 6: Notify Customer Success
|
||||
### Étape 6 : Informer Customer Success
|
||||
|
||||
1. Add **Send Email** action
|
||||
2. Configure:
|
||||
1. Ajoutez l'action **Envoyer un e-mail**
|
||||
2. Configurer:
|
||||
|
||||
| Field | Value |
|
||||
| ----------- | -------------------------------------------------- |
|
||||
| **To** | customer-success@yourcompany.com |
|
||||
| **Subject** | `🎉 New Customer: {{trigger.object.company.name}}` |
|
||||
| **Body** | See example below |
|
||||
| Champ | Valeur |
|
||||
| -------------------- | -------------------------------------------------- |
|
||||
| **À** | customer-success@yourcompany.com |
|
||||
| **Objet** | `🎉 New Customer: {{trigger.object.company.name}}` |
|
||||
| **Corps du message** | Voir l'exemple ci-dessous |
|
||||
|
||||
**Email body example**:
|
||||
**Exemple de corps de l'e-mail** :
|
||||
|
||||
```
|
||||
Hi CS Team,
|
||||
@@ -97,44 +97,44 @@ An onboarding task has been created automatically.
|
||||
Let's give them a great start!
|
||||
```
|
||||
|
||||
### Step 7: Confirm to Sales Rep
|
||||
### Étape 7 : Confirmer au commercial
|
||||
|
||||
1. Add another **Send Email** action
|
||||
2. Configure:
|
||||
1. Ajoutez une autre action **Envoyer un e-mail**
|
||||
2. Configurer:
|
||||
|
||||
| Field | Value |
|
||||
| ----------- | -------------------------------------------------------------------------------------------------------------------- |
|
||||
| **To** | `{{trigger.object.owner.email}}` |
|
||||
| **Subject** | `✅ Deal Closed: {{trigger.object.name}}` |
|
||||
| **Body** | Congratulations! Your deal has been processed. The customer success team has been notified and onboarding has begun. |
|
||||
| Champ | Valeur |
|
||||
| -------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
||||
| **À** | `{{trigger.object.owner.email}}` |
|
||||
| **Objet** | `✅ Deal Closed: {{trigger.object.name}}` |
|
||||
| **Corps du message** | Félicitations ! Votre affaire a été traitée. L'équipe Customer Success a été informée et l'intégration a commencé. |
|
||||
|
||||
### Step 8: Test and Activate
|
||||
### Étape 8 : Tester et activer
|
||||
|
||||
1. Test by moving a test opportunity to "Closed Won"
|
||||
2. Verify:
|
||||
* Company type changed to "Customer"
|
||||
* Onboarding task created
|
||||
* CS team received email
|
||||
* Sales rep received confirmation
|
||||
3. Activate when ready
|
||||
1. Testez en déplaçant une opportunité de test vers "Closed Won"
|
||||
2. Vérifier:
|
||||
* Type d'entreprise modifié en "Customer"
|
||||
* Tâche d'intégration créée
|
||||
* L'équipe CS a reçu l'e-mail
|
||||
* Le commercial a reçu la confirmation
|
||||
3. Activez lorsque vous êtes prêt
|
||||
|
||||
## Handling Closed Lost
|
||||
## Gestion de "Closed Lost"
|
||||
|
||||
Create a similar workflow for lost deals:
|
||||
Créez un flux de travail similaire pour les affaires perdues :
|
||||
|
||||
### Trigger
|
||||
### Déclencheur
|
||||
|
||||
* Record is Updated (Opportunities, Stage = "Closed Lost")
|
||||
* Enregistrement mis à jour (Opportunités, Étape = "Closed Lost")
|
||||
|
||||
### Actions
|
||||
|
||||
1. **Create Record**: Task for "Lost Deal Analysis"
|
||||
2. **Update Record**: Add lost reason to company record
|
||||
3. **Send Email**: Notify manager of lost deal
|
||||
1. **Créer un enregistrement** : Tâche pour "Analyse d'affaire perdue"
|
||||
2. **Mettre à jour l'enregistrement** : Ajouter la raison de perte à l'enregistrement de l'entreprise
|
||||
3. **Envoyer un e-mail** : Informer le responsable de l'affaire perdue
|
||||
|
||||
## Advanced: Multi-Step Onboarding
|
||||
## Avancé : intégration en plusieurs étapes
|
||||
|
||||
For complex onboarding, create multiple tasks:
|
||||
Pour une intégration complexe, créez plusieurs tâches :
|
||||
|
||||
```javascript
|
||||
export const main = async (params) => {
|
||||
@@ -149,31 +149,31 @@ export const main = async (params) => {
|
||||
};
|
||||
```
|
||||
|
||||
Use **Iterator** to create each task from the array.
|
||||
Utilisez **Iterator** pour créer chaque tâche à partir du tableau.
|
||||
|
||||
## Customization Ideas
|
||||
## Idées de personnalisation
|
||||
|
||||
### Keep your other tools up-to-date
|
||||
### Maintenez vos autres outils à jour
|
||||
|
||||
* Create customer in billing system with an **HTTP Request**
|
||||
* Créez un client dans le système de facturation avec une action **HTTP Request**
|
||||
|
||||
### Conditional Actions
|
||||
### Actions conditionnelles
|
||||
|
||||
Use **Filter** actions to:
|
||||
Utilisez des actions **Filtre** pour :
|
||||
|
||||
* Different onboarding for enterprise vs SMB
|
||||
* Different assignees based on region
|
||||
* Skip notifications for small deals
|
||||
* Intégration différente pour entreprises vs PME
|
||||
* Assignés différents selon la région
|
||||
* Ignorer les notifications pour les petites affaires
|
||||
|
||||
### Include Deal Details
|
||||
### Inclure les détails de l'affaire
|
||||
|
||||
Use **Code** action to format:
|
||||
Utilisez l'action **Code** pour formater :
|
||||
|
||||
* Deal summary documents
|
||||
* Handoff notes for CS team
|
||||
* Custom onboarding checklists
|
||||
* Documents de synthèse de l'affaire
|
||||
* Notes de passation pour l'équipe CS
|
||||
* Listes de contrôle d'intégration personnalisées
|
||||
|
||||
## Related
|
||||
## Articles connexes
|
||||
|
||||
* [Workflow Actions](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Send Emails from Workflows](/l/fr/user-guide/workflows/capabilities/send-emails-from-workflows)
|
||||
* [Actions de flux de travail](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Envoyer des e-mails depuis des flux de travail](/l/fr/user-guide/workflows/capabilities/send-emails-from-workflows)
|
||||
|
||||
+62
-62
@@ -1,56 +1,56 @@
|
||||
---
|
||||
title: Detect Stale Opportunities
|
||||
description: Automatically notify managers when opportunities haven't been updated.
|
||||
title: Détecter les opportunités stagnantes
|
||||
description: Avertissez automatiquement les responsables lorsque les opportunités n'ont pas été mises à jour.
|
||||
---
|
||||
|
||||
Keep your pipeline healthy by alerting managers when opportunities go stale. This workflow checks for opportunities that haven't been updated in a specified number of days.
|
||||
Maintenez la santé de votre pipeline en alertant les responsables lorsque des opportunités deviennent stagnantes. Ce flux de travail vérifie les opportunités qui n'ont pas été mises à jour depuis un nombre de jours défini.
|
||||
|
||||
## The Problem
|
||||
## Le problème
|
||||
|
||||
Opportunities sitting without updates lead to:
|
||||
Des opportunités laissées sans mise à jour entraînent :
|
||||
|
||||
* Deals going cold
|
||||
* Unreliable forecasts
|
||||
* Lost revenue
|
||||
* Affaires qui se refroidissent
|
||||
* Prévisions peu fiables
|
||||
* Perte de revenus
|
||||
|
||||
## The Solution
|
||||
## La solution
|
||||
|
||||
Create a scheduled workflow that finds stale opportunities and emails their managers.
|
||||
Créez un flux de travail planifié qui identifie les opportunités stagnantes et envoie un e-mail à leurs responsables.
|
||||
|
||||
## Step-by-Step Setup
|
||||
## Configuration pas à pas
|
||||
|
||||
### Step 1: Create the Workflow
|
||||
### Étape 1 : Créer le flux de travail
|
||||
|
||||
1. Go to **Settings → Workflows**
|
||||
2. Click **+ New Workflow**
|
||||
3. Name it "Stale Opportunity Alert"
|
||||
1. Allez dans **Paramètres → Flux de travail**
|
||||
2. Cliquez sur **+ Nouveau flux de travail**
|
||||
3. Nommez-le "Alerte d'opportunités stagnantes"
|
||||
|
||||
### Step 2: Configure the Trigger
|
||||
### Étape 2 : Configurer le déclencheur
|
||||
|
||||
1. Select **On a Schedule**
|
||||
2. Set to run daily (e.g., every day at 8 AM)
|
||||
1. Sélectionnez **Selon un calendrier**
|
||||
2. Définissez l'exécution quotidienne (par ex., chaque jour à 8 h)
|
||||
|
||||
### Step 3: Search for Stale Opportunities
|
||||
### Étape 3 : Rechercher les opportunités stagnantes
|
||||
|
||||
1. Add **Search Records** action
|
||||
2. Configure:
|
||||
1. Ajoutez l'action **Rechercher des enregistrements**
|
||||
2. Configurer:
|
||||
|
||||
| Field | Value |
|
||||
| ---------- | ----------------------------------------------- |
|
||||
| **Object** | Opportunities |
|
||||
| **Filter** | Updated At is before (today - 7 days) |
|
||||
| **Filter** | Stage is not "Closed Won" AND not "Closed Lost" |
|
||||
| **Limit** | 100 |
|
||||
| Champ | Valeur |
|
||||
| ---------- | ------------------------------------------------------- |
|
||||
| **Objet** | Opportunités |
|
||||
| **Filtre** | Updated At est antérieur à (today - 7 days) |
|
||||
| **Filtre** | Stage n'est pas "Closed Won" ET n'est pas "Closed Lost" |
|
||||
| **Limite** | 100 |
|
||||
|
||||
### Step 4: Check If Any Found
|
||||
### Étape 4 : Vérifier si des résultats ont été trouvés
|
||||
|
||||
1. Add **Filter** action
|
||||
2. Condition: `{{searchRecords.length}}` is greater than 0
|
||||
3. If no stale opportunities, the workflow stops here
|
||||
1. Ajoutez l'action **Filtre**
|
||||
2. Condition : `{{searchRecords.length}}` est supérieur à 0
|
||||
3. S'il n'y a pas d'opportunités stagnantes, le flux de travail s'arrête ici
|
||||
|
||||
### Step 5: Format the Alert (Code Action)
|
||||
### Étape 5 : Formater l'alerte (action Code)
|
||||
|
||||
Add a **Code** action to format the email:
|
||||
Ajoutez une action **Code** pour formater l'e-mail :
|
||||
|
||||
```javascript
|
||||
export const main = async (params) => {
|
||||
@@ -88,49 +88,49 @@ export const main = async (params) => {
|
||||
};
|
||||
```
|
||||
|
||||
### Step 6: Send Alert Email
|
||||
### Étape 6 : Envoyer l'e-mail d'alerte
|
||||
|
||||
Add **Send Email** action:
|
||||
Ajoutez l'action **Envoyer un e-mail** :
|
||||
|
||||
| Field | Value |
|
||||
| ----------- | ----------------------------------------------------------- |
|
||||
| **To** | sales-manager@yourcompany.com |
|
||||
| **Subject** | `🚨 {{code.totalCount}} Stale Opportunities Need Attention` |
|
||||
| **Body** | `{{code.summary}}` |
|
||||
| Champ | Valeur |
|
||||
| -------------------- | ---------------------------------------------------------------------------- |
|
||||
| **À** | sales-manager@yourcompany.com |
|
||||
| **Objet** | `🚨 {{code.totalCount}} opportunités stagnantes nécessitent votre attention` |
|
||||
| **Corps du message** | `{{code.summary}}` |
|
||||
|
||||
### Step 7: Test and Activate
|
||||
### Étape 7 : Tester et activer
|
||||
|
||||
1. Click **Test** to run the workflow
|
||||
2. Check that the email contains the right data
|
||||
3. Activate when ready
|
||||
1. Cliquez sur **Test** pour exécuter le flux de travail
|
||||
2. Vérifiez que l'e-mail contient les bonnes données
|
||||
3. Activez lorsque vous êtes prêt
|
||||
|
||||
## Customization Options
|
||||
## Options de personnalisation
|
||||
|
||||
### Change Staleness Threshold
|
||||
### Modifier le seuil de stagnation
|
||||
|
||||
Modify the Search Records filter to change from 7 days to your preferred period:
|
||||
Modifiez le filtre Rechercher des enregistrements pour changer de 7 jours à la période de votre choix :
|
||||
|
||||
* 3 days for high-velocity sales
|
||||
* 14 days for enterprise deals
|
||||
* 30 days for long sales cycles
|
||||
* 3 jours pour les ventes à cadence élevée
|
||||
* 14 jours pour les affaires grands comptes
|
||||
* 30 jours pour les cycles de vente longs
|
||||
|
||||
### Alert Individual Reps
|
||||
### Alerter les commerciaux individuellement
|
||||
|
||||
Instead of one manager email, use **Iterator** to send personalized emails to each rep about their own stale deals.
|
||||
Au lieu d'un seul e-mail au responsable, utilisez **Iterator** pour envoyer des e-mails personnalisés à chaque commercial au sujet de ses propres affaires stagnantes.
|
||||
|
||||
### Add Escalation
|
||||
### Ajouter une escalade
|
||||
|
||||
Create multiple workflows with increasing severity:
|
||||
Créez plusieurs flux de travail avec une sévérité croissante :
|
||||
|
||||
1. Day 7: Email to rep
|
||||
2. Day 14: Email to rep + manager
|
||||
3. Day 21: Create task for manager to intervene
|
||||
1. Jour 7 : e-mail au commercial
|
||||
2. Jour 14 : e-mail au commercial + au responsable
|
||||
3. Jour 21 : créer une tâche pour que le responsable intervienne
|
||||
|
||||
### Include in Slack
|
||||
### Inclure dans Slack
|
||||
|
||||
Use **HTTP Request** to post to a Slack webhook instead of or in addition to email.
|
||||
Utilisez **HTTP Request** pour publier vers un webhook Slack à la place d'un e-mail ou en complément.
|
||||
|
||||
## Related
|
||||
## Articles connexes
|
||||
|
||||
* [Workflow Actions](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Send Emails from Workflows](/l/fr/user-guide/workflows/capabilities/send-emails-from-workflows)
|
||||
* [Actions de workflows](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Envoyer des e-mails depuis des workflows](/l/fr/user-guide/workflows/capabilities/send-emails-from-workflows)
|
||||
|
||||
+38
-38
@@ -1,74 +1,74 @@
|
||||
---
|
||||
title: Display Number of Emails Received
|
||||
description: Create a workflow to automatically count and display the number of emails received from each contact.
|
||||
title: Afficher le nombre d'e-mails reçus
|
||||
description: Créez un workflow pour compter et afficher automatiquement le nombre d'e-mails reçus de chaque contact.
|
||||
---
|
||||
|
||||
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
|
||||
|
||||
<img src="/images/user-guide/workflows/workflow-number-of-emails-received.png" style={{width:'100%'}} />
|
||||
|
||||
## Overview
|
||||
## Vue d'ensemble
|
||||
|
||||
This workflow triggers every time a new email is received and updates a custom field on the Person record with the total count of emails from that sender.
|
||||
Ce workflow se déclenche chaque fois qu'un nouvel e-mail est reçu et met à jour un champ personnalisé sur l'enregistrement Person avec le nombre total d'e-mails provenant de cet expéditeur.
|
||||
|
||||
## Prerequisites
|
||||
## Prérequis
|
||||
|
||||
Before setting up this workflow, create a custom field on the **People** object:
|
||||
Avant de configurer ce workflow, créez un champ personnalisé sur l'objet **People** :
|
||||
|
||||
1. Go to **Settings → Data Model → People**
|
||||
2. Add a new **Number** field
|
||||
3. Name it something like "Number of emails received from this person"
|
||||
1. Allez dans **Paramètres → Modèle de données → People**
|
||||
2. Ajoutez un nouveau champ **Nombre**
|
||||
3. Nommez-le par exemple "Nombre d'e-mails reçus de cette personne"
|
||||
|
||||
## Step-by-Step Setup
|
||||
## Configuration pas à pas
|
||||
|
||||
<VimeoEmbed videoId="1148700336" title="Video demonstration" />
|
||||
<VimeoEmbed videoId="1148700336" title="Démonstration vidéo" />
|
||||
|
||||
### Step 1: Configure the Trigger
|
||||
### Étape 1 : Configurer le déclencheur
|
||||
|
||||
1. Go to **Workflows** and create a new workflow
|
||||
2. Select **Record is Created** as the trigger
|
||||
3. Choose **Message Participants** (available under Advanced objects)
|
||||
1. Allez dans **Workflows** et créez un nouveau workflow
|
||||
2. Sélectionnez **Record is Created** comme déclencheur
|
||||
3. Choisissez **Message Participants** (disponible sous Advanced objects)
|
||||
|
||||
<Note>
|
||||
A Message Participant is a combination of a message ID and a person ID, creating one unique record per message. This is easier to track than Messages directly because we can access the `handle` field, which contains the sender's (or recipient's) email address.
|
||||
Un Message Participant est une combinaison d'un ID de message et d'un ID de personne, créant un enregistrement unique par message. Ceci est plus facile à suivre que les Messages directement, car nous pouvons accéder au champ `handle`, qui contient l'adresse e-mail de l'expéditeur (ou du destinataire).
|
||||
</Note>
|
||||
|
||||
### Step 2: Filter on Role
|
||||
### Étape 2 : Filtrer sur le rôle
|
||||
|
||||
1. Add a **Filter** action
|
||||
2. Set the condition: **Role** equals **FROM**
|
||||
1. Ajoutez l'action **Filtre**
|
||||
2. Définissez la condition : **Role** est égal à **FROM**
|
||||
|
||||
This ensures you only count messages sent by this person, not messages sent to them.
|
||||
Cela garantit que vous ne comptez que les messages envoyés par cette personne, et non les messages qui lui sont envoyés.
|
||||
|
||||
### Step 3: Search All Message Participants with Same Handle
|
||||
### Étape 3 : Rechercher tous les Message Participants avec le même handle
|
||||
|
||||
1. Add a **Search Records** action
|
||||
2. Select **Message Participants** as the object
|
||||
3. Add filters: **Handle** equals the handle from the trigger (the sender's email address) and **Role** equals **FROM**
|
||||
4. Increase the **Limit** from 1 to **200** (the maximum)
|
||||
1. Ajoutez une action **Search Records**
|
||||
2. Sélectionnez **Message Participants** comme objet
|
||||
3. Ajoutez des filtres : **Handle** est égal au handle du déclencheur (l'adresse e-mail de l'expéditeur) et **Role** est égal à **FROM**
|
||||
4. Augmentez **Limit** de 1 à **200** (le maximum)
|
||||
|
||||
This finds all messages from this email address to get the total count.
|
||||
Cela trouve tous les messages provenant de cette adresse e-mail afin d'obtenir le nombre total.
|
||||
|
||||
<Note>
|
||||
The Search Records action is limited to returning 200 records maximum. However, since you're only using the `totalCount` value (not the individual records), this step will return the total number of emails sent by this person.
|
||||
L'action Search Records est limitée à retourner 200 enregistrements maximum. Cependant, comme vous utilisez uniquement la valeur `totalCount` (et non les enregistrements individuels), cette étape renverra le nombre total d'e-mails envoyés par cette personne.
|
||||
</Note>
|
||||
|
||||
### Step 4: Update the Person Record with a Create or Update Record action
|
||||
### Étape 4 : Mettre à jour l'enregistrement Person avec une action Create or Update Record
|
||||
|
||||
1. Add a **Create or Update Record** action
|
||||
1. Ajoutez une action **Créer ou mettre à jour un enregistrement**
|
||||
|
||||
<Warning>
|
||||
Use **Upsert Record** instead of **Update Record** here. This lets you identify the person by their email address (the `handle` field) rather than requiring a record ID from a previous step.
|
||||
Utilisez **Créer ou mettre à jour un enregistrement** au lieu de **Mettre à jour un enregistrement** ici. Cela vous permet d'identifier la personne par son adresse e-mail (le champ `handle`) plutôt que d'exiger un ID d'enregistrement d'une étape précédente.
|
||||
</Warning>
|
||||
|
||||
2. Select **People** as the object
|
||||
3. Find the person by matching their email to the `handle` from the Message Participant
|
||||
4. Set your custom "Number of emails received" field to `{{searchRecords.totalCount}}`
|
||||
2. Sélectionnez **Personnes** comme objet
|
||||
3. Recherchez la personne en faisant correspondre son e-mail au `handle` du participant au message
|
||||
4. Définissez votre champ personnalisé "Nombre d'e-mails reçus" sur `{{searchRecords.totalCount}}`
|
||||
|
||||
The `totalCount` value from the Search Records action represents the total number of emails received from this person.
|
||||
La valeur `totalCount` de l'action Rechercher des enregistrements représente le nombre total d'e-mails reçus de cette personne.
|
||||
|
||||
## Related
|
||||
## Articles connexes
|
||||
|
||||
* [Workflow Actions](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Create Custom Fields](/l/fr/user-guide/data-model/how-tos/customize-your-data-model)
|
||||
* [Search Records Action](/l/fr/user-guide/workflows/capabilities/workflow-actions#search-records)
|
||||
* [Actions de workflows](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Comment créer des champs personnalisés](/l/fr/user-guide/data-model/how-tos/customize-your-data-model)
|
||||
* [Action Search Records](/l/fr/user-guide/workflows/capabilities/workflow-actions#search-records)
|
||||
|
||||
+93
-93
@@ -1,130 +1,130 @@
|
||||
---
|
||||
title: Display Related Record Data
|
||||
description: Show data from related records (e.g., Company info on Opportunities) using workflows.
|
||||
title: Afficher les données des enregistrements liés
|
||||
description: Afficher les données provenant d'enregistrements liés (p. ex., informations sur l'entreprise dans les Opportunités) à l'aide de workflows.
|
||||
---
|
||||
|
||||
Display data from related records directly on your records — for example, show the employee count from a Company on its Opportunities. This workflow workaround is useful until nested fields are natively available.
|
||||
Afficher les données d'enregistrements liés directement sur vos enregistrements — par exemple, afficher l'effectif d'une Entreprise dans ses Opportunités. Cette solution de contournement par workflow est utile jusqu'à ce que les champs imbriqués soient disponibles nativement.
|
||||
|
||||
## Common Use Cases
|
||||
## Cas d'utilisation courants
|
||||
|
||||
| Source | Destination | Fields to Copy |
|
||||
| ----------- | ----------- | ------------------------------- |
|
||||
| Company | Opportunity | Industry, Company Size, ARR |
|
||||
| Person | Opportunity | Email, Phone, Title |
|
||||
| Opportunity | Company | Last Deal Amount, Last Won Date |
|
||||
| Source | Destination | Champs à copier |
|
||||
| ----------- | ----------- | --------------------------------------------------------- |
|
||||
| Entreprise | Opportunité | Secteur, Taille de l'entreprise, ARR |
|
||||
| Personne | Opportunité | E-mail, Téléphone, Titre du poste |
|
||||
| Opportunité | Entreprise | Montant du dernier contrat, Date du dernier contrat gagné |
|
||||
|
||||
## Basic Field Copy
|
||||
## Copie de champ simple
|
||||
|
||||
### Example: Copy Contact Email to Opportunity
|
||||
### Exemple : Copier l'e-mail du contact vers l'Opportunité
|
||||
|
||||
**Goal**: When setting a Point of Contact on an opportunity, copy their email to the opportunity for easy access.
|
||||
**Objectif** : Lors de la définition d'un Point de contact sur une opportunité, copier son e-mail dans l'opportunité pour un accès facile.
|
||||
|
||||
### Prerequisite
|
||||
### Prérequis
|
||||
|
||||
Create the destination fields in **Settings → Data Model → Opportunities** before building the workflow:
|
||||
Créez les champs de destination dans **Paramètres → Modèle de données → Opportunités** avant de créer le workflow :
|
||||
|
||||
* Contact Email (type: Email)
|
||||
* Contact Phone (type: Phone)
|
||||
* E-mail du contact (type : E-mail)
|
||||
* Téléphone du contact (type : Téléphone)
|
||||
|
||||
### Setup
|
||||
### Installation
|
||||
|
||||
1. **Trigger**: Record is Updated (Opportunities, Point of Contact field)
|
||||
1. **Déclencheur** : Enregistrement mis à jour (Opportunités, champ Point de contact)
|
||||
|
||||
2. **Filter**: Check that Point of Contact is not empty
|
||||
2. **Filtre** : Vérifiez que le Point de contact n'est pas vide
|
||||
|
||||
3. **Search Records**: Find the linked person
|
||||
* Object: People
|
||||
* Filter: ID equals `{{trigger.object.pointOfContact.id}}`
|
||||
3. **Rechercher des enregistrements** : Trouver la personne liée
|
||||
* Objet : Personnes
|
||||
* Filtre : ID égal à `{{trigger.object.pointOfContact.id}}`
|
||||
|
||||
4. **Update Record**:
|
||||
* Object: Opportunities
|
||||
* Record: `{{trigger.object.id}}`
|
||||
* Contact Email: `{{searchRecords[0].email}}`
|
||||
* Contact Phone: `{{searchRecords[0].phone}}`
|
||||
4. **Mettre à jour un enregistrement** :
|
||||
* Objet : Opportunités
|
||||
* Enregistrement : `{{trigger.object.id}}`
|
||||
* E-mail du contact : `{{searchRecords[0].email}}`
|
||||
* Téléphone du contact : `{{searchRecords[0].phone}}`
|
||||
|
||||
## Copy Multiple Fields
|
||||
## Copier plusieurs champs
|
||||
|
||||
### Example: Sync Company Info to All Related Opportunities
|
||||
### Exemple : Synchroniser les informations de l'entreprise vers toutes les Opportunités liées
|
||||
|
||||
**Goal**: When company details change, update all related opportunities.
|
||||
**Objectif** : Lorsque les détails de l'entreprise changent, mettre à jour toutes les opportunités liées.
|
||||
|
||||
### Setup
|
||||
### Installation
|
||||
|
||||
1. **Trigger**: Record is Updated (Companies)
|
||||
* Fields: Industry, Company Size, Annual Revenue
|
||||
1. **Déclencheur** : Enregistrement mis à jour (Entreprises)
|
||||
* Champs : Secteur, Taille de l'entreprise, Chiffre d'affaires annuel
|
||||
|
||||
2. **Search Records**: Find all opportunities for this company
|
||||
* Object: Opportunities
|
||||
* Filter: Company ID equals `{{trigger.object.id}}`
|
||||
2. **Rechercher des enregistrements** : Trouver toutes les opportunités pour cette entreprise
|
||||
* Objet : Opportunités
|
||||
* Filtre : ID de l'entreprise égal à `{{trigger.object.id}}`
|
||||
|
||||
3. **Iterator**: Loop through each opportunity
|
||||
3. **Iterator** : Parcourir chaque opportunité
|
||||
|
||||
4. **Update Record** (inside iterator):
|
||||
* Object: Opportunities
|
||||
* Record: `{{iterator.currentItem.id}}`
|
||||
* Company Industry: `{{trigger.object.industry}}`
|
||||
* Company Size: `{{trigger.object.companySize}}`
|
||||
* Company ARR: `{{trigger.object.annualRevenue}}`
|
||||
4. **Mettre à jour un enregistrement** (dans l'Iterator) :
|
||||
* Objet : Opportunités
|
||||
* Enregistrement : `{{iterator.currentItem.id}}`
|
||||
* Secteur de l'entreprise : `{{trigger.object.industry}}`
|
||||
* Taille de l'entreprise : `{{trigger.object.companySize}}`
|
||||
* ARR de l'entreprise : `{{trigger.object.annualRevenue}}`
|
||||
|
||||
## Copy on Record Creation
|
||||
## Copier lors de la création d'un enregistrement
|
||||
|
||||
### Example: Pre-fill Opportunity with Company Data
|
||||
### Exemple : Préremplir l'Opportunité avec les données de l'entreprise
|
||||
|
||||
**Goal**: When creating an opportunity linked to a company, automatically copy key company info.
|
||||
**Objectif** : Lors de la création d'une opportunité liée à une entreprise, copier automatiquement les informations clés de l'entreprise.
|
||||
|
||||
### Prerequisite
|
||||
### Prérequis
|
||||
|
||||
Create the destination fields in **Settings → Data Model → Opportunities**:
|
||||
Créez les champs de destination dans **Paramètres → Modèle de données → Opportunités** :
|
||||
|
||||
* Company Industry (type: Text)
|
||||
* Company Size (type: Number)
|
||||
* Secteur de l'entreprise (type : Texte)
|
||||
* Taille de l'entreprise (type : Nombre)
|
||||
|
||||
### Setup
|
||||
### Installation
|
||||
|
||||
1. **Trigger**: Record is Created (Opportunities)
|
||||
* Filter: Company is not empty
|
||||
1. **Déclencheur** : Enregistrement créé (Opportunités)
|
||||
* Filtre : L'entreprise n'est pas vide
|
||||
|
||||
2. **Search Records**: Get the linked company's details
|
||||
* Object: Companies
|
||||
* Filter: ID equals `{{trigger.object.company.id}}`
|
||||
2. **Rechercher des enregistrements** : Récupérer les détails de l'entreprise liée
|
||||
* Objet : Entreprises
|
||||
* Filtre : ID égal à `{{trigger.object.company.id}}`
|
||||
|
||||
3. **Update Record**:
|
||||
* Object: Opportunities
|
||||
* Record: `{{trigger.object.id}}`
|
||||
* Company Industry: `{{searchRecords[0].industry}}`
|
||||
* Company Size: `{{searchRecords[0].employees}}`
|
||||
3. **Mettre à jour un enregistrement** :
|
||||
* Objet : Opportunités
|
||||
* Enregistrement : `{{trigger.object.id}}`
|
||||
* Secteur de l'entreprise : `{{searchRecords[0].industry}}`
|
||||
* Taille de l'entreprise : `{{searchRecords[0].employees}}`
|
||||
|
||||
<Note>
|
||||
**Tasks and Notes limitation**: Relations on Tasks and Notes are hardcoded as many-to-many and are not yet available in workflow triggers or actions. To access these relations, use the [API](/l/fr/developers/extend/capabilities/apis) instead.
|
||||
**Limitation concernant les tâches et les notes** : Les relations sur les tâches et les notes sont codées en dur en plusieurs-à-plusieurs et ne sont pas encore disponibles dans les déclencheurs ou actions de workflows. Pour accéder à ces relations, utilisez plutôt l'[API](/l/fr/developers/extend/capabilities/apis).
|
||||
</Note>
|
||||
|
||||
## Bidirectional Sync
|
||||
## Synchronisation bidirectionnelle
|
||||
|
||||
### Example: Keep Primary Contact in Sync
|
||||
### Exemple : Maintenir le contact principal synchronisé
|
||||
|
||||
**Goal**: When a company's primary contact changes, update the contact. When a person becomes primary, update the company.
|
||||
**Objectif** : Lorsque le contact principal d'une entreprise change, mettre à jour le contact. Lorsqu'une personne devient contact principal, mettre à jour l'entreprise.
|
||||
|
||||
### Workflow 1: Company → Person
|
||||
### Workflow 1 : Entreprise → Personne
|
||||
|
||||
1. **Trigger**: Record is Updated (Companies, Primary Contact field)
|
||||
2. **Update Record**: Set person's "Is Primary Contact" to true
|
||||
3. **Search Records**: Find previous primary contact
|
||||
4. **Update Record**: Set previous contact's "Is Primary Contact" to false
|
||||
1. **Déclencheur** : Enregistrement mis à jour (Entreprises, champ Contact principal)
|
||||
2. **Mettre à jour un enregistrement** : Définir le champ "Is Primary Contact" de la personne sur true
|
||||
3. **Rechercher des enregistrements** : Trouver le contact principal précédent
|
||||
4. **Mettre à jour un enregistrement** : Définir le "Is Primary Contact" de l'ancien contact sur false
|
||||
|
||||
### Workflow 2: Person → Company
|
||||
### Workflow 2 : Personne → Entreprise
|
||||
|
||||
1. **Trigger**: Record is Updated (People, Is Primary Contact = true)
|
||||
2. **Update Record**: Set company's Primary Contact to this person
|
||||
1. **Déclencheur** : Enregistrement mis à jour (Personnes, Is Primary Contact = true)
|
||||
2. **Mettre à jour un enregistrement** : Définir le contact principal de l'entreprise sur cette personne
|
||||
|
||||
<Note>
|
||||
Be careful with bidirectional syncs to avoid infinite loops. Use filters to check if the value actually changed before updating.
|
||||
Soyez prudent avec les synchronisations bidirectionnelles pour éviter les boucles infinies. Utilisez des filtres pour vérifier si la valeur a réellement changé avant la mise à jour.
|
||||
</Note>
|
||||
|
||||
## Using Code for Complex Mapping
|
||||
## Utiliser du code pour des mappages complexes
|
||||
|
||||
### Example: Transform Data During Copy
|
||||
### Exemple : Transformer les données lors de la copie
|
||||
|
||||
**Goal**: Copy and format phone number from person to opportunity.
|
||||
**Objectif** : Copier et mettre en forme le numéro de téléphone de la personne vers l'opportunité.
|
||||
|
||||
```javascript
|
||||
export const main = async (params) => {
|
||||
@@ -144,27 +144,27 @@ export const main = async (params) => {
|
||||
};
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
## Meilleures pratiques
|
||||
|
||||
### Avoid Loops
|
||||
### Évitez les boucles
|
||||
|
||||
* Don't create workflows that trigger each other endlessly
|
||||
* Use specific field conditions
|
||||
* Add checks to see if value actually changed
|
||||
* Ne créez pas de workflows qui se déclenchent mutuellement à l'infini
|
||||
* Utilisez des conditions spécifiques sur les champs
|
||||
* Ajoutez des vérifications pour voir si la valeur a réellement changé
|
||||
|
||||
### Handle Missing Data
|
||||
### Gérer les données manquantes
|
||||
|
||||
* Always check if source record exists before copying
|
||||
* Provide default values for optional fields
|
||||
* Use filters to skip when source field is empty
|
||||
* Vérifiez toujours que l'enregistrement source existe avant de copier
|
||||
* Fournissez des valeurs par défaut pour les champs facultatifs
|
||||
* Utilisez des filtres pour ignorer lorsque le champ source est vide
|
||||
|
||||
### Performance
|
||||
### Performances
|
||||
|
||||
* Batch updates when copying to many records
|
||||
* Use scheduled workflows for bulk sync operations
|
||||
* Consider using Iterator for multiple record updates
|
||||
* Regroupez les mises à jour lors de la copie vers de nombreux enregistrements
|
||||
* Utilisez des workflows planifiés pour les opérations de synchronisation en masse
|
||||
* Envisagez d'utiliser Iterator pour les mises à jour de plusieurs enregistrements
|
||||
|
||||
## Related
|
||||
## Articles connexes
|
||||
|
||||
* [Workflow Actions](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Workflow Triggers](/l/fr/user-guide/workflows/capabilities/workflow-triggers)
|
||||
* [Actions de workflows](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Déclencheurs de workflows](/l/fr/user-guide/workflows/capabilities/workflow-triggers)
|
||||
|
||||
+67
-67
@@ -1,37 +1,37 @@
|
||||
---
|
||||
title: Formula Fields
|
||||
description: Create formula fields using workflows until native support is available.
|
||||
title: Champs de formule
|
||||
description: Créez des champs de formule à l'aide des workflows jusqu'à ce que la prise en charge native soit disponible.
|
||||
---
|
||||
|
||||
Twenty doesn't yet support native formula fields yet (coming in 2026), but you can achieve the same result using workflows. This workaround lets you automatically calculate and populate field values—from simple concatenations to complex business logic.
|
||||
Twenty ne prend pas encore en charge les champs de formule natifs (prévu en 2026), mais vous pouvez obtenir le même résultat à l'aide de workflows. Cette solution de contournement vous permet de calculer et de renseigner automatiquement les valeurs de champs — des concaténations simples à une logique métier complexe.
|
||||
|
||||
## Common Use Cases
|
||||
## Cas d'utilisation courants
|
||||
|
||||
| Use Case | Formula Example |
|
||||
| ------------------- | --------------------------------- |
|
||||
| **Full name** | First Name + " " + Last Name |
|
||||
| **Expected amount** | Amount × Probability |
|
||||
| **Days until due** | Due Date - Today |
|
||||
| **Days in stage** | Today - Stage Entry Date |
|
||||
| **Lead score** | Points based on multiple criteria |
|
||||
| Cas d'utilisation | Exemple de formule |
|
||||
| -------------------------- | ---------------------------------------- |
|
||||
| **Nom complet** | Prénom + " " + Nom de famille |
|
||||
| **Montant attendu** | Montant × Probabilité |
|
||||
| **Jours avant l'échéance** | Date d'échéance - Aujourd'hui |
|
||||
| **Jours dans l'étape** | Aujourd'hui - Date d'entrée dans l'étape |
|
||||
| **Score de lead** | Points basés sur plusieurs critères |
|
||||
|
||||
<Tip>
|
||||
For a complete example of tracking time in pipeline stages, see [Track How Long Opportunities Stay in Each Stage](/l/fr/user-guide/views-pipelines/how-tos/track-time-in-stage).
|
||||
Pour un exemple complet de suivi du temps dans les étapes du pipeline, voir [Suivre la durée de présence des opportunités dans chaque étape](/l/fr/user-guide/views-pipelines/how-tos/track-time-in-stage).
|
||||
</Tip>
|
||||
|
||||
## Basic Formula: Concatenation
|
||||
## Formule de base : concaténation
|
||||
|
||||
### Example: Auto-Fill Full Name
|
||||
### Exemple : remplissage automatique du nom complet
|
||||
|
||||
**Goal**: Automatically combine first and last name into a full name field.
|
||||
**Objectif** : Combiner automatiquement le prénom et le nom de famille dans un champ de nom complet.
|
||||
|
||||
### Setup
|
||||
### Installation
|
||||
|
||||
1. **Trigger**: Record is Updated or Created (People)
|
||||
1. **Déclencheur** : Enregistrement mis à jour ou créé (Personnes)
|
||||
|
||||
2. **Filter**: Check that first name or last name changed
|
||||
2. **Filtre** : Vérifier que le prénom ou le nom de famille a changé
|
||||
|
||||
3. **Code action**:
|
||||
3. **Action de code** :
|
||||
|
||||
```javascript
|
||||
export const main = async (params) => {
|
||||
@@ -45,21 +45,21 @@ export const main = async (params) => {
|
||||
};
|
||||
```
|
||||
|
||||
4. **Update Record**: Set Full Name to `{{code.fullName}}`
|
||||
4. **Mettre à jour l'enregistrement** : Définir le nom complet sur `{{code.fullName}}`
|
||||
|
||||
## Numeric Formula: Expected Amount
|
||||
## Formule numérique : montant attendu
|
||||
|
||||
### Example: Calculate Expected Revenue
|
||||
### Exemple : calculer le revenu attendu
|
||||
|
||||
**Goal**: Multiply opportunity amount by probability to get expected amount.
|
||||
**Objectif** : Multiplier le montant de l'opportunité par la probabilité pour obtenir le montant attendu.
|
||||
|
||||
See [How to Show Expected Amount in Pipeline](/l/fr/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline) for the complete workflow.
|
||||
Voir [Comment afficher le montant attendu dans le pipeline](/l/fr/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline) pour le workflow complet.
|
||||
|
||||
### Quick Setup
|
||||
### Configuration rapide
|
||||
|
||||
1. **Trigger**: Record is Updated (Opportunities, Amount OR Probability field)
|
||||
1. **Déclencheur** : Enregistrement mis à jour (Opportunités, champ Montant OU Probabilité)
|
||||
|
||||
2. **Code action**:
|
||||
2. **Action de code** :
|
||||
|
||||
```javascript
|
||||
export const main = async (params) => {
|
||||
@@ -71,19 +71,19 @@ export const main = async (params) => {
|
||||
};
|
||||
```
|
||||
|
||||
3. **Update Record**: Set Expected Amount to `{{code.expectedAmount}}`
|
||||
3. **Mettre à jour l'enregistrement** : Définir le montant attendu sur `{{code.expectedAmount}}`
|
||||
|
||||
## Date Formula: Days Calculation
|
||||
## Formule de date : calcul des jours
|
||||
|
||||
### Example: Days Until Task Due
|
||||
### Exemple : jours avant l'échéance de la tâche
|
||||
|
||||
**Goal**: Calculate how many days remain until a task's due date.
|
||||
**Objectif** : Calculer le nombre de jours restants avant la date d'échéance d'une tâche.
|
||||
|
||||
### Setup
|
||||
### Installation
|
||||
|
||||
1. **Trigger**: Record is Updated or Created (Tasks, Due Date field)
|
||||
1. **Déclencheur** : Enregistrement mis à jour ou créé (Tâches, champ Date d'échéance)
|
||||
|
||||
2. **Code action**:
|
||||
2. **Action de code** :
|
||||
|
||||
```javascript
|
||||
export const main = async (params) => {
|
||||
@@ -102,23 +102,23 @@ export const main = async (params) => {
|
||||
};
|
||||
```
|
||||
|
||||
3. **Update Record**: Set Days Until Due to `{{code.daysUntilDue}}`
|
||||
3. **Mettre à jour l'enregistrement** : Définir les jours avant l'échéance sur `{{code.daysUntilDue}}`
|
||||
|
||||
<Note>
|
||||
Negative values indicate overdue tasks. You can use this field to filter or sort tasks by urgency.
|
||||
Des valeurs négatives indiquent des tâches en retard. Vous pouvez utiliser ce champ pour filtrer ou trier les tâches par urgence.
|
||||
</Note>
|
||||
|
||||
## Conditional Formula: Lead Score
|
||||
## Formule conditionnelle : score de lead
|
||||
|
||||
### Example: Calculate Lead Score Based on Criteria
|
||||
### Exemple : calculer le score de lead en fonction de critères
|
||||
|
||||
**Goal**: Score leads based on company size, industry, and engagement.
|
||||
**Objectif** : Noter les leads selon la taille de l'entreprise, le secteur d'activité et l'engagement.
|
||||
|
||||
### Setup
|
||||
### Installation
|
||||
|
||||
1. **Trigger**: Record is Updated (People or Companies)
|
||||
1. **Déclencheur** : Enregistrement mis à jour (Personnes ou Entreprises)
|
||||
|
||||
2. **Code action**:
|
||||
2. **Action de code** :
|
||||
|
||||
```javascript
|
||||
export const main = async (params) => {
|
||||
@@ -147,19 +147,19 @@ export const main = async (params) => {
|
||||
};
|
||||
```
|
||||
|
||||
3. **Update Record**: Set Lead Score to `{{code.leadScore}}`
|
||||
3. **Mettre à jour l'enregistrement** : Définir le score de lead sur `{{code.leadScore}}`
|
||||
|
||||
## Text Formula: Domain Extraction
|
||||
## Formule texte : extraction de domaine
|
||||
|
||||
### Example: Extract Domain from Email
|
||||
### Exemple : extraire le domaine à partir de l'email
|
||||
|
||||
**Goal**: Automatically extract and store the email domain.
|
||||
**Objectif** : Extraire et stocker automatiquement le domaine de l'email.
|
||||
|
||||
### Setup
|
||||
### Installation
|
||||
|
||||
1. **Trigger**: Record is Updated (People, Email field)
|
||||
1. **Déclencheur** : Enregistrement mis à jour (Personnes, champ Email)
|
||||
|
||||
2. **Code action**:
|
||||
2. **Action de code** :
|
||||
|
||||
```javascript
|
||||
export const main = async (params) => {
|
||||
@@ -173,30 +173,30 @@ export const main = async (params) => {
|
||||
};
|
||||
```
|
||||
|
||||
3. **Update Record**: Set Domain field to `{{code.domain}}`
|
||||
3. **Mettre à jour l'enregistrement** : Définir le champ Domaine sur `{{code.domain}}`
|
||||
|
||||
## Best Practices
|
||||
## Meilleures pratiques
|
||||
|
||||
### Performance
|
||||
### Performances
|
||||
|
||||
* Only trigger on relevant field changes
|
||||
* Use filters to skip records that don't need calculation
|
||||
* Avoid complex calculations in high-volume workflows
|
||||
* Ne déclenchez que lors des modifications de champs pertinentes
|
||||
* Utilisez des filtres pour ignorer les enregistrements qui n'ont pas besoin de calcul
|
||||
* Évitez les calculs complexes dans les workflows à fort volume
|
||||
|
||||
### Error Handling
|
||||
### Gestion des erreurs
|
||||
|
||||
* Check for null/undefined values before calculations
|
||||
* Use default values when data is missing
|
||||
* Return clear error messages when calculations fail
|
||||
* Vérifiez les valeurs null/undefined avant les calculs
|
||||
* Utilisez des valeurs par défaut lorsque des données manquent
|
||||
* Renvoyez des messages d'erreur clairs lorsque les calculs échouent
|
||||
|
||||
### Testing
|
||||
### Tests
|
||||
|
||||
* Test with edge cases (empty fields, zero values)
|
||||
* Verify calculations manually before activating
|
||||
* Monitor workflow runs for unexpected results
|
||||
* Testez avec des cas limites (champs vides, valeurs zéro)
|
||||
* Vérifiez manuellement les calculs avant l'activation
|
||||
* Surveillez les exécutions de workflows pour détecter des résultats inattendus
|
||||
|
||||
## Related
|
||||
## Articles connexes
|
||||
|
||||
* [How to Show Expected Amount in Pipeline](/l/fr/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline)
|
||||
* [How to Track Time in Stage](/l/fr/user-guide/views-pipelines/how-tos/track-time-in-stage)
|
||||
* [Workflow Actions](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Comment afficher le montant attendu dans le pipeline](/l/fr/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline)
|
||||
* [Comment suivre le temps par étape](/l/fr/user-guide/views-pipelines/how-tos/track-time-in-stage)
|
||||
* [Actions de workflows](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
|
||||
+127
@@ -0,0 +1,127 @@
|
||||
---
|
||||
title: Notifier les collègues d'une note à relire
|
||||
description: Envoyez des notifications par e-mail automatiques lorsque vous assignez un collègue pour relire une note.
|
||||
---
|
||||
|
||||
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
|
||||
|
||||
<Note>
|
||||
**La mention directe des collègues dans les notes n'est pas encore prise en charge.** Cette fonctionnalité est prévue pour le second semestre 2026. En attendant, ce workflow constitue une solution de contournement pratique.
|
||||
</Note>
|
||||
|
||||
## Le défi
|
||||
|
||||
Vous souhaitez mentionner un collègue dans une note afin qu'il reçoive une notification pour la relire. À ce jour, Twenty ne prend pas en charge les @mentions dans les notes ou les tâches.
|
||||
|
||||
## La solution de contournement
|
||||
|
||||
Au lieu de mentionner dans le texte de la note, vous pouvez :
|
||||
|
||||
1. Créez un champ de relation **Relecteur** sur l'objet Notes
|
||||
2. Attribuez le relecteur lors de la création ou de la modification de la note
|
||||
3. Un workflow envoie automatiquement un e-mail au relecteur avec un lien vers la note
|
||||
|
||||
<Warning>
|
||||
**Limitation** : Cette approche permet d'attribuer un seul relecteur par champ. Si vous devez notifier plusieurs personnes, créez des champs de relation supplémentaires (par ex. : Relecteur 1, Relecteur 2). Cela ne s'adaptera pas bien si vous devez mentionner de nombreux collaborateurs à la fois.
|
||||
</Warning>
|
||||
|
||||
## Configuration pas à pas
|
||||
|
||||
### Étape 1 : Créer le champ Relecteur
|
||||
|
||||
<img src="/images/user-guide/workflows/reviewer-field-for-note.png" style={{width:'100%'}} />
|
||||
|
||||
1. Allez dans **Paramètres → Modèle de données → Notes**
|
||||
2. Cliquez sur **Ajouter un champ**
|
||||
3. Configurer :
|
||||
|
||||
| Paramètre | Valeur |
|
||||
| -------------------- | -------------------------------------------------- |
|
||||
| **Name** | Relecteur |
|
||||
| **Type** | Relation |
|
||||
| **Objet lié** | Membre de l'espace de travail |
|
||||
| **Type de relation** | Plusieurs notes → Un membre de l'espace de travail |
|
||||
|
||||
4. Enregistrez le champ
|
||||
|
||||
### Étape 2 : Créer le workflow
|
||||
|
||||
<VimeoEmbed videoId="1151897168" title="Démonstration vidéo" />
|
||||
|
||||
#### Créer le déclencheur du workflow
|
||||
|
||||
1. Allez dans la vue principale et créez un nouveau workflow
|
||||
2. Sélectionnez **Record Updated** comme déclencheur
|
||||
3. Choisissez **Note** comme objet et indiquez le champ Relecteur.
|
||||
4. Cela se déclenchera chaque fois que le relecteur d'une note est mis à jour.
|
||||
|
||||
#### Ajouter un filtre pour vérifier qu'un relecteur vient d'être attribué
|
||||
|
||||
Ajoutez une action **Filtre** pour garantir que le workflow ne continue que lorsqu'un relecteur est attribué :
|
||||
|
||||
| Condition | Valeur |
|
||||
| ------------- | -------------- |
|
||||
| **Relecteur** | n'est pas vide |
|
||||
|
||||
#### Rechercher le membre de l'espace de travail
|
||||
|
||||
1. Ajoutez une action **Search Records**
|
||||
2. Sélectionnez **Membre de l'espace de travail** (dans les objets avancés)
|
||||
3. Ajoutez un filtre :
|
||||
|
||||
| Condition | Valeur |
|
||||
| --------- | ---------------------------- |
|
||||
| **ID** | égal à `{{note.reviewerId}}` |
|
||||
|
||||
Cela récupère l'enregistrement complet du membre de l'espace de travail, y compris son adresse e-mail et son nom.
|
||||
|
||||
#### Envoyer l'e-mail de notification
|
||||
|
||||
1. Ajoutez l'action **Envoyer un e-mail**
|
||||
2. Configurer :
|
||||
|
||||
| Champ | Valeur |
|
||||
| -------------------- | --------------------------------------------------- |
|
||||
| **À** | Search Record → First Workspace Member → User Email |
|
||||
| **Objet** | Une note nécessite votre relecture |
|
||||
| **Corps du message** | Voir l'exemple ci-dessous |
|
||||
|
||||
**Exemple de corps de l'e-mail :**
|
||||
|
||||
```text
|
||||
Hi {{searchRecord.firstWorkspaceMember.name.firstName}},
|
||||
|
||||
You've been assigned to review a note.
|
||||
|
||||
View the note here:
|
||||
https://yourSubDomain.twenty.com/object/note/{{recordIsUpdated.id}}
|
||||
|
||||
Best,
|
||||
Twenty
|
||||
```
|
||||
|
||||
<Note>
|
||||
Remplacez `yourSubDomain` par le sous-domaine réel de votre espace de travail Twenty.
|
||||
</Note>
|
||||
|
||||
#### Tester et activer
|
||||
|
||||
1. Cliquez sur **Test** pour exécuter le workflow manuellement
|
||||
2. Créez ou modifiez une note et attribuez un relecteur
|
||||
3. Vérifiez la boîte de réception du relecteur pour l'e-mail de notification
|
||||
4. Activez le flux de travail
|
||||
|
||||
## Utilisation
|
||||
|
||||
Une fois configuré, votre équipe peut utiliser ce workflow de la manière suivante :
|
||||
|
||||
1. Créer une nouvelle note (ou en modifier une existante)
|
||||
2. Sélectionner un collègue dans le champ **Relecteur**
|
||||
3. Le collègue reçoit automatiquement un e-mail avec un lien direct vers la note
|
||||
|
||||
## Articles connexes
|
||||
|
||||
* [Déclencheurs de workflows](/l/fr/user-guide/workflows/capabilities/workflow-triggers)
|
||||
* [Envoyer des e-mails depuis des flux de travail](/l/fr/user-guide/workflows/capabilities/send-emails-from-workflows)
|
||||
* [Créer des champs personnalisés](/l/fr/user-guide/data-model/how-tos/create-custom-fields)
|
||||
* [Créer des champs de relation](/l/fr/user-guide/data-model/how-tos/create-relation-fields)
|
||||
+48
-48
@@ -1,56 +1,56 @@
|
||||
---
|
||||
title: Send Email Alerts with Tasks Due
|
||||
description: Automatically notify team members about their upcoming or overdue tasks.
|
||||
title: Envoyer des alertes par e-mail pour les tâches arrivant à échéance
|
||||
description: Informer automatiquement les membres de l'équipe de leurs tâches à venir ou en retard.
|
||||
---
|
||||
|
||||
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
|
||||
|
||||
<img src="/images/user-guide/workflows/email_tasks_due.png" style={{width:'100%'}} />
|
||||
|
||||
Send daily email reminders to each team member about their tasks due today.
|
||||
Envoyer des rappels quotidiens par e-mail à chaque membre de l'équipe concernant ses tâches arrivant à échéance aujourd'hui.
|
||||
|
||||
## Overview
|
||||
## Vue d'ensemble
|
||||
|
||||
This workflow runs on a schedule and:
|
||||
Ce workflow s'exécute selon un calendrier et :
|
||||
|
||||
1. Fetches all workspace members
|
||||
2. Loops through each member
|
||||
3. Finds their tasks due today
|
||||
4. Formats and sends a personalized email
|
||||
1. Récupère tous les membres de l'espace de travail
|
||||
2. Parcourt chaque membre
|
||||
3. Trouve ses tâches arrivant à échéance aujourd'hui
|
||||
4. Formate et envoie un e-mail personnalisé
|
||||
|
||||
## Step-by-Step Setup
|
||||
## Configuration pas à pas
|
||||
|
||||
<VimeoEmbed videoId="1147463514" title="Video demonstration" />
|
||||
<VimeoEmbed videoId="1147463514" title="Démonstration vidéo" />
|
||||
|
||||
### Step 1: Configure the Trigger
|
||||
### Étape 1 : Configurer le déclencheur
|
||||
|
||||
1. Go to **Settings → Workflows** and create a new workflow
|
||||
2. Select **On a Schedule** as the trigger
|
||||
3. Use a cron expression for daily at 8:00 AM: `0 8 * * *`
|
||||
1. Allez dans **Paramètres → Workflows** et créez un nouveau workflow
|
||||
2. Sélectionnez **Selon un calendrier** comme déclencheur
|
||||
3. Utilisez une expression cron pour tous les jours à 8:00 : `0 8 * * *`
|
||||
|
||||
### Step 2: Search for All Workspace Members
|
||||
### Étape 2 : Rechercher tous les membres de l'espace de travail
|
||||
|
||||
1. Add a **Search Records** action
|
||||
2. Select **Workspace Members** (under advanced objects)
|
||||
3. No filters needed — this returns all members
|
||||
1. Ajoutez une action **Rechercher des enregistrements**
|
||||
2. Sélectionnez **Membres de l'espace de travail** (dans les objets avancés)
|
||||
3. Aucun filtre nécessaire — cela renvoie tous les membres
|
||||
|
||||
### Step 3: Add an Iterator
|
||||
### Étape 3 : Ajouter un itérateur
|
||||
|
||||
1. Add an **Iterator** action
|
||||
2. Set the input array to the workspace members from the previous step
|
||||
3. All actions inside the iterator will run once per member
|
||||
1. Ajoutez une action **Itérateur**
|
||||
2. Définissez le tableau d'entrée sur les membres de l'espace de travail de l'étape précédente
|
||||
3. Toutes les actions à l'intérieur de l'itérateur s'exécuteront une fois par membre
|
||||
|
||||
### Step 4: Search for Tasks Due Today (Inside Iterator)
|
||||
### Étape 4 : Rechercher les tâches arrivant à échéance aujourd'hui (dans l'itérateur)
|
||||
|
||||
1. Inside the iterator, add a **Search Records** action
|
||||
2. Select **Tasks** as the object
|
||||
3. Add filters:
|
||||
* **Assignee** = current workspace member (from the iterator)
|
||||
* **Due Date** = today
|
||||
1. À l'intérieur de l'itérateur, ajoutez une action **Rechercher des enregistrements**
|
||||
2. Sélectionnez **Tâches** comme objet
|
||||
3. Ajoutez des filtres :
|
||||
* **Assigné** = membre actuel de l'espace de travail (depuis l'itérateur)
|
||||
* **Date d'échéance** = aujourd'hui
|
||||
|
||||
### Step 5: Format Tasks into Email Body (Inside Iterator)
|
||||
### Étape 5 : Mettre en forme les tâches dans le corps de l'e-mail (dans l'itérateur)
|
||||
|
||||
Add a **Code** action to format the tasks into a readable list with links:
|
||||
Ajoutez une action **Code** pour mettre en forme les tâches en une liste lisible avec des liens :
|
||||
|
||||
```javascript
|
||||
export const main = async (params: {
|
||||
@@ -79,28 +79,28 @@ export const main = async (params: {
|
||||
```
|
||||
|
||||
<Note>
|
||||
Replace `yourSubDomain` with your actual Twenty workspace subdomain.
|
||||
Remplacez `yourSubDomain` par le sous-domaine réel de votre espace de travail Twenty.
|
||||
</Note>
|
||||
|
||||
### Step 6: Send Email (Inside Iterator)
|
||||
### Étape 6 : Envoyer un e-mail (dans l'itérateur)
|
||||
|
||||
1. Add a **Send Email** action (still inside the iterator)
|
||||
2. Configure:
|
||||
1. Ajoutez une action **Envoyer un e-mail** (toujours dans l'itérateur)
|
||||
2. Configurer:
|
||||
|
||||
| Field | Value |
|
||||
| ----------- | --------------------------------------------------------------- |
|
||||
| **To** | `{{iterator.currentItem.userEmail}}` (workspace member's email) |
|
||||
| **Subject** | Your Tasks Due Today |
|
||||
| **Body** | `{{code.formattedTasks}}` |
|
||||
| Champ | Valeur |
|
||||
| -------------------- | ------------------------------------------------------------------------------ |
|
||||
| **À** | `{{iterator.currentItem.userEmail}}` (e-mail du membre de l'espace de travail) |
|
||||
| **Objet** | Vos tâches arrivant à échéance aujourd'hui |
|
||||
| **Corps du message** | `{{code.formattedTasks}}` |
|
||||
|
||||
### Step 7: Test and Activate
|
||||
### Étape 7 : Tester et activer
|
||||
|
||||
1. Click **Test** to run the workflow manually
|
||||
2. Check inboxes for the emails
|
||||
3. Activate the workflow
|
||||
1. Cliquez sur **Test** pour exécuter le workflow manuellement
|
||||
2. Vérifiez les boîtes de réception pour les e-mails
|
||||
3. Activez le workflow
|
||||
|
||||
## Related
|
||||
## Articles connexes
|
||||
|
||||
* [Workflow Actions](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Send Emails from Workflows](/l/fr/user-guide/workflows/capabilities/send-emails-from-workflows)
|
||||
* [Handle Arrays in Code Actions](/l/fr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
|
||||
* [Actions de workflows](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Envoyer des e-mails depuis des workflows](/l/fr/user-guide/workflows/capabilities/send-emails-from-workflows)
|
||||
* [Gérer les tableaux dans les actions Code](/l/fr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
|
||||
|
||||
+18
-18
@@ -1,29 +1,29 @@
|
||||
---
|
||||
title: Professional Services
|
||||
description: Get professional help building complex workflows and automations from Twenty's team and certified partners.
|
||||
title: Services Professionnels
|
||||
description: Obtenez de l'aide professionnelle pour créer des workflows et automatisations complexes grâce à l'équipe de Twenty et à ses partenaires certifiés.
|
||||
---
|
||||
|
||||
## When Do You Need Professional Help?
|
||||
## Quand avez-vous besoin d'une aide professionnelle ?
|
||||
|
||||
Consider professional services for:
|
||||
Considérez les services professionnels pour :
|
||||
|
||||
* Complex multi-system integrations
|
||||
* Advanced business logic and automation rules
|
||||
* Large-scale data processing workflows
|
||||
* Custom API development
|
||||
* Team training and workflow optimization
|
||||
* When you don't have internal resources
|
||||
* Intégrations complexes de plusieurs systèmes
|
||||
* Logique métier avancée et règles d'automatisation
|
||||
* Workflows de traitement de données à grande échelle
|
||||
* Développement d'API sur mesure
|
||||
* Formation d'équipe et optimisation des workflows
|
||||
* Quand vous n'avez pas de ressources internes
|
||||
|
||||
## Service Options
|
||||
## Options de Service
|
||||
|
||||
### Onboarding Packs
|
||||
### Packs d'intégration
|
||||
|
||||
Get help from our core team with our 4-hour [Onboarding packs](https://twenty.com/onboarding-packages):
|
||||
Obtenez de l'aide de notre équipe centrale avec nos packs [d'intégration de 4 heures](https://twenty.com/onboarding-packages) :
|
||||
|
||||
* **Workflow Creation**: Build custom workflows for your business processes
|
||||
* **Data Model Design**: Optimize your data structure for workflow automation
|
||||
* **Data Migration**: Import existing data with proper workflow integration
|
||||
* **Création de Workflow** : Construisez des workflows personnalisés pour vos processus métier
|
||||
* **Conception de Modèle de Données** : Optimisez votre structure de données pour l'automatisation des workflows
|
||||
* **Migration de Données** : Importez des données existantes avec une intégration de workflow appropriée
|
||||
|
||||
### Implementation Partners
|
||||
### Partenaires pour l'Implémentation
|
||||
|
||||
Work with certified partners for advanced customizations. Contact us at contact@twenty.com to connect with our [implementation partners](https://twenty.com/partners).
|
||||
Collaborez avec des partenaires certifiés pour des personnalisations avancées. Contactez-nous à l'adresse contact@twenty.com pour vous mettre en relation avec nos [partenaires d'intégration](https://twenty.com/partners).
|
||||
|
||||
+111
-111
@@ -1,170 +1,170 @@
|
||||
---
|
||||
title: Workflow Troubleshooting
|
||||
description: Common workflow issues and how to resolve them.
|
||||
title: Dépannage du Flux de Travail
|
||||
description: Problèmes courants des flux de travail et comment les résoudre.
|
||||
---
|
||||
|
||||
## Common Issues and Solutions
|
||||
## Problèmes Courants et Solutions
|
||||
|
||||
### Workflow Not Triggering
|
||||
### Flux de Travail Ne Se Déclenchant Pas
|
||||
|
||||
**Symptoms**: Your workflow doesn't run when you expect it to.
|
||||
**Symptômes**: Votre flux de travail ne s'exécute pas lorsque vous vous y attendez.
|
||||
|
||||
**Possible Causes**:
|
||||
**Causes possibles**:
|
||||
|
||||
1. **Workflow not activated**: Ensure the workflow is set to "Active" not "Draft"
|
||||
2. **Trigger conditions not met**: Verify the trigger matches your expected event
|
||||
3. **Field not monitored**: For "Record is Updated" triggers, ensure the specific field is being watched
|
||||
4. **Permissions**: Check you have permission to run workflows
|
||||
1. **Flux de travail non activé**: Assurez-vous que le flux de travail est défini sur "Active" et non sur "Draft"
|
||||
2. **Conditions de déclenchement non remplies**: Vérifiez que le déclencheur correspond à l'événement attendu
|
||||
3. **Champ non surveillé**: Pour les déclencheurs "Record is Updated", assurez-vous que le champ spécifique est surveillé
|
||||
4. **Autorisations**: Vérifiez que vous avez l'autorisation d'exécuter des flux de travail
|
||||
|
||||
**Solutions**:
|
||||
**Solutions** :
|
||||
|
||||
* Verify workflow status in the workflow list
|
||||
* Test with the specific action you expect to trigger it
|
||||
* Review trigger configuration
|
||||
* Contact your admin about permissions
|
||||
* Vérifiez le statut du flux de travail dans la liste des flux de travail
|
||||
* Testez avec l'action spécifique qui est censée le déclencher
|
||||
* Passez en revue la configuration du déclencheur
|
||||
* Contactez votre administrateur au sujet des autorisations
|
||||
|
||||
### Workflow Triggers Too Early (Empty Fields)
|
||||
### Déclenchement du flux de travail trop tôt (champs vides)
|
||||
|
||||
**Symptoms**: When manually creating a record in the UI, your workflow triggers before you've had time to fill in all the fields. The workflow runs with mostly empty field values.
|
||||
**Symptômes**: Lors de la création manuelle d'un enregistrement dans l'interface, votre flux de travail se déclenche avant que vous n'ayez eu le temps de remplir tous les champs. Le flux de travail s'exécute alors que la plupart des champs sont vides.
|
||||
|
||||
**Why this happens**: Twenty saves everything in real-time — there's no separate "edit" vs "read" mode. When you create a record, it's saved immediately, triggering the "Record is created" event before you can fill in additional fields.
|
||||
**Pourquoi cela se produit**: Twenty enregistre tout en temps réel — il n'y a pas de mode "édition" distinct du mode "lecture". Lorsque vous créez un enregistrement, il est enregistré immédiatement, déclenchant l'événement "Record is created" avant que vous ne puissiez remplir des champs supplémentaires.
|
||||
|
||||
**When "Record is created" works well**:
|
||||
**Quand "Record is created" fonctionne bien**:
|
||||
|
||||
* Records created via API calls (fields are populated in a single request)
|
||||
* Records created via import
|
||||
* Automated record creation from other workflows
|
||||
* Enregistrements créés via des appels API (les champs sont renseignés en une seule requête)
|
||||
* Enregistrements créés via une importation
|
||||
* Création automatisée d'enregistrements à partir d'autres flux de travail
|
||||
|
||||
**Solution**: For records created manually in the UI, use **"Record is created or updated"** as your trigger instead. This way:
|
||||
**Solution**: Pour les enregistrements créés manuellement dans l'interface, utilisez plutôt **"Record is created or updated"** comme déclencheur. Ainsi:
|
||||
|
||||
* The workflow triggers after the user has finished filling in and saving the fields
|
||||
* You get the complete data rather than empty values
|
||||
* Le flux de travail se déclenche après que l'utilisateur a fini de remplir et d'enregistrer les champs
|
||||
* Vous obtenez des données complètes plutôt que des valeurs vides
|
||||
|
||||
<Tip>
|
||||
If you only want the workflow to run once per record, add a Filter action to check a field like `createdAt equals updatedAt` (first save) or use a custom checkbox field to track if the workflow has already run.
|
||||
Si vous souhaitez que le flux de travail ne s'exécute qu'une seule fois par enregistrement, ajoutez une action Filter pour vérifier un champ comme `createdAt equals updatedAt` (première sauvegarde) ou utilisez un champ à case à cocher personnalisé pour suivre si le flux de travail s'est déjà exécuté.
|
||||
</Tip>
|
||||
|
||||
### Actions Failing
|
||||
### Actions en échec
|
||||
|
||||
**Symptoms**: Workflow runs but some actions fail.
|
||||
**Symptômes**: Le flux de travail s'exécute mais certaines actions échouent.
|
||||
|
||||
**Possible Causes**:
|
||||
**Causes possibles**:
|
||||
|
||||
1. **Missing data**: Required fields are empty
|
||||
2. **Invalid references**: Variables from previous steps don't exist
|
||||
3. **API errors**: External services returning errors
|
||||
4. **Permission issues**: Action requires permissions you don't have
|
||||
1. **Données manquantes**: Les champs requis sont vides
|
||||
2. **Références invalides**: Les variables des étapes précédentes n'existent pas
|
||||
3. **Erreurs d'API**: Les services externes renvoient des erreurs
|
||||
4. **Problèmes d'autorisations**: L'action requiert des autorisations que vous n'avez pas
|
||||
|
||||
**Solutions**:
|
||||
**Solutions** :
|
||||
|
||||
* Check the workflow run details for error messages
|
||||
* Verify all required fields have values
|
||||
* Test API connections independently
|
||||
* Review role permissions
|
||||
* Examinez les détails de l'exécution du flux de travail pour trouver des messages d'erreur
|
||||
* Vérifiez que tous les champs requis ont des valeurs
|
||||
* Testez les connexions à l'API indépendamment
|
||||
* Passez en revue les autorisations des rôles
|
||||
|
||||
### HTTP Request Errors
|
||||
### Erreurs de requête HTTP
|
||||
|
||||
**Symptoms**: HTTP Request actions fail or return unexpected results.
|
||||
**Symptômes**: Les actions HTTP Request échouent ou renvoient des résultats inattendus.
|
||||
|
||||
**Common Error Codes**:
|
||||
**Codes d'erreur courants**:
|
||||
|
||||
* **400**: Bad request - check your request body format
|
||||
* **401**: Unauthorized - verify API key
|
||||
* **403**: Forbidden - check API permissions
|
||||
* **404**: Not found - verify endpoint URL
|
||||
* **429**: Too many requests - implement rate limiting
|
||||
* **500**: Server error - external service issue
|
||||
* **400**: Mauvaise requête - vérifiez le format du corps de la requête
|
||||
* **401**: Non autorisé - vérifiez la clé API
|
||||
* **403**: Interdit - vérifiez les autorisations de l'API
|
||||
* **404**: Introuvable - vérifiez l'URL du point de terminaison
|
||||
* **429**: Trop de requêtes - mettez en place une limitation de débit
|
||||
* **500**: Erreur serveur - problème du service externe
|
||||
|
||||
**Solutions**:
|
||||
**Solutions** :
|
||||
|
||||
* Verify API endpoint URL
|
||||
* Check authentication headers
|
||||
* Test the API call outside of Twenty first
|
||||
* Add error handling in Code actions
|
||||
* Vérifiez l'URL du point de terminaison de l'API
|
||||
* Vérifiez les en-têtes d'authentification
|
||||
* Testez d'abord l'appel d'API en dehors de Twenty
|
||||
* Ajoutez une gestion des erreurs dans les actions Code
|
||||
|
||||
### Code Action Errors
|
||||
### Erreurs des actions Code
|
||||
|
||||
**Symptoms**: JavaScript code fails to execute.
|
||||
**Symptômes**: Le code JavaScript ne s'exécute pas.
|
||||
|
||||
**Common Issues**:
|
||||
**Problèmes courants**:
|
||||
|
||||
1. **Syntax errors**: Typos or invalid JavaScript
|
||||
2. **Undefined variables**: Referencing variables that don't exist
|
||||
3. **Type errors**: Operations on wrong data types
|
||||
4. **Timeouts**: Code taking too long to execute
|
||||
1. **Erreurs de syntaxe**: Fautes de frappe ou JavaScript invalide
|
||||
2. **Variables non définies**: Faire référence à des variables qui n'existent pas
|
||||
3. **Erreurs de type**: Opérations sur des types de données incorrects
|
||||
4. **Dépassements de délai**: Le code met trop de temps à s'exécuter
|
||||
|
||||
**Solutions**:
|
||||
**Solutions** :
|
||||
|
||||
* Use the built-in code editor validation
|
||||
* Test code logic in a JavaScript console first
|
||||
* Add console.log statements for debugging
|
||||
* Simplify complex operations
|
||||
* Utilisez la validation intégrée de l'éditeur de code
|
||||
* Testez d'abord la logique du code dans une console JavaScript
|
||||
* Ajoutez des instructions console.log pour le débogage
|
||||
* Simplifiez les opérations complexes
|
||||
|
||||
### Email Not Sending
|
||||
### E-mails non envoyés
|
||||
|
||||
**Symptoms**: Send Email action doesn't deliver emails.
|
||||
**Symptômes**: L'action Send Email ne délivre pas les e-mails.
|
||||
|
||||
**Possible Causes**:
|
||||
**Causes possibles**:
|
||||
|
||||
1. **No email account connected**: Check Settings → Accounts
|
||||
2. **Invalid email address**: Recipient email is malformed
|
||||
3. **Sending limits**: Email provider rate limits reached
|
||||
4. **Spam filters**: Emails being blocked
|
||||
1. **Aucun compte e-mail connecté**: Vérifiez Settings → Accounts
|
||||
2. **Adresse e-mail invalide**: L'adresse e-mail du destinataire est mal formée
|
||||
3. **Limites d'envoi**: Limites de débit du fournisseur d'e-mails atteintes
|
||||
4. **Filtres anti-spam**: Les e-mails sont bloqués
|
||||
|
||||
**Solutions**:
|
||||
**Solutions** :
|
||||
|
||||
* Verify email account connection
|
||||
* Validate recipient email addresses
|
||||
* Check email provider limits
|
||||
* Review email content for spam triggers
|
||||
* Vérifiez la connexion du compte e-mail
|
||||
* Validez les adresses e-mail des destinataires
|
||||
* Vérifiez les limites du fournisseur d'e-mails
|
||||
* Examinez le contenu de l'e-mail pour détecter des déclencheurs de spam
|
||||
|
||||
## Debugging Workflows
|
||||
## Débogage des flux de travail
|
||||
|
||||
### Using Workflow Runs
|
||||
### Utiliser les exécutions de flux de travail
|
||||
|
||||
1. Go to the workflow editor
|
||||
2. Open the **Runs** panel
|
||||
3. Find the failed run
|
||||
4. Click to see step-by-step details
|
||||
5. Review error messages and output data
|
||||
1. Accédez à l'éditeur de flux de travail
|
||||
2. Ouvrez le panneau **Runs**
|
||||
3. Trouvez l'exécution en échec
|
||||
4. Cliquez pour voir les détails étape par étape
|
||||
5. Passez en revue les messages d'erreur et les données de sortie
|
||||
|
||||
### Testing Individual Steps
|
||||
### Tester les étapes individuellement
|
||||
|
||||
1. For Code actions, use the **Test** button
|
||||
2. For HTTP requests, test the endpoint separately
|
||||
3. Create test records to trigger workflows
|
||||
4. Use manual triggers for controlled testing
|
||||
1. Pour les actions Code, utilisez le bouton **Test**
|
||||
2. Pour les requêtes HTTP, testez le point de terminaison séparément
|
||||
3. Créez des enregistrements de test pour déclencher des flux de travail
|
||||
4. Utilisez des déclencheurs manuels pour des tests contrôlés
|
||||
|
||||
### Common Debugging Patterns
|
||||
### Schémas de débogage courants
|
||||
|
||||
**Add logging**:
|
||||
Use Code actions to log intermediate values for debugging.
|
||||
**Ajoutez des logs**:
|
||||
Utilisez des actions Code pour consigner des valeurs intermédiaires à des fins de débogage.
|
||||
|
||||
**Isolate steps**:
|
||||
Test each step independently to identify failures.
|
||||
**Isolez les étapes**:
|
||||
Testez chaque étape indépendamment pour identifier les échecs.
|
||||
|
||||
**Check data flow**:
|
||||
Verify that each step receives the expected input data.
|
||||
**Vérifiez le flux de données**:
|
||||
Assurez-vous que chaque étape reçoit les données d'entrée attendues.
|
||||
|
||||
## Best Practices to Avoid Issues
|
||||
## Bonnes pratiques pour éviter les problèmes
|
||||
|
||||
### Before Activation
|
||||
### Avant l'activation
|
||||
|
||||
* Test thoroughly in draft mode
|
||||
* Validate all API connections
|
||||
* Review trigger conditions carefully
|
||||
* Document expected behavior
|
||||
* Testez minutieusement en mode brouillon
|
||||
* Validez toutes les connexions API
|
||||
* Examinez attentivement les conditions de déclenchement
|
||||
* Documentez le comportement attendu
|
||||
|
||||
### During Development
|
||||
### Pendant le développement
|
||||
|
||||
* Use descriptive step names
|
||||
* Add comments in Code actions
|
||||
* Test with realistic data
|
||||
* Plan for edge cases
|
||||
* Utilisez des noms d'étapes descriptifs
|
||||
* Ajoutez des commentaires dans les actions Code
|
||||
* Testez avec des données réalistes
|
||||
* Prévoyez les cas limites
|
||||
|
||||
### After Activation
|
||||
### Après l'activation
|
||||
|
||||
* Monitor initial runs closely
|
||||
* Set up alerts for failures
|
||||
* Review run history regularly
|
||||
* Keep workflows simple when possible
|
||||
* Surveillez de près les premières exécutions
|
||||
* Configurez des alertes pour les échecs
|
||||
* Examinez régulièrement l'historique des exécutions
|
||||
* Gardez les flux de travail simples lorsque c'est possible
|
||||
|
||||
+146
-146
@@ -1,48 +1,48 @@
|
||||
---
|
||||
title: Workflows FAQ
|
||||
description: Frequently asked questions about workflows in Twenty.
|
||||
title: FAQ sur les flux de travail
|
||||
description: Foire aux questions sur les flux de travail dans Twenty.
|
||||
---
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Why can't I activate a workflow?">
|
||||
This is likely a permissions issue. You need access to workflows to create and activate them.
|
||||
<Accordion title="Pourquoi ne puis-je pas activer un flux de travail ?">
|
||||
Il s'agit probablement d'un problème de permissions. Vous avez besoin d'un accès aux flux de travail pour les créer et les activer.
|
||||
|
||||
**Solution**: Contact your workspace administrator to grant you workflow access under **Settings → Roles**.
|
||||
**Solution** : Contactez l'administrateur de votre espace de travail pour vous accorder l'accès aux flux de travail dans **Paramètres → Rôles**.
|
||||
|
||||
If you don't see the Workflows section at all in your sidebar, this confirms it's a permissions issue.
|
||||
Si vous ne voyez pas du tout la section des flux de travail dans votre barre latérale, cela confirme qu'il s'agit d'un problème de permissions.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Why don't I see my manual workflow button in the top navbar?">
|
||||
Manual workflows only appear in the navbar if properly configured:
|
||||
<Accordion title="Pourquoi ne vois-je pas mon bouton de flux de travail manuel dans la barre de navigation supérieure ?">
|
||||
Les flux de travail manuels n'apparaissent dans la barre de navigation que s'ils sont correctement configurés :
|
||||
|
||||
1. The workflow must be **activated** (not in draft mode)
|
||||
2. The navbar placement must be set to **Pinned**
|
||||
3. For Single/Bulk triggers, you must be on the correct object page
|
||||
1. Le flux de travail doit être **activé** (pas en mode brouillon)
|
||||
2. L'emplacement dans la barre de navigation doit être défini sur **Pinned**
|
||||
3. Pour les déclencheurs Single/Bulk, vous devez vous trouver sur la page d'objet appropriée
|
||||
|
||||
**To check**: Open the workflow → click the trigger → verify "Navbar placement" is set to "Pinned".
|
||||
**À vérifier** : Ouvrez le flux de travail → cliquez sur le déclencheur → vérifiez que "Navbar placement" est défini sur "Pinned".
|
||||
|
||||
You can always access manual workflows via **Cmd + K** (or **Ctrl + K**) regardless of navbar settings.
|
||||
Vous pouvez toujours accéder aux flux de travail manuels via **Cmd + K** (ou **Ctrl + K**), quels que soient les paramètres de la barre de navigation.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="What's the difference between Single, Global, and Bulk manual triggers?">
|
||||
| Type | Records Required | Workflow Runs |
|
||||
| ---- | ---------------- | ------------- |
|
||||
<Accordion title="Quelle est la différence entre les déclencheurs manuels Single, Global et Bulk ?">
|
||||
| Type | Enregistrements requis | Exécutions de workflows |
|
||||
| ---- | ---------------------- | ----------------------- |
|
||||
|
||||
\| **Global** | None | Once, no record input |
|
||||
\| **Single** | One or more selected | Once per selected record |
|
||||
\| **Bulk** | One or more selected | Once, with all records as array |
|
||||
\| **Global** | Aucun | Une fois, sans saisie d'enregistrement |
|
||||
\| **Single** | Un ou plusieurs sélectionnés | Une fois par enregistrement sélectionné |
|
||||
\| **Bulk** | Un ou plusieurs sélectionnés | Une fois, avec tous les enregistrements sous forme de tableau |
|
||||
|
||||
* **Global**: Use when the workflow doesn't need any record context (e.g., generate a report)
|
||||
* **Single**: Use when you want to process each selected record independently (e.g., send individual emails)
|
||||
* **Bulk**: Use when you need to process records together or optimize credit usage (requires Iterator action)
|
||||
* **Global** : À utiliser lorsque le flux de travail n'a besoin d'aucun contexte d'enregistrement (p. ex., générer un rapport)
|
||||
* **Single** : À utiliser lorsque vous souhaitez traiter chaque enregistrement sélectionné indépendamment (p. ex., envoyer des e-mails individuels)
|
||||
* **Bulk** : À utiliser lorsque vous devez traiter les enregistrements ensemble ou optimiser l'utilisation des crédits (nécessite l'action Iterator)
|
||||
|
||||
See [Workflow Triggers](/l/fr/user-guide/workflows/capabilities/workflow-triggers) for details.
|
||||
Voir [Déclencheurs de flux de travail](/l/fr/user-guide/workflows/capabilities/workflow-triggers) pour plus de détails.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="I don't see an If/Else node. What should I do?">
|
||||
An explicit If/Else node is not yet available but is on our roadmap.
|
||||
<Accordion title="Je ne vois pas de nœud If/Else. Que dois-je faire ?">
|
||||
Un nœud If/Else explicite n'est pas encore disponible, mais il figure sur notre feuille de route.
|
||||
|
||||
**Current workaround**: Create multiple branches from your step, each starting with a **Filter** action:
|
||||
**Solution de contournement actuelle** : Créez plusieurs branches à partir de votre étape, chacune commençant par une action **Filter** :
|
||||
|
||||
```
|
||||
Step 1
|
||||
@@ -52,203 +52,203 @@ description: Frequently asked questions about workflows in Twenty.
|
||||
└── Branch B: Filter (condition = false) → Actions...
|
||||
```
|
||||
|
||||
Only the branch where the filter condition passes will execute its subsequent actions.
|
||||
Seule la branche où la condition du filtre est vérifiée exécutera ses actions suivantes.
|
||||
|
||||
See [How to Use Branches](/l/fr/user-guide/workflows/capabilities/workflow-branches) for a step-by-step guide.
|
||||
Voir [Comment utiliser les branches](/l/fr/user-guide/workflows/capabilities/workflow-branches) pour un guide étape par étape.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Are workflow branches running in parallel?">
|
||||
**Yes**, branches run in parallel by default.
|
||||
<Accordion title="Les branches de flux de travail s'exécutent-elles en parallèle ?">
|
||||
**Oui**, les branches s'exécutent par défaut en parallèle.
|
||||
|
||||
If you want only one branch to execute:
|
||||
Si vous souhaitez qu'une seule branche s'exécute :
|
||||
|
||||
* Add a **Filter** action at the start of each branch
|
||||
* Set opposite conditions (e.g., Branch A: status = "Open", Branch B: status ≠ "Open")
|
||||
* Ajoutez une action **Filter** au début de chaque branche
|
||||
* Définissez des conditions opposées (p. ex., Branche A : status = "Open", Branche B : status ≠ "Open")
|
||||
|
||||
Branches that fail their filter condition stop executing, while others continue.
|
||||
Les branches qui ne satisfont pas leur condition de filtre cessent de s'exécuter, tandis que les autres continuent.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Can I merge branches back together?">
|
||||
**Yes**. After your parallel branches complete, you can add a step that both branches connect to.
|
||||
<Accordion title="Puis-je fusionner les branches ?">
|
||||
**Oui**. Après l'exécution de vos branches parallèles, vous pouvez ajouter une étape à laquelle les deux branches se connectent.
|
||||
|
||||
In the workflow editor:
|
||||
Dans l'éditeur de flux de travail :
|
||||
|
||||
1. Complete your branched actions
|
||||
2. Add a new step after the branches
|
||||
3. Drag connections from the end of each branch to this new step
|
||||
1. Terminez vos actions dans les branches
|
||||
2. Ajoutez une nouvelle étape après les branches
|
||||
3. Faites glisser des connexions depuis la fin de chaque branche vers cette nouvelle étape
|
||||
|
||||
The merged step will execute after all connected branches complete.
|
||||
L'étape fusionnée s'exécutera après l'achèvement de toutes les branches connectées.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="What's the limit on Search Records results?">
|
||||
**Search Records returns a maximum of 200 records.**
|
||||
<Accordion title="Quelle est la limite des résultats de Search Records ?">
|
||||
**Search Records renvoie un maximum de 200 enregistrements.**
|
||||
|
||||
If you need to process more:
|
||||
Si vous devez en traiter davantage :
|
||||
|
||||
* Add more specific filters to reduce results
|
||||
* Use scheduled workflows to process in batches
|
||||
* Consider using the API for bulk operations
|
||||
* Ajoutez des filtres plus spécifiques pour réduire les résultats
|
||||
* Utilisez des flux de travail planifiés pour traiter par lots
|
||||
* Envisagez d'utiliser l'API pour des opérations en masse
|
||||
|
||||
For most workflows, 200 records is sufficient. If you regularly hit this limit, consider restructuring your automation.
|
||||
Pour la plupart des flux de travail, 200 enregistrements suffisent. Si vous atteignez régulièrement cette limite, envisagez de restructurer votre automatisation.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Can I CC people on workflow emails?">
|
||||
**Not yet.** CC and BCC fields for the Send Email action are on our roadmap.
|
||||
<Accordion title="Puis-je mettre des personnes en CC sur les e-mails de flux de travail ?">
|
||||
**Pas encore.** Les champs CC et Cci pour l'action Send Email figurent sur notre feuille de route.
|
||||
|
||||
**Current workaround**: Add multiple Send Email actions to send to additional recipients, or use an HTTP Request to send via an external email service that supports CC.
|
||||
**Solution de contournement actuelle** : Ajoutez plusieurs actions Send Email pour envoyer à des destinataires supplémentaires, ou utilisez une HTTP Request pour envoyer via un service de messagerie externe qui prend en charge le CC.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="How do I use outputs from previous steps?">
|
||||
Every action produces output data that can be used in subsequent steps.
|
||||
<Accordion title="Comment utiliser les sorties des étapes précédentes ?">
|
||||
Chaque action produit des données de sortie qui peuvent être utilisées dans les étapes suivantes.
|
||||
|
||||
**To reference previous step data**:
|
||||
**Pour référencer les données d'une étape précédente** :
|
||||
|
||||
* Use the variable picker when configuring a field
|
||||
* Or type `{{stepName.fieldName}}` directly
|
||||
* Utilisez le sélecteur de variables lors de la configuration d'un champ
|
||||
* Ou saisissez directement `{{stepName.fieldName}}`
|
||||
|
||||
**Examples**:
|
||||
**Exemples** :
|
||||
|
||||
* Trigger data: `{{trigger.object.email}}`
|
||||
* Search results: `{{searchRecords[0].name}}`
|
||||
* Code output: `{{code.calculatedValue}}`
|
||||
* Données du déclencheur : `{{trigger.object.email}}`
|
||||
* Résultats de la recherche : `{{searchRecords[0].name}}`
|
||||
* Sortie du code : `{{code.calculatedValue}}`
|
||||
|
||||
Hover over any field in the action configuration to see available variables from previous steps.
|
||||
Survolez n'importe quel champ dans la configuration de l'action pour voir les variables disponibles provenant des étapes précédentes.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Why does my Iterator fail?">
|
||||
**Iterator requires an array input.** Common issues:
|
||||
<Accordion title="Pourquoi mon Iterator échoue-t-il ?">
|
||||
**Iterator nécessite en entrée un tableau.** Problèmes courants :
|
||||
|
||||
1. **Input is not an array**: Ensure you're passing results from Search Records or another action that returns an array
|
||||
2. **Array is empty**: Add a filter before Iterator to check `{{searchRecords.length}} > 0`
|
||||
3. **Wrong variable selected**: Make sure you select the array itself, not a single record
|
||||
1. **L'entrée n'est pas un tableau** : Assurez-vous de transmettre les résultats de Search Records ou d'une autre action qui renvoie un tableau
|
||||
2. **Le tableau est vide** : Ajoutez un filtre avant Iterator pour vérifier `{{searchRecords.length}} > 0`
|
||||
3. **Mauvaise variable sélectionnée** : Assurez-vous de sélectionner le tableau lui-même, et non un seul enregistrement
|
||||
|
||||
**Correct setup**:
|
||||
**Configuration correcte** :
|
||||
|
||||
1. Search Records (returns array)
|
||||
2. Filter: length > 0
|
||||
3. Iterator: select `{{searchRecords}}`
|
||||
4. Actions inside iterator use `{{iterator.currentItem.fieldName}}`
|
||||
1. Search Records (renvoie un tableau)
|
||||
2. Filtre : length > 0
|
||||
3. Iterator : sélectionnez `{{searchRecords}}`
|
||||
4. Les actions à l'intérieur d'Iterator utilisent `{{iterator.currentItem.fieldName}}`
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="What's the maximum execution time for Code actions?">
|
||||
Code actions (serverless functions) have a **default timeout of 5 minutes** (300 seconds).
|
||||
<Accordion title="Quel est le temps d'exécution maximal pour les actions Code ?">
|
||||
Les actions Code (fonctions serverless) ont un **délai d'expiration par défaut de 5 minutes** (300 secondes).
|
||||
|
||||
The maximum configurable timeout is **15 minutes** (900 seconds).
|
||||
Le délai d'expiration maximal configurable est de **15 minutes** (900 secondes).
|
||||
|
||||
If your code exceeds this limit, the action will fail with a timeout error.
|
||||
Si votre code dépasse cette limite, l'action échouera avec une erreur de délai d'expiration.
|
||||
|
||||
**Tips to avoid timeouts**:
|
||||
**Conseils pour éviter les délais d'expiration** :
|
||||
|
||||
* Break large operations into smaller chunks using Iterator
|
||||
* Avoid heavy computations; use external services via HTTP Request for intensive processing
|
||||
* Optimize your code to reduce execution time
|
||||
* If you need longer processing, consider using scheduled workflows that process data in batches
|
||||
* Divisez les opérations volumineuses en plus petits blocs à l'aide d'Iterator
|
||||
* Évitez les calculs lourds ; utilisez des services externes via HTTP Request pour les traitements intensifs
|
||||
* Optimisez votre code pour réduire le temps d'exécution
|
||||
* Si vous avez besoin d'un traitement plus long, envisagez d'utiliser des flux de travail planifiés qui traitent les données par lots
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="How do I read workflow runs?">
|
||||
Workflow runs show the execution history and help you debug issues.
|
||||
<Accordion title="Comment lire les exécutions de flux de travail ?">
|
||||
Les exécutions de flux de travail affichent l'historique d'exécution et vous aident à diagnostiquer les problèmes.
|
||||
|
||||
**Access runs**:
|
||||
**Accéder aux exécutions** :
|
||||
|
||||
* In workflow editor → **Runs** panel on the right
|
||||
* Or go to **Workflow Runs** in the sidebar
|
||||
* Dans l'éditeur de flux de travail → volet **Runs** à droite
|
||||
* Ou allez à **Workflow Runs** dans la barre latérale
|
||||
|
||||
**Understanding a run**:
|
||||
**Comprendre une exécution** :
|
||||
|
||||
* **Status**: Running, Completed, Failed, Waiting
|
||||
* **Steps**: See which steps executed and their output
|
||||
* **Errors**: Click failed steps to see error messages
|
||||
* **Data**: View input/output data at each step
|
||||
* **Statut** : En cours, Terminé, Échoué, En attente
|
||||
* **Étapes** : Voyez quelles étapes ont été exécutées et leur sortie
|
||||
* **Erreurs** : Cliquez sur les étapes en échec pour voir les messages d'erreur
|
||||
* **Données** : Affichez les données d'entrée/sortie à chaque étape
|
||||
|
||||
See [Workflow Runs](/l/fr/user-guide/workflows/capabilities/workflow-runs) for details.
|
||||
Voir [Exécutions de flux de travail](/l/fr/user-guide/workflows/capabilities/workflow-runs) pour plus de détails.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Why don't I see my workflow runs?">
|
||||
Workflow runs might be failing immediately due to rate limits.
|
||||
<Accordion title="Pourquoi ne vois-je pas mes exécutions de flux de travail ?">
|
||||
Les exécutions de flux de travail peuvent échouer immédiatement en raison des limites de débit.
|
||||
|
||||
**Hard limit: 5,000 runs per hour per workspace.**
|
||||
**Limite stricte : 5 000 exécutions par heure et par espace de travail.**
|
||||
|
||||
If you exceed this limit, workflows are immediately marked as failed and won't appear in your runs list as expected.
|
||||
Si vous dépassez cette limite, les flux de travail sont immédiatement marqués comme ayant échoué et n'apparaîtront pas dans votre liste d'exécutions comme prévu.
|
||||
|
||||
**Common scenarios that hit this limit**:
|
||||
**Scénarios courants qui atteignent cette limite** :
|
||||
|
||||
* Selecting more than 5,000 records with a Single manual trigger
|
||||
* Multiple workflows running simultaneously across your workspace
|
||||
* High-frequency automated triggers (e.g., Record Updated on a busy object)
|
||||
* Sélection de plus de 5 000 enregistrements avec un déclencheur manuel Single
|
||||
* Plusieurs flux de travail s'exécutant simultanément dans votre espace de travail
|
||||
* Déclencheurs automatisés à haute fréquence (p. ex., Record Updated sur un objet très sollicité)
|
||||
|
||||
**Solutions**:
|
||||
**Solutions** :
|
||||
|
||||
* Use **Bulk** triggers instead of Single to process many records in one run
|
||||
* Space out large batch operations
|
||||
* Use filters to reduce trigger frequency
|
||||
* Schedule heavy workflows during off-peak hours
|
||||
* Utilisez des déclencheurs **Bulk** plutôt que Single pour traiter de nombreux enregistrements en une seule exécution
|
||||
* Espacez les opérations de traitement par lots
|
||||
* Utilisez des filtres pour réduire la fréquence des déclencheurs
|
||||
* Planifiez les flux de travail lourds pendant les heures creuses
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="What are the workflow rate limits?">
|
||||
Twenty has two rate limits to ensure system stability:
|
||||
<Accordion title="Quelles sont les limites de débit des flux de travail ?">
|
||||
Twenty a deux limites de débit pour garantir la stabilité du système :
|
||||
|
||||
| Limit | Value | Behavior |
|
||||
| ----- | ----- | -------- |
|
||||
| Limite | Valeur | Comportement |
|
||||
| ------ | ------ | ------------ |
|
||||
|
||||
\| **Soft limit** | 100 runs/minute | Runs queue in "Not Started" status, processed gradually |
|
||||
\| **Hard limit** | 5,000 runs/hour | Runs immediately fail |
|
||||
\| **Limite souple** | 100 exécutions/minute | Les exécutions sont mises en file d'attente avec le statut "Non démarré", puis traitées progressivement |
|
||||
\| **Limite stricte** | 5 000 exécutions/heure | Les exécutions échouent immédiatement |
|
||||
|
||||
**Soft limit (100/min)**: Your workflows won't fail—they just wait in the queue and are processed over time. You can trigger more than 100 records; execution will be slower.
|
||||
**Limite souple (100/min)** : Vos flux de travail n'échoueront pas — ils attendent simplement dans la file et sont traités au fil du temps. Vous pouvez déclencher plus de 100 enregistrements ; l'exécution sera plus lente.
|
||||
|
||||
**Hard limit (5,000/hr)**: This applies to your entire workspace. If all your workflows combined exceed 5,000 runs in an hour, additional runs will fail immediately.
|
||||
**Limite stricte (5 000/h)** : Cela s'applique à l'ensemble de votre espace de travail. Si l'ensemble de vos flux de travail dépasse 5 000 exécutions en une heure, les exécutions supplémentaires échoueront immédiatement.
|
||||
|
||||
**Tips to stay within limits**:
|
||||
**Conseils pour rester dans les limites** :
|
||||
|
||||
* Use Bulk triggers with Iterator instead of Single triggers for large batches
|
||||
* Combine related automations into fewer workflows
|
||||
* Use scheduled workflows to spread load over time
|
||||
* Utilisez des déclencheurs Bulk avec Iterator au lieu de déclencheurs Single pour les gros lots
|
||||
* Regroupez les automatisations liées dans un nombre plus restreint de flux de travail
|
||||
* Utilisez des flux de travail planifiés pour étaler la charge dans le temps
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Can I retry a failed workflow run?">
|
||||
**No, there is no automatic retry functionality at the moment.**
|
||||
<Accordion title="Puis-je relancer une exécution de flux de travail ayant échoué ?">
|
||||
**Non, il n'existe pas de fonctionnalité de nouvelle tentative automatique pour le moment.**
|
||||
|
||||
If a workflow run fails, you'll need to:
|
||||
Si une exécution de flux de travail échoue, vous devrez :
|
||||
|
||||
1. Review the error in **Settings → Workflows → [Your Workflow] → Runs**
|
||||
2. Fix the issue (data, configuration, or external service)
|
||||
3. Manually trigger the workflow again on the affected record(s)
|
||||
1. Examinez l'erreur dans **Paramètres → Flux de travail → [Votre flux de travail] → Runs**
|
||||
2. Corrigez le problème (données, configuration ou service externe)
|
||||
3. Déclenchez manuellement à nouveau le flux de travail sur le ou les enregistrements concernés
|
||||
|
||||
**Tips to reduce failures**:
|
||||
**Conseils pour réduire les échecs** :
|
||||
|
||||
* Add **Filter** nodes to validate data before actions
|
||||
* Use **Search Records** to check if related records exist
|
||||
* Test thoroughly with a few records before bulk operations
|
||||
* Ajoutez des nœuds **Filter** pour valider les données avant les actions
|
||||
* Utilisez **Search Records** pour vérifier si des enregistrements liés existent
|
||||
* Testez minutieusement avec quelques enregistrements avant les opérations en masse
|
||||
|
||||
Automatic retry functionality is on our roadmap for a future release.
|
||||
La fonctionnalité de nouvelle tentative automatique figure sur notre feuille de route pour une version ultérieure.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Should I deactivate workflows before CSV imports?">
|
||||
**Yes, if your workflows are triggered by record creation or updates.**
|
||||
<Accordion title="Dois-je désactiver les flux de travail avant les importations CSV ?">
|
||||
**Oui, si vos flux de travail sont déclenchés par la création ou la mise à jour d'enregistrements.**
|
||||
|
||||
When you import data via CSV, each record created or updated can trigger workflows. A large import (thousands of records) could:
|
||||
Lorsque vous importez des données via CSV, chaque enregistrement créé ou mis à jour peut déclencher des flux de travail. Un import important (des milliers d'enregistrements) pourrait :
|
||||
|
||||
* Hit the 5,000 runs/hour limit
|
||||
* Consume significant workflow credits
|
||||
* Send unexpected emails or notifications
|
||||
* Create duplicate tasks or records
|
||||
* Atteindre la limite de 5 000 exécutions/heure
|
||||
* Consommer un nombre important de crédits de flux de travail
|
||||
* Envoyer des e-mails ou des notifications inattendus
|
||||
* Créer des tâches ou des enregistrements en double
|
||||
|
||||
**Before a mass import**:
|
||||
**Avant un import massif** :
|
||||
|
||||
1. Go to **Settings → Workflows**
|
||||
2. Identify workflows triggered by the object you're importing
|
||||
3. **Deactivate** them temporarily
|
||||
4. Run your CSV import
|
||||
5. **Reactivate** the workflows when done
|
||||
1. Allez dans **Paramètres → Flux de travail**
|
||||
2. Identifiez les flux de travail déclenchés par l'objet que vous importez
|
||||
3. **Désactivez**-les temporairement
|
||||
4. Lancez votre import CSV
|
||||
5. **Réactivez** les flux de travail une fois terminé
|
||||
|
||||
**Alternative**: If you need the workflows to run on imported data, import in smaller batches to stay within rate limits.
|
||||
**Alternative** : Si vous avez besoin que les flux de travail s'exécutent sur les données importées, importez par plus petits lots pour rester dans les limites de débit.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="How do I clean up my workflow layout?">
|
||||
If your workflow canvas looks messy with nodes scattered around, you can automatically organize it:
|
||||
<Accordion title="Comment nettoyer la disposition de mon flux de travail ?">
|
||||
Si votre canevas de flux de travail semble désordonné avec des nœuds disséminés, vous pouvez l'organiser automatiquement :
|
||||
|
||||
1. Right-click anywhere on the workflow canvas
|
||||
2. Click **Tidy up workflow**
|
||||
1. Cliquez avec le bouton droit n'importe où sur le canevas du flux de travail
|
||||
2. Cliquez sur **Tidy up workflow**
|
||||
|
||||
This will automatically rearrange all nodes into a clean, organized layout.
|
||||
Cela réorganisera automatiquement tous les nœuds dans une disposition propre et organisée.
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
@@ -1,80 +1,80 @@
|
||||
---
|
||||
title: Workflows
|
||||
description: Learn how to build automations in Twenty.
|
||||
title: Flux de travail
|
||||
description: Apprenez à créer des automatisations dans Twenty.
|
||||
image: /images/user-guide/workflows/workflow.png
|
||||
---
|
||||
|
||||
<Frame>
|
||||
<img src="/images/user-guide/workflows/workflow.png" alt="Workflows" />
|
||||
<img src="/images/user-guide/workflows/workflow.png" alt="Flux de travail" />
|
||||
</Frame>
|
||||
|
||||
## Why Workflows Matter
|
||||
## Pourquoi les Workflows sont importants
|
||||
|
||||
Twenty was built to bring maximum flexibility to its users. Rather than forcing you to adapt your business processes to rigid, pre-built features, workflows enable you to build automations that create the CRM that best supports your unique business use cases.
|
||||
Twenty a été conçu pour offrir une flexibilité maximale à ses utilisateurs. Plutôt que de vous obliger à adapter vos processus métier à des fonctionnalités rigides et préconstruites, les workflows vous permettent de créer des automatisations qui créent le CRM qui soutient au mieux vos cas d'utilisation unique.
|
||||
|
||||
Workflows are Twenty's in-app feature for building these automations. They give you the building blocks to create exactly what your business needs, when it needs it.
|
||||
Les workflows sont la fonctionnalité intégrée de Twenty pour construire ces automatisations. Ils vous donnent les éléments de base pour créer exactement ce dont votre entreprise a besoin, au moment où elle en a besoin.
|
||||
|
||||
## What can I do with workflows?
|
||||
## Que puis-je faire avec les workflows?
|
||||
|
||||
We recommend building automations for two main purposes:
|
||||
Nous recommandons de créer des automatisations pour deux objectifs principaux :
|
||||
|
||||
1. **Internal automations to facilitate your team's day-to-day**: Reduce the amount of manual entries and repetitive tasks that slow down your team.
|
||||
2. **Bring data in and out of Twenty**: Connect Twenty via API calls and webhooks to your database and other tools.
|
||||
1. **Automatisations internes pour faciliter le quotidien de votre équipe** : Réduisez le nombre d'entrées manuelles et les tâches répétitives qui ralentissent votre équipe.
|
||||
2. **Importez et exportez des données de Twenty** : Connectez Twenty via des appels API et des webhooks à votre base de données et à d'autres outils.
|
||||
|
||||
## Building Your First Workflow
|
||||
## Créer votre premier flux de travail
|
||||
|
||||
### Step 1: Create a New Workflow
|
||||
### Étape 1 : Créer un nouveau flux de travail
|
||||
|
||||
1. Go to **Workflows** accessible below the other objects
|
||||
2. Click **+ New Record**
|
||||
3. Give your workflow a name
|
||||
1. Accédez à **Workflows** accessible sous les autres objets
|
||||
2. Cliquez sur **+ New Record**
|
||||
3. Donnez un nom à votre flux de travail
|
||||
|
||||
### Step 2: Add a Trigger
|
||||
### Étape 2 : Ajouter un déclencheur
|
||||
|
||||
Every workflow starts with a trigger. Choose from:
|
||||
Chaque flux de travail commence par un déclencheur. Choisissez parmi :
|
||||
|
||||
* **Record events**: When a record is created, updated, or deleted
|
||||
* **Schedule**: Run at specific times (daily, weekly, etc.)
|
||||
* **Manual**: Triggered by a user action
|
||||
* **Webhook**: Triggered by a webhook
|
||||
* **Record events** : Lorsqu'un enregistrement est créé, mis à jour ou supprimé
|
||||
* **Schedule** : S'exécute à des moments spécifiques (quotidien, hebdomadaire, etc.)
|
||||
* **Manual** : Déclenché par une action utilisateur
|
||||
* **Webhook** : Déclenché par un webhook
|
||||
|
||||
<img src="/images/user-guide/workflows/workflow_triggers.png" style={{width:'100%'}} />
|
||||
|
||||
### Step 3: Add Actions
|
||||
### Étape 3 : Ajouter des actions
|
||||
|
||||
After your trigger, add one or more actions:
|
||||
Après votre déclencheur, ajoutez une ou plusieurs actions :
|
||||
|
||||
* **Create Record**: Add new records to any object
|
||||
* **Update Record**: Modify existing record data
|
||||
* **Delete Record**: Remove records from objects
|
||||
* **Search Records**: Find records matching criteria
|
||||
* **Upsert Record**: Create or update based on matching criteria
|
||||
* **Iterator**: Loop through arrays of records
|
||||
* **Filter**: Control which records proceed
|
||||
* **Delay**: Wait before continuing (duration or scheduled date)
|
||||
* **Send Email**: Send emails via your connected account
|
||||
* **Code**: Run custom JavaScript
|
||||
* **HTTP Request**: Call external APIs
|
||||
* **Form**: Get inputs from users within Twenty UI at the time of execution
|
||||
* **AI Agent** (Coming soon): Run intelligent AI tasks
|
||||
* **Create Record** : Ajouter de nouveaux enregistrements à n'importe quel objet
|
||||
* **Update Record** : Modifier les données d'un enregistrement existant
|
||||
* **Delete Record** : Supprimer des enregistrements des objets
|
||||
* **Search Records** : Trouver des enregistrements correspondant à des critères
|
||||
* **Upsert Record** : Créer ou mettre à jour en fonction de critères de correspondance
|
||||
* **Iterator** : Parcourir des tableaux d'enregistrements
|
||||
* **Filter** : Contrôler quels enregistrements continuent
|
||||
* **Delay** : Attendre avant de continuer (durée ou date planifiée)
|
||||
* **Send Email** : Envoyer des e-mails via votre compte connecté
|
||||
* **Code** : Exécuter du JavaScript personnalisé
|
||||
* **HTTP Request** : Appeler des API externes
|
||||
* **Form** : Obtenir des saisies des utilisateurs dans l'interface Twenty au moment de l'exécution
|
||||
* **AI Agent** (Bientôt disponible) : Exécuter des tâches d'IA intelligentes
|
||||
|
||||
<img src="/images/user-guide/workflows/workflow_actions.png" style={{width:'100%'}} />
|
||||
|
||||
### Step 4: Test and Activate
|
||||
### Étape 4 : Tester et activer
|
||||
|
||||
1. Use the **Test** button to run your workflow with sample data
|
||||
2. Review the results to ensure it works as expected
|
||||
3. Toggle the workflow **Active** when ready
|
||||
1. Utilisez le bouton **Test** pour exécuter votre flux de travail avec des données d'exemple
|
||||
2. Examinez les résultats pour vous assurer qu'il fonctionne comme prévu
|
||||
3. Basculez le flux de travail sur **Active** lorsque vous êtes prêt
|
||||
|
||||
## Workflow Best Practices
|
||||
## Meilleures Pratiques des Workflows
|
||||
|
||||
* **Edit step names**: Rename your workflow steps to clearly describe what each one does. This helps with maintenance and makes it easier to hand off to coworkers
|
||||
* **Leverage previous step data**: You can use fields from records returned by any previous step in your workflow
|
||||
* **Start simple**: Begin with basic workflows and add complexity over time as you become more comfortable with the system
|
||||
* **Plan before building**: Map out your workflow logic before you start building to avoid getting stuck halfway through
|
||||
* **Renommer les étapes** : Renommez les étapes de votre workflow pour décrire clairement ce que fait chacune. Cela aide à la maintenance et facilite le transfert à des collègues.
|
||||
* **Utiliser les données des étapes précédentes** : Vous pouvez utiliser des champs provenant des enregistrements renvoyés par n'importe quelle étape précédente de votre workflow.
|
||||
* **Commencez simple** : Débutez avec des workflows basiques et ajoutez de la complexité au fil du temps à mesure que vous maîtrisez le système.
|
||||
* **Planifiez avant de construire** : Planifiez la logique de votre workflow avant de commencer à construire pour éviter de vous bloquer en cours de route.
|
||||
|
||||
## Next Steps
|
||||
## Prochaines étapes
|
||||
|
||||
* [Workflow Triggers](/l/fr/user-guide/workflows/capabilities/workflow-triggers)
|
||||
* [Workflow Actions](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [CRM Automations](/l/fr/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
|
||||
* [Déclencheurs de workflows](/l/fr/user-guide/workflows/capabilities/workflow-triggers)
|
||||
* [Actions de workflows](/l/fr/user-guide/workflows/capabilities/workflow-actions)
|
||||
* [Automatisations CRM](/l/fr/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
|
||||
|
||||
Reference in New Issue
Block a user