Résumé quotidien des formulaires Google envoyé par e-mail

Intermédiaire

Ceci est unPersonal Productivity, Multimodal AIworkflow d'automatisation du domainecontenant 6 nœuds.Utilise principalement des nœuds comme Code, Gmail, GoogleSheetsTrigger. Intégrer les soumissions de formulaires Google quotidiens pour générer un résumé Gmail

Prérequis
  • Compte Google et informations d'identification Gmail API
  • Informations d'identification Google Sheets API
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "4PkzGnVzhzmFcQas",
  "meta": {
    "instanceId": "b7b2db9d6a461f902b25d685e4550cab3c88fcbb3254a8654e06246b67e4ff5c",
    "templateCredsSetupCompleted": true
  },
  "name": "Google Form Daily Recap to Email",
  "tags": [
    {
      "id": "5iQR5Cw05Bzz7Aqt",
      "name": "Google",
      "createdAt": "2025-08-02T17:36:32.751Z",
      "updatedAt": "2025-08-02T17:36:32.751Z"
    },
    {
      "id": "PlBq4GrfRsEhR6mN",
      "name": "google form",
      "createdAt": "2025-08-14T09:57:38.641Z",
      "updatedAt": "2025-08-14T09:57:38.641Z"
    },
    {
      "id": "S94PaeZJiPKn5Ei9",
      "name": "gmail",
      "createdAt": "2025-08-14T09:57:18.678Z",
      "updatedAt": "2025-08-14T09:57:18.678Z"
    },
    {
      "id": "Unbn35P90TtJuAQC",
      "name": "email",
      "createdAt": "2025-08-14T09:57:13.394Z",
      "updatedAt": "2025-08-14T09:57:13.394Z"
    },
    {
      "id": "h2TBJOs7feXDIfbL",
      "name": "google sheet",
      "createdAt": "2025-08-14T09:57:22.041Z",
      "updatedAt": "2025-08-14T09:57:22.041Z"
    },
    {
      "id": "rYuINsb3Y1XjrgNv",
      "name": "Productivity",
      "createdAt": "2025-08-02T17:36:49.812Z",
      "updatedAt": "2025-08-02T17:36:49.812Z"
    }
  ],
  "nodes": [
    {
      "id": "1c6d9187-1442-4098-a300-11b22e1183c2",
      "name": "Résumer l'e-mail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1040,
        0
      ],
      "webhookId": "d376e469-4595-4972-9d58-ef4bbb1e7982",
      "parameters": {
        "sendTo": "email",
        "message": "={{$json.html}}",
        "options": {},
        "subject": "The requests you received today"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "88G2Fa5bxsnrjAYu",
          "name": "Gmail account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "b619b991-d0cd-41be-84f8-3e2a0db82fea",
      "name": "Déclencher les données pour une nouvelle ligne",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        416,
        0
      ],
      "parameters": {
        "event": "rowAdded",
        "options": {
          "dataLocationOnSheet": {
            "values": {
              "range": "A1:Z1000",
              "rangeDefinition": "specifyRangeA1"
            }
          }
        },
        "pollTimes": {
          "item": [
            {
              "hour": 17
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "id"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "url"
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "id": "3Ibd0h6fDr3TCJ1v",
          "name": "Google Sheets Trigger account"
        }
      },
      "notesInFlow": false,
      "typeVersion": 1
    },
    {
      "id": "0ca891c0-477f-4f23-918e-73b016f2c3b7",
      "name": "Note adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        80,
        -304
      ],
      "parameters": {
        "color": 3,
        "content": "## Required\n\n\n- Google account\n- Google Form\n- Google Sheet linked to the form"
      },
      "typeVersion": 1
    },
    {
      "id": "25843c2b-29e3-4bcd-8922-f25f8f903200",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        352,
        -304
      ],
      "parameters": {
        "color": 2,
        "width": 416,
        "height": 848,
        "content": "## 1.Workflow trigger et data gathering\n\nThe workflow is **triggered automatically** everyday at 5pm. \n\nHow to setup:\n- Set up your Google form and link it to a google sheet\n- link the google sheet to this workflow"
      },
      "typeVersion": 1
    },
    {
      "id": "804f4951-61b5-4fa1-a959-66a92ce525b5",
      "name": "Note adhésive3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        784,
        -304
      ],
      "parameters": {
        "color": 4,
        "width": 560,
        "height": 848,
        "content": "## 2. Send the email\n\nThe code node, will create the message and gather all the informations wanted about the row added during the day and will list them (row newly added). So a full sum um will be sent in one message only.\n\n\nHow to setup:\n- Connect with your Gmail account credentials."
      },
      "typeVersion": 1
    },
    {
      "id": "d889b4e6-7b66-4272-92a1-406771c5803b",
      "name": "Générer l'e-mail",
      "type": "n8n-nodes-base.code",
      "position": [
        832,
        0
      ],
      "parameters": {
        "jsCode": "const rows = $input.all().map(i => i.json);\n\n// helper: get eh first existing key\nconst pick = (obj, keys) => {\n  for (const k of keys) if (k in obj && obj[k] != null && obj[k] !== '') return obj[k];\n  return undefined;\n};\n\nconst categories = {};\nfor (const row of rows) {\n  const category = pick(row, ['Catégorie', 'Category']) || 'Non classé';\n  const question = pick(row, ['Question', 'Please write your request', 'Please write your re', 'Request', 'Message']) || '(no question)';\n  const from     = pick(row, ['Nom', 'Name', 'Full Name', 'Adresse e-mail', 'Email Address', 'Email']) || 'Anonymous';\n\n  if (!categories[category]) categories[category] = [];\n  categories[category].push({ question, from });\n}\n\nlet html = `<h2>📬 Questions of the day received (${rows.length})</h2>`;\nfor (const [cat, items] of Object.entries(categories)) {\n  html += `<h3>${cat} (${items.length})</h3><ul>`;\n  for (const it of items) {\n    html += `<li><strong>${it.from}</strong><br>${it.question}</li>`;\n  }\n  html += `</ul>`;\n}\n\nreturn [{ json: { html, count: rows.length } }];\n"
      },
      "typeVersion": 2
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "0eeda259-9205-4ec9-8dcb-f39e515f579a",
  "connections": {
    "d889b4e6-7b66-4272-92a1-406771c5803b": {
      "main": [
        [
          {
            "node": "1c6d9187-1442-4098-a300-11b22e1183c2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b619b991-d0cd-41be-84f8-3e2a0db82fea": {
      "main": [
        [
          {
            "node": "d889b4e6-7b66-4272-92a1-406771c5803b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Intermédiaire - Productivité personnelle, IA Multimodale

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds6
Catégorie2
Types de nœuds4
Description de la difficulté

Adapté aux utilisateurs expérimentés, avec des workflows de complexité moyenne contenant 6-15 nœuds

Auteur
Yassin Zehar

Yassin Zehar

@yassinzehar

Digital & IT Project Manager | Data-oriented | Agile certified (PSM I, PSPO I) | Paris

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34