Skip to content

Extraire ​

Extrait du mail les champs que vous déclarez (numéro, date, montant…) et les verse dans les données de travail. Un champ absent vaut null.

Extraire lit le mail et remplit les champs que vous déclarez : un numéro de commande, une date de livraison, un montant, une réponse oui/non. Chaque champ devient une clé des données de travail, prête pour une condition, une écriture dans une table ou un message en aval.

Préférez Catégoriser quand vous avez besoin d’une décision d’aiguillage, et Instruction libre (IA) en sortie JSON quand vous voulez une structure libre (objets imbriqués, listes). Pour extraire depuis un PDF joint, placez Lire les pièces jointes avant ce nœud et faites pointer « Contenu à traiter » sur le texte extrait.

En bref ​

  • Type : ai.extract · version 1
  • Catégorie : IA
  • Nature : Étape — s’exécute pendant une exécution
  • Effet : Sans effet externe (none) — rien n’est écrit hors de Mankomail ; rejouable sans risque
  • Exige un mail porteur : Non
  • Connexion : Aucune
  • Entrées : main
  • Sorties : main
  • Ports de service : model (llm.model, facultatif)

Paramètres ​

fields ​

Champs à extraire — Chaque champ devient une clé des données de travail : {{ data.extract_1.numero_commande }}.

  • Type : Liste d’éléments (collection)
  • Requis : Oui
  • De 1 à 15 éléments
  • Chaque élément a :
    • name — Identifiant. Le nom de la clé dans les données de travail. Court, sans espace de préférence.
      • Type : Texte (string)
      • Requis : Oui
      • 80 caractères au plus
      • Exemple : numero_commande
      • Expressions : {{ }} refusé
    • description — Description. Ce que le modèle doit chercher. C’est la consigne la plus utile du nœud. Écrivez-la dans la langue de votre choix : le modèle la rapproche du mail par le sens, pas par les mots.
      • Type : Texte long (text)
      • Requis : Non
      • Défaut : "" (vide)
      • 500 caractères au plus
    • type — Type
      • Type : Un choix (options)
      • Requis : Oui
      • Défaut : string
      • Options :
        • string — Texte
        • number — Nombre
        • boolean — Oui / non
        • date — Date (AAAA-MM-JJ)

inputTemplate ​

Contenu à traiter — Ce que le modèle voit du mail. Par défaut l’objet et le corps texte.

  • Type : Texte long (text)
  • Requis : Oui
  • 10000 caractères au plus
  • Rangé sous « Avancé » dans l’éditeur
  • Expressions : {{ }} accepté
    Valeur par défaut
    text
    {{ email.subject }}
    
    {{ email.bodyText }}

Sorties ​

  • main

Données produites ​

Ce que ce nœud ajoute aux données de l’exécution, et comment le lire dans une expression. <step> désigne la clé de l’étape : le nom du nœud ramené à un identifiant (voir Données et expressions).

  • {{ data.<step>.<field> }} — string, number, boolean or null. Une clé par champ déclaré, nommée exactement d’après l’« Identifiant » du champ. La valeur est convertie dans le type du champ (Texte, Nombre, Oui / non, Date). null quand le champ n’a pas été trouvé ou n’a pas pu être converti.
  • {{ data.<step>._missing }} — array of string. Les identifiants de tous les champs restés à null, dans l’ordre de déclaration. Vide quand tous les champs ont été trouvés.

Exemple ​

Des factures fournisseurs arrivent par mail. Ajoutez un nœud Extraire nommé Facture avec ces champs :

fields:
  - name: numero
    description: Le numéro de facture, tel qu’imprimé.
    type: string
  - name: montant
    description: Le montant total TTC.
    type: number
  - name: echeance
    description: La date d’échéance du paiement.
    type: date
  - name: est_relance
    description: Le mail est-il une relance de paiement plutôt qu’une première facture ?
    type: boolean

Pour un mail qui dit « Veuillez trouver la facture F-2026-118 de 1 250,50 €, à régler avant le 15 novembre 2026 », les données de l’étape sont :

json
{
  "numero": "F-2026-118",
  "montant": 1250.5,
  "echeance": "2026-11-15",
  "est_relance": false,
  "_missing": []
}

En aval, {{ data.facture.montant }} vaut 1250.5. Une Condition (Si) sur {{ data.facture._missing }} permet d’envoyer les factures incomplètes à un humain.

Conversion des valeurs ​

Chaque champ est déclaré au modèle comme facultatif dans sa valeur et obligatoire dans sa présence : le modèle est prévenu que null est une bonne réponse pour un champ absent ou incertain, plutôt que de deviner. Le nœud convertit ensuite chaque valeur de façon stricte :

  • Texte : gardé tel que rendu.
  • Nombre : les espaces et les signes €, $ et £ sont retirés ; 1 250,50 et 1,250.50 donnent tous deux 1250.5. Une valeur qui n’est toujours pas un nombre devient null.
  • Oui / non : true, yes, oui, 1 donnent true ; false, no, non, 0 donnent false. Toute autre valeur devient null.
  • Date : le modèle doit rendre AAAA-MM-JJ. Une date rendue dans un autre format (par exemple 12/03/2026) est gardée telle quelle, pas rejetée.

Chaque champ resté à null est listé dans _missing.

Choix du modèle ​

Le nœud possède un port de service model. Laissé vide, l’appel utilise le modèle par défaut que l’administrateur a choisi pour l’usage « Extraire » sur la page Connexions (section Intelligence artificielle) (ou le défaut de l’instance). Branchez un nœud fournisseur comme Anthropic (Claude), OpenAI (GPT) ou Ollama (local) sur le port model pour faire tourner ce nœud chez ce fournisseur.

Prompt et sécurité ​

Les consignes données au modèle sont fixées par le nœud. Le contenu du mail, tel que rendu par « Contenu à traiter », n’entre jamais dans le message système : il part dans un message utilisateur distinct, à l’intérieur d’un bloc délimité, avec la consigne explicite de le traiter comme une donnée et d’ignorer toute instruction qu’il contiendrait. La liste des champs et leurs descriptions partent elles aussi côté utilisateur, puisque les descriptions sont templatables. Les descriptions peuvent être rédigées dans n’importe quelle langue ; le modèle les rapproche du mail par le sens.

Conseils ​

  • Identifiants de champ. Gardez-les courts, sans espace ni accent (numero_commande) : les chemins d’expression n’acceptent que des lettres non accentuées, des chiffres, _ et $, donc {{ data.<step>.numéro commande }} ne peut pas s’écrire.
  • Nom réservé. Un champ nommé _missing est refusé, comme les identifiants en double ou vides. Au plus 15 champs sont lus.
  • Les descriptions comptent. La description est ce que le modèle cherche. Dites quoi prendre et quoi ignorer (« le total TTC, pas le sous-total HT »).
  • Mails longs. Le contenu envoyé au modèle est coupé à 20 000 caractères, et le modèle est prévenu que le texte est tronqué.
  • Essais. En essai, le modèle est réellement appelé : vous voyez de vraies valeurs. Si l’instance n’a aucun fournisseur d’IA utilisable, la sortie est fabriquée (valeurs de remplissage) et le détail d’exécution signale que l’IA a été sautée. Contrairement aux autres nœuds IA, Extraire n’écrit pas de clé simulated : ses données ne contiennent que vos champs et _missing.
  • Erreurs. Aucun champ exploitable donne node_invalid_param ; un contenu à traiter vide donne node_nothing_to_do. Une réponse du modèle qui n’est pas un objet JSON donne llm_invalid_output, qui est retentée. Voir Gestion des erreurs.