Français
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— GETPOST— POSTPUT— PUTPATCH— PATCHDELETE— 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êteContent-Typequi va avec.json— JSON : Le même corps, avecContent-Type: application/jsonposé 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 :
methodvaut l’une dePOST,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 :
methodvaut l’une dePOST,PUT,PATCH,DELETEetbodyModevaut l’une detext,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é
- Type : Texte (
value— Valeur- Type : Texte (
string) - Requis : Non
- Défaut :
""(vide) - 10000 caractères au plus
- Type : Texte (
- Affiché quand :
methodvaut l’une dePOST,PUT,PATCH,DELETEetbodyModevautmultipart
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é
- Type : Texte (
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 avecimage/*.byName— Par nom de fichier : Par motif sur le nom :*.pdf,facture-*.
- Type : Un choix (
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 :
selectionvautbyMime
- Type : Texte (
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 :
selectionvautbyName
- Type : Texte (
- Affiché quand :
methodvaut l’une dePOST,PUT,PATCH,DELETEetbodyModevautmultipart
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 exemplePOST 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-4812Pour 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êteAuthorizationde même nom. Il doit être actif et vous appartenir, ou appartenir à votre organisation, sinon l’étape échoue. - Adresses refusées. Seuls
httpethttpssur 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,CookieetProxy-Authorizationsont 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 avecnode_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 etsimulated: true. Les nœuds qui dépendent d’un vrai corps de réponse verront des valeurs vides pendant un essai. Voir Essais.