Telegram을 통해 의사 예약
고급
이것은Support Chatbot, AI Chatbot분야의자동화 워크플로우로, 18개의 노드를 포함합니다.주로 Set, Switch, Telegram, Agent, TelegramTrigger 등의 노드를 사용하며. Telegram, Gemini AI, Google Sheets를 기반으로 한 의사 예약 스케줄링 시스템
사전 요구사항
- •Telegram Bot Token
- •Google Sheets API 인증 정보
- •Google Gemini API Key
사용된 노드 (18)
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"id": "i7D9d1oH1Z0XpoX1",
"meta": {
"instanceId": "e0f9933c2de40fd346dddfe612cf584d10411f4630c7e4f4f3436a3c24dfa368"
},
"name": "Doctor Appointment Through Telegram",
"tags": [],
"nodes": [
{
"id": "95361048-f726-451b-b12f-9b9f348e602e",
"name": "AI 에이전트",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
224,
272
],
"parameters": {
"text": "={{ $json.text }}",
"options": {
"systemMessage": "=You are an AI assistant for a hospital. Your main task is to help users with information about doctors listed in the \"doctor_info\" Google Sheet. Whenever someone asks for a specific doctor or department, check the sheet for availability:\n\nIf the doctor or department is present, provide accurate details from the sheet.\n\nIf the doctor or department is not in the sheet, respond warmly: “Sorry, we currently do not have that doctor or department available. \"We have the below list of the Doctors available\" and show the list of doctors.\n\nAlways be polite, clear, and informative. Do not make up information or mention doctors or departments not listed in the sheet.\n\nIf user request for an appointment of any doctor, then check the appointment tools attached and respond accordingly.\n\n\n\nIf the doctor available at user requested date & time, then ask user for the patient full name to book teh appointment\n\n\nOn confirmation provide the below format.\n\nThanks <patient name> you appointment is successfully booked.\nDoctor Name: user requested doctor name\nPatient Name: Patient Name\ndate: user requested date\ntime: user requested time\nFees: check this from the dcotor info tool\n\n\nOnce confirmed go ahead and append a row in the repective doctor sheet useing sheets append tool\n\nDoctor Name: user requested doctor name\nPatient Name: Patient Name\ndate: user requested date\ntime: user requested time\n\n\n"
},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "0f92dcc7-764d-4d4d-a90f-4dcb25c36012",
"name": "Telegram 트리거",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
-1408,
176
],
"webhookId": "4be713d2-4997-45bc-93a3-bee624416919",
"parameters": {
"updates": [
"message"
],
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"id": "OWtSIMW5xXs1BUXK",
"name": "Test_Analayst_Helper_Bot"
}
},
"typeVersion": 1.2
},
{
"id": "3bfa46b2-626c-42ec-9c0f-9ccacfa45d2b",
"name": "Google Gemini 채팅 모델",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-96,
496
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "AaiLYcmkHuNwDORB",
"name": "Google Gemini(PaLM) Api account 4"
}
},
"typeVersion": 1
},
{
"id": "84a75a48-851b-407e-8fcb-0ad8dc30efc3",
"name": "심플 메모리",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
32,
496
],
"parameters": {
"sessionKey": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"sessionIdType": "customKey"
},
"typeVersion": 1.3
},
{
"id": "3a6795cd-fce8-412e-8787-bd9fbfc1de5b",
"name": "의사 정보",
"type": "n8n-nodes-base.googleSheetsTool",
"position": [
160,
496
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 454060261,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/16z9zoORxtT1PzydJSKsF5Szlu9x7QewX-5UBITjn_Kg/edit#gid=454060261",
"cachedResultName": "Doctor_Info"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "16z9zoORxtT1PzydJSKsF5Szlu9x7QewX-5UBITjn_Kg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/16z9zoORxtT1PzydJSKsF5Szlu9x7QewX-5UBITjn_Kg/edit?usp=drivesdk",
"cachedResultName": "Doctor_Appointment_DB"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "xw7WRgAozbgAiIjH",
"name": "Google Sheets account 6"
}
},
"typeVersion": 4.7
},
{
"id": "46f14fb3-0661-45c6-a64d-122b59002e11",
"name": "텍스트 메시지 전송",
"type": "n8n-nodes-base.telegram",
"position": [
768,
272
],
"webhookId": "a4a5f1d9-82e5-43ab-9ffb-fc60d6a68bd1",
"parameters": {
"text": "={{ $json.output }}",
"chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"additionalFields": {
"appendAttribution": false
}
},
"credentials": {
"telegramApi": {
"id": "OWtSIMW5xXs1BUXK",
"name": "Test_Analayst_Helper_Bot"
}
},
"typeVersion": 1.2
},
{
"id": "5fc56592-6535-439c-9bce-e361903968c6",
"name": "채팅 액션 전송",
"type": "n8n-nodes-base.telegram",
"position": [
-1184,
80
],
"webhookId": "5b72f83d-67f9-4cd9-b059-e2295c75a584",
"parameters": {
"chatId": "={{ $json.message.chat.id }}",
"operation": "sendChatAction"
},
"credentials": {
"telegramApi": {
"id": "OWtSIMW5xXs1BUXK",
"name": "Test_Analayst_Helper_Bot"
}
},
"typeVersion": 1.2
},
{
"id": "789b4a10-e081-47c5-9673-1066b8a1d4d7",
"name": "Dr Karan Singh",
"type": "n8n-nodes-base.googleSheetsTool",
"position": [
288,
496
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1924485712,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/16z9zoORxtT1PzydJSKsF5Szlu9x7QewX-5UBITjn_Kg/edit#gid=1924485712",
"cachedResultName": "Dr. Karan Singh"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "16z9zoORxtT1PzydJSKsF5Szlu9x7QewX-5UBITjn_Kg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/16z9zoORxtT1PzydJSKsF5Szlu9x7QewX-5UBITjn_Kg/edit?usp=drivesdk",
"cachedResultName": "Doctor_Appointment_DB"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "xw7WRgAozbgAiIjH",
"name": "Google Sheets account 6"
}
},
"typeVersion": 4.7
},
{
"id": "29453ca6-3b20-4968-a0ca-e563b0211e6c",
"name": "Dr Arjun Mehta",
"type": "n8n-nodes-base.googleSheetsTool",
"position": [
416,
496
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1628340282,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/16z9zoORxtT1PzydJSKsF5Szlu9x7QewX-5UBITjn_Kg/edit#gid=1628340282",
"cachedResultName": "Dr. Arjun Mehta"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "16z9zoORxtT1PzydJSKsF5Szlu9x7QewX-5UBITjn_Kg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/16z9zoORxtT1PzydJSKsF5Szlu9x7QewX-5UBITjn_Kg/edit?usp=drivesdk",
"cachedResultName": "Doctor_Appointment_DB"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "xw7WRgAozbgAiIjH",
"name": "Google Sheets account 6"
}
},
"typeVersion": 4.7
},
{
"id": "c39498fb-2c1d-4774-9b07-e74f85497bb1",
"name": "Dr Karan Singh 행 추가",
"type": "n8n-nodes-base.googleSheetsTool",
"position": [
544,
496
],
"parameters": {
"columns": {
"value": {
"Booked Date": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Booked_Date', ``, 'string') }}",
"Booked Time": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Booked_Time', ``, 'string') }}",
"Doctor Name": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Doctor_Name', ``, 'string') }}",
"Patient Name": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Patient_Name', ``, 'string') }}"
},
"schema": [
{
"id": "Doctor Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Doctor Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Patient Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Patient Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Booked Date",
"type": "string",
"display": true,
"required": false,
"displayName": "Booked Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Booked Time",
"type": "string",
"display": true,
"required": false,
"displayName": "Booked Time",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1924485712,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/16z9zoORxtT1PzydJSKsF5Szlu9x7QewX-5UBITjn_Kg/edit#gid=1924485712",
"cachedResultName": "Dr. Karan Singh"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "16z9zoORxtT1PzydJSKsF5Szlu9x7QewX-5UBITjn_Kg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/16z9zoORxtT1PzydJSKsF5Szlu9x7QewX-5UBITjn_Kg/edit?usp=drivesdk",
"cachedResultName": "Doctor_Appointment_DB"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "xw7WRgAozbgAiIjH",
"name": "Google Sheets account 6"
}
},
"typeVersion": 4.7
},
{
"id": "fce29d17-2d5b-4245-b2a1-2cf032d77547",
"name": "Dr Arjun Mehta 행 추가",
"type": "n8n-nodes-base.googleSheetsTool",
"position": [
672,
496
],
"parameters": {
"columns": {
"value": {
"Booked Date": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Booked_Date', ``, 'string') }}",
"Booked Time": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Booked_Time', ``, 'string') }}",
"Doctor Name": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Doctor_Name', ``, 'string') }}",
"Patient Name": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Patient_Name', ``, 'string') }}"
},
"schema": [
{
"id": "Doctor Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Doctor Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Patient Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Patient Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Booked Date",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Booked Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Booked Time",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Booked Time",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1628340282,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/16z9zoORxtT1PzydJSKsF5Szlu9x7QewX-5UBITjn_Kg/edit#gid=1628340282",
"cachedResultName": "Dr. Arjun Mehta"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "16z9zoORxtT1PzydJSKsF5Szlu9x7QewX-5UBITjn_Kg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/16z9zoORxtT1PzydJSKsF5Szlu9x7QewX-5UBITjn_Kg/edit?usp=drivesdk",
"cachedResultName": "Doctor_Appointment_DB"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "xw7WRgAozbgAiIjH",
"name": "Google Sheets account 6"
}
},
"typeVersion": 4.7
},
{
"id": "e66b89a6-48e7-42d6-aeef-eb0699a7bcdb",
"name": "스위치",
"type": "n8n-nodes-base.switch",
"position": [
-1184,
272
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "Text",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "997787ae-b98c-4d66-a2a1-8e24fe166c65",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.message.text }}",
"rightValue": ""
}
]
},
"renameOutput": true
},
{
"outputKey": "Voice",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "487f9907-20cd-40ac-a9fb-6c19b8b48070",
"operator": {
"type": "object",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.message.voice }}",
"rightValue": ""
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.3
},
{
"id": "1b83996a-0f2a-47ea-a32e-1601f7d2d77c",
"name": "파일 가져오기",
"type": "n8n-nodes-base.telegram",
"position": [
-752,
352
],
"webhookId": "46ddb783-a7f9-4eb5-ab4d-a7bbd9fed982",
"parameters": {
"fileId": "={{ $json.message.voice.file_id }}",
"resource": "file",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"id": "OWtSIMW5xXs1BUXK",
"name": "Test_Analayst_Helper_Bot"
}
},
"typeVersion": 1.2
},
{
"id": "5cb7d74b-9b60-43c2-be49-21ebb170202a",
"name": "녹음 기록 변환",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
-528,
352
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/gemini-2.5-flash",
"cachedResultName": "models/gemini-2.5-flash"
},
"options": {},
"resource": "audio",
"simplify": false,
"inputType": "binary"
},
"credentials": {
"googlePalmApi": {
"id": "AaiLYcmkHuNwDORB",
"name": "Google Gemini(PaLM) Api account 4"
}
},
"typeVersion": 1
},
{
"id": "74b6a3e1-bf3d-4f05-86f1-bf6d40091979",
"name": "필드 편집",
"type": "n8n-nodes-base.set",
"position": [
-320,
352
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "bec50085-d45a-4f60-b2e2-f982b662d7e8",
"name": "text",
"type": "string",
"value": "={{ $json.candidates[0].content.parts[0].text }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "a5598c37-a0f2-458d-bc2c-3f522075f772",
"name": "필드 편집1",
"type": "n8n-nodes-base.set",
"position": [
-768,
160
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "19f8bd4f-da1a-4ad8-8c96-8df186911605",
"name": "text",
"type": "string",
"value": "={{ $json.message.text }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "d5550830-dbc8-4ac9-9833-7a2cbb91f41f",
"name": "스티커 노트",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1520,
-288
],
"parameters": {
"width": 704,
"height": 336,
"content": "## Doctor’s Appointment Scheduler Agent\nThis intelligent assistant helps patients conveniently schedule doctor appointments through text or voice interaction.\n\n The agent retrieves doctor information stored in Google Sheets.\n\n It checks the doctor’s availability using the doctor’s schedule ledger tool.\n\n If the doctor is already booked for a specific date and time, the agent notifies the user and suggests alternative slots.\n\n If the doctor is available, the agent confirms the appointment details with the user and books the slot for the selected date and time."
},
"typeVersion": 1
},
{
"id": "5e18ff2b-e021-40e8-9888-325d6c925947",
"name": "스티커 노트1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-608,
-272
],
"parameters": {
"width": 752,
"height": 304,
"content": "## Doctor_Info Tool Schema\n\nDoctor name ,Department, \tFees\n\n## Doctor Schduler Schema\n\nDoctor Name, \tPatient Name, \tBooked Date, \tBooked Time"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "d1109052-5ace-4801-a76a-029f82ae1b37",
"connections": {
"e66b89a6-48e7-42d6-aeef-eb0699a7bcdb": {
"main": [
[
{
"node": "a5598c37-a0f2-458d-bc2c-3f522075f772",
"type": "main",
"index": 0
}
],
[
{
"node": "1b83996a-0f2a-47ea-a32e-1601f7d2d77c",
"type": "main",
"index": 0
}
]
]
},
"95361048-f726-451b-b12f-9b9f348e602e": {
"main": [
[
{
"node": "46f14fb3-0661-45c6-a64d-122b59002e11",
"type": "main",
"index": 0
}
]
]
},
"1b83996a-0f2a-47ea-a32e-1601f7d2d77c": {
"main": [
[
{
"node": "5cb7d74b-9b60-43c2-be49-21ebb170202a",
"type": "main",
"index": 0
}
]
]
},
"3a6795cd-fce8-412e-8787-bd9fbfc1de5b": {
"ai_tool": [
[
{
"node": "95361048-f726-451b-b12f-9b9f348e602e",
"type": "ai_tool",
"index": 0
}
]
]
},
"74b6a3e1-bf3d-4f05-86f1-bf6d40091979": {
"main": [
[
{
"node": "95361048-f726-451b-b12f-9b9f348e602e",
"type": "main",
"index": 0
}
]
]
},
"a5598c37-a0f2-458d-bc2c-3f522075f772": {
"main": [
[
{
"node": "95361048-f726-451b-b12f-9b9f348e602e",
"type": "main",
"index": 0
}
]
]
},
"84a75a48-851b-407e-8fcb-0ad8dc30efc3": {
"ai_memory": [
[
{
"node": "95361048-f726-451b-b12f-9b9f348e602e",
"type": "ai_memory",
"index": 0
}
]
]
},
"29453ca6-3b20-4968-a0ca-e563b0211e6c": {
"ai_tool": [
[
{
"node": "95361048-f726-451b-b12f-9b9f348e602e",
"type": "ai_tool",
"index": 0
}
]
]
},
"789b4a10-e081-47c5-9673-1066b8a1d4d7": {
"ai_tool": [
[
{
"node": "95361048-f726-451b-b12f-9b9f348e602e",
"type": "ai_tool",
"index": 0
}
]
]
},
"0f92dcc7-764d-4d4d-a90f-4dcb25c36012": {
"main": [
[
{
"node": "e66b89a6-48e7-42d6-aeef-eb0699a7bcdb",
"type": "main",
"index": 0
},
{
"node": "5fc56592-6535-439c-9bce-e361903968c6",
"type": "main",
"index": 0
}
]
]
},
"5cb7d74b-9b60-43c2-be49-21ebb170202a": {
"main": [
[
{
"node": "74b6a3e1-bf3d-4f05-86f1-bf6d40091979",
"type": "main",
"index": 0
}
]
]
},
"3bfa46b2-626c-42ec-9c0f-9ccacfa45d2b": {
"ai_languageModel": [
[
{
"node": "95361048-f726-451b-b12f-9b9f348e602e",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"fce29d17-2d5b-4245-b2a1-2cf032d77547": {
"ai_tool": [
[
{
"node": "95361048-f726-451b-b12f-9b9f348e602e",
"type": "ai_tool",
"index": 0
}
]
]
},
"c39498fb-2c1d-4774-9b07-e74f85497bb1": {
"ai_tool": [
[
{
"node": "95361048-f726-451b-b12f-9b9f348e602e",
"type": "ai_tool",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 지원 챗봇, AI 챗봇
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
WhatsApp/Telegram WooCommerce 주문 지원
Telegram과 Gmail을 통해 Gemini와 GPT를 사용한 WooCommerce 고객 지원 자동화
Set
Gmail
Merge
+
Set
Gmail
Merge
25 노드AppStoneLab Technologies LLP
지원 챗봇
펫 그루밍 게시 및 예약 자동화
AI, Facebook 및 Telegram 봇을 사용한 펫 그루밍 게시 및 예약 자동화
If
Set
Switch
+
If
Set
Switch
36 노드Christian Moises
AI 챗봇
내 작업 흐름 2
여러 GPT-4o AI 에이전트를 사용하여 개인 데이터 관리: Telegram에서 Gmail, 작업 및 재정
Set
Code
Gmail
+
Set
Code
Gmail
62 노드Mahmoud Shrouf
AI 챗봇
Telegram 지원 인계 자동화
GPT4 및 이메일 알림을 사용한 Telegram 지원 AI-인간 전환 자동화
If
Set
Switch
+
If
Set
Switch
40 노드Meelioo
지원 챗봇
J.A.R.V.I.S.
사용법 Telegram에서 OpenAI, SERP 및 벡터 스토리지를 사용하여 전면적인 다중 모달 도우미 구축
If
Set
Code
+
If
Set
Code
48 노드FabioInTech
지원 챗봇
CRM 연락처를 캡처하는 Telegram 로봇
Telegram과 Gemini AI를 사용하여 CRM 연락처를 capture하고 저장합니다.
If
Set
Code
+
If
Set
Code
27 노드Vadim