잠재 리드 전화 자동화: VAPI, Google Sheets 기록 및 캘린더 예약
중급
이것은Content Creation, Multimodal AI분야의자동화 워크플로우로, 13개의 노드를 포함합니다.주로 Set, Code, Webhook, HttpRequest, GoogleSheets 등의 노드를 사용하며. 잠재 고객 전화 자동화: VAPI, Google Sheets 기록 및 캘린더 약속
사전 요구사항
- •HTTP Webhook 엔드포인트(n8n이 자동으로 생성)
- •대상 API의 인증 정보가 필요할 수 있음
- •Google Sheets API 인증 정보
사용된 노드 (13)
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"meta": {
"instanceId": "0a25db4fd0692af64b58f35e01611f2ef0b5bb9d6654c57ef3741021e7d8cc11",
"templateId": "5890",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "61f3ed14-9be9-42bb-ac7b-90072005ebc1",
"name": "새로운 잠재 고객 트리거 (Excel)",
"type": "n8n-nodes-base.googleSheetsTrigger",
"position": [
432,
560
],
"parameters": {
"event": "rowAdded",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1760068917,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mkHJIhSFXdh1n65GKPwzEzFw0QasunyYm9BDglnXeiI/edit#gid=1760068917",
"cachedResultName": "call_list"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1mkHJIhSFXdh1n65GKPwzEzFw0QasunyYm9BDglnXeiI",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mkHJIhSFXdh1n65GKPwzEzFw0QasunyYm9BDglnXeiI/edit?usp=drivesdk",
"cachedResultName": "Vapi_real-estate"
}
},
"credentials": {
"googleSheetsTriggerOAuth2Api": {
"id": "ciFJ21F7Wq3VZJYU",
"name": "Google Sheets Trigger account"
}
},
"typeVersion": 1
},
{
"id": "de15cc25-830d-4efe-9265-685eef529094",
"name": "잠재 고객 데이터 준비",
"type": "n8n-nodes-base.set",
"position": [
656,
560
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a10873fa-0c01-46ed-a364-d31200e44e76",
"name": "Phone",
"type": "string",
"value": "=+{{ $json.Phone }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "22384d76-3c0d-4d3b-9e85-4e9d6a005e7f",
"name": "잠재 고객 순환 처리",
"type": "n8n-nodes-base.splitInBatches",
"position": [
880,
560
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "eea1ca56-260e-4f81-980a-6f2dd46e0667",
"name": "마케팅 통화 시작 (VAPI)",
"type": "n8n-nodes-base.httpRequest",
"position": [
1104,
560
],
"parameters": {
"url": "https://api.vapi.ai/call",
"method": "POST",
"options": {},
"jsonBody": "={\n \"assistantId\": \"add_id_here\",\n \"phoneNumberId\": \"add_id_here\",\n \"customers\": [\n {\n \"number\":\"{{ $json.Phone }}\"\n }\n ]\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "nCXOEqnQiFvQMGPr",
"name": "Bearer Auth account"
}
},
"typeVersion": 4.2
},
{
"id": "9addff6d-2a29-4f02-94a8-d76406987569",
"name": "VAPI 통화 응답 웹훅",
"type": "n8n-nodes-base.webhook",
"position": [
432,
784
],
"webhookId": "a34ac7ac-7ea4-4942-8dbf-f9ce3f0986e4",
"parameters": {
"path": "a34ac7ac-7ea4-4942-8dbf-f9ce3f0986e4",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2
},
{
"id": "9797586c-4313-4ce1-b58b-ec3e31cb705e",
"name": "사용자 응답 저장 (Sheet)",
"type": "n8n-nodes-base.googleSheets",
"position": [
656,
784
],
"parameters": {
"columns": {
"value": {
"next_step": "={{ $json.body.message.toolCalls[0].function.arguments.next_step }}",
"call_notes": "={{ $json.body.message.toolCalls[0].function.arguments.call_notes }}",
"website_url": "={{ $json.body.message.toolCalls[0].function.arguments.website_url }}",
"call_outcome": "={{ $json.body.message.toolCalls[0].function.arguments.call_outcome }}",
"company_name": "={{ $json.body.message.toolCalls[0].function.arguments.company_name }}",
"phone_number": "={{ $json.body.message.toolCalls[0].function.arguments.phone_number }}",
"email_address": "={{ $json.body.message.toolCalls[0].function.arguments.email_address }}",
"prospect_name": "={{ $json.body.message.toolCalls[0].function.arguments.prospect_name }}",
"prospect_role": "={{ $json.body.message.toolCalls[0].function.arguments.prospect_role }}",
"follow_up_date": "={{ $json.body.message.toolCalls[0].function.arguments.follow_up_date }}",
"interest_level": "={{ $json.body.message.toolCalls[0].function.arguments.interest_level }}",
"website_strength": "={{ $json.body.message.toolCalls[0].function.arguments.website_strength }}",
"biggest_challenge": "={{ $json.body.message.toolCalls[0].function.arguments.biggest_challenge }}",
"objections_raised": "={{ $json.body.message.toolCalls[0].function.arguments.objections_raised }}",
"opt_out_requested": "={{ $json.body.message.toolCalls[0].function.arguments.opt_out_requested }}",
"appointment_datetime": "={{ $json.body.message.toolCalls[0].function.arguments.appointment_datetime }}",
"current_marketing_methods": "={{ $json.body.message.toolCalls[0].function.arguments.current_marketing_methods }}",
"previous_digital_marketing": "={{ $json.body.message.toolCalls[0].function.arguments.previous_digital_marketing }}"
},
"schema": [
{
"id": "prospect_name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "prospect_name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "prospect_role",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "prospect_role",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "company_name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "company_name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "website_url",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "website_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "website_strength",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "website_strength",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "phone_number",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "phone_number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "email_address",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "email_address",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "current_marketing_methods",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "current_marketing_methods",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "biggest_challenge",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "biggest_challenge",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "previous_digital_marketing",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "previous_digital_marketing",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "objections_raised",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "objections_raised",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "interest_level",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "interest_level",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "next_step",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "next_step",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "appointment_datetime",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "appointment_datetime",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "call_outcome",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "call_outcome",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "call_notes",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "call_notes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "follow_up_date",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "follow_up_date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "opt_out_requested",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "opt_out_requested",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"prospect_name"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mkHJIhSFXdh1n65GKPwzEzFw0QasunyYm9BDglnXeiI/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1mkHJIhSFXdh1n65GKPwzEzFw0QasunyYm9BDglnXeiI",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mkHJIhSFXdh1n65GKPwzEzFw0QasunyYm9BDglnXeiI/edit?usp=drivesdk",
"cachedResultName": "Vapi_real-estate"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "cjPjcwa3RdiMAu79",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "b5dbaaf8-c8e2-4dda-a3a0-862cf25bd659",
"name": "예약/주문 정보 추출",
"type": "n8n-nodes-base.code",
"position": [
880,
784
],
"parameters": {
"jsCode": "function formatIST(date) {\n const options = {\n timeZone: 'Asia/Kolkata',\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false\n };\n const parts = new Intl.DateTimeFormat('en-GB', options).formatToParts(date);\n const lookup = {};\n parts.forEach(p => lookup[p.type] = p.value);\n return `${lookup.year}-${lookup.month}-${lookup.day} ${lookup.hour}:${lookup.minute}:${lookup.second} IST`;\n}\n\nfor (const item of items) {\n let dateStr = item.json.date_input?.toLowerCase?.() || 'today';\n let timeStr = item.json.time_input || '17:00'; // default to 5 PM\n\n // Step 1: base date\n let baseDate = new Date();\n if (dateStr === 'tomorrow') {\n baseDate.setDate(baseDate.getDate() + 1);\n } else if (dateStr !== 'today') {\n baseDate = new Date(dateStr);\n }\n\n // Step 2: parse time\n const [timePart, ampm] = timeStr.trim().split(/ (AM|PM)/i);\n let [hours, minutes] = timePart.split(':').map(Number);\n if (ampm?.toLowerCase() === 'pm' && hours < 12) hours += 12;\n if (ampm?.toLowerCase() === 'am' && hours === 12) hours = 0;\n\n baseDate.setHours(hours, minutes || 0, 0, 0);\n\n // Step 3: set IST formatted times\n const startIST = formatIST(baseDate);\n const endIST = formatIST(new Date(baseDate.getTime() + 60 * 60 * 1000)); // +1 hour\n\n item.json.appointment_datetime_parsed = startIST;\n item.json.appointment_end_datetime = endIST;\n}\n\nreturn items;\n"
},
"typeVersion": 2
},
{
"id": "74ca51eb-c7c3-4965-839e-db0e80f8dc02",
"name": "배송/테이블 예약 일정 잡기",
"type": "n8n-nodes-base.googleCalendar",
"position": [
1104,
784
],
"parameters": {
"end": "={{ $json.appointment_end_datetime }}",
"start": "={{ $json.appointment_datetime_parsed }}",
"calendar": {
"__rl": true,
"mode": "id",
"value": "abc@gmail.com"
},
"additionalFields": {}
},
"credentials": {
"googleCalendarOAuth2Api": {
"id": "q6HWhk6UMiK5ZfZQ",
"name": "Google Calendar account"
}
},
"typeVersion": 1.3
},
{
"id": "d34f8054-9d1c-48fe-a6df-35e12a0d09a1",
"name": "응답을 VAPI로 전송",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
1328,
784
],
"parameters": {
"options": {}
},
"typeVersion": 1.2
},
{
"id": "d1162aa6-e63c-4088-a0ad-b9d224faf43a",
"name": "스티커 메모",
"type": "n8n-nodes-base.stickyNote",
"position": [
320,
336
],
"parameters": {
"color": 4,
"width": 352,
"height": 176,
"content": "## STEP 1 · Intake & Prep\n**Sheets Trigger** fires on new row in `call_list`.\n**Set (Prepare Lead Data):** format phone before dialing.\nTip: avoid numeric coercion—use a string like `= `+${$json.Phone}`` or E.164 formatting."
},
"typeVersion": 1
},
{
"id": "0cc00ecf-1736-45a2-9616-7d6718084462",
"name": "스티커 메모1",
"type": "n8n-nodes-base.stickyNote",
"position": [
752,
352
],
"parameters": {
"color": 5,
"width": 384,
"content": "## STEP 2 · Dial (VAPI)\n**Split In Batches** paces calls.\n**HTTP → VAPI /call** with Bearer auth; provide `assistantId`, `phoneNumberId`, and `customers[].number`.\nTip: add retry/backoff for throttling or carrier errors."
},
"typeVersion": 1
},
{
"id": "0567d457-4271-4e1b-a6fd-1346c89e873a",
"name": "스티커 메모2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1168,
320
],
"parameters": {
"color": 6,
"width": 336,
"height": 208,
"content": "## STEP 3 · Capture Results\n**Webhook** receives VAPI call payload.\n**Sheets (appendOrUpdate)** stores parsed fields (notes, outcome, next_step, contact info...).\nTip: use a stable key in `matchingColumns` (e.g., phone/email) instead of just `prospect_name` to avoid duplicates."
},
"typeVersion": 1
},
{
"id": "36c2d03c-bdd3-4758-8214-08585e028697",
"name": "스티커 메모3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1504,
544
],
"parameters": {
"color": 7,
"height": 272,
"content": "## STEP 4 · Book & Acknowledge\n**Code** parses `date_input`/`time_input` → start/end times.\nUse **ISO 8601** (e.g., `2025-09-26T17:00:00+05:30`) for Calendar.\n**Google Calendar** creates event; **Respond to Webhook** sends 200/OK back to VAPI."
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"de15cc25-830d-4efe-9265-685eef529094": {
"main": [
[
{
"node": "22384d76-3c0d-4d3b-9e85-4e9d6a005e7f",
"type": "main",
"index": 0
}
]
]
},
"22384d76-3c0d-4d3b-9e85-4e9d6a005e7f": {
"main": [
[
{
"node": "eea1ca56-260e-4f81-980a-6f2dd46e0667",
"type": "main",
"index": 0
}
],
[
{
"node": "22384d76-3c0d-4d3b-9e85-4e9d6a005e7f",
"type": "main",
"index": 0
}
]
]
},
"61f3ed14-9be9-42bb-ac7b-90072005ebc1": {
"main": [
[
{
"node": "de15cc25-830d-4efe-9265-685eef529094",
"type": "main",
"index": 0
}
]
]
},
"b5dbaaf8-c8e2-4dda-a3a0-862cf25bd659": {
"main": [
[
{
"node": "74ca51eb-c7c3-4965-839e-db0e80f8dc02",
"type": "main",
"index": 0
}
]
]
},
"9addff6d-2a29-4f02-94a8-d76406987569": {
"main": [
[
{
"node": "9797586c-4313-4ce1-b58b-ec3e31cb705e",
"type": "main",
"index": 0
}
]
]
},
"9797586c-4313-4ce1-b58b-ec3e31cb705e": {
"main": [
[
{
"node": "b5dbaaf8-c8e2-4dda-a3a0-862cf25bd659",
"type": "main",
"index": 0
}
]
]
},
"74ca51eb-c7c3-4965-839e-db0e80f8dc02": {
"main": [
[
{
"node": "d34f8054-9d1c-48fe-a6df-35e12a0d09a1",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
중급 - 콘텐츠 제작, 멀티모달 AI
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
자동화된 로컬 리드 찾기 및 콜드 이메일 발송
Apify, AI 및 Gmail을 사용한 지역 리드 자동 발견 및 콜드 이메일 발송
If
Set
Wait
+
If
Set
Wait
18 노드Meak
콘텐츠 제작
GPT-4.1 mini를 사용하여 자연어를 네트워크 검색으로 변환하고 Google Sheets에 기록
GPT-4.1 mini를 사용하여 자연어를 Google Sheets에 기록하는 네트워크 검색으로 변환
Webhook
Http Request
Google Sheets
+
Webhook
Http Request
Google Sheets
14 노드Meak
콘텐츠 제작
Printify 자동화 - 제목 및 설명 업데이트 - AlexK1919
GPT-4o-mini를 사용하여 Printify용 SEO 제품 제목 및 설명 자동 생성
If
Set
Code
+
If
Set
Code
26 노드Amit Mehta
콘텐츠 제작
OpenAI, RunwayML, ElevenLabs를 사용한 무면식 숏폼 비디오 자동화
OpenAI, RunwayML, ElevenLabs를 사용한 무면쇼트 비디오 자동화: 스크립트부터 소셜 미디어까지
Set
Code
Wait
+
Set
Code
Wait
56 노드LeeWei
콘텐츠 제작
Google Maps 데이터 추출
Perplexity AI 및 이메일 검증을 통한 Google Maps 잠재고객 생성 자동화
If
Set
Code
+
If
Set
Code
18 노드Antxon Pous
콘텐츠 제작
Excel 및 VAPI 음성 도우미를 통한 레스토랑 마케팅 및 예약 자동화
Excel, VAPI 음성 도우미 및 캘린더를 사용한 레스토랑 마케팅 및 예약 자동화
Set
Code
Webhook
+
Set
Code
Webhook
11 노드Oneclick AI Squad
리드 육성