自動予約確認とミーティング手配システム
上級
これはLead Nurturing分野の自動化ワークフローで、23個のノードを含みます。主にIf, Set, Zoom, Gmail, Mergeなどのノードを使用。 フォームから会議:Googleカレンダー、Zoom、Gmail、Slackの予約自動化
前提条件
- •Googleアカウント + Gmail API認証情報
- •Slack Bot Token または Webhook URL
- •HTTP Webhookエンドポイント(n8nが自動生成)
カテゴリー
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"id": "f86tpZtlEF8Fxt6s",
"meta": {
"instanceId": "189dde98270e9ce0f006f0e9deb96aa5e627396fc6279cac8902c9b06936984d"
},
"name": "Automated Booking Confirmation and Meeting Scheduler",
"tags": [],
"nodes": [
{
"id": "3dd27b86-6e03-4595-a9fa-2fe3d1210611",
"name": "Google Forms Webhook1",
"type": "n8n-nodes-base.webhook",
"position": [
176,
208
],
"webhookId": "0c79affb-61ad-4802-8580-66c5856d66cf",
"parameters": {
"path": "google-forms-booking",
"options": {},
"httpMethod": "POST",
"responseMode": "lastNode"
},
"typeVersion": 2.1
},
{
"id": "957b6711-281f-4599-9962-84ebf221691a",
"name": "フォームデータ統合1",
"type": "n8n-nodes-base.merge",
"position": [
496,
224
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "3b63fe73-a5e7-4f3e-bf61-e7bd0a9aa63c",
"name": "ワークフロー設定1",
"type": "n8n-nodes-base.set",
"position": [
848,
224
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "calendarId",
"type": "string",
"value": "c_91f92ee12632d48cc78642add679d75aa8aecb09abea89eadbc97cb17d2de336@group.calendar.google.com"
},
{
"id": "id-2",
"name": "slackChannel",
"type": "string",
"value": "C09GN4NCTAP"
},
{
"id": "id-3",
"name": "teammateEmail",
"type": "string",
"value": "ojima@g-jete.com"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "66b2895b-8260-4e40-b4ec-39b100b89f77",
"name": "予約詳細抽出1",
"type": "n8n-nodes-base.set",
"position": [
1168,
224
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "customerName",
"type": "string",
"value": "={{ $json.body.name }}"
},
{
"id": "id-2",
"name": "customerEmail",
"type": "string",
"value": "={{ $json.body.email }}"
},
{
"id": "id-3",
"name": "bookingDate",
"type": "string",
"value": "={{ $json.body.date }}"
},
{
"id": "id-4",
"name": "bookingTime",
"type": "string",
"value": "={{ $json.body.time }}"
},
{
"id": "34865dea-9db2-4f35-b91b-322572680869",
"name": "bookingStartISO",
"type": "string",
"value": "={{ new Date($json.body.date + 'T' + $json.body.time + ':00+09:00').toISOString() }}"
},
{
"id": "941d5f18-54fd-41ad-8f46-c9f9f13fb32f",
"name": "bookingEndISO",
"type": "string",
"value": "={{ new Date(new Date($json.body.date + 'T' + $json.body.time + ':00+09:00').getTime() + 60*60*1000).toISOString() }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "6591a8f7-2400-4de8-9fbe-b35271faf1f8",
"name": "カレンダー空き状況確認1",
"type": "n8n-nodes-base.googleCalendar",
"position": [
1472,
224
],
"parameters": {
"options": {},
"timeMax": "={{ $json.bookingEndISO }}",
"timeMin": "={{ $json.bookingStartISO }}",
"calendar": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration1').first().json.calendarId }}"
},
"operation": "getAll"
},
"typeVersion": 1.3,
"alwaysOutputData": true
},
{
"id": "d80641b0-9da6-491c-922f-d278c0f030c3",
"name": "時間枠は空いていますか?1",
"type": "n8n-nodes-base.if",
"position": [
1824,
224
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "14e9293a-f96c-45f1-b216-2c8aaf2fb3e2",
"operator": {
"type": "object",
"operation": "empty",
"singleValue": true
},
"leftValue": "={{ $json }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "76a27cb5-7196-4564-a89a-85d5d0a41d52",
"name": "カレンダーイベント作成1",
"type": "n8n-nodes-base.googleCalendar",
"position": [
2144,
208
],
"parameters": {
"end": "={{ $('Extract Booking Details1').first().json.bookingEndISO }}",
"start": "={{ $('Extract Booking Details1').first().json.bookingStartISO }}",
"calendar": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration1').first().json.calendarId }}"
},
"additionalFields": {
"summary": "=Booking with {{ $('Extract Booking Details1').first().json.customerName }}",
"attendees": [
"={{ $('Extract Booking Details1').first().json.customerEmail }}"
],
"description": "=Customer: {{ $('Extract Booking Details1').first().json.customerName }} ({{ $('Extract Booking Details1').first().json.customerEmail }})"
}
},
"typeVersion": 1.3
},
{
"id": "9f4ca36f-8f02-43ee-8630-222958201959",
"name": "Zoomミーティング作成1",
"type": "n8n-nodes-base.zoom",
"position": [
2416,
208
],
"parameters": {
"topic": "=Booking with {{ $('Extract Booking Details1').first().json.customerName }}",
"authentication": "oAuth2",
"additionalFields": {
"duration": 60,
"timeZone": "UTC",
"startTime": "={{ $('Extract Booking Details1').first().json.bookingStartISO }}"
}
},
"typeVersion": 1
},
{
"id": "a31d67fa-38b4-4276-a0ad-56d1069f95dd",
"name": "確認メール送信1",
"type": "n8n-nodes-base.gmail",
"position": [
2720,
208
],
"webhookId": "f28b9459-360b-4cad-9f2e-0d69654e795b",
"parameters": {
"sendTo": "={{ $('Extract Booking Details1').first().json.customerEmail }}",
"message": "=Hi {{ $('Extract Booking Details1').first().json.customerName }},\n\nYour booking has been confirmed!\n\nDate & Time: {{ new Date($('Extract Booking Details1').first().json.bookingStartISO).toLocaleString('ja-JP', { timeZone: 'Asia/Tokyo' }) }}\n\nZoom Meeting Link: {{ $json.join_url }}\n\nLooking forward to meeting you!\n\nBest regards",
"options": {},
"subject": "=Booking Confirmed: {{ new Date($('Extract Booking Details1').first().json.bookingStartISO).toLocaleString('ja-JP', { timeZone: 'Asia/Tokyo' }) }}"
},
"typeVersion": 2.1
},
{
"id": "b456c4f9-dcca-48a4-b750-f39e95df493f",
"name": "Slackでチームメンバーに通知1",
"type": "n8n-nodes-base.slack",
"position": [
3040,
208
],
"webhookId": "866a3241-98d2-4db1-b791-c8c8f83b99b9",
"parameters": {
"text": "=🎉 New booking confirmed!\n\n*Customer:* {{ $('Extract Booking Details1').first().json.customerName }} ({{ $('Extract Booking Details1').first().json.customerEmail }})\n*Date & Time:* {{ new Date($('Extract Booking Details1').first().json.bookingStartISO).toLocaleString('ja-JP', { timeZone: 'Asia/Tokyo' }) }}\n*Zoom Link:* {{ $json.join_url }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration1').first().json.slackChannel }}"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"typeVersion": 2.3
},
{
"id": "78d4ae92-b136-4bbe-ae52-a73a60c47a6c",
"name": "空き状況なしメール送信1",
"type": "n8n-nodes-base.gmail",
"position": [
2144,
512
],
"webhookId": "98dd0319-284e-4b12-a655-a57577571800",
"parameters": {
"sendTo": "={{ $('Extract Booking Details1').first().json.customerEmail }}",
"message": "=Hi {{ $('Extract Booking Details1').first().json.customerName }},\n\nThank you for your booking request. Unfortunately, the requested time slot on {{ new Date($('Extract Booking Details1').first().json.bookingStartISO).toLocaleString('ja-JP', { timeZone: 'Asia/Tokyo' }) }} is not available.\n\nPlease submit a new booking request with an alternative time.",
"options": {},
"subject": "Time Slot Unavailable"
},
"typeVersion": 2.1
},
{
"id": "9f8af7ba-09f1-46bb-9bc6-bb2d0b26d744",
"name": "Sticky: Google Forms Webhook1",
"type": "n8n-nodes-base.stickyNote",
"position": [
96,
-400
],
"parameters": {
"color": "white",
"width": 768,
"height": 528,
"content": "Title: Automated Booking → Calendar + Zoom + Email + Slack\nWhat this workflow does\n\nCaptures booking submissions from a form and parses date/time.\n\nChecks Google Calendar for conflicts.\n\nIf free: creates a Calendar event → creates a Zoom meeting → emails the guest → notifies your team on Slack.\n\nIf busy: emails the guest to pick another time.\n\nFlow\nWebhook → Merge → Config → Extract details → Check availability → IF (free/busy) →\n[Free] Create Calendar Event → Create Zoom → Email confirmation → Slack notify\n[Busy] Email unavailability\n\nNotes\n\nKeep all user-editable variables in the Set nodes for easy maintenance.\n\nDate handling assumes Asia/Tokyo input and converts to ISO for API calls.\n\nNo hardcoded credentials inside HTTP nodes; store secrets via Credentials."
},
"typeVersion": 1
},
{
"id": "5eb1dc05-5c0f-44a0-9000-d4abdd74a981",
"name": "Sticky: フォームデータ統合1",
"type": "n8n-nodes-base.stickyNote",
"position": [
80,
384
],
"parameters": {
"color": "white",
"width": 256,
"height": 176,
"content": "Purpose: Entry point for bookings. Receives a POST payload from your form (name, email, date, time).\nOutput: Raw form fields under body.* used downstream."
},
"typeVersion": 1
},
{
"id": "967bcc58-fc07-4e4c-8b17-5f2a99f9287f",
"name": "Sticky: ワークフロー設定1",
"type": "n8n-nodes-base.stickyNote",
"position": [
400,
384
],
"parameters": {
"color": "white",
"width": 272,
"height": 176,
"content": "Purpose: Normalizes/forwards webhook data to keep a single item moving through the flow.\nTip: Use this as a “buffer” if you ever add parallel inputs later."
},
"typeVersion": 1
},
{
"id": "663ecdf9-6f9d-481c-abe6-e7d8b3c34021",
"name": "Sticky: 予約詳細抽出1",
"type": "n8n-nodes-base.stickyNote",
"position": [
736,
384
],
"parameters": {
"color": "white",
"width": 288,
"height": 176,
"content": "Purpose: Central place for editable constants (e.g., calendarId, slackChannel, teammateEmail).\nWhy: Makes the template plug-and-play—update values here instead of hunting through nodes."
},
"typeVersion": 1
},
{
"id": "c12bee38-9494-43b7-9961-2e4971a92316",
"name": "Sticky: カレンダー空き状況確認1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1088,
384
],
"parameters": {
"color": "white",
"width": 272,
"height": 176,
"content": "Purpose: Maps form fields to clean variables: customerName, customerEmail, bookingDate, bookingTime.\nAlso: Builds bookingStartISO and bookingEndISO (60-min duration) using the submitted local time (JST) → ISO strings."
},
"typeVersion": 1
},
{
"id": "b58f33ab-ad60-4a98-9354-3ed1a1aeab72",
"name": "Sticky: 時間枠は空いていますか?1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1424,
384
],
"parameters": {
"color": "white",
"width": 256,
"height": 176,
"content": "Purpose: Queries the target calendar for events overlapping bookingStartISO–bookingEndISO.\nBehavior: Returns an empty list when the slot is free; non-empty when it’s taken."
},
"typeVersion": 1
},
{
"id": "b0b7376c-f552-4ce9-bd31-33919ba04618",
"name": "Sticky: カレンダーイベント作成1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1744,
384
],
"parameters": {
"color": "white",
"width": 256,
"height": 176,
"content": "Purpose: Branches on availability.\nTrue (empty result): Slot is free → proceed to create the event.\nFalse (has events): Slot is busy → send “unavailable” email."
},
"typeVersion": 1
},
{
"id": "bb03b52c-ddc4-4896-9016-6d01ab6b68ec",
"name": "Sticky: Zoomミーティング作成1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2000,
16
],
"parameters": {
"color": "white",
"width": 272,
"content": "Purpose: Books the time on Google Calendar with the guest as an attendee.\nFields: Summary includes guest name; Description includes name + email for quick context."
},
"typeVersion": 1
},
{
"id": "73736740-501f-4814-9722-e8576e2dd21f",
"name": "Sticky: 確認メール送信1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2336,
16
],
"parameters": {
"color": "white",
"content": "Purpose: Creates a Zoom meeting for the confirmed slot.\nTiming: Uses the booking start time and a 60-minute duration.\nOutput: Provides join_url used by Email/Slack steps."
},
"typeVersion": 1
},
{
"id": "6e9c22c3-0b31-47f9-ab96-4476e501175d",
"name": "Sticky: Slackでチームメンバーに通知1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2640,
16
],
"parameters": {
"color": "white",
"width": 256,
"content": "Purpose: Sends a confirmation to the guest with local (Japan) date/time and the Zoom link.\nSubject/Body: Human-readable datetime via toLocaleString('ja-JP', { timeZone: 'Asia/Tokyo' })."
},
"typeVersion": 1
},
{
"id": "b9aa000c-63a2-44b1-800a-c041a1582f64",
"name": "Sticky: 空き状況なしメール送信1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2064,
672
],
"parameters": {
"color": "white",
"width": 256,
"content": "Purpose: Notifies the guest when the requested slot is already taken and asks them to rebook another time."
},
"typeVersion": 1
},
{
"id": "3904238d-39eb-40f0-879f-3f17e1afd303",
"name": "付箋メモ",
"type": "n8n-nodes-base.stickyNote",
"position": [
2960,
16
],
"parameters": {
"content": "Purpose: Posts a concise booking summary to your specified Slack channel.\nIncludes: Guest name/email, localized date/time, and Zoom join_url."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "31e08b0e-50a9-485b-b16c-856d2311d0f5",
"connections": {
"957b6711-281f-4599-9962-84ebf221691a": {
"main": [
[
{
"node": "3b63fe73-a5e7-4f3e-bf61-e7bd0a9aa63c",
"type": "main",
"index": 0
}
]
]
},
"9f4ca36f-8f02-43ee-8630-222958201959": {
"main": [
[
{
"node": "a31d67fa-38b4-4276-a0ad-56d1069f95dd",
"type": "main",
"index": 0
}
]
]
},
"3dd27b86-6e03-4595-a9fa-2fe3d1210611": {
"main": [
[
{
"node": "957b6711-281f-4599-9962-84ebf221691a",
"type": "main",
"index": 0
}
]
]
},
"76a27cb5-7196-4564-a89a-85d5d0a41d52": {
"main": [
[
{
"node": "9f4ca36f-8f02-43ee-8630-222958201959",
"type": "main",
"index": 0
}
]
]
},
"3b63fe73-a5e7-4f3e-bf61-e7bd0a9aa63c": {
"main": [
[
{
"node": "66b2895b-8260-4e40-b4ec-39b100b89f77",
"type": "main",
"index": 0
}
]
]
},
"66b2895b-8260-4e40-b4ec-39b100b89f77": {
"main": [
[
{
"node": "6591a8f7-2400-4de8-9fbe-b35271faf1f8",
"type": "main",
"index": 0
}
]
]
},
"d80641b0-9da6-491c-922f-d278c0f030c3": {
"main": [
[
{
"node": "76a27cb5-7196-4564-a89a-85d5d0a41d52",
"type": "main",
"index": 0
}
],
[
{
"node": "78d4ae92-b136-4bbe-ae52-a73a60c47a6c",
"type": "main",
"index": 0
}
]
]
},
"a31d67fa-38b4-4276-a0ad-56d1069f95dd": {
"main": [
[
{
"node": "b456c4f9-dcca-48a4-b750-f39e95df493f",
"type": "main",
"index": 0
}
]
]
},
"6591a8f7-2400-4de8-9fbe-b35271faf1f8": {
"main": [
[
{
"node": "d80641b0-9da6-491c-922f-d278c0f030c3",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
上級 - リードナーチャリング
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
リード獲得の自動化、AI資格検証、そして ElevenLabs による個別化された音声フォローアップ
OpenAI および ElevenLabs を基にした自動化されたリードキャプチャと AI による個別化音声フォローアップ
If
Set
Code
+
If
Set
Code
22 ノードMarth
リードナーチャリング
09 - リードプロフィール強化ツール
自動化されたリード情報の豊富さとパーソナライズされたアウトレーシュ:HubSpot、Phantombuster、GPT
If
Set
Code
+
If
Set
Code
30 ノードAvkash Kakdiya
リードナーチャリング
クラウドハリデー衝突の検出と会議の再スケジュール
Google CalendarとSlackを使って祝日の冲突を検出し、会議の再スケジュールを提案する
If
Set
Code
+
If
Set
Code
23 ノードTakuya Ojima
個人の生産性
会議議事録とアクションアイテムトラッカー
AIベースの会議議事録:GPT-4の活用、タスク割り当て、マルチチャネル配信
If
Set
Code
+
If
Set
Code
38 ノードJitesh Dugar
コンテンツ作成
詐欺防止型リードキャプチャ・育成千リードシステム
AIによるスコアリング、テーブル追跡、マルチチャネルアラートを使って詐欺対策リードをキャプチャーし育成
If
Set
Code
+
If
Set
Code
28 ノードJitesh Dugar
コンテンツ作成
n8nノードの探索(可視化リファレンスライブラリ内)
n8nノードを可視化リファレンスライブラリで探索
If
Ftp
Set
+
If
Ftp
Set
113 ノードI versus AI
その他