Skip to content

Erreurs et rejeu ​

Un workflow dialogue avec des systèmes qui échouent parfois : un fournisseur de messagerie qui ne répond pas à temps, un modèle d’IA qui limite son débit, une API tierce qui refuse une requête. Mankomail exécute chaque workflow étape par étape et enregistre le résultat de chaque étape : un échec s’arrête à l’étape où il s’est produit et ne fait jamais perdre en silence ce qui précède.

Cette page suit un échec du début à la fin : ce que l’étape fait d’elle-même, ce que vous réglez par nœud, ce qu’il advient de l’exécution, comment vous êtes prévenu, et comment la rejouer une fois corrigée. Pour les statuts d’une exécution, voyez Exécutions.

Échecs passagers et échecs définitifs ​

Chaque échec d’une étape relève de l’une de deux familles, et c’est elle qui décide de la suite.

  • Passager : un échec qui peut réussir si l’on réessaie plus tard — une erreur réseau, un fournisseur brièvement indisponible, une tentative qui a dépassé son délai. L’étape est retentée, après un délai.
  • Définitif : un échec qu’une nouvelle tentative ne corrigerait pas — un paramètre invalide, une connexion absente ou révoquée, une adresse bloquée par la garde réseau, une réponse trop lourde. L’étape n’est pas retentée.

Un échec de nature inconnue est traité comme passager : retenter quelques fois coûte moins cher qu’abandonner une étape à cause d’une erreur réseau passagère.

Une limite de débit d’un fournisseur n’est pas un échec : l’étape est reportée à l’heure que le fournisseur indique (Retry-After), sans consommer de tentative.

Les nouvelles tentatives, à trois niveaux ​

Le nombre de tentatives d’une étape, et l’attente entre deux, viennent du premier de ces trois niveaux qui les fixe :

NiveauOùDéfaut
Le nœudl’onglet Réglages du nœud, section Nouvelles tentatives—
Le type de nœudle cataloguenœuds d’IA : 3 tentatives, 10 s, 5 min par tentative
Mankomailintégré3 tentatives, 5 s, 2 min par tentative

Dans l’onglet Réglages du nœud, la section Nouvelles tentatives affiche le défaut qui s’applique (« Défaut pour ce type de nœud : … » ou « Défaut : … »). Régler pour ce nœud ouvre deux champs :

  • Nombre de tentatives : première tentative comprise, donc 1 veut dire aucune nouvelle tentative. Entre 1 et 10.
  • Délai avant la première nouvelle tentative : entre 1 seconde et 1 heure. Les délais suivants doublent, jusqu’à 15 minutes, avec un peu d’aléa pour que de nombreuses exécutions ne retentent pas au même instant.

Une phrase sous les champs dit ce qui se passera, par exemple « Si l’étape échoue : nouvelle tentative après 5 s, 10 s, puis abandon. » Pendant un essai, chaque délai est ramené à 2 secondes : un essai dans l’éditeur n’attend pas qu’un fournisseur se calme.

Seuls les échecs passagers sont retentés. Un échec définitif termine l’étape dès sa première tentative.

Le délai d’une tentative ​

La section Délai maximum du même onglet règle Délai maximum d’une tentative, entre 5 secondes et 30 minutes. Une tentative qui le dépasse est réellement interrompue, même si le nœud ne s’arrête pas de lui-même, et l’étape échoue avec le code node_timeout. Une tentative interrompue compte comme un échec passager : « pas fini à temps » n’est pas « ne finira jamais ».

Si l’échec persiste ​

Quand une étape a épuisé ses tentatives, ou échoue de façon définitive, la section Si l’échec persiste décide de la suite. Trois choix :

ChoixCe qui se passe
Arrêter l’exécutionL’exécution s’arrête en échec. Elle apparaît dans Activité › À traiter et lance le workflow d’erreur, s’il y en a un.
Continuer sans cette étapeLes nœuds suivants s’exécutent quand même, sans données de cette étape : le chemin de sa sortie reste vide.
Suivre la sortie ErreurUne sortie Erreur apparaît sur le nœud : reliez-la aux étapes à lancer en cas d’échec (prévenir quelqu’un, mettre le mail de côté).

Les nouvelles tentatives passent toujours avant ce choix : un nœud réglé pour continuer ou suivre la sortie Erreur est d’abord retenté, et seul un échec définitif prend ce chemin. Une étape rattrapée par Continuer ou par la sortie Erreur compte comme réussie : l’exécution poursuit, et n’est pas une exécution en échec.

Les effets incertains ​

Certains nœuds agissent chez un service tiers : Requête HTTP, les notifications, et les nœuds des intégrations (Airtable, Notion, Google, Microsoft, Yousign, MyNotary…). Si une tentative d’un tel nœud est coupée en plein appel — son délai est passé, ou le serveur a redémarré —, on ne peut pas savoir si le service a reçu la requête.

Mankomail ne la retente pas à l’aveugle. L’étape échoue avec le code step_effect_uncertain, qui est un échec définitif : le choix Si l’échec persiste s’applique, et c’est vous qui tranchez. Vérifiez chez le service si l’action a eu lieu ; si elle n’a pas eu lieu, reprenez l’exécution depuis cette étape (voir Rejouer une exécution). L’onglet Réglages de ces nœuds le dit dans une note.

Les autres nœuds sont retentés sans risque après une interruption :

  • les nœuds sans effet extérieur (IA, conditions, transformations, appels de sous-workflow, contrôle de flux) : rien n’a pu se produire hors de Mankomail ;
  • l’envoi, le déplacement ou le suivi d’un mail, l’écriture dans une Table, l’émission d’un signal : Mankomail enregistre ces effets sous une clé qui ne change pas d’une tentative à l’autre, si bien qu’un effet déjà passé est reconnu, pas répété.

Ce que dit l’erreur d’une exécution ​

Une étape en échec montre son erreur dans l’exécution, sur le canvas et dans le détail du nœud. Le détail donne :

ChampContenu
CodeUn code stable, traduit à l’écran (node_timeout, step_effect_uncertain, http_blocked, mail.mailbox_required…). Voir Codes d’erreur.
Message du serveurLe détail technique, à coller dans un ticket. Jamais un secret.
Nœud et Type de nœudL’étape qui a échoué.
NatureÉchec définitif, ou Échec passager, tentatives épuisées.
TentativePar exemple « tentative 3/3 ».
Tentatives précédentesChaque tentative échouée avant la dernière, avec son erreur, et interrompue quand elle a été coupée.
Version exécutée et HorodatageQuelle version du workflow a tourné, et quand.

L’étape garde aussi les paramètres qu’elle a réellement reçus, expressions résolues et secrets masqués : vous voyez ce qu’on a donné au nœud sans le rejouer. Tant qu’une étape attend sa prochaine tentative, elle reste En cours et affiche Nouvelle tentative programmée.

Copier le détail de l’erreur copie tout cela. Le détail peut contenir une adresse ou un objet de mail : relisez-le avant de le partager.

Le workflow d’erreur ​

Un workflow peut désigner un autre workflow qui démarre quand l’une de ses exécutions réelles échoue. Réglez-le dans l’onglet Réglages du workflow, section En cas d’échec, champ Workflow d’erreur (« Aucun » par défaut). Le workflow choisi doit être l’un des vôtres, différent de celui-ci, et commencer par le déclencheur Échec d’un workflow. Il n’a pas besoin d’être publié pour être choisi, mais il doit l’être, et ne pas être en pause, pour démarrer.

Le workflow d’erreur reçoit :

  • le même mail porteur que l’exécution échouée, quand il y en avait un : {{ email.… }} fonctionne, et vous pouvez répondre dans le fil ou déplacer le mail ;
  • un compte rendu sous data.failure : workflowId, workflowName, executionId, workflowVersionId, failedAt, error (code, message, kind, attempts), nodeId, nodeName, nodeType, mailboxId, messageId.

Il ne démarre jamais pour un essai, pour une itération de boucle (c’est la boucle qui échoue, une fois, dans son exécution parente), pour une exécution elle-même lancée par un workflow d’erreur (pas de cascade d’alertes), ni pour lui-même. L’échec est toujours consigné dans Activité › À traiter, workflow d’erreur ou non : le workflow d’erreur est un confort de plus, pas le canal d’alerte.

Où apparaissent les échecs ​

  • Activité › À traiter liste les échecs que vous n’avez pas encore vus, avec les approbations qui vous attendent. Chaque carte nomme le workflow, l’étape en échec (« Étape « Trier les devis » ») et un court résumé de l’erreur, avec Ouvrir l’exécution, Rejouer et Marquer comme vu. Marquer comme vu ne répare rien et n’efface rien : l’exécution reste en échec, elle sort seulement du bandeau.
  • L’onglet Exécutions de l’éditeur liste les exécutions du workflow. Filtrez-les par statut, par nature (Essais, Réelles) et avec Chercher un mail, qui cherche dans l’objet et l’expéditeur du mail déclencheur. Ouvrez une exécution pour la voir sur le canvas.
  • Le tableau de bord d’accueil montre les échecs récents et les workflows qui échouent le plus.

Rejouer une exécution ​

Rejouer relance une exécution en échec ou annulée, pour de vrai, avec les mêmes données de déclenchement : le même mail, le même corps de webhook. Un essai ne se rejoue jamais : il se relance depuis l’éditeur. La confirmation pose deux questions.

D’où repartir

ChoixCe qui tourneEffets
Depuis le début (défaut)tout le workflowchaque effet réel déjà produit repart : un mail déjà parti est renvoyé
Depuis l’étape en échecseulement ce qui n’avait pas abouti ; les étapes réussies sont gardées telles quellesaucun effet déjà produit ne repart

Sur quelle version

ChoixQuel graphe
La version publiée (défaut)celle qui porte vos corrections : le choix habituel après avoir réparé
La version d’originecelle qui a tourné, pour reproduire l’échec

Avant de confirmer, la fenêtre liste les effets réels déjà produits par cette exécution et, pour chacun, s’il repartira ou ne repartira pas. Quand l’étape en échec est ouverte sur le canvas, Reprendre depuis cette étape est le même rejeu, lancé depuis l’étape en échec.

Depuis l’étape en échec, les étapes sont gardées par nœud : sur la version publiée, un nœud qui existe toujours garde sa sortie d’origine même si vous avez changé ses paramètres ; un nœud nouveau tourne. Une étape rattrapée par Continuer ou par la sortie Erreur dans l’exécution d’origine compte comme réussie et est gardée ; pour la relancer, rejouez depuis le début.

Un rejeu est refusé quand le workflow est archivé, quand la boîte de l’exécution d’origine est déconnectée ou retirée, quand l’exécution est encore en cours ou a réussi, quand la version demandée n’est pas disponible (aucune version publiée, ou version d’origine supprimée), et quand l’expéditeur du mail est désormais exclu de votre périmètre. La nouvelle exécution est reliée à l’origine : elle porte Rejeu, avec Ouvrir l’exécution d’origine.

Rejouer tous les échecs ​

Après une correction, Rejouer tous les échecs, dans l’onglet Exécutions, rejoue d’un coup les exécutions réelles en échec du workflow pas encore rejouées, les plus anciennes d’abord, sur 24 heures, 7 jours ou 30 jours, avec les deux mêmes choix. Celles qui ne peuvent pas être rejouées sont laissées de côté et comptées. Les essais ne sont jamais concernés.

Annuler une exécution ​

Annuler l’exécution arrête une exécution en file, en cours ou en attente : plus aucune étape ne démarre, ses attentes sont fermées, et les exécutions qu’elle a lancées (sous-workflows, itérations de boucle) sont annulées aussi. Les étapes déjà faites ne sont pas défaites : un mail déjà parti reste parti, et une étape en train d’appeler un service peut encore aboutir. Laisser tourner ferme la fenêtre sans rien annuler.

Mettre hors ligne, archiver ou mettre en pause un workflow n’annule pas ses exécutions en cours.

Par l’API, POST /api/v1/workflows/{id}/executions/cancel annule toutes les exécutions en cours d’un workflow (200 au plus par appel ; rappelez tant que hasMore vaut true), et POST /api/v1/executions/cancel annule une liste d’exécutions.

Les limites d’un workflow ​

La section Exécution de l’onglet Réglages du workflow porte deux limites. Elles s’appliquent tout de suite, sans republier.

Exécutions simultanées. Combien d’exécutions réelles de ce workflow tournent en même temps. Les suivantes attendent leur tour, En file, dans l’ordre d’arrivée : rien n’est perdu. Les essais, les exécutions lancées par un autre workflow, les itérations de boucle et les exécutions en attente (d’une approbation, d’un délai ou d’un signal) ne comptent pas. Champ vide : le défaut de l’instance (WORKFLOW_MAX_CONCURRENCY, 10). L’instance plafonne aussi l’ensemble des workflows (EXECUTIONS_MAX_CONCURRENT, 100).

Durée maximale d’une exécution. Seul le temps de travail compte : une attente d’approbation, de délai ou de signal ne consomme rien. Au-delà, l’exécution est arrêtée et passe en échec avec le code execution_timeout, avec un écart de deux minutes au plus ; les étapes encore en cours sont fermées, et le workflow d’erreur démarre s’il y en a un. Au moins une minute. Champ vide : le défaut de l’instance (EXECUTION_TIMEOUT_MS, une heure), plafonné par EXECUTION_TIMEOUT_MAX_MS (24 heures). Une étape en train d’appeler un service à ce moment n’est pas interrompue. Voir Variables d’environnement.

Ce qui se produit au plus une fois ​

EffetDans une exécution (tentatives, redémarrages)Rejeu depuis le débutRejeu depuis l’étape en échec
Mail : envoi, brouillon, déplacement, suiviau plus une foisrefaitpas refait
Écriture dans une Tableau plus une foisrefaitepas refaite
Signalau plus une foisrefaitpas refait
Appel d’un modèle d’IArépété sans conséquence, sauf son coûtrefaitpas refait
HTTP, notification, intégrationsau moins une fois quand le nœud rapporte son échec ; au plus une fois après une interruption (step_effect_uncertain)refaitpas refait
Sous-workflow, itération de bouclelancé une foisrelancépas relancé si l’étape appelante avait réussi