8
n8n 한국어amn8n.com

자동화된 Google 캘린더 이벤트 생성 및 AI로운 추적 제안

고급

이것은Lead Nurturing, AI Chatbot분야의자동화 워크플로우로, 33개의 노드를 포함합니다.주로 Set, Code, Wait, Gmail, Filter 등의 노드를 사용하며. WhatsApp와 이메일을 통해 Google 캘린더 이벤트와 Gemini AI 추천

사전 요구사항
  • Google 계정 및 Gmail API 인증 정보
  • Google Sheets API 인증 정보
  • OpenAI API Key
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "wbeBVcWnoiefTvp5",
  "meta": {
    "instanceId": "cb9a1e5321767b6316634728341237e564b2587ab15b74ca0a89eb02a53484d6",
    "templateCredsSetupCompleted": true
  },
  "name": "Automating Google Calendar Event Creation and OpenAI-Powered Follow-up Proposals",
  "tags": [],
  "nodes": [
    {
      "id": "1a126147-47b1-4ffd-9494-4d9222d5002b",
      "name": "항목 반복",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -240,
        528
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "0d24a4c9-984f-4ad7-ae80-1825d2004809",
      "name": "이벤트 생성",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        432,
        448
      ],
      "parameters": {
        "end": "={{ $json.formatted }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "e21dbf6b634115581d14738bf4a5f4d7345da12474fde143738955b247276b96@group.calendar.google.com",
          "cachedResultName": "Sales - Send WhatsApp reminder"
        },
        "remindersUi": {
          "remindersValues": [
            {
              "method": "email",
              "minutes": 30
            }
          ]
        },
        "additionalFields": {
          "color": "3",
          "summary": "={{ $json.title }}",
          "location": "={{ $json.location }}",
          "attendees": [],
          "description": "={{ $json.description }}",
          "sendUpdates": "all"
        },
        "useDefaultReminders": "={{ false }}"
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "id": "mcPtmcUSueXxIEm8",
          "name": "Google Calendar account"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "87939508-6c62-499f-ae9a-813cac137c57",
      "name": "날짜 및 시간",
      "type": "n8n-nodes-base.dateTime",
      "position": [
        -16,
        448
      ],
      "parameters": {
        "date": "={{ $json['end time'] }}",
        "format": "custom",
        "options": {
          "includeInputFields": true
        },
        "operation": "formatDate",
        "customFormat": "yyyy-MM-dd HH:mm:ss ZZZZ"
      },
      "typeVersion": 2
    },
    {
      "id": "ab2713e8-6ece-4a98-ab6c-bab90f7196f5",
      "name": "코드",
      "type": "n8n-nodes-base.code",
      "position": [
        176,
        448
      ],
      "parameters": {
        "jsCode": "const items = $input.all(); // Get all rows\nconst pad = n => String(n).padStart(2, '0');\n\nreturn items.map(item => {\n    const input = item.json;\n\n    // Convert formattedDate (UTC) to JS Date\n    const d = new Date(input.formattedDate);\n\n    // Build ISO string in UTC\n    const isoUTC = `${d.getUTCFullYear()}-${pad(d.getUTCMonth() + 1)}-${pad(d.getUTCDate())}T` +\n                   `${pad(d.getUTCHours())}:${pad(d.getUTCMinutes())}:${pad(d.getUTCSeconds())}Z`;\n\n    return {\n        json: {\n            ...input,\n            formatted: isoUTC\n        }\n    };\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "9d212fd1-4189-48b7-92d2-e4e8241281c0",
      "name": "과거 이벤트 가져오기",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        -528,
        1728
      ],
      "parameters": {
        "options": {},
        "timeMax": "={{ $now.minus({ day: 0 }) }}",
        "timeMin": "={{ $now.minus({ day: 4 }) }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "e21dbf6b634115581d14738bf4a5f4d7345da12474fde143738955b247276b96@group.calendar.google.com",
          "cachedResultName": "Sales - Send WhatsApp reminder"
        },
        "operation": "getAll",
        "returnAll": true
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "id": "mcPtmcUSueXxIEm8",
          "name": "Google Calendar account"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "094e8163-7dd2-4bc3-a59b-62a2d57749ec",
      "name": "확인됨으로 표시",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        -304,
        1728
      ],
      "parameters": {
        "options": {},
        "operation": "removeItemsSeenInPreviousExecutions",
        "dedupeValue": "={{ $json.id }}"
      },
      "typeVersion": 2
    },
    {
      "id": "27f7ddbf-0341-47cc-9da3-dbadbd1e8110",
      "name": "스케줄 트리거",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -688,
        528
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a67ee294-2d4f-46a8-bbb7-c08e0be2a407",
      "name": "시트에서 가져오기",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -464,
        528
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "status"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1DSRrIDvw-Q9NugRK3eT7GMa0kwe0QnGhdySnqq1_kJU/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1DSRrIDvw-Q9NugRK3eT7GMa0kwe0QnGhdySnqq1_kJU",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1DSRrIDvw-Q9NugRK3eT7GMa0kwe0QnGhdySnqq1_kJU/edit?usp=drivesdk",
          "cachedResultName": "Sales - Send WhatsApp reminder"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "gFH3Wjq6yYqSEAei",
          "name": "Google Sheets"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "e5681977-acb6-4d64-a2f9-22233080e9a6",
      "name": "시트에서 상태 업데이트",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        880,
        544
      ],
      "parameters": {
        "columns": {
          "value": {
            "status": "checked",
            "row_number": "={{ $('Get in sheet').item.json.row_number }}",
            " reminder status": "sent"
          },
          "schema": [
            {
              "id": "title",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "description",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "location",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "color_number",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "color_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "start time",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "start time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "end time",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "end time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": " reminder status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": " reminder status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1DSRrIDvw-Q9NugRK3eT7GMa0kwe0QnGhdySnqq1_kJU/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1DSRrIDvw-Q9NugRK3eT7GMa0kwe0QnGhdySnqq1_kJU",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1DSRrIDvw-Q9NugRK3eT7GMa0kwe0QnGhdySnqq1_kJU/edit?usp=drivesdk",
          "cachedResultName": "Sales - Send WhatsApp reminder"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "gFH3Wjq6yYqSEAei",
          "name": "Google Sheets"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "2ee3f43e-6710-42d5-a022-28aa3090ce27",
      "name": "Rapiwa",
      "type": "n8n-nodes-rapiwa.rapiwa",
      "position": [
        656,
        352
      ],
      "parameters": {
        "number": "88017XXX63400",
        "message": "=Hi, just create “{{ $json.summary }}” meeting scheduled for {{ $json.end.dateTime }}. Please let me know if this time still works for you. Looking forward to it!",
        "productOperation": "promo"
      },
      "credentials": {
        "rapiwaApi": {
          "id": "ge5WDOaDo4d1hBpU",
          "name": "Rapiwa account 2"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f8338ab0-1bc5-4ac1-b640-cbdbf973e1d7",
      "name": "스케줄 트리거1",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -752,
        1728
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b743d3bf-5150-42e4-9db8-250785fda332",
      "name": "후속 조치만",
      "type": "n8n-nodes-base.filter",
      "position": [
        144,
        1616
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "73f38d1b-75c6-4372-8e81-a2db61b045a8",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "0328dfd5-0d27-4e83-93c9-c2ae879abd47",
      "name": "출력",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        608,
        1840
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"slots\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"start\": { \"type\": \"string\" },\n          \"end\": { \"type\": \"string\" }\n        }\n      }\n    }\n  }\n}"
      },
      "typeVersion": 1.2
    },
    {
      "id": "7509af23-9d83-4b30-b896-ac289609b3f8",
      "name": "가용성",
      "type": "n8n-nodes-base.googleCalendarTool",
      "position": [
        496,
        1840
      ],
      "parameters": {
        "options": {
          "timezone": {
            "__rl": true,
            "mode": "id",
            "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Timezone', ``, 'string') }}",
            "__regex": "([-+/_a-zA-Z0-9]*)"
          }
        },
        "timeMax": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('End_Time', ``, 'string') }}",
        "timeMin": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Start_Time', ``, 'string') }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "e21dbf6b634115581d14738bf4a5f4d7345da12474fde143738955b247276b96@group.calendar.google.com",
          "cachedResultName": "Sales - Send WhatsApp reminder"
        },
        "resource": "calendar"
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "id": "mcPtmcUSueXxIEm8",
          "name": "Google Calendar account"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "8a31bf27-84f8-4e48-8b06-bdf10fb926d3",
      "name": "메시지 생성",
      "type": "n8n-nodes-base.set",
      "position": [
        832,
        1616
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "cf09c95c-f25e-4fd7-bade-a0feaeaffb3b",
              "name": "message",
              "type": "string",
              "value": "=Here's are a few available slots to book the next meeting.\n{{\n$json.output.slots\n  .filter(slot => !DateTime.fromISO(slot.start).isWeekend())\n  .map(slot => `* ${DateTime.fromISO(slot.start).format('cccc, DDD @ hh:mm')} - ${DateTime.fromISO(slot.end).format('hh:mm')}`)\n.join('\\n')\n}}\n\nLet me know which I should book or let me know if it's okay to dismiss."
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "fda54f21-bceb-4649-ab68-94e2a6f11887",
      "name": "항목 반복1",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -80,
        1728
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "8ed45b86-7a56-4301-8e32-1fc2cf39c50d",
      "name": "대기",
      "type": "n8n-nodes-base.wait",
      "position": [
        1104,
        624
      ],
      "webhookId": "adc885e1-5488-418a-87db-0069784d2423",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "1ebb876e-9abd-48fe-8f85-2cdbe1c8e5d0",
      "name": "대기1",
      "type": "n8n-nodes-base.wait",
      "position": [
        1280,
        1824
      ],
      "webhookId": "143615ee-8408-410a-aed1-854c061259e1",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "d1a19978-cb34-4bdb-9635-abdcb248c059",
      "name": "Rapiwa1",
      "type": "n8n-nodes-rapiwa.rapiwa",
      "position": [
        1056,
        1520
      ],
      "parameters": {
        "number": "8801XXX3400",
        "message": "={{ $json.message }}",
        "productOperation": "promo"
      },
      "credentials": {
        "rapiwaApi": {
          "id": "ge5WDOaDo4d1hBpU",
          "name": "Rapiwa account 2"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "af14ad3b-414f-41b7-9558-817f64e3bce6",
      "name": "메시지 보내기",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1056,
        1712
      ],
      "webhookId": "9d9eeca6-ece8-4495-8d0f-db0eda3fca8a",
      "parameters": {
        "sendTo": "your mail address",
        "message": "={{ $json.message }}",
        "options": {},
        "subject": "={{ $json.message.split(\" \").slice(0, 10).join(\" \") }}",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "nLDXXLCx9bNCHuNe",
          "name": "Gmail account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "dd63cc9b-423b-433b-a4f0-4d9ddf5f9a32",
      "name": "메시지 보내기1",
      "type": "n8n-nodes-base.gmail",
      "position": [
        656,
        544
      ],
      "webhookId": "9d9eeca6-ece8-4495-8d0f-db0eda3fca8a",
      "parameters": {
        "sendTo": "your mail address",
        "message": "=Hi, just create “{{ $json.summary }}” meeting scheduled for {{ $json.end.dateTime }}. Please let me know if this time still works for you. Looking forward to it!",
        "options": {},
        "subject": "=Meeting scheduled for {{ $json.end.dateTime }}",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "nLDXXLCx9bNCHuNe",
          "name": "Gmail account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "92e79917-d2bc-478a-ae1a-7dc118b5c8a6",
      "name": "스티커 메모",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        320
      ],
      "parameters": {
        "width": 496,
        "height": 368,
        "content": "## Schedule Trigger\n* **Purpose:** To **start the entire workflow automatically** at regular intervals (like a cron job).\n\n\n## Get in sheet\n* **Purpose:** To **fetch data** from a Google Sheet containing information for meetings that need to be scheduled."
      },
      "typeVersion": 1
    },
    {
      "id": "60679101-9a93-4fc9-b5c1-8e851ea62cea",
      "name": "스티커 메모1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -128,
        96
      ],
      "parameters": {
        "width": 480,
        "height": 512,
        "content": "## Date & Time\n* **Purpose:** To **standardize and format the event end time** from the Google Sheet into a format suitable for the following steps.\n* **How it works:**\n    * It takes the value from the input field `{{ $json['end time'] }}`.\n    * It formats this date/time into a specific custom format (`yyyy-MM-dd HH:mm:ss ZZZZ`), which is a necessary preparation step before converting it to an ISO string.\n\n\n## Code\n* **Purpose:** To perform a custom operation to **convert the formatted date into a specific UTC ISO 8601 string** required by the Google Calendar node."
      },
      "typeVersion": 1
    },
    {
      "id": "2a63a61c-82f4-441a-ae87-0a17837f16dd",
      "name": "스티커 메모2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        368,
        272
      ],
      "parameters": {
        "width": 256,
        "height": 336,
        "content": "## Create an event\n* **Purpose:** To **create the new meeting event** in the designated Google Calendar."
      },
      "typeVersion": 1
    },
    {
      "id": "80921e5e-4391-4c94-8f69-5ee8ded1093e",
      "name": "스티커 메모3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        640,
        16
      ],
      "parameters": {
        "width": 608,
        "height": 784,
        "content": "## Rapiwa\n* **Node Type:** Rapiwa (WhatsApp Node)\n* **Purpose:** To **send a confirmation message via WhatsApp** to the client after the event is successfully created.\n\n\n## Send a message\n* **Purpose:** To **send a confirmation message via Email** to a specified address after the event is created (acting as a parallel confirmation method).\n\n\n## Update status in sheet\n* **Purpose:** To **mark the row in the Google Sheet as processed** after the event has been scheduled and messages sent.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "eb087842-bda1-474d-81fc-39b2d6ddf998",
      "name": "스티커 메모4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        368,
        1008
      ],
      "parameters": {
        "width": 1056,
        "height": 992,
        "content": "## Meeting Agent\n* **Purpose:** An **AI assistant** responsible for intelligently finding **available slots for a future follow-up meeting**.\n\n- ### Google Gemini \n  - **Purpose:** Provides the **underlying artificial intelligence** for the \"Meeting Availability Agent.\"\n- ### Availability\n  - **Purpose:** A utility **tool** that the AI agent uses to **check the actual availability** on the Google Calendar.\n- ### Output\n  - **Purpose:** To ensure the AI's final answer (the available slots) is delivered in a **predictable, structured JSON format**, making it easy for the next node to read.\n\n## Rapiwa\n* **Node Type:** Rapiwa (Custom WhatsApp Node)\n* **Purpose:** To **send the follow-up message via WhatsApp** to the customer.\n* **How it works:**\n    * It takes the `message` generated in the previous step and sends it to the specified phone number (`88017XXX63400`) using the Rapiwa API.\n\n## Send a message\n* **Purpose:** To **send the follow-up message via Email** as a secondary communication channel.\n* **works:**\n    * The email **subject** is dynamically generated from the first 10 words of the message.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "bb0dd99d-a763-49ab-9d23-69f9fefb788d",
      "name": "스티커 메모5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -800,
        1488
      ],
      "parameters": {
        "width": 672,
        "height": 400,
        "content": "## Get Recent Meetings\nFor this template, a scheduled trigger is set to fire every morning to pull in past meetings from 2-3 days ago. A \"Remove Duplicates\" node ensures we don't double process events more than once between runs.\n\n## Mark as Seen\n* **Purpose:** To ensure the workflow **does not process the same calendar event more than once** across multiple workflow executions.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "3c133a36-4bbc-4b54-972b-1cb2f7ded3c5",
      "name": "스티커 메모7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        80,
        1440
      ],
      "parameters": {
        "width": 272,
        "height": 384,
        "content": "## Only Follow Ups\n* **Purpose:** To **filter the events** so that only those meeting a specific criteria (e.g., meetings that need a follow-up) proceed to the AI agent.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "7f07047f-eae3-4586-92a7-9ada810b5686",
      "name": "미팅 에이전트",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        416,
        1616
      ],
      "parameters": {
        "text": "=### Details of the previous call as following\ntitle: {{ $json.summary }}\ndate: {{ $json.start.dateTime }} {{ $json.start.timeZone }}\nduration: {{ DateTime.fromISO($json.end.dateTime).diffTo(DateTime.fromISO($json.start.dateTime), 'minutes') }} minutes",
        "options": {
          "systemMessage": "=You are a calendar availability assistant. Analyse the previous meeting and help me find a similar available slot for the next meeting.\n* take into consideration the day, time of day and duration of the previous meeting and try to set the same or similar for the next\n* next meeting should be in the future.\n* return a list of available slots so that I can forward them to the user.\n\nToday's date is {{ $now }}."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.7
    },
    {
      "id": "0b730f8b-d92c-41a5-8648-a6179e649ba0",
      "name": "스티커 메모6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -816,
        880
      ],
      "parameters": {
        "color": 7,
        "width": 2256,
        "height": 1136,
        "content": "# Reminder Event\nThe \"Reminder Event\" part of the workflow is dedicated to **proactively scheduling follow-up meetings** for recently concluded Google Calendar events. This process is triggered on a schedule, pulls in past meetings, and uses a **\"Mark as Seen\"** node to prevent duplication. The core functionality involves an **AI Meeting Agent (powered by Gemini)** that intelligently analyzes the details of the previous meeting (like day, time, and duration) and uses a **Google Calendar Availability** tool to find and suggest suitable open slots for a new follow-up appointment. Finally, the workflow automatically generates and sends a message containing these available slots to the user via **WhatsApp (Rapiwa)** and **Email (Gmail)**, effectively automating the process of re-engaging a client for the next step."
      },
      "typeVersion": 1
    },
    {
      "id": "ffc11e3c-51c2-47cc-8803-8c319682ddb2",
      "name": "스티커 메모8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -800,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 2064,
        "height": 928,
        "content": "# Create Event\nThe \"Create Event\" workflow's main function is to automatically **create an event in Google Calendar** using meeting data retrieved from a **Google Sheet** based on specific conditions. It begins with a **Schedule Trigger** which initiates the process at regular intervals to collect new data from the Google Sheet. Subsequently, the **Date & Time** nodes are used to format the event time into the correct format. After the event is successfully created, it sends a confirmation message to the client via **WhatsApp (Rapiwa)** and **Email (Gmail)**. Finally, it updates the status of that row in the Google Sheet to mark the process as complete. In brief, it completely automates the process of creating calendar events and sending confirmation messages based on spreadsheet data."
      },
      "typeVersion": 1
    },
    {
      "id": "22b3938e-1a95-465f-b33d-6ed38f4f0500",
      "name": "스티커 메모10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2064,
        -112
      ],
      "parameters": {
        "width": 1216,
        "height": 1632,
        "content": "# Automating Google Calendar Event Creation and OpenAI-Powered Follow-up Proposals\n\n## 💡 Overview\nThis **n8n workflow** is designed for anyone who manages **meeting schedules and follow-ups** for sales or other client interactions. It automates two main processes:\n1.  **Creating a new Google Calendar event** from a list provided in a Google Sheet.\n2.  **Using an AI Agent (Gemini/LLM)** to propose suitable follow-up meeting slots for recently completed calendar events.\n\n## ✨ Features\n* **Scheduled Automation:** Both event creation and follow-up scheduling run automatically on a recurring schedule.\n* **Data Synchronization:** Reads meeting details from, and updates the processed status in, a **Google Sheet**.\n* **Google Calendar Integration:** Creates events and checks calendar availability for follow-up suggestions.\n* **Multi-Channel Communication:** Sends confirmations and follow-up proposals via **WhatsApp (Rapiwa)** and **Email (Gmail)**.\n* **AI-Powered Follow-up:** An **AI Agent (Gemini)** intelligently finds and formats available slots for the next meeting, considering details like the past meeting's day, time, and duration.\n* **Idempotency:** The \"Mark as Seen\" node prevents duplicate follow-up attempts for the same event.\n\n## 🛠️ Requirements\n* An n8n instance (The workflow uses nodes like Schedule Trigger, Google Sheets, Google Calendar, Rapiwa, Gmail, Filter, Agent (LangChain), LLM Chat (Google Gemini), etc.).\n* **Google Calendar** with an available calendar for event creation and availability checks.\n* **Google Sheets** for storing meeting details.\n* **Rapiwa** (WhatsApp API) account credentials.\n* **Gmail** account credentials.\n* **Google Gemini (PaLM) API** credentials for the AI agent functionality.\n\n## 📊 Google Sheet Required Columns\nThe workflow expects a Google Sheet with meeting data to have at least the following columns:\n**A Google Sheet formatted like this** ➤ [Sample Sheet](https://docs.google.com/spreadsheets/d/1DSRrIDvw-Q9NugRK3eT7GMa0kwe0QnGhdySnqq1_kJU/edit?usp=sharing)\n\n\n## 🚀 How to Use This Workflow\n### Step 1: Setup Credentials\n* Set up your **Google Sheets OAuth2**, **Google Calendar OAuth2**, **Rapiwa API**, **Gmail OAuth2**, and **Google Gemini(PaLM) API** credentials in n8n.\n\n### Step 2: Configure the \"Create Event\" Branch\n* **Get in sheet:** Update the **Document ID** and **Sheet Name** to point to your meeting data spreadsheet.\n* **Create an event:** Verify the correct **Calendar ID** is selected.\n* **Rapiwa / Send a message1** and **Gmail:** Update the recipient number/email address and customize the message templates.\n* **Update status in sheet:** Ensure the correct **Document ID**, **Sheet Name**, and matching column (`row\\_number`) are configured to update the status to \"sent\".\n\n### Step 3: Configure the \"Reminder Event\" Branch\n* **Get Past Events:** Verify the correct **Calendar ID** is selected.\n* **Only Follow Ups:** Customize the filter condition if only a subset of past meetings needs follow-up.\n* **Meeting Agent:** Review the **System Message** to ensure the AI's logic for finding slots matches your business rules (e.g., preferred working hours, look-ahead period).\n* **Generate Message:** Customize the **message** template, which formats the AI-suggested slots.\n* **Rapiwa1 / Send a message** and **Gmail1:** Update the recipient number/email address for the follow-up messages.\n\n## ⚠️ Notes and Warnings\n* Ensure the **\"Mark as Seen\"** node is working correctly to prevent sending duplicate follow-up messages for the same event.\n* Validate that the column names in your Google Sheet **exactly match** the column names expected by the nodes in the workflow.\n* Thoroughly test the **System Message** for the AI Agent to confirm the output is formatted and prioritized according to your needs.\n\n## Useful Links\n- **Dashboard:** [https://app.rapiwa.com](https://app.rapiwa.com/login)\n- **Official Website:** [https://rapiwa.com](https://rapiwa.com/)\n- **Documentation:** [https://docs.rapiwa.com](https://docs.rapiwa.com/)\n\n## Support & Help\n- **WhatsApp**: [Chat on WhatsApp](https://wa.me/8801322827799)\n- **Discord**: [SpaGreen Community](https://discord.gg/SsCChWEP)\n- **Facebook Group**: [SpaGreen Support](https://www.facebook.com/groups/spagreenbd)\n- **Website**: [https://spagreen.net](https://spagreen.net)\n- **Developer Portfolio**: [Codecanyon SpaGreen](https://codecanyon.net/user/spagreen/portfolio)e me to focus on the **System Message** configuration for the **AI Meeting Agent** next?"
      },
      "typeVersion": 1
    },
    {
      "id": "fe0314f4-e859-46a1-82cf-c2af6864df45",
      "name": "OpenAI",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        400,
        1840
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "typeVersion": 1.2
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "callerPolicy": "workflowsFromSameOwner",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "9b84c33b-5b41-4b20-a9a5-e2a58c57c527",
  "connections": {
    "ab2713e8-6ece-4a98-ab6c-bab90f7196f5": {
      "main": [
        [
          {
            "node": "0d24a4c9-984f-4ad7-ae80-1825d2004809",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8ed45b86-7a56-4301-8e32-1fc2cf39c50d": {
      "main": [
        [
          {
            "node": "1a126147-47b1-4ffd-9494-4d9222d5002b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1ebb876e-9abd-48fe-8f85-2cdbe1c8e5d0": {
      "main": [
        [
          {
            "node": "fda54f21-bceb-4649-ab68-94e2a6f11887",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fe0314f4-e859-46a1-82cf-c2af6864df45": {
      "ai_languageModel": [
        [
          {
            "node": "7f07047f-eae3-4586-92a7-9ada810b5686",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "0328dfd5-0d27-4e83-93c9-c2ae879abd47": {
      "ai_outputParser": [
        [
          {
            "node": "7f07047f-eae3-4586-92a7-9ada810b5686",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "2ee3f43e-6710-42d5-a022-28aa3090ce27": {
      "main": [
        []
      ]
    },
    "d1a19978-cb34-4bdb-9635-abdcb248c059": {
      "main": [
        []
      ]
    },
    "87939508-6c62-499f-ae9a-813cac137c57": {
      "main": [
        [
          {
            "node": "ab2713e8-6ece-4a98-ab6c-bab90f7196f5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7509af23-9d83-4b30-b896-ac289609b3f8": {
      "ai_tool": [
        [
          {
            "node": "7f07047f-eae3-4586-92a7-9ada810b5686",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "a67ee294-2d4f-46a8-bbb7-c08e0be2a407": {
      "main": [
        [
          {
            "node": "1a126147-47b1-4ffd-9494-4d9222d5002b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "094e8163-7dd2-4bc3-a59b-62a2d57749ec": {
      "main": [
        [
          {
            "node": "fda54f21-bceb-4649-ab68-94e2a6f11887",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7f07047f-eae3-4586-92a7-9ada810b5686": {
      "main": [
        [
          {
            "node": "8a31bf27-84f8-4e48-8b06-bdf10fb926d3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "af14ad3b-414f-41b7-9558-817f64e3bce6": {
      "main": [
        [
          {
            "node": "1ebb876e-9abd-48fe-8f85-2cdbe1c8e5d0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0d24a4c9-984f-4ad7-ae80-1825d2004809": {
      "main": [
        [
          {
            "node": "2ee3f43e-6710-42d5-a022-28aa3090ce27",
            "type": "main",
            "index": 0
          },
          {
            "node": "dd63cc9b-423b-433b-a4f0-4d9ddf5f9a32",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9d212fd1-4189-48b7-92d2-e4e8241281c0": {
      "main": [
        [
          {
            "node": "094e8163-7dd2-4bc3-a59b-62a2d57749ec",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1a126147-47b1-4ffd-9494-4d9222d5002b": {
      "main": [
        [],
        [
          {
            "node": "87939508-6c62-499f-ae9a-813cac137c57",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b743d3bf-5150-42e4-9db8-250785fda332": {
      "main": [
        [
          {
            "node": "7f07047f-eae3-4586-92a7-9ada810b5686",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dd63cc9b-423b-433b-a4f0-4d9ddf5f9a32": {
      "main": [
        [
          {
            "node": "e5681977-acb6-4d64-a2f9-22233080e9a6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8a31bf27-84f8-4e48-8b06-bdf10fb926d3": {
      "main": [
        [
          {
            "node": "d1a19978-cb34-4bdb-9635-abdcb248c059",
            "type": "main",
            "index": 0
          },
          {
            "node": "af14ad3b-414f-41b7-9558-817f64e3bce6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fda54f21-bceb-4649-ab68-94e2a6f11887": {
      "main": [
        [],
        [
          {
            "node": "b743d3bf-5150-42e4-9db8-250785fda332",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "27f7ddbf-0341-47cc-9da3-dbadbd1e8110": {
      "main": [
        [
          {
            "node": "a67ee294-2d4f-46a8-bbb7-c08e0be2a407",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f8338ab0-1bc5-4ac1-b640-cbdbf973e1d7": {
      "main": [
        [
          {
            "node": "9d212fd1-4189-48b7-92d2-e4e8241281c0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e5681977-acb6-4d64-a2f9-22233080e9a6": {
      "main": [
        [
          {
            "node": "8ed45b86-7a56-4301-8e32-1fc2cf39c50d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

고급 - 리드 육성, AI 챗봇

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
고급
노드 수33
카테고리2
노드 유형17
난이도 설명

고급 사용자를 위한 16+개 노드의 복잡한 워크플로우

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34