音声による予約アシスタント
上級
これはSupport Chatbot, AI Chatbot分野の自動化ワークフローで、18個のノードを含みます。主にSet, Switch, Webhook, HttpRequest, RespondToWebhookなどのノードを使用。 VAPIとCal.comによる音声での予約作成
前提条件
- •HTTP Webhookエンドポイント(n8nが自動生成)
- •ターゲットAPIの認証情報が必要な場合あり
カテゴリー
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"id": "uPrkBTcWYNleMzSM",
"meta": {
"instanceId": "41a93cc6f329d5755684ac69c9a86d5c75d7dc780eea0b60d82055e6149e455f",
"templateCredsSetupCompleted": true
},
"name": "Appointment Booking Voice Agent",
"tags": [],
"nodes": [
{
"id": "6adc4f2f-867e-49dd-9179-cf55f0a3f56d",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"disabled": true,
"position": [
-1408,
96
],
"webhookId": "308f0eec-8459-4e6c-bf25-5cd9b2c31ad6",
"parameters": {
"path": "308f0eec-8459-4e6c-bf25-5cd9b2c31ad6",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2
},
{
"id": "322ff7ac-9c2c-49e9-a429-ab91d9b9f2bb",
"name": "Switch",
"type": "n8n-nodes-base.switch",
"position": [
-592,
96
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "Check Availability",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "813e4843-4769-4ed8-89d4-4a3969913d51",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('Webhook').item.json.body.message.toolCalls[0].function.name }}",
"rightValue": "check-availability"
}
]
},
"renameOutput": true
},
{
"outputKey": "Book Appointment",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "ecb56d1d-336f-4504-b69b-ad635d1a6b24",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('Webhook').item.json.body.message.toolWithToolCallList[0].function.name }}",
"rightValue": "book-appointment"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "ee168a09-1bb7-4080-b96e-8b20fc24b86c",
"name": "変数の設定",
"type": "n8n-nodes-base.set",
"position": [
-1184,
96
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "d9554d41-2307-4f97-967b-ca8b72c181bb",
"name": "username",
"type": "string",
"value": "nabin-bhandari11"
},
{
"id": "c6a7eb17-72bc-419a-a96b-232c3b00b3b8",
"name": "eventTypeSlug",
"type": "string",
"value": "30 min"
},
{
"id": "d1af9905-60e7-4f64-a235-867222d088c7",
"name": "eventTypeId",
"type": "string",
"value": "2964463"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "bfbdc15f-2718-410c-8a48-90c861c5836f",
"name": "空き状況確認",
"type": "n8n-nodes-base.httpRequest",
"position": [
0,
-16
],
"parameters": {
"url": "https://api.cal.com/v2/slots",
"options": {},
"sendQuery": true,
"sendHeaders": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "start",
"value": "={{ $json[' start'] }}"
},
{
"name": "end",
"value": "={{ $json[' end'] }}"
},
{
"name": "eventTypeId",
"value": "={{ $('Set Variables').item.json.eventTypeId }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "cal-api-version",
"value": "2024-09-04"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"id": "9eUYG3fajx2PVQgB",
"name": "Header Auth account"
}
},
"typeVersion": 4.2
},
{
"id": "0b1e3986-7b05-4ca4-aa10-976a7b0ba64c",
"name": "予約確定",
"type": "n8n-nodes-base.httpRequest",
"position": [
-112,
240
],
"parameters": {
"url": "https://api.cal.com/v2/bookings",
"method": "POST",
"options": {},
"jsonBody": "={\n \"attendee\": {\n \"language\": \"en\",\n \"name\": \"{{ $json.body.message.toolCalls[0].function.arguments.Name }}\",\n \"timeZone\": \"{{ $json.body.message.toolCalls[0].function.arguments.callerTimeZone }}\",\n \"email\": \"{{ $json.body.message.toolCalls[0].function.arguments.Email }}\"\n },\n \"start\": \"{{ $json.body.message.toolCallList[0].function.arguments.requestedappointmentdate }}\",\n \"eventTypeId\": {{ $('Set Variables').item.json.eventTypeId }}\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "cal-api-version",
"value": "2024-08-13"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"id": "9eUYG3fajx2PVQgB",
"name": "Header Auth account"
}
},
"typeVersion": 4.2
},
{
"id": "8728b814-432a-498f-8077-2f2f806143d7",
"name": "予約成功",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
160,
240
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "={\n \"results\": [\n {\n \"toolCallId\": \"{{ $('Webhook').item.json.body.message.toolCallList[0].id }}\",\n \"result\": \"Booking Successful\"\n }\n ]\n}\n"
},
"typeVersion": 1.4
},
{
"id": "7dced770-52a8-4f81-a0c8-83b1454fa475",
"name": "空き状況確認成功",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
224,
-16
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "={\n \"results\": [\n {\n \"toolCallId\": \"{{ $('Webhook').item.json.body.message.toolCallList[0].id }}\",\n \"result\": \"{{ $json.data }}\"\n }\n ]\n}\n"
},
"typeVersion": 1.4
},
{
"id": "d131814d-35ef-459b-8ba9-99ffe67539dd",
"name": "ペイロードフィールド準備",
"type": "n8n-nodes-base.set",
"position": [
-928,
96
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "9a6f391b-9dc9-4642-accf-be687dceb56e",
"name": "body",
"type": "object",
"value": "={{ $('Webhook').item.json.body }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "30b16423-9253-4fa8-b20c-3ffd86ae1c95",
"name": "開始・終了時間抽出",
"type": "n8n-nodes-base.set",
"position": [
-224,
-16
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "872ef0bf-8111-44e5-8c8d-fbaa0c982519",
"name": " start",
"type": "string",
"value": "={{ $('Webhook').item.json.body.message.toolCalls[0].function.arguments.requestedappointment }}"
},
{
"id": "57e9ef02-8748-4ab9-9dc3-39ee2f8c08d5",
"name": " end",
"type": "string",
"value": "={{ $('Webhook').item.json.body.message.toolCalls[0].function.arguments.requestedappointment.toDateTime().plus(1, 'days') }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "14dc0f51-6ac4-4058-8618-f8d7915bfc5d",
"name": "付箋",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1488,
-32
],
"parameters": {
"height": 336,
"content": "Entry point from VAPI. This webhook receives user intent and entities from the voice agent in a structured format (e.g. action = \"book\" or \"check\")."
},
"typeVersion": 1
},
{
"id": "917a9fd1-a235-44c9-b810-c1efbae640a7",
"name": "付箋1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1232,
-16
],
"parameters": {
"color": 4,
"height": 320,
"content": "Extracts variables like eventtypeid, eventtypeslug and username."
},
"typeVersion": 1
},
{
"id": "8a4ef30e-6572-4746-942e-5ceaf95a91e7",
"name": "付箋2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-960,
-16
],
"parameters": {
"color": 2,
"height": 320,
"content": "Extracts the body from the webhook"
},
"typeVersion": 1
},
{
"id": "e0f0ebd4-4a21-4d54-8cb8-fd076f1a082e",
"name": "付箋3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-672,
-112
],
"parameters": {
"color": 5,
"height": 416,
"content": "Routes the voice intent:\n\nIf the user said \"Check availability\", go to the check flow.\n\nIf the user said \"Book appointment\", go to the booking flow."
},
"typeVersion": 1
},
{
"id": "93c9caf4-e617-4d3e-9cb5-3a6973a84d60",
"name": "付箋4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-304,
-160
],
"parameters": {
"height": 304,
"content": "Parses and formats spoken date/time info from the voice assistant to match Cal.com API's time range requirements."
},
"typeVersion": 1
},
{
"id": "35d3230c-09ad-4176-9bef-24b4825dfa47",
"name": "付箋5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-64,
-160
],
"parameters": {
"color": 7,
"height": 304,
"content": "Sends a GET request to Cal.com to fetch available time slots for the specified date range from the voice input."
},
"typeVersion": 1
},
{
"id": "d212d1a3-3471-4557-a96a-50dd311089ba",
"name": "付箋6",
"type": "n8n-nodes-base.stickyNote",
"position": [
192,
-160
],
"parameters": {
"color": 3,
"height": 320,
"content": "Returns a voice-ready response to VAPI (e.g. \"There’s availability at 3 PM and 4 PM. Would you like to book?\")."
},
"typeVersion": 1
},
{
"id": "59935070-d52a-4120-bd60-0f694eb538fe",
"name": "付箋7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-176,
144
],
"parameters": {
"color": 4,
"height": 272,
"content": "Sends a POST request to Cal.com to book the appointment using parsed info from the voice conversation."
},
"typeVersion": 1
},
{
"id": "a4182a3e-4501-405c-9088-95a1b9dd8d81",
"name": "付箋8",
"type": "n8n-nodes-base.stickyNote",
"position": [
80,
160
],
"parameters": {
"color": 6,
"width": 272,
"height": 240,
"content": "Returns a spoken confirmation via VAPI (e.g. \"Your appointment is confirmed for 3 PM on Tuesday\")"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "e483040f-c8c3-4cab-ae02-7008cf6a993c",
"connections": {
"322ff7ac-9c2c-49e9-a429-ab91d9b9f2bb": {
"main": [
[
{
"node": "30b16423-9253-4fa8-b20c-3ffd86ae1c95",
"type": "main",
"index": 0
}
],
[
{
"node": "0b1e3986-7b05-4ca4-aa10-976a7b0ba64c",
"type": "main",
"index": 0
}
]
]
},
"6adc4f2f-867e-49dd-9179-cf55f0a3f56d": {
"main": [
[
{
"node": "ee168a09-1bb7-4080-b96e-8b20fc24b86c",
"type": "main",
"index": 0
}
]
]
},
"ee168a09-1bb7-4080-b96e-8b20fc24b86c": {
"main": [
[
{
"node": "d131814d-35ef-459b-8ba9-99ffe67539dd",
"type": "main",
"index": 0
}
]
]
},
"0b1e3986-7b05-4ca4-aa10-976a7b0ba64c": {
"main": [
[
{
"node": "8728b814-432a-498f-8077-2f2f806143d7",
"type": "main",
"index": 0
}
]
]
},
"bfbdc15f-2718-410c-8a48-90c861c5836f": {
"main": [
[
{
"node": "7dced770-52a8-4f81-a0c8-83b1454fa475",
"type": "main",
"index": 0
}
]
]
},
"d131814d-35ef-459b-8ba9-99ffe67539dd": {
"main": [
[
{
"node": "322ff7ac-9c2c-49e9-a429-ab91d9b9f2bb",
"type": "main",
"index": 0
}
]
]
},
"30b16423-9253-4fa8-b20c-3ffd86ae1c95": {
"main": [
[
{
"node": "bfbdc15f-2718-410c-8a48-90c861c5836f",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
上級 - サポートチャットボット, AIチャットボット
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
AIを活用した会話型旅行予約ツール:飛行機とホテルの予約を自動化
対話型旅行予約システム:GPT-3.5 を使用した航空券とホテルの自動予約
Code
Open Ai
Switch
+
Code
Open Ai
Switch
21 ノードOneclick AI Squad
サポートチャットボット
AI ソーシャルメディア自動返信プラグイン(Instagram、Facebook、WhatsApp)
Instagram、Facebook、WhatsApp をサポートする Llama 3.2 ベースの AI によるソーシャルメディアメッセージ自動返信システム
Code
Switch
Webhook
+
Code
Switch
Webhook
12 ノードOneclick AI Squad
サポートチャットボット
航空公司のFAQボット
GPT-4と質問分類を使った航空会社カスタマーサポートの自動化
If
Code
Merge
+
If
Code
Merge
27 ノードOneclick AI Squad
サポートチャットボット
予約リマインダーアシスタント
Google CalendarとRetell AIを組み合わせて予定通話のリマインダーを自動化
Set
Code
Http Request
+
Set
Code
Http Request
11 ノードNabin Bhandari
AIチャットボット
Telegramサポート取り扱いの自動化
GPT-4とメール通知を使用して、TelegramサポートからAIから人間への段階の移行を自動化
If
Set
Switch
+
If
Set
Switch
40 ノードMeelioo
サポートチャットボット
マルチチャンネルDHLステータスボット
Webフォームおよびメール照会に対応する自動化DHLパッケージ追跡ボット
If
Code
Gmail
+
If
Code
Gmail
15 ノードYusuke Yamamoto
サポートチャットボット