OLYMPUS

Formations

Mini-formation · tiré de 49 conversations

n8n, ton moteur d'automatisation

Tout ce que tu as demandé, résolu ou laissé ouvert sur n8n entre juin 2025 et septembre 2026, remis dans l'ordre d'un cours : comprendre, écrire les bonnes expressions, éviter les pièges, brancher images et Pinterest, exploiter le serveur.

49 conversations12 modules13 mois~40 min de lecture
n8nSites WordPressCocons SEOImages IAPinterestYouTubeLeads
00

Vue d'ensemble

ObjectifSavoir à quoi sert n8n chez toi et où se situent tes vraies difficultés.

n8n est ton orchestrateur. Il enchaîne des étapes (nœuds) qui appellent des services : un script PHP qui pilote WordPress, Google Sheets, OpenAI, Google Drive, l'API Pinterest. Tu ne l'utilises pas pour de grandes architectures : l'essentiel de tes questions porte sur des expressions et des Code nodes qui cassent.

WordPress

Site par site

WP-CLI appelé via pix-flow.com/auto.php, avec un wp_path par site.

SEO

Cocons dans Sheets

Les cocons sémantiques sont lus et écrits dans Google Sheets.

Images

Génération et retouche

OpenAI pour créer, Google Drive pour stocker et relire.

Réseaux

Pinterest, YouTube

Publication d'épingles ; extraction de vidéos d'une chaîne.

Données

Leads et CSV

Nettoyage, conversion de montants, doublons, import en Postgres.

Expressions et Code nodes~ 55 %Binaires, images, API~ 25 %Serveur, accès, mises à jour~ 12 %Idées et architecture~ 8 %
Ordre de grandeur estimé à partir des titres et résumés des conversations, pas un comptage exact.
01

Les données dans n8n

ObjectifComprendre la forme de ce qui circule entre deux nœuds. Presque chaque erreur vient de là.

Entre deux nœuds, n8n transporte une liste d'items. Chaque item contient un objet json (les champs) et éventuellement un binary (les fichiers). Un nœud s'exécute une fois par item, sauf indication contraire.

{ nom: "A" }{ nom: "a" }{ nom: "B" }{ nom: "b" }{ nom: "C" }{ nom: "c" }Nœud1 exécution / item
Trois items en entrée, trois exécutions, trois items en sortie. Le « Run once for each item » d'un Code node reproduit ce comportement.

Lire un champ

BesoinÉcriture
Champ de l'item courant{{ $json.prix }}
Champ d'un autre nœud, même position{{ $('Nom du nœud').item.json.prix }}
Premier item d'un autre nœud{{ $('Nom du nœud').first().json.prix }}
Nom de champ exotique{{ $json["N°;Fichier;Prompt"] }} (crochets obligatoires)
02

Expressions : l'aide-mémoire

ObjectifAvoir sous la main les écritures qui reviennent le plus dans tes workflows.

Règle de base : un calcul est une seule expression. Les accolades ne se multiplient pas.

Correct
EXPRESSION
{{ $json.a * $json.b }}
Incorrect
EXPRESSION
{{ $json.a }} * {{ $json.b }}
Je veux…J'écris
Une valeur par défaut{{ $json.qte ?? 0 }}
Forcer une chaîne{{ String($json.id) }} ou .toString()
Tronquer à 15 caractères{{ $json.titre.substring(0, 15) }}
Garder les 5 premiers mots{{ $json.titre.trim().split(/\s+/).slice(0,5).join(' ') }}
Date JJ/MM/AAAA vers AAAA-MM-JJ{{ $json.date.split('/').reverse().join('-') }}
Heure de ParistoLocaleString('fr-FR', { timeZone: 'Europe/Paris' })

Un slug sans accents

EXPRESSION
{{ $json.titre
  .normalize("NFD").replace(/[\u0300-\u036f]/g, "")
  .replace(/\s+/g, '-').toLowerCase() }}

Nombre au format français

EXPRESSION
{{ Number($json.montant.replace('€','').replace(',','.').trim()) }}

// vers une colonne Postgres bigint
{{ Math.round(Number($json.montant.replace('€','').replace(',','.').trim())) }}

Vers une colonne real, nettoie le symbole € et la virgule avant l'envoi. Vers bigint, arrondis avec Math.round, sinon Postgres refuse la décimale (l'erreur BIGINT de décembre 2025).

Pour vérifier

Comment écrire une multiplication dans un champ n8n ?

03

Les 7 pièges récurrents

ObjectifReconnaître un message d'erreur et savoir quoi corriger sans repartir de zéro.
An expression references this node, but the node is unexecuted
Cause$('A').item || $('B').item échoue même avec || : n8n résout les deux branches, dont une n'a pas tourné.
SolutionUn nœud Set commun dans chaque branche qui écrit le même champ, puis $json.champ après le Merge.
Can't determine which item to use / undefined dans une boucle
CauseLe nom du nœud référencé n'est pas le vrai (loop1 au lieu de Loop Over Items), ou .item ne sait pas choisir.
SolutionReprendre le nom exact du nœud, puis .first() ou $json plutôt que .item.
binary.data.data vaut « filesystem-v2 »
CauseLe Binary Data Manager est en mode filesystem : le champ contient une référence (le base64 de filesystem-v2 est ZmlsZXN5c3RlbS12Mg==), pas l'image.
SolutionDans un Code node, await this.helpers.getBinaryDataBuffer(0, 'data') puis .toString('base64').
binaryPropertyName : le fichier est introuvable
CauseLe champ attend un nom, tu y as mis une expression ={{ }}.
SolutionÉcrire simplement data.
Google Drive « Download » refuse l'URL
CauseCe nœud n'accepte qu'un ID ou un lien Drive, pas une URL d'image quelconque.
SolutionNœud HTTP Request avec Response Format : File.
403 Requests from referer <empty> are blocked
CauseLa clé Google Custom Search est restreinte par referer, et n8n n'en envoie pas.
SolutionAjouter un header Referer, ou restreindre la clé par IP plutôt que par referer.
500 - "" ou ECONNREFUSED sur pix-flow.com
CauseLa panne est côté script PHP ou serveur : corps envoyé en texte au lieu de JSON, wp_path erroné. Ce n'est pas n8n.
SolutionTester l'appel hors n8n, vérifier le Content-Type: application/json et le chemin du site.

Autre erreur, celle du Filter : « Wrong type… expecting a string ». Avec typeValidation: strict, force la valeur en chaîne avec String(...).

Pour vérifier

Un Merge échoue avec « node is unexecuted ». Solution ?

binary.data.data affiche « filesystem-v2 ». Que faire ?

04

Code nodes

ObjectifChoisir le bon mode, puis réutiliser les recettes déjà écrites.
Mode 1

Run once for each item

Tu lis $json et tu retournes un seul objet.

Mode 2

Run once for all items

Tu lis $input.all() (ou items) et tu retournes un tableau.

MODE 1
return {
  nom: $json.nom.trim(),
  prix: Number(String($json.prix).replace(',', '.')) || 0,
};
MODE 2
const vus = new Set();
return $input.all().filter(i => {
  const k = i.json.email;
  if (vus.has(k)) return false;
  vus.add(k);
  return true;
});

Recettes déjà écrites dans tes conversations

  • Doublons par clé, avec un Set (ci-dessus).
  • Top 10 par champ et compte d'items.
  • Concaténation de N items en un fichier .txt ou en une ligne JSON.
  • Élément aléatoire dans une liste.
  • Parsing du HTML YouTube : vidéos d'une chaîne, 37 k devient 37000, « il y a 2 jours » devient une date.
05

Fichiers et nombres français

ObjectifLire un CSV bancaire ou comptable sans décaler les colonnes ni fausser les montants.

Cas de décembre 2025 : un export avec tabulations, des montants à virgule décimale, parfois sans deux décimales. Le nœud Spreadsheet File lit par défaut avec , et le format anglais.

Spreadsheet Filedélimiteur \t, tout en texteCode nodevirgule → point, trimPostgresMath.round si bigint
Trois étapes, chacune règle une cause de dérive distincte.
CODE NODE
return $input.all().map(item => {
  const d = item.json;
  const brut = String(d["Montant(EUROS)"] ?? "").replace(",", ".");
  const n = parseFloat(brut);
  return { json: {
    Date: d["Date"]?.trim() || null,
    Libelle: d["Libellé"]?.trim().replace(/\s+/g, " ") || null,
    Montant: isNaN(n) ? null : n,
  }};
});
06

Images IA et binaires

ObjectifSavoir quel nœud appeler pour générer une image, et comment manipuler le fichier obtenu.

Décembre 2025 : un message « Insufficient quota » était trompeur. Le vrai défaut : gpt-image-1 avait été branché comme modèle de chat dans un AI Agent LangChain. Ce n'est pas un modèle de chat, il vit sur l'API Images.

Ce qui échoueAI Agent (LangChain)modèle : gpt-image-1mauvais endpoint (Chat)→ « Insufficient quota » trompeurCe qui fonctionneSet / FunctionOpenAI ImageDrivePrompt (gpt-4o)ChatGPT écrit le prompt, l'API Images génère
Si tu veux un agent qui raisonne et regarde l'image, choisis un modèle de chat (gpt-4o, gpt-4.1, gpt-4o-mini), jamais gpt-image-1.

Passer une image à une API en base64

CODE NODE
const buf = await this.helpers.getBinaryDataBuffer(0, 'data');
return [{ json: { image_b64: buf.toString('base64') } }];

C'est la réponse aux conversations « base64 » (septembre 2025, février 2026) : lire le tampon réel plutôt que binary.data.data.

Pour vérifier

Où se branche gpt-image-1 ?

07

Pinterest en API

ObjectifPublier une épingle depuis n8n et vérifier qu'elle existe vraiment.

Ta conversation la plus longue (51 000 caractères, avril 2026) porte sur cet envoi. Décisions retenues :

  • Publication par l'API v5 : POST /v5/pins.
  • Une credential OAuth2 générique avec les scopes pins:write et boards:read.
  • L'épingle existe dès que l'API renvoie un id.
  • Le board se vérifie avec GET /v5/boards.
HTTP REQUEST
POST https://api.pinterest.com/v5/pins
Authorization: OAuth2 (credential générique)
Content-Type: application/json

{
  "board_id": "{{ $json.board_id }}",
  "title": "{{ $json.titre.substring(0, 100) }}",
  "link": "{{ $json.url }}",
  "media_source": { "source_type": "image_url", "url": "{{ $json.image }}" }
}

Le corps ci-dessus est un modèle typique, à ajuster aux champs de ton flux.

08

Exploiter n8n sur le VPS

ObjectifMettre n8n à jour, protéger ses accès et savoir où chercher une panne.

Mettre à jour (mai 2026)

n8n tourne dans Docker, conteneur debian-n8n-1. On ne passe pas par npm.

SSH
docker compose pull n8n && docker compose up -d n8n

Mots de passe

Google n'offre pas d'API pour son gestionnaire. Piste retenue : Vaultwarden auto-hébergé, avec le client Bitwarden sur smartphone.

Appeler les sites WordPress

Toute action WP-CLI passe par pix-flow.com/auto.php avec un wp_path par site. Une erreur 500 ou ECONNREFUSED vient presque toujours de ce script, voir le module 03.

Pour vérifier

Comment mettre à jour n8n sur le VPS ?

09

n8n à l'ère des apps IA

ObjectifSavoir quand écrire une app et quand garder n8n.

Conclusion de septembre 2026 : l'app générée par IA est la façade, n8n reste l'orchestrateur.

Appfaçade, interfacen8nplanifie, relanceGoogle, OpenAIWordPress, PinterestPostgres, Drivewebhook
Ce que n8n garde : planification, webhooks, connecteurs prêts, reprises sur erreur.
10

Chantiers ouverts

ObjectifVoir ce qui n'a jamais été tranché, pour décider quoi relancer.
Non tranché

Vérification d'e-mails

Style GetEmail.io : MX + SMTP RCPT TO. Faisable mais fragile (ports SMTP, catch-all, réputation IP). Août 2026.

Non mis en place

Automatisation d'interface

Playwright ou Browserless à brancher sur n8n. Février 2026.

Sans suite

Mockups Canva et vidéos

API Connect avec templates, et vidéos à léger zoom. Janvier 2026.

Sans suite

Agents IA

n8n ou Claude Code : une liste d'idées, aucune retenue. Mars 2026.

11

Chronologie

ObjectifSituer chaque sujet dans le temps.
  1. Premières erreurs : ECONNREFUSED, 500, 403, clé API. Le script auto.php et les accès.

  2. Base64 et variables.

  3. Pinterest (24 messages), CSV et format français, BIGINT, intégration d'image par IA.

  4. Calcul, Canva, variable conditionnelle (28 messages), forçage en chaîne, adaptation de code.

  5. Agents IA ; envoi de données Pinterest (la plus longue conversation) ; adaptation de prompts.

  6. Mise à jour de n8n par SSH ; Vaultwarden.

  7. Vérification d'e-mails, correction d'un filtre.

  8. « Utiliser n8n après l'IA » ; extraction YouTube en JavaScript.

Source : sujet « n8n — automatisations » de l'archive, 49 conversations de juin 2025 à septembre 2026. Les extraits de code sont des modèles à adapter à tes flux.
Neo