É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 quatre 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.

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.

Palette de nœuds

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

CatégorieTypes de nœudsNotes
Start NodeStandard Agent (welcome), ChatbotIl existe exactement un nœud de départ par flux (id : start). Déposer un nouveau nœud welcome ou chatbot remplace le nœud de départ existant et ses arêtes connectées, au lieu d'en ajouter un second. Voir Nœud de départ unique.
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œud de départ unique

Un flux possède exactement un nœud de départ, identifié par l'id fixe start. Les deux types de départ sont welcome (Standard Agent) et chatbot. Cette règle est imposée par l'éditeur :

  • Déposer un nouveau nœud de départ remplace l'ancien, ainsi que toutes les arêtes qui y étaient connectées. Vous ne pouvez pas vous retrouver accidentellement avec deux nœuds de départ.
  • Les éléments de la catégorie Start sont grisés tant qu'un nœud de départ existe déjà, avec l'infobulle « A start node already exists. Delete it first to add a different one. » Pour changer de type de départ, supprimez le nœud de départ actuel, puis glissez celui que vous voulez.

É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
Standard Agent (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.

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.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.

Modèles de flux

Agent conversationnel

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

Nœud Welcome (Standard Agent)
    ↓ (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 (Standard Agent, 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: hangup,
              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.