Générateur de résumés de réunions

Intermédiaire

Ceci est unAI Summarization, Multimodal AIworkflow d'automatisation du domainecontenant 12 nœuds.Utilise principalement des nœuds comme Code, GoogleDrive, HttpRequest, GoogleDocsTool, Agent. Utiliser Google Drive, Gemini AI et Google Docs pour automatiser le résumé des réunions

Prérequis
  • Informations d'identification Google Drive API
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
  • Clé API Google Gemini
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": "LRTza7My8IikYhSU",
  "meta": {
    "instanceId": "86b74eba715cda37acd36ddce700cd975f9e153aba76b42417c4c1f89dcd777e",
    "templateCredsSetupCompleted": true
  },
  "name": "Meeting Summarizer",
  "tags": [],
  "nodes": [
    {
      "id": "1dcb61d9-0f7c-4b86-8b71-5f3140447b22",
      "name": "Créer un Document de Compte-Rendu",
      "type": "n8n-nodes-base.googleDocsTool",
      "position": [
        432,
        144
      ],
      "parameters": {
        "title": "={{ $('Execute when new file created of meeting of audio/video').item.json.name.replace(/\\.mp4$/, '') }}",
        "folderId": "default"
      },
      "credentials": {
        "googleDocsOAuth2Api": {
          "id": "0dKnfLHBs7hVSMo4",
          "name": "Google Docs account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "dad59a23-6608-4b2c-8059-e324fd2bd5f5",
      "name": "Analyseur de Sortie Structurée",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        592,
        224
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"summary_text\": \"Meeting Summary - August 31, 2025\\n\\n- Book club for \\\"Inspired\\\" scheduled for August 7th.\\n- New hires must read \\\"Inspired\\\" as part of onboarding.\\n- Customer interviews: Follow up with contacts from CS and Sales.\\n- Q3 engagement survey to be completed by all members.\",\n  \"doc_id\": \"1-Ht71Q5_0Owh1NRApRn9b9uAqbciwVuWAL_3IvoHIkk\"\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "a2becdc5-fb1a-44de-9e01-3b4b95cf311d",
      "name": "Télécharger le fichier de réunion créé",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -80,
        -16
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $json.webViewLink }}"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "MlBEh59DqIzyGlyS",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "34a20bdd-ed41-4af7-82c7-f6aa4705228d",
      "name": "Transcrire le fichier en texte",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        128,
        -16
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-flash",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "options": {},
        "resource": "audio",
        "inputType": "binary"
      },
      "typeVersion": 1
    },
    {
      "id": "221e5fff-cc2a-4ffd-b739-7ac9722527ce",
      "name": "Résumé de ce texte",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        336,
        -16
      ],
      "parameters": {
        "text": "={{ $json.content.parts[0].text }}",
        "options": {
          "systemMessage": "=You are an assistant that processes meeting transcripts.  \n\nYour job is to:  \n1. Read the meeting transcript provided.  \n2. Extract the main discussion points.  \n   - Keep them short, clear, and action-oriented.  \n   - Focus only on decisions, tasks, or important updates.   \n\nGoogle Docs Rules:  \n- If the Google Doc for this project/meeting does not exist → **create a Summary Docs** with the formatted summary.  \n\nGive summary and docs id Give both Seprately.\n\nFormatting rules:\n- Start with a title in this format: 📌 Meeting Summary – {{new Date().toLocaleDateString()}}\n- Use bold section headers like **✦ Key Discussions** and **✓ Action Items**.\n- Use ✦ bullets for general discussion points.\n- Use ✓ checkmarks for tasks or follow-ups.\n- Keep sentences short, clear, and actionable.\n- Add blank lines between sections for readability.\n- Avoid long paragraphs — use concise bullets only."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "e506c53d-b861-4f0d-81ae-bca14ad8aeb2",
      "name": "Exécuter lors de la création d'un nouveau fichier audio/vidéo de réunion",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        -288,
        -16
      ],
      "parameters": {
        "event": "fileCreated",
        "options": {
          "fileType": "all"
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "list",
          "value": "1EongmFhQf1avt1jamhV6aO6MIORrzNvT",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1EongmFhQf1avt1jamhV6aO6MIORrzNvT",
          "cachedResultName": "Speech of Meetings"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ae5f4fb0-a96b-44a5-b291-c92119508300",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        288,
        224
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "id": "Vn0WzAXggurbHNTb",
          "name": "Google Gemini(PaLM) Api account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "765dd6e3-1d95-409e-b640-2162a15304be",
      "name": "Formater le Compte-Rendu",
      "type": "n8n-nodes-base.code",
      "position": [
        848,
        -16
      ],
      "parameters": {
        "jsCode": "// Get text from previous node (adjust field if needed)\nconst input = $input.first().json.output.summary_text;\n\n// Step 1: Clean text (normalize line breaks)\nlet text = input.replace(/\\r\\n/g, \"\\n\");\n\n// Step 2: Parse into plain text + style spans\nlet plainText = \"\";\nlet styles = [];\nlet bullets = [];\nlet cursor = 1;\n\nconst lines = text.split(\"\\n\");\n\nfor (let line of lines) {\n  if (!line.trim()) {\n    plainText += \"\\n\";\n    cursor++;\n    continue;\n  }\n\n  let isBullet = false;\n  if (line.trim().startsWith(\"✦\") || line.trim().startsWith(\"✓\") || line.trim().startsWith(\"-\")) {\n    isBullet = true;\n    line = line.trim().substring(1).trim();\n  }\n\n  const regex = /(\\*\\*([^*]+)\\*\\*|\\*([^*]+)\\*|([^*]+))/g;\n  let match;\n  while ((match = regex.exec(line)) !== null) {\n    let raw = match[0];\n    let clean = match[2] || match[3] || match[4] || \"\";\n    const start = cursor;\n    const end = cursor + clean.length;\n\n    plainText += clean;\n\n    if (raw.startsWith(\"**\")) {\n      styles.push({\n        range: { startIndex: start, endIndex: end },\n        textStyle: { bold: true },\n        fields: \"bold\"\n      });\n    } else if (raw.startsWith(\"*\")) {\n      styles.push({\n        range: { startIndex: start, endIndex: end },\n        textStyle: { italic: true },\n        fields: \"italic\"\n      });\n    }\n\n    cursor = end;\n  }\n\n  plainText += \"\\n\";\n  cursor++;\n\n  if (isBullet) {\n    bullets.push({\n      range: {\n        startIndex: cursor - line.length - 1,\n        endIndex: cursor\n      },\n      bulletPreset: \"BULLET_DISC_CIRCLE_SQUARE\"\n    });\n  }\n}\n\n// Step 3: Build requests\nlet requests = [];\n\n// Insert everything at once\nrequests.push({\n  insertText: {\n    endOfSegmentLocation: {},\n    text: plainText\n  }\n});\n\n// Add styles\nfor (let s of styles) {\n  requests.push({\n    updateTextStyle: {\n      range: s.range,\n      textStyle: s.textStyle,\n      fields: s.fields\n    }\n  });\n}\n\n// Add bullets\nfor (let b of bullets) {\n  requests.push({\n    createParagraphBullets: b\n  });\n}\n\nreturn [\n  {\n    json: { requests }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "d9d69f04-139d-45c3-bdd2-15846639fe84",
      "name": "Envoyer le Compte-Rendu au document créé",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1056,
        -16
      ],
      "parameters": {
        "url": "=https://docs.googleapis.com/v1/documents/{{ $('Summerizer of that text').item.json.output.doc_id }}:batchUpdate",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "predefinedCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "requests",
              "value": "={{ $json.requests }}"
            }
          ]
        },
        "nodeCredentialType": "googleDocsOAuth2Api"
      },
      "credentials": {
        "googleDocsOAuth2Api": {
          "id": "0dKnfLHBs7hVSMo4",
          "name": "Google Docs account"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "47cb35a1-691c-452d-a5a4-e5d463b60d93",
      "name": "Note Adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -352,
        -128
      ],
      "parameters": {
        "color": 5,
        "width": 1088,
        "height": 528,
        "content": "### Summary Generation\n"
      },
      "typeVersion": 1
    },
    {
      "id": "91ae59b0-7399-451e-b05d-5b066801298b",
      "name": "Note Adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        752,
        -96
      ],
      "parameters": {
        "color": 3,
        "width": 528,
        "height": 352,
        "content": "### Docs Formatter & Sender\n"
      },
      "typeVersion": 1
    },
    {
      "id": "dc392200-438b-4cb4-b057-e3803dbd21fe",
      "name": "Note Adhésive2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1744,
        -544
      ],
      "parameters": {
        "width": 1328,
        "height": 1264,
        "content": "# 🎤 AI Meeting Summary Generator with Google Docs Integration\n## 📋 Overview\n- Automated system that takes meeting audio/video files from Google Drive, transcribes them, generates concise summaries with AI, and formats everything neatly into Google Docs.\n\n## 🔄 How It Works\n#### Real-Time Processing\n1. 🎥 Record Meeting Audio/Video → Capture your meeting and place the file into your chosen Google Drive folder.\n1. 📂 Google Drive Trigger → Watches that folder (e.g., “Speech of Meetings”) for new uploads.\n2. ⬇️ Download File → Fetches the newly uploaded file from Google Drive.\n3. 🎙 Transcribe File (Gemini Audio Model) → Converts meeting speech into raw text transcript.\n4. ✍️ Summarizer (Gemini Agent) → Reads transcript → extracts:\n          - ✦ Key Discussions\n          - ✓ Action Items\n          - Adds title with date, structured bullets, and checkmarks.\n\n#### Document Creation & Structuring\n5. 📄 Create Summary Docs (Google Docs Tool) → Creates a new Google Doc if none exists for the meeting.\n6. 📊 Structured Output Parser → Ensures AI output is structured (summary_text + doc_id).\n7. 🎨 Format Summary (Code Node) → Applies formatting rules:\n- Bold/italic text\n- Bullet points (✦)\n- Checkmarks (✓)\n- Clean line spacing for readability\n\n#### Final Output\n8. 🚀 Send to Google Docs (BatchUpdate API) → Pushes formatted summary into the newly created Google Doc.\n\n## ⚙️ Configuration Required\n#### Credentials Needed:\n- 🔑 Google Drive OAuth2 → For file monitoring & downloads\n- 🔑 Google Docs OAuth2 → For creating & updating docs\n- 🔑 Google Gemini (PaLM) API → For transcription + summarization\n\n#### Settings:\n- Trigger: Every new file created in the specified Drive folder\n- AI Model: gemini-2.5-flash for transcription & summarization\n- Output: Google Docs with structured & styled meeting notes\n\n## 🎯 Key Features\n✅ Auto-transcription of meeting audio/video\n✅ Smart AI-generated summaries (Key Discussions + Action Items)\n✅ Google Docs integration with professional formatting\n✅ Structured JSON parsing for reliable updates\n✅ End-to-end automation (no manual intervention needed)\n\n## 📝 Notes\n- Works for both audio & video meeting files\n- Creates a new doc per meeting automatically\n- Uses batchUpdate API for fine formatting (bullets, bold, italics)\n- Keeps summaries short, clear, and action-oriented"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "c86cf8a3-6cb7-40f5-bddc-9181721cb0b4",
  "connections": {
    "765dd6e3-1d95-409e-b640-2162a15304be": {
      "main": [
        [
          {
            "node": "d9d69f04-139d-45c3-bdd2-15846639fe84",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1dcb61d9-0f7c-4b86-8b71-5f3140447b22": {
      "ai_tool": [
        [
          {
            "node": "221e5fff-cc2a-4ffd-b739-7ac9722527ce",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "221e5fff-cc2a-4ffd-b739-7ac9722527ce": {
      "main": [
        [
          {
            "node": "765dd6e3-1d95-409e-b640-2162a15304be",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ae5f4fb0-a96b-44a5-b291-c92119508300": {
      "ai_languageModel": [
        [
          {
            "node": "221e5fff-cc2a-4ffd-b739-7ac9722527ce",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "dad59a23-6608-4b2c-8059-e324fd2bd5f5": {
      "ai_outputParser": [
        [
          {
            "node": "221e5fff-cc2a-4ffd-b739-7ac9722527ce",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "34a20bdd-ed41-4af7-82c7-f6aa4705228d": {
      "main": [
        [
          {
            "node": "221e5fff-cc2a-4ffd-b739-7ac9722527ce",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a2becdc5-fb1a-44de-9e01-3b4b95cf311d": {
      "main": [
        [
          {
            "node": "34a20bdd-ed41-4af7-82c7-f6aa4705228d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e506c53d-b861-4f0d-81ae-bca14ad8aeb2": {
      "main": [
        [
          {
            "node": "a2becdc5-fb1a-44de-9e01-3b4b95cf311d",
            "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 - Résumé IA, 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œuds12
Catégorie2
Types de nœuds10
Description de la difficulté

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

Auteur
Parth Pansuriya

Parth Pansuriya

@parthpansuriya

I build smart and scalable automation workflows using n8n to simplify tasks, connect apps, and boost productivity. From WhatsApp bots to AI-powered systems, I create seamless automations tailored for business and creators.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34