Éditeur de flux

L'éditeur de flux est un canevas visuel où vous concevez la structure conversationnelle de votre agent. Les nœuds sont des actions ; les arêtes sont des transitions. Ce que vous construisez ici est exactement ce que l'agent exécute à l'exécution, aucune compilation, aucune couche de traduction cachée.

Éditeur de flux, mode clair Éditeur de flux, mode sombre

Vue d'ensemble de l'interface

Ouvrez l'onglet Workflow d'agent dans l'éditeur d'agent. L'interface comporte cinq zones :

ZoneEmplacementRôle
Barre d'outilsHaut de la pageBoutons Save et Make live, la puce d'état de l'éditeur (ouvre l'historique des versions), et le menu d'actions de l'agent (Cloner, Archiver, Supprimer)
Palette de nœudsPanneau gauche (208 px)Tous les types de nœuds disponibles regroupés par catégorie. Faites glisser sur le canevas pour placer un nœud. Réduisez avec l'icône flèche pour récupérer de l'espace sur le canevas.
CanevasCentreLe graphe conversationnel. Déplacez, zoomez, connectez et organisez les nœuds ici.
SimulateurEn haut à droite du canevasLe bouton In-browser test call lance un test vocal en direct dans le navigateur sans quitter l'éditeur.
Rail d'historique des versionsBord droit, repliableLa version live, la liste complète des versions, et le contrôle Start A/B test (un test en cours affiche sa bande ici), voir Versions et tests A/B.

La configuration des nœuds s'ouvre comme une superposition modale, non comme un panneau latéral. Cliquez sur l'icône engrenage dans l'en-tête d'un nœud, faites un clic droit et choisissez Settings, ou simplement double-cliquez sur le nœud, pour ouvrir le dialogue de configuration. Pour les nœuds Start et Agent, le dialogue comporte six onglets : Général, Voice & AI (surcharges par nœud du STT, du LLM, du TTS et du Conversation Behavior), Connections, Connaissances, Routes de sortie, et Collecte ; voir Types de nœuds pour ce que configure chaque onglet.

Palette de nœuds

La palette organise les types de nœuds en catégories :

CatégorieTypes de nœudsNotes
Start NodeEntrant (welcome), Sortant, ChatbotChaque flux a un nœud de départ entrant (id : start) — déposer un nouveau nœud welcome ou chatbot le remplace, avec ses arêtes connectées. Un flux peut aussi porter un nœud de départ sortant (id : start_outbound), qui s'ajoute au lieu de le remplacer et où commencent les appels de campagne. Voir Nœuds de départ : entrant et sortant.
AgentsAgent (sous-agent)Délègue la conversation à un nœud agent nommé avec son propre prompt système et, si besoin, son propre modèle.
FlowSpeak, Listen, Router, API Call, Condition, Branch, VariableBriques de bas niveau optionnelles pour des flux à granularité fine. Activées par l'administrateur et désactivées par défaut : elles n'apparaissent dans la palette qu'une fois qu'un administrateur les active pour votre organisation (via allowed_node_types).
SystemTransfer, HangupNœuds terminaux, Transfer ponte l'appel vers un autre numéro, Hangup déconnecte l'appel.

La palette n'affiche que les types de nœuds activés pour votre organisation. Les organisations ont un paramètre allowed_node_types géré par les administrateurs. Les nœuds de la catégorie Flow ci-dessus sont désactivés par défaut. Si un type de nœud est manquant, contactez votre administrateur pour l'activer.

Nœuds de départ : entrant et sortant

Glisser le nœud de départ Outbound depuis la palette à côté du nœud Start Inbound, puis relier les deux au même flow

Un flux comporte toujours un nœud de départ Entrant, identifié par l'id fixe start — les deux types de départ entrant sont welcome (élément de palette Inbound, affiché sur le canevas comme Start Inbound) et chatbot. Il peut aussi comporter un nœud de départ Sortant (élément de palette Outbound, carte Start Outbound sur le canevas, id fixe start_outbound), où commence un appel de campagne. Les deux règles sont appliquées par l'éditeur :

  • Déposer un nouveau nœud de départ entrant remplace l'ancien, ainsi que toutes les arêtes qui y étaient connectées. Impossible de se retrouver par accident avec deux départs entrants.
  • Les éléments de départ entrant sont grisés lorsqu'un départ entrant existe déjà, avec l'infobulle « Un nœud de départ existe déjà. Supprimez-le d'abord pour en ajouter un autre. » Pour changer de type, supprimez le départ actuel puis glissez celui que vous voulez.
  • L'élément Sortant ajoute un second nœud de départ au lieu de remplacer quoi que ce soit : les appels sortants commencent là et les appels entrants continuent de commencer au nœud entrant, si bien que les deux peuvent s'ouvrir différemment puis partager la suite du flux ou s'en séparer. Un workflow utilisé par une campagne sortante doit le définir, et il ne peut pas être supprimé tant que le workflow a des campagnes.

Éléments de départ Chatbot

L'élément de départ Chatbot tient compte des fournisseurs :

  • Lorsque votre organisation a un ou plusieurs fournisseurs de chatbot configurés, l'unique élément générique « Chatbot » est remplacé par une entrée de palette par fournisseur, chacune portant le nom du fournisseur. Glisser une entrée sur le canevas crée un nœud de départ chatbot lié à ce fournisseur.
  • Lorsqu'aucun fournisseur de chatbot n'est configuré, l'élément de départ Chatbot est masqué entièrement.

Voir Fournisseurs de chatbot pour configurer les fournisseurs.

Ajouter des nœuds

Deux façons d'ajouter un nœud :

  • Glisser depuis la palette, faites glisser n'importe quel type de nœud depuis la palette et déposez-le sur le canevas à la position souhaitée.
  • Clic droit sur le canevas, faites un clic droit sur une zone vide pour ouvrir le menu contextuel, qui affiche la liste des types de nœuds autorisés. Cliquez sur un type pour le placer à la position du curseur.

Handles et connexions

Chaque nœud possède des handles circulaires, des points de connexion pour les arêtes :

Type de handlePositionDirectionCouleur
Target (entrée)Bord supérieur du nœudLes arêtes entrantes se connectent iciCorrespond à la couleur de catégorie du nœud
Source (sortie)Bord inférieur du nœudLes arêtes sortantes partent d'iciCorrespond à la couleur de catégorie du nœud

Les nœuds avec plusieurs chemins de sortie (Agent/Welcome avec routes de sortie, Transfer) ont plusieurs handles source nommés, chacun au bord inférieur. Chaque handle correspond à une branche.

Le handle d'une route de sortie basée sur une règle s'affiche en ambre avec un préfixe ⚡, ce qui distingue visuellement une branche pilotée par règle d'une branche conversationnelle d'un simple coup d'œil sur le canevas. Voir Types de nœuds → Routes de sortie basées sur des règles pour les deux types de routes de sortie et quand utiliser chacun.

Créer et supprimer des connexions

  • Connecter : faites glisser depuis un handle source (bas) vers un handle target (haut) d'un autre nœud. Un indicateur de connexion bleu apparaît quand le dépôt est valide.
  • Reconnecter : faites glisser l'extrémité d'une arête existante vers un handle target différent, l'arête est reroutée sans créer de doublon.
  • Supprimer une arête : faites un clic droit sur l'arête et choisissez Delete edge dans le menu contextuel.
  • Supprimer l'élément sélectionné : sélectionnez n'importe quel nœud ou arête, puis appuyez sur Delete.

Règles de connexion

  • Pas d'auto-connexions, un nœud ne peut pas se connecter à lui-même.
  • Une seule arête sortante par handle, chaque handle source ne peut se connecter qu'à une seule cible. Tenter de connecter un handle déjà connecté est bloqué.
  • Hangup n'a pas de sortie, c'est le nœud terminal ; aucune connexion sortante n'est possible.
  • L'échec du Transfer est optionnel, le handle de sortie failure du Transfer peut être laissé non connecté ; l'appel se termine si le transfert échoue et qu'aucun chemin d'échec n'est câblé.

Avertissements de nœuds

Les nœuds avec des handles requis non connectés affichent un avertissement visuel (contour jaune). Un avertissement signifie que le flux a une impasse, les appels atteignant ce nœud seront bloqués.

Type de nœudConnexions requises pour effacer l'avertissement
Tous les nœuds non-départAu moins une arête entrante (handle target connecté)
Agent (sous-agent)la sortie par défaut ou tous les handles de routes de sortie connectés
Entrant (welcome)la sortie par défaut ou tous les handles de routes de sortie connectés
Transferla sortie par défaut connecté ; le handle failure est optionnel
HangupAucune sortie (nœud terminal, l'avertissement n'apparaît que si aucune arête entrante)

Les avertissements sont des indicateurs visuels uniquement, le flux peut toujours être enregistré avec des avertissements. Mais un flux avec des avertissements non résolus ne devrait pas être mis en ligne : les appelants seront laissés dans le silence quand ils atteignent un nœud non connecté.

Actions sur les nœuds

Chaque nœud dispose de deux façons d'accéder aux actions :

Barre d'outils au survol

Survoler un nœud révèle une petite barre d'outils flottante au-dessus :

  • Icône copier, duplique le nœud, en plaçant la copie 50 px en dessous et à droite. Demande une confirmation.
  • Icône corbeille, supprime le nœud et toutes ses arêtes connectées. Demande une confirmation. Le nœud de départ (id: "start") ne peut pas être supprimé.
  • Icône engrenage (dans l'en-tête du nœud), ouvre le dialogue de configuration du nœud.
  • Double-clic sur le nœud, ouvre le même dialogue de configuration que l'icône engrenage ou le clic droit → Settings.

Menu contextuel au clic droit

Un clic droit affiche un menu contextuel qui diffère selon la cible :

Clic droit surOptions du menu
NœudSettings, ouvre le dialogue de configuration du nœud. Delete, supprime le nœud (non affiché pour le nœud de départ).
ArêteDelete edge, supprime la connexion.
Canevas (zone vide)Add node, liste tous les types de nœuds autorisés ; cliquez pour placer à la position du curseur.

Navigation sur le canevas

ActionComment
DéplacerMaintenez le bouton central de la souris et faites glisser, ou glissement à deux doigts sur pavé tactile
ZoomerCtrl + Défilement (ou pincement sur pavé tactile). Le curseur de zoom est également disponible en bas à gauche.
Ajuster tous les nœuds dans la vueLe flux s'ajuste automatiquement au chargement (zoom max 1,2×). Cliquez sur le bouton d'ajustement dans le curseur de zoom pour recentrer.
Sélectionner un nœudCliquez sur le nœud
Tout sélectionnerCtrl + A
Supprimer la sélectionDelete
Désélectionner / fermer le dialogueEscape

Les nœuds s'accrochent à une grille de 15 × 15 px, cela maintient le canevas aligné et les arêtes visuellement propres.

Utiliser des variables dans les champs de nœuds

N'importe quel champ texte dans la configuration d'un nœud accepte l'interpolation de variables avec la syntaxe {{nom_variable}} (doubles accolades). Les variables sont substituées à l'exécution juste avant l'exécution du nœud.

// Message du nœud Welcome
Bonjour {{customer_name}}, ceci concerne votre abonnement {{product}}.
Votre identifiant de compte est {{account_id}}. Est-ce correct ?

Règles de substitution :

  • Une variable non définie est résolue en chaîne vide, aucune erreur n'est levée.
  • Les noms de variables sont sensibles à la casse : {{Name}} et {{name}} sont des variables différentes.
  • Certains types de nœuds nécessitent que le bouton Use variables soit activé avant que la substitution s'applique (ex : nœud Transfer).

Taper {{ ouvre une liste déroulante d'autocomplétion des variables disponibles dans n'importe quel champ texte. Sur les champs multiligne (prompts, messages, corps de requête), un bouton + variable en haut à droite du champ propose le même sélecteur, sans avoir à se souvenir du déclencheur à taper. Le sélecteur regroupe les variables par origine, chacune avec une courte description au survol : les variables système, les variables déclarées dans l'onglet Initialisation, les variables collectées dans le flux et, en ambre sous Depuis une campagne sortante, les colonnes CSV mappées par vos campagnes, avec la colonne source et la campagne sous chaque nom. Ces dernières n'ont une valeur que sur les appels de cette campagne et sur les rappels de ses contacts. L'éditeur de prompt système et les champs de message proposent la même liste avec les mêmes descriptions.

Là où un champ demande une valeur à comparer à une variable (un cas d'un nœud Branch, une règle dans une route de sortie), les variables ayant un ensemble de valeurs connu les proposent dans une liste déroulante ou sous forme de suggestions en un clic, si bien que vous n'avez jamais à deviner que {{is_callback}} vaut True ou False.

Une colonne de campagne qui est aussi déclarée comme variable collectée (le flux la demande quand le CSV l'a laissée vide, par exemple) n'est listée qu'une fois, dans le groupe des variables collectées plutôt que dans le groupe campagne.

Variables système

Une douzaine de variables système (from_number, current_date, agent_name…) sont disponibles dès le premier nœud de chaque appel. L'autocomplétion les liste toutes ; la référence complète se trouve dans Concepts clés → Variables système.

Sources de variables supplémentaires

Au-delà des variables système, vous pouvez référencer les variables peuplées par les Actions au démarrage (récupérations API pré-appel) et les variables collectées pendant la conversation par les nœuds Agent et Chatbot.

Save et Make live

L'enregistrement et la mise en live sont deux actions séparées, chaque sauvegarde ouvre une modale avec un nom de version prérempli (v{N+1}, modifiable) et est un commit nommé et délibéré.

BoutonEffetActif lorsque
SaveCrée une nouvelle version nommée depuis l'état de l'éditeur. Ne change jamais ce qu'entendent les appelants.Il y a des modifications non enregistrées
Make livePromeut la version enregistrée affichée dans l'éditeur vers la version live qu'entendent les appelants. Ne crée pas de nouvelle version. Pendant qu'un test A/B est en cours, c'est le test qui garde la main sur le routage : une version promue en cours de test ne prend le relais qu'une fois le test terminé.L'éditeur est propre et la version affichée n'est pas déjà live

Pour affiner un agent live sans impacter les appelants : éditer → Save (l'ancienne version reste live) → tester dans le simulateur → Make live quand vous êtes confiant. Il n'y a pas de mode brouillon. Voir Versions pour le modèle complet.

Simulateur dans le navigateur

Le bouton In-browser test call en haut à droite du canevas lance un test vocal en direct directement dans votre navigateur. Le simulateur exécute le même pipeline STT → LLM → TTS que les appels de production, la latence, la voix et le comportement de routage sont identiques aux vrais appels.

Prérequis

  • Le simulateur teste votre état actuel de l'éditeur, y compris les modifications non sauvegardées, ce qui vous permet d'itérer sans passer en live. Les vrais appels, eux, exécutent toujours la version live.
  • Votre navigateur doit se voir accorder l'accès au microphone. Une invite de permission apparaît à la première utilisation.
  • Utilise l'API Web Audio (AudioWorklet) pour la capture du microphone et la restitution, en diffusant l'audio via un WebSocket, fonctionne dans Chrome et Edge. Firefox peut avoir un support limité.

Retour visuel pendant la simulation

Pendant l'exécution du simulateur, le canevas fournit un retour visuel en temps réel :

  • Nœud actif : contour bleu avec une pulsation lumineuse, le nœud en cours d'exécution.
  • Nœuds visités : contour vert, les nœuds que l'appel a déjà traversés.
  • Nœuds inactifs : estompés à 40% d'opacité.
  • Arêtes traversées : mise en évidence animée pendant 600 ms quand le flux passe d'un nœud à l'autre.
  • Défilement automatique : le canevas défile automatiquement pour garder le nœud actif dans la vue.

Panneau du simulateur

Un panneau latéral s'ouvre à côté du canevas et affiche :

  • Transcription en direct, chaque énoncé utilisateur et réponse agent au fur et à mesure.
  • État des variables, la valeur actuelle de toutes les variables du flux, mise à jour en temps réel.
  • Métriques de latence, latence E2E, latence STT, latence premier token LLM, temps jusqu'au premier octet TTS pour chaque tour.

Cliquez sur Stop pour terminer la simulation. Le canevas revient à son état normal et un résumé de transcription d'appel est disponible pour révision.

Répéter un appel sortant ou un rappel

Le lanceur du simulateur : bascule Call direction, champ Number we are calling et variables de campagne en Outbound, puis Simulate a campaign callback avec l'issue précédente en Inbound

Quand le workflow a un nœud Start Outbound, le lanceur propose un sélecteur Call direction (sens de l'appel). Sur Outbound, le test démarre au nœud de départ sortant et attend votre premier mot, exactement comme un vrai appel de campagne, et le champ numéro devient Number we are calling (la valeur que l'agent voit comme {{to_number}}). Un panneau Campaign variables for this call liste les colonnes mappées par les campagnes du workflow, une ligne chacune, plus Add a variable pour tout autre nom : remplissez-les comme le ferait une ligne de contact, et {{first_name}} et consorts se résolvent comme sur un vrai appel composé. Les champs vides sont simplement absents, comme une colonne non mappée.

Sur Inbound, cochez Simulate a campaign callback pour jouer un contact qui rappelle après une tentative manquée et choisissez l'issue de cette tentative (nous avons appelé, pas de réponse, ligne occupée, messagerie vocale ou injoignable) : l'appel arrive marqué comme rappel, avec {{is_callback}} et {{callback_last_disposition}} renseignés, exactement comme le ferait un vrai rappel. Sortant et rappel s'excluent mutuellement.

Un nom de variable ajouté à la main doit commencer par une lettre et ne contenir que des lettres, des chiffres et des tirets bas ; un nom invalide ou manquant affiche un avertissement ambre sur sa ligne et cette ligne n'est pas envoyée.

Modèles de flux

Agent conversationnel

Le flux le plus simple possible : accueillir l'appelant, avoir une conversation complète, raccrocher.

Nœud Welcome (Entrant)
    ↓ (sortie par défaut)
Hangup ("Merci de votre appel. Au revoir !")

Le nœud Welcome est entièrement conversationnel, il attend que l'appelant parle et utilise le prompt système de l'agent pour guider l'échange. Quand l'appelant dit au revoir ou indique clairement qu'il a terminé, le classificateur de routes de sortie le détecte (route intégrée DEFAULT_EXIT) et déclenche l'arête sortante par défaut du nœud.

Transfert basé sur l'intention

Accueillir l'appelant, gérer sa demande de manière conversationnelle, puis transférer vers une équipe humaine si nécessaire :

Nœud Welcome (Entrant, routes de sortie : ["transfer_to_human", "resolved"])
    → transfer_to_human  → Transfer (+33 9 XX XX XX XX, message: "Je vous mets en relation.")
    → resolved           → Hangup ("Problème résolu. Bonne journée !")
    → (sortie par défaut)          → Hangup ("Merci. Au revoir !")

Le prompt système indique à l'agent quand appeler la route de sortie transfer_to_human ou resolved. Les routes de sortie sont déclarées dans la configuration du nœud Welcome.

Sortant avec un sous-agent

Un appel sortant de confirmation de rendez-vous qui délègue à un sous-agent spécialisé si l'appelant demande un report :

Nœud Welcome (waitForFirstWord: true, timeoutAction: speak,
              routes de sortie : ["confirmed", "reschedule"])
    → confirmed    → Hangup ("Parfait, votre rendez-vous est confirmé. Au revoir !")
    → reschedule   → Agent (spécialiste report, routes de sortie : ["done", "cancelled"])
                        → done      → Hangup ("Reporté. À bientôt !")
                        → cancelled → Hangup ("Rendez-vous annulé. Bonne journée.")
    → (sortie par défaut)    → Hangup ("Pas de réponse. Au revoir.")

Les variables pré-chargées au démarrage de l'appel via les variables d'initialisation (depuis les en-têtes SIP ou une récupération API), telles que {{customer_name}} ou {{appointment_date}}, sont disponibles dans le prompt système de chaque nœud.