Skip to content

Requête HTTP ​

Appelle une API externe et verse la réponse dans les données de travail. Une écriture peut faire l’objet d’une nouvelle tentative après une coupure : privilégiez des endpoints idempotents.

Appelle une API externe et verse la réponse dans les données de travail. Servez-vous-en pour pousser un dossier dans un CRM, chercher un client dans votre propre back-office, ou déposer la facture du mail dans un outil d’OCR ou de gestion documentaire. Pour un simple message vers Slack, Teams ou un webhook, Notifier est plus court : il construit le contenu pour vous.

La requête passe par le client HTTP protégé du serveur, jamais directement par le workflow. L’authentification vient d’un connexion enregistré (voir Clé d’API (HTTP)) : les secrets n’apparaissent ni dans le nœud, ni dans les données d’étape, ni dans les journaux.

En bref ​

  • Type : http.request · version 1
  • Catégorie : Données
  • Nature : Étape — s’exécute pendant une exécution
  • Effet : Écrit à l’extérieur (external_write) — écrit hors de Mankomail ; décrit au lieu d’être fait pendant un essai
  • Exige un mail porteur : Non
  • Connexion : Clé d’API (HTTP)
  • Entrées : main
  • Sorties : main

Connexion ​

Ce nœud exige une connexion Clé d’API (HTTP).

Paramètres ​

method ​

Méthode

  • Type : Un choix (options)
  • Requis : Oui
  • Défaut : GET
  • Options :
    • GET — GET
    • POST — POST
    • PUT — PUT
    • PATCH — PATCH
    • DELETE — DELETE

url ​

URL

  • Type : Texte (string)
  • Requis : Oui
  • Défaut : "" (vide)
  • 2000 caractères au plus
  • Exemple : https://api.exemple.fr/v1/tickets
  • Expressions : {{ }} accepté

credential ​

Authentification — Facultatif. La connexion à appliquer (clé d’API, Bearer, Basic, paramètre d’URL). Elle est ajoutée à la requête par le serveur — sa valeur n’apparaît nulle part.

  • Type : Connexion (credential)
  • Requis : Non
  • Défaut : "" (vide)

headers ​

En-têtes — Les connexions (clé d’API, Bearer…) se choisissent au-dessus et ne se saisissent jamais ici.

  • Type : Paires clé / valeur (keyValue)
  • Requis : Non
  • Défaut : []
  • Expressions : {{ }} accepté

bodyMode ​

Contenu envoyé

  • Type : Un choix (options)
  • Requis : Oui
  • Défaut : text
  • Options :
    • none — Rien : Une requête sans corps.
    • text — Texte : Le corps que vous écrivez. Accepte des expressions {{ }}. Posez l’en-tête Content-Type qui va avec.
    • json — JSON : Le même corps, avec Content-Type: application/json posé pour vous.
    • multipart — Formulaire avec fichiers : Envoie les pièces jointes du mail vers l’API (multipart/form-data) — le cas « déposer la facture dans notre outil ».
  • Affiché quand : method vaut l’une de POST, PUT, PATCH, DELETE

body ​

Corps — Corps texte. Accepte des expressions {{ }}. Pour du JSON, écrivez le JSON et posez l’en-tête Content-Type.

  • Type : Texte long (text)
  • Requis : Non
  • Défaut : "" (vide)
  • 100000 caractères au plus
  • Affiché quand : method vaut l’une de POST, PUT, PATCH, DELETE et bodyMode vaut l’une de text, json
  • Expressions : {{ }} accepté

multipartFields ​

Champs du formulaire — Les parties texte de l’envoi : {{ email.subject }}, un identifiant de dossier…

  • Type : Liste d’éléments (collection)
  • Requis : Non
  • Défaut : []
  • Au plus 20 éléments
  • Chaque élément a :
    • name — Nom du champ
      • Type : Texte (string)
      • Requis : Oui
      • Défaut : "" (vide)
      • 200 caractères au plus
      • Expressions : {{ }} refusé
    • value — Valeur
      • Type : Texte (string)
      • Requis : Non
      • Défaut : "" (vide)
      • 10000 caractères au plus
  • Affiché quand : method vaut l’une de POST, PUT, PATCH, DELETE et bodyMode vaut multipart

multipartFiles ​

Fichiers envoyés — Une ligne = un champ de formulaire alimenté par les PJ retenues. Plusieurs PJ retenues = plusieurs parties portant le même nom de champ.

  • Type : Liste d’éléments (collection)
  • Requis : Non
  • Défaut : []
  • Au plus 10 éléments
  • Chaque élément a :
    • name — Nom du champ
      • Type : Texte (string)
      • Requis : Oui
      • Défaut : file
      • 200 caractères au plus
      • Exemple : file
      • Expressions : {{ }} refusé
    • selection — Pièces jointes retenues
      • Type : Un choix (options)
      • Requis : Oui
      • Défaut : all
      • Options :
        • all — Toutes les pièces jointes : Celles du mail déclencheur, puis les fichiers ajoutés par les étapes précédentes (un acte rapatrié, un PDF signé), dans cet ordre.
        • first — La première seulement : La première PJ, quand on sait qu’il n’y en a qu’une qui compte.
        • byMime — Par type de fichier : Par type MIME : application/pdf, ou toute une famille avec image/*.
        • byName — Par nom de fichier : Par motif sur le nom : *.pdf, facture-*.
    • mime — Type de fichier. Type MIME exact (application/pdf) ou famille entière (image/*). Laissé vide, aucune PJ n’est retenue.
      • Type : Texte (string)
      • Requis : Non
      • Défaut : "" (vide)
      • 200 caractères au plus
      • Exemple : application/pdf
      • Affiché quand : selection vaut byMime
    • namePattern — Nom du fichier. Motif simple : * remplace n’importe quoi, ? un caractère (*.pdf, facture-*). La casse est ignorée.
      • Type : Texte (string)
      • Requis : Non
      • Défaut : "" (vide)
      • 200 caractères au plus
      • Exemple : *.pdf
      • Affiché quand : selection vaut byName
  • Affiché quand : method vaut l’une de POST, PUT, PATCH, DELETE et bodyMode vaut multipart

timeoutMs ​

Délai maximum — Au-delà, la requête est abandonnée et l’étape échoue.

  • Type : Durée (duration)
  • Requis : Non
  • Défaut : 10 secondes (10000)
  • Stockée en millisecondes, saisie en secondes ou minutes
  • De 1 seconde à 2 minutes
  • Rangé sous « Avancé » dans l’éditeur

failOn4xx5xx ​

Échouer sur une réponse d’erreur — Activé : un statut ≥ 400 fait échouer l’étape — les nouvelles tentatives et « Si l’échec persiste » s’appliquent alors (onglet Réglages). Désactivé : la réponse passe dans les données de travail.

  • Type : Oui / non (boolean)
  • Requis : Non
  • Défaut : true
  • Rangé sous « Avancé » dans l’éditeur

Sorties ​

  • main — Empruntée une fois la réponse reçue. Avec Échouer sur une réponse d’erreur activé, un statut de 400 ou plus fait échouer l’étape à la place.

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>.status }} — number. Le statut HTTP de la réponse (200, 201, 404…).
  • {{ data.<step>.ok }} — boolean. true quand le statut est inférieur à 400.
  • {{ data.<step>.headers }} — object. Les en-têtes de la réponse, noms en minuscules ({{ data.<step>.headers.content-type }}). Un en-tête répété est joint par une virgule.
  • {{ data.<step>.bodyText }} — string. Le corps de la réponse en texte, coupé à 20 000 caractères.
  • {{ data.<step>.bodyTruncated }} — boolean. true quand bodyText a été coupé à 20 000 caractères.
  • {{ data.<step>.bodyJson }} — object. Le corps analysé, seulement quand la réponse déclare un Content-Type JSON et qu’il se lit. Un champ se lit avec {{ data.<step>.bodyJson.id }}.
  • {{ data.<step>.simulated }} — boolean. true en essai : aucune requête n’est sortie du serveur.
  • {{ data.<step>.bodyMode }} — string. Le mode de contenu réellement utilisé : none, text, json ou multipart (toujours none pour un GET).
  • {{ data.<step>.multipart.fields }} — number. Multipart seulement : le nombre de champs texte envoyés.
  • {{ data.<step>.multipart.files }} — array of { name, position, filename, mime, size }. Multipart seulement : les parties fichier envoyées, une entrée par pièce jointe.
  • {{ data.<step>.multipart.unmatched }} — array. Multipart seulement : les noms des champs fichier qui n’ont trouvé aucune pièce jointe et ont été écartés.
  • {{ data.<step>.summary }} — string. Le résumé d’une ligne de l’étape, par exemple POST 201.

Exemple ​

Un workflow crée un ticket dans un outil de support pour chaque nouvelle demande client. Le nœud s’appelle « Créer le ticket », ses données vivent donc sous creer_le_ticket.

text
method       POST
url          https://api.exemple.fr/v1/tickets
credential   Clé d’API de l’outil de support
bodyMode     json
body         {"subject": "{{ email.subject }}", "from": "{{ email.from.email }}"}
failOn4xx5xx activé

Avec JSON comme contenu envoyé, l’en-tête Content-Type: application/json est posé pour vous. Si l’API répond 201 avec {"id": "T-4812"}, les nœuds suivants lisent :

text
{{ data.creer_le_ticket.status }}       → 201
{{ data.creer_le_ticket.bodyJson.id }}  → T-4812

Pour envoyer des pièces jointes, choisissez Formulaire avec fichiers comme contenu envoyé. Chaque ligne de Fichiers envoyés est un champ de formulaire (par exemple file) alimenté par les pièces jointes qui passent son filtre (toutes, la première, par type de fichier ou par nom de fichier) ; plusieurs pièces retenues produisent plusieurs parties portant le même nom de champ. Les Champs du formulaire ajoutent les parties texte, comme un numéro de dossier.

Conseils ​

  • Méthodes et corps. Un GET n’envoie aucun corps, quel que soit le réglage du contenu. POST, PUT, PATCH et DELETE envoient le corps choisi dans Contenu envoyé. En mode Texte, posez vous-même l’en-tête Content-Type.
  • Authentification. Choisissez le connexion dans Authentification ; ne saisissez jamais d’en-tête Authorization à la main. Le connexion remplace tout en-tête Authorization de même nom. Il doit être actif et vous appartenir, ou appartenir à votre organisation, sinon l’étape échoue.
  • Adresses refusées. Seuls http et https sur les ports 80 et 443 sont acceptés. Les adresses privées, de bouclage, lien-local, multicast et réservées (y compris les adresses de métadonnées des clouds) sont refusées, de même que les identifiants ou mots de passe placés dans l’URL. Le contrôle porte sur l’adresse réellement connectée et sur chaque redirection.
  • Redirections. Jusqu’à 5 redirections sont suivies. En cas de changement d’hôte, les en-têtes Authorization, Cookie et Proxy-Authorization sont retirés. Un 303, ou un 301/302 après un POST, se poursuit en GET sans corps.
  • Limites de taille et de durée. Une réponse de plus de 2 Mio fait échouer l’étape. Seuls les 20 000 premiers caractères sont gardés dans bodyText. Le Délai maximum (ms) s’applique à chaque requête et est plafonné à 60 secondes par le serveur, même si le champ accepte davantage.
  • Fichiers. Un champ fichier qui ne trouve aucune pièce jointe est écarté et listé dans multipart.unmatched. S’il ne reste plus aucune partie, l’étape échoue avec node_nothing_to_do. Une pièce retenue qui ne peut plus être lue, ou qui dépasse 10 Mio, fait échouer la requête : l’API ne reçoit jamais un envoi incomplet.
  • Réponses d’erreur. Avec Échouer sur une réponse d’erreur activé (le défaut), un statut de 400 ou plus fait échouer l’étape avec http_error_status. Les 429 et 5xx sont retentés automatiquement ; les autres 4xx sont définitifs. Désactivez l’option pour traiter le statut vous-même, par exemple avec un nœud Condition (Si) sur {{ data.<step>.ok }}.
  • Nouvelles tentatives. Après un incident, le moteur peut exécuter l’étape à nouveau. Chaque requête porte un en-tête Idempotency-Key ; si l’API l’ignore, un POST, PUT, PATCH ou DELETE peut être exécuté deux fois. Préférez des endpoints idempotents (mise à jour ou création par clé métier) pour les écritures.
  • Essais. Toutes les requêtes sont simulées, GET compris : rien ne sort du serveur, pas même une résolution DNS. L’étape rend le statut 200, un objet JSON vide {} comme corps et simulated: true. Les nœuds qui dépendent d’un vrai corps de réponse verront des valeurs vides pendant un essai. Voir Essais.