AutomationFlowsAI & RAG › AI Meeting Automation with Google Docs

AI Meeting Automation with Google Docs

Original n8n title: Read - Automação De Reunião

Read - Automação de Reunião. Uses agent, lmChatOpenAi, memoryBufferWindow, googleDocsTool. Webhook trigger; 9 nodes.

Webhook trigger★★★☆☆ complexityAI-powered9 nodesAgentOpenAI ChatMemory Buffer WindowGoogle Docs ToolGoogle Drive
AI & RAG Trigger: Webhook Nodes: 9 Complexity: ★★★☆☆ AI nodes: yes Added:

This workflow follows the Agent → Googledocstool recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "updatedAt": "2026-01-13T13:42:47.908Z",
  "createdAt": "2026-01-06T13:13:15.494Z",
  "id": "oNJrqx5GqjBbbKjk",
  "name": "Read - Automa\u00e7\u00e3o de Reuni\u00e3o",
  "active": true,
  "isArchived": false,
  "nodes": [
    {
      "parameters": {
        "operation": "formatDate",
        "date": "={{ $json.body.start_time }}",
        "format": "custom",
        "customFormat": "dd-MM-yyyy",
        "outputFieldName": "Data",
        "options": {}
      },
      "type": "n8n-nodes-base.dateTime",
      "typeVersion": 2,
      "position": [
        208,
        0
      ],
      "id": "ba2f6580-0f2c-47ce-a802-535e43b9727e",
      "name": "Date & Time"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $('Webhook').item.json.body.session_id }}",
        "options": {
          "systemMessage": "=Sua tarefa \u00e9 exclusivamente analisar o texto que est\u00e1 no documento {{ $json.id }} usando a tool encontra_documento e gerar um resumo da reuni\u00e3o que ocorreu. Ap\u00f3s esse resumo, voc\u00ea deve atualizar o texto acrescentando ao final da \u00faltima linha o resumo gerado. Para isso use a tool Atualizar_texto para incluir o resumo que voc\u00ea criou. O t\u00f3pico \"Resumo:\" deve estar no in\u00edcio do texto, logo na primeira linha, com o t\u00f3pico \"Resumo:\" em negrito. Ap\u00f3s os dois pontos de \"Resumo:\" o texto deve seguir sem negrito, somente com o Markdown e divis\u00e3o em t\u00f3picos, como ser\u00e1 solicitado a seguir.\n\nO formato dessa mensagem deve ficar em Markdown usando ## no in\u00edcio de cada T\u00f3pico, distinguindo todo o resumo em t\u00f3picos.\n\nNeste resumo quero que inclua tarefas com nomes dos respons\u00e1veis e explicite exatamente cada tarefa pra cada respons\u00e1vel.\n\nN\u00e3o inclua qualquer coment\u00e1rio de output como por exemplo \"Resumo da reuni\u00e3o foi adicionado ao in\u00edcio do documento conforme solicitado. Se precisar de mais alguma coisa, estou \u00e0 disposi\u00e7\u00e3o.\" ou qualquer semelhante. O \u00fanico texto que deve ser inclu\u00eddo no documento \u00e9 o resultado do resumo que o Agente fizer."
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2.2,
      "position": [
        816,
        0
      ],
      "id": "6905bc46-3686-4d41-aba0-7eba59ffc20c",
      "name": "AI Agent"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {
          "temperature": 0.7,
          "topP": 0.5
        }
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        816,
        176
      ],
      "id": "94d60bf9-64d5-49cd-a486-db9b8dc5ab1c",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $('Webhook').item.json.body.session_id }}"
      },
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [
        960,
        176
      ],
      "id": "f5c2e54f-1060-4ec9-a301-a3225d772ae3",
      "name": "Simple Memory"
    },
    {
      "parameters": {
        "descriptionType": "manual",
        "toolDescription": "=Inclua na \u00faltima linha do documento {{ $json.id }} um resumo com base nas considera\u00e7\u00f5es do Agente",
        "operation": "update",
        "documentURL": "={{ $json.id }}",
        "actionsUi": {
          "actionFields": [
            {
              "action": "insert",
              "text": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('actionFields0_Old_Text', ``, 'string') }}"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.googleDocsTool",
      "typeVersion": 2,
      "position": [
        1280,
        176
      ],
      "id": "2c1a035e-0144-42f3-baf3-295afc0e6f67",
      "name": "Atualizar_texto",
      "credentials": {
        "googleDocsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "get",
        "documentURL": "={{ $json.id }}"
      },
      "type": "n8n-nodes-base.googleDocsTool",
      "typeVersion": 2,
      "position": [
        1120,
        176
      ],
      "id": "53ab6a7e-6ecf-47e1-ad12-0b026c160bff",
      "name": "encontra_documento",
      "credentials": {
        "googleDocsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "createFromText",
        "content": "=Transcri\u00e7\u00e3o: {{\n  $('Webhook').item.json.body.transcript.speaker_blocks\n    .map(block => {\n      const name = block.speaker?.name ?? 'Speaker desconhecido';\n      const text = block.words?.trim() ?? '';\n      return `${name}: ${text}`;\n    })\n    .join('\\n\\n')\n}}\n",
        "name": "={{ $json.Data }} {{ $json['T\u00edtulo'] }}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "folderId": {
          "__rl": true,
          "value": "=13N3VD63dZEoRIeGJu_YL7xVO1T9POI6M",
          "mode": "id"
        },
        "options": {
          "convertToGoogleDocument": true
        }
      },
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        608,
        0
      ],
      "id": "b65034db-2260-4e29-bdab-34c0405bb4fe",
      "name": "Cria o documento da reuni\u00e3o",
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "81d3ae8c-d67f-40e5-b813-80a7e962a83c",
              "name": "Participantes",
              "value": "={{ $('Webhook').item.json.body.participants }}",
              "type": "string"
            },
            {
              "id": "560c9d28-690d-41d5-9ce6-bfc61a40ee23",
              "name": "Anfitri\u00e3o",
              "value": "={{ $('Webhook').item.json.body.owner.name }}",
              "type": "string"
            },
            {
              "id": "9bf56233-fc8b-44a8-8460-139869818253",
              "name": "T\u00edtulo",
              "value": "={{ $('Webhook').item.json.body.title }}",
              "type": "string"
            },
            {
              "id": "1d21a59a-6370-4481-9369-daf2d20a934c",
              "name": "Data",
              "value": "={{ $json.Data }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        400,
        0
      ],
      "id": "ebeba804-a22d-4b8f-9085-7ee952999e99",
      "name": "Trata os dados"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "4a436dd1-436e-4376-9762-bcfa92339fb6",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        16,
        0
      ],
      "id": "94bd64a3-6c5a-4968-8667-d795a9d3e020",
      "name": "Webhook"
    }
  ],
  "connections": {
    "Date & Time": {
      "main": [
        [
          {
            "node": "Trata os dados",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        []
      ]
    },
    "Atualizar_texto": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "encontra_documento": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Cria o documento da reuni\u00e3o": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Trata os dados": {
      "main": [
        [
          {
            "node": "Cria o documento da reuni\u00e3o",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook": {
      "main": [
        [
          {
            "node": "Date & Time",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "staticData": null,
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "versionId": "435f4d87-d2e3-47cd-880e-00c5dee868b2",
  "activeVersionId": "435f4d87-d2e3-47cd-880e-00c5dee868b2",
  "triggerCount": 1,
  "shared": [
    {
      "updatedAt": "2026-01-06T13:13:15.494Z",
      "createdAt": "2026-01-06T13:13:15.494Z",
      "role": "workflow:owner",
      "workflowId": "oNJrqx5GqjBbbKjk",
      "projectId": "HA3MdmBHnbWmZ1v9"
    }
  ],
  "activeVersion": {
    "updatedAt": "2026-01-09T14:06:33.893Z",
    "createdAt": "2026-01-09T14:06:28.080Z",
    "versionId": "435f4d87-d2e3-47cd-880e-00c5dee868b2",
    "workflowId": "oNJrqx5GqjBbbKjk",
    "nodes": [
      {
        "parameters": {
          "operation": "formatDate",
          "date": "={{ $json.body.start_time }}",
          "format": "custom",
          "customFormat": "dd-MM-yyyy",
          "outputFieldName": "Data",
          "options": {}
        },
        "type": "n8n-nodes-base.dateTime",
        "typeVersion": 2,
        "position": [
          208,
          0
        ],
        "id": "ba2f6580-0f2c-47ce-a802-535e43b9727e",
        "name": "Date & Time"
      },
      {
        "parameters": {
          "promptType": "define",
          "text": "={{ $('Webhook').item.json.body.session_id }}",
          "options": {
            "systemMessage": "=Sua tarefa \u00e9 exclusivamente analisar o texto que est\u00e1 no documento {{ $json.id }} usando a tool encontra_documento e gerar um resumo da reuni\u00e3o que ocorreu. Ap\u00f3s esse resumo, voc\u00ea deve atualizar o texto acrescentando ao final da \u00faltima linha o resumo gerado. Para isso use a tool Atualizar_texto para incluir o resumo que voc\u00ea criou. O t\u00f3pico \"Resumo:\" deve estar no in\u00edcio do texto, logo na primeira linha, com o t\u00f3pico \"Resumo:\" em negrito. Ap\u00f3s os dois pontos de \"Resumo:\" o texto deve seguir sem negrito, somente com o Markdown e divis\u00e3o em t\u00f3picos, como ser\u00e1 solicitado a seguir.\n\nO formato dessa mensagem deve ficar em Markdown usando ## no in\u00edcio de cada T\u00f3pico, distinguindo todo o resumo em t\u00f3picos.\n\nNeste resumo quero que inclua tarefas com nomes dos respons\u00e1veis e explicite exatamente cada tarefa pra cada respons\u00e1vel.\n\nN\u00e3o inclua qualquer coment\u00e1rio de output como por exemplo \"Resumo da reuni\u00e3o foi adicionado ao in\u00edcio do documento conforme solicitado. Se precisar de mais alguma coisa, estou \u00e0 disposi\u00e7\u00e3o.\" ou qualquer semelhante. O \u00fanico texto que deve ser inclu\u00eddo no documento \u00e9 o resultado do resumo que o Agente fizer."
          }
        },
        "type": "@n8n/n8n-nodes-langchain.agent",
        "typeVersion": 2.2,
        "position": [
          816,
          0
        ],
        "id": "6905bc46-3686-4d41-aba0-7eba59ffc20c",
        "name": "AI Agent"
      },
      {
        "parameters": {
          "model": {
            "__rl": true,
            "mode": "list",
            "value": "gpt-4.1-mini"
          },
          "options": {
            "temperature": 0.7,
            "topP": 0.5
          }
        },
        "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
        "typeVersion": 1.2,
        "position": [
          816,
          176
        ],
        "id": "94d60bf9-64d5-49cd-a486-db9b8dc5ab1c",
        "name": "OpenAI Chat Model",
        "credentials": {
          "openAiApi": {
            "id": "4QN0fwxyuHPXwljS",
            "name": "OpenAI - Alvorada"
          }
        }
      },
      {
        "parameters": {
          "sessionIdType": "customKey",
          "sessionKey": "={{ $('Webhook').item.json.body.session_id }}"
        },
        "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
        "typeVersion": 1.3,
        "position": [
          960,
          176
        ],
        "id": "f5c2e54f-1060-4ec9-a301-a3225d772ae3",
        "name": "Simple Memory"
      },
      {
        "parameters": {
          "descriptionType": "manual",
          "toolDescription": "=Inclua na \u00faltima linha do documento {{ $json.id }} um resumo com base nas considera\u00e7\u00f5es do Agente",
          "operation": "update",
          "documentURL": "={{ $json.id }}",
          "actionsUi": {
            "actionFields": [
              {
                "action": "insert",
                "text": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('actionFields0_Old_Text', ``, 'string') }}"
              }
            ]
          }
        },
        "type": "n8n-nodes-base.googleDocsTool",
        "typeVersion": 2,
        "position": [
          1280,
          176
        ],
        "id": "2c1a035e-0144-42f3-baf3-295afc0e6f67",
        "name": "Atualizar_texto",
        "credentials": {
          "googleDocsOAuth2Api": {
            "id": "olMIBQOlKm0CkycN",
            "name": "Alvorada - Google Docs"
          }
        }
      },
      {
        "parameters": {
          "operation": "get",
          "documentURL": "={{ $json.id }}"
        },
        "type": "n8n-nodes-base.googleDocsTool",
        "typeVersion": 2,
        "position": [
          1120,
          176
        ],
        "id": "53ab6a7e-6ecf-47e1-ad12-0b026c160bff",
        "name": "encontra_documento",
        "credentials": {
          "googleDocsOAuth2Api": {
            "id": "olMIBQOlKm0CkycN",
            "name": "Alvorada - Google Docs"
          }
        }
      },
      {
        "parameters": {
          "operation": "createFromText",
          "content": "=Transcri\u00e7\u00e3o: {{\n  $('Webhook').item.json.body.transcript.speaker_blocks\n    .map(block => {\n      const name = block.speaker?.name ?? 'Speaker desconhecido';\n      const text = block.words?.trim() ?? '';\n      return `${name}: ${text}`;\n    })\n    .join('\\n\\n')\n}}\n",
          "name": "={{ $json.Data }} {{ $json['T\u00edtulo'] }}",
          "driveId": {
            "__rl": true,
            "mode": "list",
            "value": "My Drive"
          },
          "folderId": {
            "__rl": true,
            "value": "=13N3VD63dZEoRIeGJu_YL7xVO1T9POI6M",
            "mode": "id"
          },
          "options": {
            "convertToGoogleDocument": true
          }
        },
        "type": "n8n-nodes-base.googleDrive",
        "typeVersion": 3,
        "position": [
          608,
          0
        ],
        "id": "b65034db-2260-4e29-bdab-34c0405bb4fe",
        "name": "Cria o documento da reuni\u00e3o",
        "credentials": {
          "googleDriveOAuth2Api": {
            "id": "eqHJdpUdnqK3Eb7a",
            "name": "Google Drive account"
          }
        }
      },
      {
        "parameters": {
          "assignments": {
            "assignments": [
              {
                "id": "81d3ae8c-d67f-40e5-b813-80a7e962a83c",
                "name": "Participantes",
                "value": "={{ $('Webhook').item.json.body.participants }}",
                "type": "string"
              },
              {
                "id": "560c9d28-690d-41d5-9ce6-bfc61a40ee23",
                "name": "Anfitri\u00e3o",
                "value": "={{ $('Webhook').item.json.body.owner.name }}",
                "type": "string"
              },
              {
                "id": "9bf56233-fc8b-44a8-8460-139869818253",
                "name": "T\u00edtulo",
                "value": "={{ $('Webhook').item.json.body.title }}",
                "type": "string"
              },
              {
                "id": "1d21a59a-6370-4481-9369-daf2d20a934c",
                "name": "Data",
                "value": "={{ $json.Data }}",
                "type": "string"
              }
            ]
          },
          "options": {}
        },
        "type": "n8n-nodes-base.set",
        "typeVersion": 3.4,
        "position": [
          400,
          0
        ],
        "id": "ebeba804-a22d-4b8f-9085-7ee952999e99",
        "name": "Trata os dados"
      },
      {
        "parameters": {
          "httpMethod": "POST",
          "path": "4a436dd1-436e-4376-9762-bcfa92339fb6",
          "options": {}
        },
        "type": "n8n-nodes-base.webhook",
        "typeVersion": 2.1,
        "position": [
          16,
          0
        ],
        "id": "94bd64a3-6c5a-4968-8667-d795a9d3e020",
        "name": "Webhook",
        "webhookId": "4a436dd1-436e-4376-9762-bcfa92339fb6"
      }
    ],
    "connections": {
      "Date & Time": {
        "main": [
          [
            {
              "node": "Trata os dados",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "OpenAI Chat Model": {
        "ai_languageModel": [
          [
            {
              "node": "AI Agent",
              "type": "ai_languageModel",
              "index": 0
            }
          ]
        ]
      },
      "Simple Memory": {
        "ai_memory": [
          [
            {
              "node": "AI Agent",
              "type": "ai_memory",
              "index": 0
            }
          ]
        ]
      },
      "AI Agent": {
        "main": [
          []
        ]
      },
      "Atualizar_texto": {
        "ai_tool": [
          [
            {
              "node": "AI Agent",
              "type": "ai_tool",
              "index": 0
            }
          ]
        ]
      },
      "encontra_documento": {
        "ai_tool": [
          [
            {
              "node": "AI Agent",
              "type": "ai_tool",
              "index": 0
            }
          ]
        ]
      },
      "Cria o documento da reuni\u00e3o": {
        "main": [
          [
            {
              "node": "AI Agent",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "Trata os dados": {
        "main": [
          [
            {
              "node": "Cria o documento da reuni\u00e3o",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "Webhook": {
        "main": [
          [
            {
              "node": "Date & Time",
              "type": "main",
              "index": 0
            }
          ]
        ]
      }
    },
    "authors": "Aldo Calesco",
    "name": "Vers\u00e3o 01",
    "description": "",
    "autosaved": false
  },
  "tags": []
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Read - Automação de Reunião. Uses agent, lmChatOpenAi, memoryBufferWindow, googleDocsTool. Webhook trigger; 9 nodes.

Source: https://github.com/copytron/n8n-alvorada-backups/blob/3a47f74015af7b100a3503f92eba967f3339147e/oNJrqx5GqjBbbKjk.json — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Automate your HR onboarding process by transforming complex policy PDFs into friendly, structured onboarding videos using AI and HeyGen. 📄🎬 This workflow receives HR policy documents via webhook, extr

HTTP Request, Google Drive, Agent +3
AI & RAG

This workflow automates the entire process of taking a raw user-submitted script, rewriting it into a polished HeyGen-ready narration, generating a full avatar video, handling all processing checks, r

HTTP Request, Agent, Memory Buffer Window +6
AI & RAG

🐋🤖 DeepSeek AI Agent + Telegram + LONG TERM Memory 🧠. Uses telegram, stickyNote, agent, memoryBufferWindow. Webhook trigger; 23 nodes.

Telegram, Agent, Memory Buffer Window +4
AI & RAG

🐋🤖 DeepSeek AI Agent + Telegram + LONG TERM Memory 🧠. Uses telegram, stickyNote, agent, memoryBufferWindow. Webhook trigger; 23 nodes.

Telegram, Agent, Memory Buffer Window +4
AI & RAG

This n8n workflow template is designed to integrate a DeepSeek AI agent with Telegram, incorporating long-term memory capabilities for personalized and context-aware responses. Here's a detailed break

Telegram, Agent, Memory Buffer Window +4