8
n8n 한국어amn8n.com

예약 알림 도우미

중급

이것은AI Chatbot, Multimodal AI분야의자동화 워크플로우로, 11개의 노드를 포함합니다.주로 Set, Code, HttpRequest, GoogleCalendar, ScheduleTrigger 등의 노드를 사용하며. Google 캘린더 및 Retell AI를 사용한 예약 전화 알림 자동화

사전 요구사항
  • 대상 API의 인증 정보가 필요할 수 있음
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "cmusYcLEtQLBks00",
  "meta": {
    "instanceId": "a18da9fe05787064d0871c067b6baf1f5102992b14efc7335bca39a83ba97eb2",
    "templateCredsSetupCompleted": true
  },
  "name": "Appointment Reminder Agent",
  "tags": [],
  "nodes": [
    {
      "id": "016deabc-cd94-41f8-8470-a4df03cb431c",
      "name": "설정 구성 (Retell 설정)",
      "type": "n8n-nodes-base.set",
      "position": [
        400,
        -48
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "from_number",
              "value": "{{ YOUR_FROM_NUMBER }}"
            },
            {
              "name": "agent_id",
              "value": "{{ YOUR_AGENT_ID }}"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 2
    },
    {
      "id": "47ccb25c-e543-40d1-8155-18046a85d1d5",
      "name": "스케줄 트리거 (오전 9시)",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -352,
        -48
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c0a5e52a-ced2-4bbc-b5f2-99b7989f8b7b",
      "name": "알림 전화 발신 (Retell API)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        640,
        -48
      ],
      "parameters": {
        "url": "https://api.retellai.com/v2/create-phone-call",
        "options": {},
        "jsonBody": "={\n\"from_number\": \"{{ $json.from_number }}\",\n\"to_number\": \"{{ $json.phone }}\",\n\"retell_llm_dynamic_variables\": {\n    \"name\": \"{{ $json.name }}\",\n    \"phone_number\": \"{{ $json.phone }}\",\n    \"reason\": \"{{ $json.reason }}\",\n    \"start_time\": \"{{ $json.startTime }}\",\n    \"end_time\": \"{{ $json.endTime }}\"\n},\n\"override_agent_id\": \"{{ $json.agent_id }}\"\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "credentials": {
        "httpCustomAuth": {
          "id": "cY0bhQDArrMSy7x6",
          "name": "Custom Auth account"
        },
        "httpHeaderAuth": {
          "id": "wuo9C8tD1CmNbIPD",
          "name": "Retell AI"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "8d90ec35-90b6-495d-89e9-c816ff9279ca",
      "name": "다가오는 일정 가져오기",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        -112,
        -48
      ],
      "parameters": {
        "options": {},
        "timeMax": "={{ $now.plus(12, 'hours') }}",
        "calendar": {
          "__rl": true,
          "mode": "id",
          "value": "={{ Your Calendar Email }}"
        },
        "operation": "getAll",
        "returnAll": true
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "id": "JT4VVIXG6yWNeG8p",
          "name": "Google Calendar account"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "35fa6c4b-6298-4823-8368-e1153fe4740b",
      "name": "스티커 메모",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -416,
        -208
      ],
      "parameters": {
        "color": 3,
        "width": 208,
        "height": 320,
        "content": "This node triggers the workflow every day at 9 AM.\nYou can change the trigger time in the settings if you want calls at a different hour.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "acb7fd45-ea35-47c2-a69f-b60ee1f98525",
      "name": "스티커 메모1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -192,
        -288
      ],
      "parameters": {
        "color": 5,
        "height": 400,
        "content": "This node fetches all events from your Google Calendar in the next 12 hours.\nReplace the calendar email with your own calendar.\nMake sure your Google Calendar OAuth2 credential is connected.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "b621211c-c65b-4dbb-b1d9-b5437a1b1e09",
      "name": "스티커 메모2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        64,
        -352
      ],
      "parameters": {
        "height": 464,
        "content": "This Code node extracts:\n- Name\n- Phone number\n- Reason\n- Start and End time\n\n➡️ These fields must be present in the Google Calendar event description.\n➡️ Example description format:\nName: John Doe\nPhone Number: +14155552671\nReason: Consultation\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d890a065-3c77-4252-a0cb-a90e38d9a17c",
      "name": "예약 세부 정보 추출",
      "type": "n8n-nodes-base.code",
      "position": [
        144,
        -48
      ],
      "parameters": {
        "jsCode": "return items.flatMap(item => {\n  const description = item.json.description || \"\";\n\n  // Normalize newlines\n  const cleaned = description.replace(/\\r?\\n/g, '\\n').trim();\n\n  // Split bookings by empty lines (double newline or similar)\n  const bookings = cleaned.split(/\\n\\s*\\n/);\n\n  return bookings.map(booking => {\n    const flat = booking.replace(/\\n/g, ' ').replace(/\\s{2,}/g, ' ');\n\n    const nameMatch = flat.match(/Name:\\s*(.+?)(?=\\s+[A-Za-z]+:|$)/i);\n    const emailMatch = flat.match(/Email:\\s*(.+?)(?=\\s+[A-Za-z]+:|$)/i);\n    const phoneMatch = flat.match(/Phone Number:\\s*(.+?)(?=\\s+[A-Za-z]+:|$)/i);\n    const reasonMatch = flat.match(/Reason:\\s*(.+?)(?=\\s+[A-Za-z]+:|$)/i);\n\n    return {\n      json: {\n        name: nameMatch ? nameMatch[1].trim() : \"\",\n        email: emailMatch ? emailMatch[1].trim() : \"\",\n        phone: phoneMatch ? phoneMatch[1].trim() : \"\",\n        reason: reasonMatch ? reasonMatch[1].trim() : \"\",\n        startTime: item.json.start?.dateTime || \"\",\n        endTime: item.json.end?.dateTime || \"\"\n      }\n    };\n  });\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "171d92a8-f4b7-4cd7-8ff2-fa60342983d2",
      "name": "스티커 메모3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        320,
        -304
      ],
      "parameters": {
        "color": 4,
        "height": 416,
        "content": "This node stores your Retell setup:\n- from_number (your registered Retell number)\n- agent_id (your Retell agent ID)\n\n➡️ Update these values before using the workflow.\n➡️ They will be passed to the Retell API.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "da1d2978-d402-4524-ac5a-91834b44846b",
      "name": "스티커 메모4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        576,
        -304
      ],
      "parameters": {
        "color": 6,
        "height": 416,
        "content": "This node sends the API request to Retell AI to make the phone call.\n\n-It uses your Retell API key stored in n8n credentials.\n-Do NOT hardcode your API key — always use credentials.\n-The call includes dynamic variables: name, phone, reason, start_time, end_time.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f3b6d02b-d978-43ae-b7da-21e439e33779",
      "name": "스티커 메모5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        864,
        -400
      ],
      "parameters": {
        "color": 2,
        "width": 544,
        "height": 736,
        "content": "## Appointment Reminder Agent\n\n### Who's it for\nBusinesses, clinics, and service providers who want to automate **phone call reminders** for upcoming appointments.\n\n### How it works\nThis workflow:\n1. Runs daily at 9 AM (can be changed).\n2. Pulls upcoming events from Google Calendar.\n3. Extracts details (name, phone, reason, time).\n4. Calls the customer using Retell AI’s API.\n\n### How to set up\n1. Add your **Retell API key** in n8n credentials (do not hardcode).\n2. Add your **Google Calendar account** in credentials.\n3. Update the `from_number` (your Retell-registered number).\n4. Update the `agent_id` (your Retell agent ID).\n5. Ensure phone numbers are in **E.164 format** (e.g. `+14155552671`).\n\n### Requirements\n- Retell AI account + API key  \n- Registered Retell phone number  \n- Google Calendar account  \n\n### How to customize\n- Adjust trigger time.  \n- Add logging (Google Sheets / Airtable).  \n- Modify Retell agent script for different appointment types.  \n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "fe292d57-7b18-44cc-9ad6-e9474c2208a2",
  "connections": {
    "8d90ec35-90b6-495d-89e9-c816ff9279ca": {
      "main": [
        [
          {
            "node": "d890a065-3c77-4252-a0cb-a90e38d9a17c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "47ccb25c-e543-40d1-8155-18046a85d1d5": {
      "main": [
        [
          {
            "node": "8d90ec35-90b6-495d-89e9-c816ff9279ca",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "016deabc-cd94-41f8-8470-a4df03cb431c": {
      "main": [
        [
          {
            "node": "c0a5e52a-ced2-4bbc-b5f2-99b7989f8b7b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d890a065-3c77-4252-a0cb-a90e38d9a17c": {
      "main": [
        [
          {
            "node": "016deabc-cd94-41f8-8470-a4df03cb431c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

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

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

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

중급 - AI 챗봇, 멀티모달 AI

유료인가요?

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

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

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34