Workflow n8n

Automatisation Airtable avec n8n : gestion des uploads de fichiers

Ce workflow n8n a pour objectif d'automatiser la gestion des fichiers uploadés dans Airtable, permettant ainsi aux équipes de gagner du temps et d'éviter les erreurs manuelles. Dans un contexte où la gestion des données est cruciale, ce processus s'avère particulièrement utile pour les entreprises qui utilisent Airtable pour centraliser leurs informations. Par exemple, les équipes marketing peuvent automatiser l'importation de fichiers de campagne, garantissant ainsi que toutes les données sont correctement enregistrées et mises à jour en temps réel. Le workflow débute avec un déclencheur 'New Upload' qui active le processus dès qu'un nouveau fichier est ajouté à la base Airtable. Ensuite, le système utilise le nœud 'Get File ID' pour récupérer l'identifiant du fichier, suivi d'un téléchargement via le nœud 'Download File'. Si le fichier est valide, il est traité par le nœud 'Create Records' pour l'enregistrement dans Airtable. En cas d'erreur, le workflow envoie une notification via le nœud 'Status Failed'. Les nœuds 'Sticky Note' sont utilisés pour fournir des commentaires visuels tout au long du processus. Grâce à cette automatisation n8n, les utilisateurs bénéficient d'une gestion fluide et sans faille des fichiers, réduisant ainsi les risques d'erreurs et améliorant l'efficacité opérationnelle.

Tags clés :automatisationAirtablen8ngestion des donnéesoptimisation des processus
Catégorie: Webhook · Tags: automatisation, Airtable, n8n, gestion des données, optimisation des processus0

Workflow n8n Airtable, gestion des données, optimisation des processus : vue d'ensemble

Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.

Workflow n8n Airtable, gestion des données, optimisation des processus : détail des nœuds

  • Get File ID

    Ce noeud récupère l'identifiant d'un fichier dans une base Airtable.

  • Status Failed

    Ce noeud envoie une requête HTTP pour signaler un échec de statut.

  • Status Uploaded

    Ce noeud envoie une requête HTTP pour signaler un statut téléchargé.

  • Sticky Note

    Ce noeud crée une note autocollante avec une largeur, une hauteur et un contenu spécifiés.

  • Sticky Note1

    Ce noeud crée une note autocollante avec une hauteur et un contenu spécifiés.

  • Campaign is Not Empty

    Ce noeud vérifie si une campagne n'est pas vide en fonction des conditions spécifiées.

  • Campaign Not Empty

    Ce noeud définit des champs pour une campagne qui n'est pas vide.

  • Campaign Not Empty1

    Ce noeud définit des champs pour une autre campagne qui n'est pas vide.

  • Read File

    Ce noeud lit un fichier à partir d'un fichier de tableur en utilisant les options spécifiées.

  • Airtable Base IDs

    Ce noeud définit des identifiants de base Airtable à partir des champs spécifiés.

  • Status Processing

    Ce noeud envoie une requête HTTP pour signaler un traitement de statut.

  • Download File

    Ce noeud télécharge un fichier à partir d'une URL spécifiée.

  • Create Records

    Ce noeud crée des enregistrements en envoyant une requête HTTP avec un corps JSON.

  • Sticky Note2

    Ce noeud crée une note autocollante avec une largeur, une hauteur et un contenu spécifiés.

  • New Upload

    Ce noeud déclenche le workflow lorsqu'un nouvel upload est détecté dans une table Airtable.

  • Sticky Note3

    Ce noeud crée une note autocollante avec une largeur, une hauteur et un contenu spécifiés.

  • Sticky Note4

    Ce noeud crée une note autocollante avec une largeur, une hauteur et un contenu spécifiés.

Inscris-toi pour voir l'intégralité du workflow

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "meta": {
    "instanceId": "257476b1ef58bf3cb6a46e65fac7ee34a53a5e1a8492d5c6e4da5f87c9b82833",
    "templateId": "2071"
  },
  "nodes": [
    {
      "id": "577fb3b7-b0a6-4f2b-9b53-36d1f77de5a0",
      "name": "Get File ID",
      "type": "n8n-nodes-base.airtable",
      "position": [
        1120,
        1120
      ],
      "parameters": {
        "id": "={{ $node[\"New Upload\"].json[\"id\"] }}",
        "base": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $item(\"0\").$node[\"Airtable Base IDs\"].json[\"Base ID\"] }}"
        },
        "table": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $item(\"0\").$node[\"Airtable Base IDs\"].json[\"Upload Table ID\"] }}"
        },
        "options": {},
        "operation": "get"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "b1TkvXJM6AdmupUh",
          "name": "Airtable Personal Access Token account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "a287658f-50e0-4d08-9342-a5143dc20ff2",
      "name": "Status Failed",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2820,
        1180
      ],
      "parameters": {
        "url": "=https://api.airtable.com/v0/{{ $item(\"0\").$node[\"Airtable Base IDs\"].json[\"Base ID\"] }}/{{ $item(\"0\").$node[\"Airtable Base IDs\"].json[\"Upload Table ID\"] }}",
        "method": "PATCH",
        "options": {},
        "jsonBody": "={\n\"records\":[{\n\"id\":\"{{ $item(\"0\").$node[\"Get File ID\"].json[\"record_id\"] }}\",\n\"fields\":{\n\"Status\":\"Failed\"\n}\n}\n]\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "airtableTokenApi"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "b1TkvXJM6AdmupUh",
          "name": "Airtable Personal Access Token account"
        }
      },
      "executeOnce": true,
      "typeVersion": 4.1
    },
    {
      "id": "e3aae523-4803-4f69-9697-ab677c3f216d",
      "name": "Status Uploaded",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2820,
        1020
      ],
      "parameters": {
        "url": "=https://api.airtable.com/v0/{{ $item(\"0\").$node[\"Airtable Base IDs\"].json[\"Base ID\"] }}/{{ $item(\"0\").$node[\"Airtable Base IDs\"].json[\"Upload Table ID\"] }}",
        "method": "PATCH",
        "options": {},
        "jsonBody": "={\n\"records\":[{\n\"id\":\"{{ $item(\"0\").$node[\"Get File ID\"].json[\"record_id\"] }}\",\n\"fields\":{\n\"Status\":\"Uploaded\"\n}\n}\n]\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "airtableTokenApi"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "b1TkvXJM6AdmupUh",
          "name": "Airtable Personal Access Token account"
        }
      },
      "executeOnce": true,
      "typeVersion": 4.1
    },
    {
      "id": "833515af-bf3a-4bc7-b79c-a6c1731f4714",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2280,
        820
      ],
      "parameters": {
        "width": 319.2310328152142,
        "height": 538.9310265075466,
        "content": "## Confirm the key names and column references\n\n\n\n\nWhen adapting this to your own base and Google Sheets (CSV) template, make sure to modify this node accordingly, as key values you will need to set the Airtable Fields, and the Expressions need to match the Read File column names\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMake sure that the fields have the correct data type (Strings, Integers (numbers), etc)"
      },
      "typeVersion": 1
    },
    {
      "id": "e3cfcf21-3210-455c-b539-2dcacda3172a",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        840,
        920
      ],
      "parameters": {
        "height": 416.06551185206945,
        "content": "### Input your Airtables relevant ID's. These will be used in the API Calls"
      },
      "typeVersion": 1
    },
    {
      "id": "c244d6fe-21bf-4488-9780-32b56baa9998",
      "name": "Campaign is Not Empty",
      "type": "n8n-nodes-base.if",
      "position": [
        1880,
        1120
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $item(\"0\").$node[\"Get File ID\"].json[\"Campaign\"][\"0\"] }}",
              "operation": "isNotEmpty"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ced8a7f4-4ccc-4fcf-8c13-c1b8f099283e",
      "name": "Campaign Not Empty",
      "type": "n8n-nodes-base.set",
      "position": [
        2120,
        1020
      ],
      "parameters": {
        "fields": {
          "values": [
            {
              "name": "Campaign",
              "stringValue": "=\"Campaigns\":[\"{{ $item(\"0\").$node[\"Get File ID\"].json[\"Campaign\"][\"0\"] }}\"],"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "23e0a41c-cbbd-401d-88b4-a4b190dbcd72",
      "name": "Campaign Not Empty1",
      "type": "n8n-nodes-base.set",
      "position": [
        2120,
        1200
      ],
      "parameters": {
        "fields": {
          "values": [
            {
              "name": "Campaign"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "f6c40cf2-4893-42ee-859c-f430b4dc5cf1",
      "name": "Read File",
      "type": "n8n-nodes-base.spreadsheetFile",
      "position": [
        1660,
        1120
      ],
      "parameters": {
        "options": {
          "headerRow": true
        },
        "binaryPropertyName": "=data"
      },
      "typeVersion": 2
    },
    {
      "id": "b7495a65-32bf-430d-9998-483582bbe6ef",
      "name": "Airtable Base IDs",
      "type": "n8n-nodes-base.set",
      "position": [
        900,
        1120
      ],
      "parameters": {
        "fields": {
          "values": [
            {
              "name": "Base ID",
              "stringValue": "=appZ0qelhmC2Y9igI"
            },
            {
              "name": "Upload Table ID",
              "stringValue": "tblDzSabZcP47sIMp"
            },
            {
              "name": "Lead Table ID",
              "stringValue": "tblnsXKf3TBztlIPV"
            }
          ]
        },
        "include": "none",
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "9fa8f822-f611-4af6-a2a4-7baaf2efa82d",
      "name": "Status Processing",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1280,
        1120
      ],
      "parameters": {
        "url": "=https://api.airtable.com/v0/{{ $item(\"0\").$node[\"Airtable Base IDs\"].json[\"Base ID\"] }}/{{ $item(\"0\").$node[\"Airtable Base IDs\"].json[\"Upload Table ID\"] }}",
        "method": "PATCH",
        "options": {},
        "jsonBody": "={\n\"records\":[{\n\"id\":\"{{ $node[\"Get File ID\"].json[\"record_id\"] }}\",\n\"fields\":{\n\"Status\":\"Processing\"\n}\n}\n]\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "airtableTokenApi"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "b1TkvXJM6AdmupUh",
          "name": "Airtable Personal Access Token account"
        }
      },
      "typeVersion": 4.1
    },
    {
      "id": "af23a338-a9a0-49db-88de-d6eb68af2be9",
      "name": "Download File",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1460,
        1120
      ],
      "parameters": {
        "url": "={{ $node[\"Get File ID\"].json[\"File\"][\"0\"][\"url\"] }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "typeVersion": 4.1
    },
    {
      "id": "4428cdc4-1ffd-4f6f-8d96-49d20b80bfba",
      "name": "Create Records",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        2380,
        1120
      ],
      "parameters": {
        "url": "=https://api.airtable.com/v0/{{ $item(\"0\").$node[\"Airtable Base IDs\"].json[\"Base ID\"] }}/{{ $item(\"0\").$node[\"Airtable Base IDs\"].json[\"Lead Table ID\"] }}",
        "method": "POST",
        "options": {
          "batching": {
            "batch": {
              "batchSize": 8
            }
          }
        },
        "jsonBody": "={\n    \"records\": [\n        {\n            \"fields\": {\n                \"FirstName\": \"{{ $json[\"FirstName\"] }}\",\n                \"LastName\": \"{{ $json[\"LastName\"] || \"\"}}\",\n                \"Email\": \"{{ $json[\"Email\"] || \"\" }}\",\n                \"Phone\": \"{{ $json[\"Phone\"] || \"\" }}\",\n                \"Company\": \"{{ $json[\"Company\"] || \"\" }}\",\n                \"Title\": \"{{ $json[\"Title\"] || \"\" }}\",\n                \"Country\": \"{{ $json[\"Country\"] || \"\" }}\",\n                \"City\": \"{{ $json[\"City\"] || \"\" }}\",\n                \"Website\": \"{{ $json[\"Website\"] || \"\" }}\",\n                \"LeadSource\": \"{{ $json[\"LeadSource\"] || \"\" }}\",\n                \"LeadStatus\": \"{{ $json[\"LeadStatus\"] || \"\" }}\",\n                {{ $json[\"Campaign\"] }}\n                \"InterestLevel\": \"{{ $json[\"InterestLevel\"] || \"\" }}\",\n                \"LastContactDate\": \"{{ $json[\"LastContactDate\"] || \"\" }}\"\n\n\n            }\n        }\n    ]\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "nodeCredentialType": "airtableTokenApi"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "b1TkvXJM6AdmupUh",
          "name": "Airtable Personal Access Token account"
        }
      },
      "typeVersion": 4.1
    },
    {
      "id": "e7a2cf60-099f-4c32-b9f0-ad2dd3d6e282",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        380,
        240
      ],
      "parameters": {
        "width": 1608.819505196552,
        "height": 349.25800232621134,
        "content": "# Bulk Upload Contacts Through CSV | Airtable Interface & Airtable Grid\n\n\n## Airtable Template - https://www.airtable.com/universe/expkxniTpHDg4Y4Ni/interfaces-upload-bulk-records-from-csv\n## Google Sheets Template - https://docs.google.com/spreadsheets/d/1SEwOGCfekc1h_ZfZ8PDQY6oGgOGSzSgtD7pEliEGaZ0/edit?usp=sharing"
      },
      "typeVersion": 1
    },
    {
      "id": "dd8b54fa-15fb-4df5-b94f-8286dae7026b",
      "name": "New Upload",
      "type": "n8n-nodes-base.airtableTrigger",
      "position": [
        660,
        1120
      ],
      "parameters": {
        "baseId": {
          "__rl": true,
          "mode": "id",
          "value": "appZ0qelhmC2Y9igI"
        },
        "tableId": {
          "__rl": true,
          "mode": "id",
          "value": "tblDzSabZcP47sIMp"
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerField": "Created At",
        "authentication": "airtableTokenApi",
        "additionalFields": {
          "viewId": ""
        }
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "b1TkvXJM6AdmupUh",
          "name": "Airtable Personal Access Token account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "32f6ec9b-3f23-4d58-9cc2-b41fd9246091",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1980,
        240
      ],
      "parameters": {
        "width": 879.3031720944707,
        "height": 224.90387533954015,
        "content": "## Walkthrough and Overview\n\n### https://www.youtube.com/watch?v=LgYxS1O-rbs"
      },
      "typeVersion": 1
    },
    {
      "id": "78363718-c1c2-4bf0-ba04-a48403cca0cb",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        60,
        820
      ],
      "parameters": {
        "width": 558.4226026659302,
        "height": 768.2443727570767,
        "content": "# Setup Checklist\n\n### 1.Go to the Airtable Template and copy the latest version of the base\n### \n### 2. From your new Airtable base URL, get and replace your base and tables id's into this workflow's trigger node.\n### 3. Input your Airtable Id's in the second node \"Airtable Base ID's\"\n### 4. Make sure to add a Personal Access Token for Airtable Integration. It should, as minimum have enabled scopes for \"data.record:read\", \"data.record:write\", \"schema.bases:read\"\n### 5. Any file uploads can now be done from the Interface Form\n\n#After Setup\n\n### - Make sure you that if you add, remove or modify fields (or field names), those changes should also be applied to the \"Create Record\" node\n### - Make sure that the CSV upload header row, matches the Airtable Leads field names\n### - If you modify any field type (Text to Number, or Number to Text), those changes should also be applied to the \"Create Records\" value (Numbers go without double quotes / strings, dates and the rest of the data types go with double quotes) [JSON Syntax]"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "Read File": {
      "main": [
        [
          {
            "node": "Campaign is Not Empty",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "New Upload": {
      "main": [
        [
          {
            "node": "Airtable Base IDs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get File ID": {
      "main": [
        [
          {
            "node": "Status Processing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download File": {
      "main": [
        [
          {
            "node": "Read File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Records": {
      "main": [
        [
          {
            "node": "Status Uploaded",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Status Failed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Airtable Base IDs": {
      "main": [
        [
          {
            "node": "Get File ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Status Processing": {
      "main": [
        [
          {
            "node": "Download File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Campaign Not Empty": {
      "main": [
        [
          {
            "node": "Create Records",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Campaign Not Empty1": {
      "main": [
        [
          {
            "node": "Create Records",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Campaign is Not Empty": {
      "main": [
        [
          {
            "node": "Campaign Not Empty",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Campaign Not Empty1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Workflow n8n Airtable, gestion des données, optimisation des processus : pour qui est ce workflow ?

Ce workflow est destiné aux équipes marketing et aux gestionnaires de données qui utilisent Airtable pour la gestion de leurs fichiers. Il convient particulièrement aux entreprises de taille moyenne à grande, cherchant à automatiser leurs processus de gestion de fichiers sans nécessiter de compétences techniques avancées.

Workflow n8n Airtable, gestion des données, optimisation des processus : problème résolu

Ce workflow résout le problème de la gestion manuelle des fichiers dans Airtable, qui peut être source d'erreurs et de pertes de temps. En automatisant le processus d'importation et de validation des fichiers, les utilisateurs évitent les erreurs humaines et assurent une mise à jour rapide et précise de leurs données. Après la mise en place de ce workflow, les équipes peuvent se concentrer sur des tâches à plus forte valeur ajoutée, tout en ayant la certitude que leurs données sont correctement gérées.

Workflow n8n Airtable, gestion des données, optimisation des processus : étapes du workflow

Étape 1 : Le workflow commence avec le déclencheur 'New Upload' qui détecte l'ajout d'un nouveau fichier dans Airtable.

  • Étape 1 : Le nœud 'Get File ID' récupère l'identifiant du fichier pour le traitement.
  • Étape 2 : Le fichier est ensuite téléchargé via le nœud 'Download File'.
  • Étape 3 : Si le fichier est valide, le nœud 'Create Records' enregistre les informations dans Airtable.
  • Étape 4 : En cas d'erreur, le nœud 'Status Failed' envoie une notification pour alerter l'équipe.
  • Étape 5 : Des nœuds 'Sticky Note' fournissent des informations visuelles tout au long du processus.

Workflow n8n Airtable, gestion des données, optimisation des processus : guide de personnalisation

Pour personnaliser ce workflow, vous pouvez modifier l'URL du webhook dans le nœud 'New Upload' pour l'adapter à votre configuration Airtable. Assurez-vous également de mettre à jour les paramètres du nœud 'Create Records' afin qu'ils correspondent aux champs de votre base de données Airtable. Si vous souhaitez intégrer d'autres outils, envisagez d'ajouter des nœuds HTTP pour des appels API supplémentaires. Pour sécuriser le flux, vérifiez les paramètres d'authentification dans les nœuds HTTP et configurez des alertes pour surveiller les erreurs.