Automate Team Scheduling with Google Calendar and Slack API Integration

Automate team scheduling with Google Calendar and Slack API to keep your team aligned effortlessly. This workflow connects your Google Calendar to Slack, sending real-time notifications about upcoming events and changes to schedules. Features automated reminders, AI-powered conflict resolution through OpenAI GPT, and seamless integration for instant updates. Perfect for remote teams managing multiple calendars, ensuring everyone stays informed and engaged. Requires 3 accounts: Google Calendar OAuth, Slack API, OpenAI API. Save up to 10 hours weekly by reducing scheduling conflicts and enhancing communication across your team.

1 Trigger
421 views14 nodesAug 2025Maya Johnson

Categories

Document ExtractionAI Summarization

APIs

Slack API

AI Features

AI AgentOpenAI GPTAI Chat

Credentials

3 required

Quick Actions

Copy or download to import into your n8n instance

Workflow JSON
{
  "meta": {
    "instanceId": "477d41ba9371722c12acb8ceb19deefe8a94935c3dc3255b6a9141e5f8643752",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "d3ccf483-864c-42da-98a2-81d0d42d3b0e",
      "name": "Add bot to meet",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -240,
        -512
      ],
      "parameters": {
        "url": "https://gateway.dev.vexa.ai/bots",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "platform",
              "value": "google_meet"
            },
            {
              "name": "native_meeting_id",
              "value": "={{ $json.conferenceData.conferenceId }}"
            },
            {
              "name": "bot_name",
              "value": "MyMeetingBot"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "qsLMfqhzV78G4n49",
          "name": "Header Auth account"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "4ec42f69-06d3-451b-bdce-a929a39bc8bf",
      "name": "Google Calendar Trigger",
      "type": "n8n-nodes-base.googleCalendarTrigger",
      "position": [
        -544,
        -512
      ],
      "parameters": {
        "options": {
          "matchTerm": ""
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "eventStarted",
        "calendarId": {
          "__rl": true,
          "mode": "id",
          "value": "='primary'"
        }
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "id": "eOIgUZwgncUgpFDg",
          "name": "Google Calendar account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "7d4de5a4-7aef-4447-88b3-7f32677b6395",
      "name": "Send a message",
      "type": "n8n-nodes-base.slack",
      "position": [
        1456,
        -560
      ],
      "webhookId": "c50e7cb4-eaa8-4128-99d4-e0f0341d2c97",
      "parameters": {
        "text": "={{ $json.output }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "name",
          "value": "#general"
        },
        "otherOptions": {
          "includeLinkToWorkflow": false
        }
      },
      "credentials": {
        "slackApi": {
          "id": "l613sxla64BipXhh",
          "name": "Slack account"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "03516d84-dea0-429f-b0d0-00dbb5099a94",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1056,
        -560
      ],
      "parameters": {
        "text": "=# Fast Meeting Summary Prompt\n\nAnalyze this meeting transcription and create a brief Slack summary. Keep it under 800 characters total.\n\n**Meeting Transcript:**\n{{ $json.fullTranscript }}\n\n**Meeting Details:**\n- Duration: {{ $json.durationMinutes }} minutes\n- Participants: {{ $json.participants }}\n\n**Format (be extremely concise):**\n\n## πŸ“‹ Meeting Summary\n**Duration:** [Start-End time]\n**Participants:** [Names only]\n\n**🎯 Key Points:**\n- [Main topic 1]\n- [Main topic 2]\n\n**πŸ“ Action Items:**\n- [Task - Person - Deadline]\n\n**πŸ’‘ Outcome:**\n[One sentence summary of result/decision]\n\nKeep each bullet point under 50 characters. Focus only on actionable information and key decisions.",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 2.1
    },
    {
      "id": "d40e6fbf-8bf5-4ae3-bf50-969ce96f1b23",
      "name": "Get Vexa Transcript",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        304,
        -560
      ],
      "parameters": {
        "url": "=https://gateway.dev.vexa.ai/transcripts/google_meet/{{ $json.native_meeting_id }}",
        "options": {
          "timeout": 30000
        },
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "qsLMfqhzV78G4n49",
          "name": "Header Auth account"
        }
      },
      "typeVersion": 4.1
    },
    {
      "id": "62f19410-e908-4523-a8d5-e5af789982c2",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        768,
        -432
      ],
      "webhookId": "eb04f35a-7f4e-41f6-a9d7-bc2df86e4e16",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "9208ae18-6bba-441a-95e5-3d13c44de206",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        512,
        -560
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "40ee5a62-d7e4-4f2e-9f41-e073dd09e575",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{$json.status}}",
              "rightValue": "completed"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "310ee3cb-5387-4bd7-88d5-aa7f233cee48",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1056,
        -352
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "chatgpt-4o-latest",
          "cachedResultName": "chatgpt-4o-latest"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "H8pWaOdD8Xbmd0vd",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "67cced29-b716-4ea6-a41d-9bab723332d4",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        848,
        -560
      ],
      "parameters": {
        "jsCode": "// Get the input data\nconst inputData = $input.all()[0].json; // Get the first item which contains the meeting data\n\n// Extract segments from the nested structure\nconst segments = inputData.segments || [];\n\nif (!segments || segments.length === 0) {\n  return [{\n    json: {\n      fullTranscript: \"No transcript data available\",\n      participants: \"None\",\n      durationSeconds: 0,\n      durationMinutes: 0\n    }\n  }];\n}\n\n// Combine into a single readable transcript\nconst transcript = segments\n  .map(segment => {\n    const speaker = segment.speaker || 'Unknown';\n    const text = segment.text || '';\n    const time = Math.round(segment.start || 0);\n    return `[${time}s] ${speaker}: ${text}`;\n  })\n  .join('\\n');\n\n// Get unique participants\nconst participants = [...new Set(\n  segments\n    .map(segment => segment.speaker)\n    .filter(speaker => speaker && speaker !== null)\n)];\n\n// Calculate duration\nconst startTime = segments[0]?.start || 0;\nconst endTime = segments[segments.length - 1]?.end || 0;\nconst duration = Math.round(endTime - startTime);\n\n// Get meeting info from the root level\nconst meetingId = inputData.native_meeting_id || 'Unknown';\nconst platform = inputData.platform || 'Unknown';\nconst status = inputData.status || 'Unknown';\n\nreturn [{\n  json: {\n    fullTranscript: transcript,\n    participants: participants.join(', ') || 'Unknown',\n    durationSeconds: duration,\n    durationMinutes: Math.round(duration / 60),\n    meetingId: meetingId,\n    platform: platform,\n    status: status,\n    totalSegments: segments.length\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "de13ece0-8fb4-489b-b2d7-cf0f0b14114b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1248,
        -960
      ],
      "parameters": {
        "color": 3,
        "height": 544,
        "content": "## πŸ“‹ Prerequisites & Requirements\n\n**Required Accounts:**\n- Google Calendar API access (free)\n- Vexa.ai account with API key\n- OpenAI API account with credits\n- Slack workspace admin access\n\n**Required Permissions:**\n- Google Calendar: Read calendar events\n- Slack: Post messages to channels\n- Vexa.ai: Create bots and access transcripts\n\n**Estimated Setup Time:** 15-20 minutes\n**Cost:** ~$0.01-0.05 per meeting (OpenAI costs)"
      },
      "typeVersion": 1
    },
    {
      "id": "1ed15b13-de3b-4cb1-a231-1dbcd32d6823",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -624,
        -960
      ],
      "parameters": {
        "width": 304,
        "height": 672,
        "content": "## πŸ—“οΈ Google Calendar Setup\n\n**Steps:**\n1. Go to Google Cloud Console\n2. Enable Calendar API\n3. Create credentials (OAuth2)\n4. Add credentials to n8n\n5. Test connection\n\n**Configuration:**\n- Select your target calendar from list\n- Set trigger to 'eventStarted'\n- Ensure calendar has Meet links\n\n**⚠️ Important:** Only works with Google Meet links in calendar events"
      },
      "typeVersion": 1
    },
    {
      "id": "a7dbe268-d020-47c9-993e-9a53c1249043",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -304,
        -960
      ],
      "parameters": {
        "width": 752,
        "height": 672,
        "content": "## πŸ€– Vexa.ai Setup\n\n**Get API Key:**\n1. Sign up at vexa.ai\n2. Navigate to API settings\n3. Generate new API key\n4. Add to n8n credentials\n\n**Bot Configuration:**\n- Platform: 'google_meet'\n- Bot name: Customize as needed\n- Meeting ID: Auto-extracted from calendar\n\n**Rate Limits:**\n- 100 requests/hour on free tier\n- Bot joins 30-60 seconds after meeting starts"
      },
      "typeVersion": 1
    },
    {
      "id": "09d0a663-c758-4c80-b5bf-19d6d3228816",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        -960
      ],
      "parameters": {
        "width": 896,
        "height": 736,
        "content": "## 🧠 OpenAI + Slack Setup\n\n**OpenAI Configuration:**\n- Model: chatgpt-4o-latest (recommended)\n- Cost: ~$0.01-0.05 per summary\n- Add API key to n8n credentials\n\n**Slack Bot Setup:**\n1. Create Slack app in workspace\n2. Add bot token scopes: chat:write\n3. Install app to workspace\n4. Add bot to target channel\n5. Copy bot token to n8n\n\n**Channel Format:** Use channel name or ID"
      },
      "typeVersion": 1
    },
    {
      "id": "6ff6c940-ada7-4743-a249-6a211c3b9288",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -944,
        -960
      ],
      "parameters": {
        "color": 3,
        "height": 896,
        "content": "## πŸ”‘ Credential Setup Guide\n\n**Before using this workflow:**\n\n**1. Google Calendar OAuth2:**\n- Go to Google Cloud Console\n- Enable Calendar API\n- Create OAuth2 credentials\n- Add to n8n: Google Calendar OAuth2 API\n\n**2. Vexa.ai API (HTTP Header Auth):**\n- Sign up at vexa.ai\n- Get API key from dashboard  \n- Create HTTP Header Auth credential\n- Header name: 'X-API-Key'\n- Header value: Your API key\n\n**3. OpenAI API:**\n- Get API key from OpenAI platform\n- Add to n8n: OpenAI API credential\n- Ensure account has sufficient credits\n\n**4. Slack Bot Token:**\n- Create Slack app in your workspace\n- Add bot token scopes: chat:write, channels:read\n- Install app to workspace\n- Add bot to target channel\n- Copy bot token to n8n: Slack API credential\n\n**⚠️ Test each credential** before running the full workflow!"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Get Vexa Transcript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send a message": {
      "main": [
        []
      ]
    },
    "Add bot to meet": {
      "main": [
        [
          {
            "node": "Get Vexa Transcript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Get Vexa Transcript": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Calendar Trigger": {
      "main": [
        [
          {
            "node": "Add bot to meet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Related Workflows

Automate Customer Inquiries with OpenAI Chat and HTTP Request

Automate customer inquiries using an AI assistant powered by OpenAI GPT and HTTP Request integration. This workflow enables real-time responses to customer questions, ensuring support is available 24/7. Features include conversation memory for engaging chats, automatic message processing for instant replies, and HTML for rich content rendering. Perfect for e-commerce businesses managing over 100 daily inquiries or SaaS platforms requiring real-time user support. Requires 1 account: OpenAI API. Save 5 hours weekly by handling unlimited customer inquiries with precise, context-aware answers from your product documentation.

330,202 views
Market ResearchAI Summarization

Automate Google Drive File Management with OpenAI and Pinecone

Automate file organization in Google Drive using AI-powered automation with Pinecone's Vector Storage and OpenAI's GPT. This workflow allows you to intelligently categorize and retrieve files based on content, reducing the time spent searching for documents. Features include automatic file tagging for enhanced searchability, real-time syncing with Google Drive, and AI-driven insights for file management. Perfect for businesses managing thousands of documents, ensuring easy access and organization. Requires 3 accounts: Pinecone API, OpenAI API, Google Drive OAuth. Save up to 10 hours weekly by quickly locating and managing files with AI-enhanced context.

104,849 views
Document ExtractionAI RAG

Automate YouTube Transcription Notifications to Telegram with AI

Automate notifications for new YouTube transcriptions directly to your Telegram channel using the Telegram Bot API and n8n. This workflow captures video transcriptions and sends real-time alerts, ensuring your team stays updated on new content instantly. Features seamless integration with OpenAI GPT for enhanced processing, immediate message delivery, and automated updates for effortless management. Perfect for content creators, digital marketers, or social media managers who need to keep track of multiple YouTube channels. Requires 1 account: Telegram Bot Token. Save hours weekly by automating video transcription alerts and ensuring prompt access to critical updates.

92,817 views
Market ResearchAI Summarization

Automate Customer Inquiries with OpenAI Agent and HTTP Requests

Automate customer inquiries through forms using an AI assistant powered by OpenAI's Agent and HTTP Request. This workflow enables instant responses to user queries, ensuring 24/7 support without human intervention. Features real-time chat capabilities, AI-driven context understanding, and seamless integration with various platforms. Perfect for e-commerce sites handling over 50 daily inquiries or SaaS companies looking to enhance customer support efficiency. Requires 1 account: OpenAI API. Achieve a 90% reduction in response time and handle unlimited inquiries with tailored, accurate answers.

91,845 views
Market ResearchAI Summarization

How to Use This Workflow

1Import to n8n

  1. Copy the JSON using the button above
  2. Open your n8n instance
  3. Click β€œImport workflow” or press Ctrl+V
  4. Paste the JSON and click β€œImport”

2Before Running

Configure credentials and update service-specific settings before executing the workflow. Review required credentials in the Technical Details section above.

421