AutomationFlowsAI & RAG › Google Calendar → AI Meeting Summary & Email

Google Calendar → AI Meeting Summary & Email

Original n8n title: Automated Meeting Recording & AI Summaries with Google Calendar, Vexa & Llama 3.2

ByOneclick AI Squad @oneclick-ai on n8n.io

Transform your meetings into actionable insights automatically! This workflow captures meeting audio, transcribes conversations, generates AI summaries, and emails the results to participants—all without manual intervention. Auto-record meetings when they start and stop when…

Event trigger★★★★☆ complexityAI-powered19 nodesGoogle Calendar TriggerHTTP RequestChain LlmLm OllamaEmail Send
AI & RAG Trigger: Event Nodes: 19 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #5197 — we link there as the canonical source.

This workflow follows the Chainllm → Emailsend 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
{
  "id": "IOWmWdoiFYtZFoQ7",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Auto Meeting Record, Transcribe & Email Summaries with Vexa & Llama AI",
  "tags": [],
  "nodes": [
    {
      "id": "1e744c15-6d1e-4cf6-b0fc-9a076a28f99d",
      "name": "Start Meeting Trigger\t",
      "type": "n8n-nodes-base.googleCalendarTrigger",
      "position": [
        -80,
        100
      ],
      "parameters": {
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "eventStarted",
        "calendarId": {
          "__rl": true,
          "mode": "id",
          "value": "user@example.com"
        }
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "d887b73f-bae7-4ce7-b1dd-428e020eec59",
      "name": "Launch Vexa Bot for Meeting\t",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        140,
        100
      ],
      "parameters": {
        "url": "https://gateway.dev.vexa.ai/bots",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "platform",
              "value": "google_meet"
            },
            {
              "name": "native_meeting_id",
              "value": "={{ $json.conferenceData.conferenceId }}"
            },
            {
              "name": "language",
              "value": "en"
            },
            {
              "name": "bot_name",
              "value": "Oneclick Bot"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "X-API-Key",
              "value": "your_api_key_here"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "88c87165-2cf6-4e6a-95fb-414477d4c9a2",
      "name": "End Meeting Trigger\t",
      "type": "n8n-nodes-base.googleCalendarTrigger",
      "position": [
        -80,
        460
      ],
      "parameters": {
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "eventStarted",
        "calendarId": {
          "__rl": true,
          "mode": "id",
          "value": "user@example.com"
        }
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "9193cf99-82ea-4cb2-a83b-d6e6543dc378",
      "name": "Stop Vexa Bot\t",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        140,
        460
      ],
      "parameters": {
        "url": "=https://gateway.dev.vexa.ai/bots/google_meet/{{ $json.conferenceData.conferenceId }}",
        "method": "DELETE",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-API-Key",
              "value": "your_api_key_here"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "21dbb664-4085-4a2a-8cf3-e4767f517d9d",
      "name": "Fetch Meeting Audio File\t",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        360,
        360
      ],
      "parameters": {
        "url": "=https://gateway.dev.vexa.ai/meeting_audio/google_meet/{{ $('End Meeting Trigger\t').item.json.conferenceData }}",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-API-Key",
              "value": "your_api_key_here"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "83e8a00e-874f-4447-addc-89101095a993",
      "name": "Transcribe Meeting Audio\t",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        380,
        600
      ],
      "parameters": {
        "url": "=https://gateway.dev.vexa.ai/transcripts/google_meet/{{ $('End Meeting Trigger\t').item.json.conferenceData.conferenceId }}",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-API-Key",
              "value": "your_api_key_here"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "defad130-6fbd-4cd6-8e35-deebabd6011f",
      "name": "Prepare Transcript for AI\t",
      "type": "n8n-nodes-base.set",
      "position": [
        580,
        560
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "62f25d35-d8cc-48f8-997d-97ff90368635",
              "name": "text",
              "type": "string",
              "value": "={{ $json.segments }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "b4cded44-b3e1-41b4-b994-a5dcf26a65ec",
      "name": "Generate Meeting Summary\t",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        800,
        560
      ],
      "parameters": {
        "text": "=Provide a concise summary of following texts in nested bullets, using quotes only when absolutely essential for clarity. Start output directly with the response.\n\n\n{{ $json.text }}",
        "promptType": "define"
      },
      "typeVersion": 1.6
    },
    {
      "id": "efebad1b-5ebe-4491-a9e6-a0b9838815eb",
      "name": "AI Model",
      "type": "@n8n/n8n-nodes-langchain.lmOllama",
      "position": [
        888,
        780
      ],
      "parameters": {
        "model": "llama3.2-16000:latest",
        "options": {}
      },
      "credentials": {
        "ollamaApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5c21a138-e2ed-4e2e-a4c2-6ddf65e85625",
      "name": "Send email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1176,
        560
      ],
      "parameters": {
        "text": "={{ $json.output }}",
        "options": {},
        "subject": "Meeting Summary",
        "toEmail": "user@example.com",
        "fromEmail": "user@example.com",
        "emailFormat": "text"
      },
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "b59c01ba-f3e6-4485-bf96-684aa21a6973",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1106,
        460
      ],
      "parameters": {
        "height": 260,
        "content": "Sends the generated meeting summary to specified recipients via email, using configured SMTP settings"
      },
      "typeVersion": 1
    },
    {
      "id": "db5a2b78-d7d0-4aa9-af65-db586650977b",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -210,
        0
      ],
      "parameters": {
        "width": 300,
        "height": 260,
        "content": "Initiates workflow when meeting begins, triggered by eventStarted signal from the meeting platform. Configure with Google Meet webhook and API credentials"
      },
      "typeVersion": 1
    },
    {
      "id": "3403ed43-201d-4ede-a736-eaaa3d6bf97b",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        120,
        0
      ],
      "parameters": {
        "color": 3,
        "height": 260,
        "content": "Starts the Vexa Bot recording process using the configured API credentials or webhook"
      },
      "typeVersion": 1
    },
    {
      "id": "da19f45e-4dd3-4f78-95a6-0c0f0af63182",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -340,
        360
      ],
      "parameters": {
        "color": 5,
        "width": 400,
        "height": 260,
        "content": "Detects meeting end event and triggers next step to stop recording. Configure with Google Meet webhook for eventEnded and fix authentication (e.g., verify client credentials)"
      },
      "typeVersion": 1
    },
    {
      "id": "b5bcf708-5175-440f-9028-c959ce2d5117",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        70,
        360
      ],
      "parameters": {
        "color": 4,
        "height": 260,
        "content": "Halts the Vexa Bot recording and prepares the audio file for further processing."
      },
      "typeVersion": 1
    },
    {
      "id": "9fd34341-9e6f-428d-bf7a-058ae1881a77",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        270,
        320
      ],
      "parameters": {
        "width": 280,
        "height": 200,
        "content": "Retrieves the recorded audio file from Vexa Bot for transcription."
      },
      "typeVersion": 1
    },
    {
      "id": "d73efff1-507a-401a-b151-44b36fffefac",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        320,
        500
      ],
      "parameters": {
        "color": 6,
        "width": 180,
        "height": 260,
        "content": "Converts the fetched audio file into text using the connected AI model."
      },
      "typeVersion": 1
    },
    {
      "id": "6bc285e7-5512-4719-ae44-f07f240826a3",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        560,
        440
      ],
      "parameters": {
        "color": 4,
        "width": 160,
        "height": 340,
        "content": "Formats the transcribed text for input into the AI model for summary generation."
      },
      "typeVersion": 1
    },
    {
      "id": "4b4ae666-3280-465c-aa4c-2011aec87247",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        780,
        420
      ],
      "parameters": {
        "color": 3,
        "height": 420,
        "content": "Creates a concise summary from the transcribed text using the AI model."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "f7d7eaa4-9e40-4d89-9095-6a881320a158",
  "connections": {
    "AI Model": {
      "ai_languageModel": [
        [
          {
            "node": "Generate Meeting Summary\t",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Stop Vexa Bot\t": {
      "main": [
        [
          {
            "node": "Fetch Meeting Audio File\t",
            "type": "main",
            "index": 0
          },
          {
            "node": "Transcribe Meeting Audio\t",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "End Meeting Trigger\t": {
      "main": [
        [
          {
            "node": "Stop Vexa Bot\t",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Meeting Trigger\t": {
      "main": [
        [
          {
            "node": "Launch Vexa Bot for Meeting\t",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Meeting Audio File\t": {
      "main": [
        []
      ]
    },
    "Generate Meeting Summary\t": {
      "main": [
        [
          {
            "node": "Send email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcribe Meeting Audio\t": {
      "main": [
        [
          {
            "node": "Prepare Transcript for AI\t",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Transcript for AI\t": {
      "main": [
        [
          {
            "node": "Generate Meeting Summary\t",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

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

Transform your meetings into actionable insights automatically! This workflow captures meeting audio, transcribes conversations, generates AI summaries, and emails the results to participants—all without manual intervention. Auto-record meetings when they start and stop when…

Source: https://n8n.io/workflows/5197/ — 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

AI Competition – Small Business Problems – Rebound Email. Uses httpRequest, chainLlm, outputParserStructured, lmChatOpenAi. Event-driven trigger; 25 nodes.

HTTP Request, Chain Llm, Output Parser Structured +4
AI & RAG

This n8n workflow is your all-in-one solution for automated content creation and publishing. It intelligently crafts unique articles in Thai, generates captivating AI images, and seamlessly publishes

Lm Ollama, HTTP Request, Telegram +3
AI & RAG

This n8n template automates targeted lead discovery, AI-driven data structuring, and personalized cold-email sending at controlled intervals. It’s ideal for sales teams, founders, and agencies that wa

Google Sheets, Form Trigger, Chain Llm +6
AI & RAG

🤖 Translation Agent. Uses executeWorkflowTrigger, chainLlm, lmOllama, httpRequest. Event-driven trigger; 24 nodes.

Execute Workflow Trigger, Chain Llm, Lm Ollama +1
AI & RAG

This workflow is designed to analyze YouTube videos by extracting their transcripts, summarizing the content using AI models, and sending the analysis via email.

OpenAI Chat, OpenRouter Chat, Lm Chat Deep Seek +4