AI로운 강연자와 일정 추천 엔진
이것은Miscellaneous, AI Chatbot분야의자동화 워크플로우로, 20개의 노드를 포함합니다.주로 If, Code, Webhook, GoogleSheets, Agent 등의 노드를 사용하며. 사용하여 Claude AI와 Google Sheets로 활동 발표자 추천 생성
- •HTTP Webhook 엔드포인트(n8n이 자동으로 생성)
- •Google Sheets API 인증 정보
- •Anthropic API Key
{
"id": "do05AK6BdVAE5AWC",
"meta": {
"instanceId": "dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281",
"templateCredsSetupCompleted": true
},
"name": "AI-Driven Speaker & Session Recommendation Engine",
"tags": [],
"nodes": [
{
"id": "82c1fcd7-57b9-4a6d-b298-82efa2d9327c",
"name": "Webhook 트리거",
"type": "n8n-nodes-base.webhook",
"position": [
-1792,
288
],
"webhookId": "speaker-recommendation-webhook",
"parameters": {
"path": "speaker-recommendations",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2
},
{
"id": "f86fd196-b2fe-4970-bf5c-2e3f23a7fdf0",
"name": "Sticky Note - Webhook",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1856,
-128
],
"parameters": {
"color": 4,
"width": 208,
"height": 728,
"content": "## Webhook Trigger\n\nReceives requests from voice agents or external systems with event requirements and audience preferences.\n\nExpected payload:\n{\n \"eventType\": \"string\",\n \"eventGoals\": \"string\",\n \"audienceSize\": number,\n \"preferredTopics\": []\n}"
},
"typeVersion": 1
},
{
"id": "59e086b3-19bd-4e54-858a-9346171072c6",
"name": "음성 요청 파싱",
"type": "n8n-nodes-base.code",
"position": [
-1552,
288
],
"parameters": {
"jsCode": "// Extract and validate webhook payload\nconst payload = $input.first().json.body || $input.first().json;\n\n// Default values if not provided\nconst requestData = {\n eventType: payload.eventType || \"Technology Conference\",\n eventGoals: payload.eventGoals || \"Engaging and innovative sessions\",\n audienceSize: payload.audienceSize || 500,\n preferredTopics: payload.preferredTopics || [\"AI\", \"Cloud Computing\", \"Innovation\"],\n sessionCount: payload.sessionCount || 5,\n requestId: payload.requestId || Date.now().toString(),\n timestamp: new Date().toISOString(),\n source: payload.source || \"voice-agent\"\n};\n\nreturn { json: requestData };"
},
"typeVersion": 2
},
{
"id": "a49e4d7f-dc5a-45d9-beac-693466ceae3c",
"name": "연사 데이터 가져오기",
"type": "n8n-nodes-base.googleSheets",
"position": [
-1328,
144
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultName": "Speakers"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_SPREADSHEET_ID",
"cachedResultName": "Event Data"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "ScSS2KxGQULuPtdy",
"name": "Google Sheets- test"
}
},
"typeVersion": 4
},
{
"id": "5758dbac-06ec-4694-abbe-81797aaad24f",
"name": "Sticky Note - Fetch",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1584,
0
],
"parameters": {
"color": 3,
"width": 176,
"height": 592,
"content": "## Fetch Speaker Database\n\nRetrieve speaker profiles, expertise areas, past sessions, ratings, and availability from Google Sheets."
},
"typeVersion": 1
},
{
"id": "9abf905a-74ac-473f-80ee-35c13ba36291",
"name": "청중 데이터 가져오기",
"type": "n8n-nodes-base.googleSheets",
"position": [
-1328,
432
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=1",
"cachedResultName": "Audience Interests"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_SPREADSHEET_ID",
"cachedResultName": "Event Data"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "ScSS2KxGQULuPtdy",
"name": "Google Sheets- test"
}
},
"typeVersion": 4
},
{
"id": "ecf1cd22-a0b7-432a-9fe1-32a7cefb9da5",
"name": "모든 데이터 통합",
"type": "n8n-nodes-base.code",
"position": [
-1104,
288
],
"parameters": {
"jsCode": "// Get data from all previous nodes\nconst requestData = $input.all()[0].json;\nconst speakers = $input.all()[1].json;\nconst audienceData = $input.all()[2].json;\n\n// Combine and structure data for AI analysis\nconst combinedData = {\n request: requestData,\n speakers: Array.isArray(speakers) ? speakers : [speakers],\n audienceInterests: Array.isArray(audienceData) ? audienceData : [audienceData],\n eventDetails: {\n type: requestData.eventType,\n goals: requestData.eventGoals,\n audienceSize: requestData.audienceSize,\n preferredTopics: requestData.preferredTopics,\n sessionCount: requestData.sessionCount\n },\n metadata: {\n requestId: requestData.requestId,\n timestamp: requestData.timestamp,\n source: requestData.source\n }\n};\n\nreturn { json: combinedData };"
},
"typeVersion": 2
},
{
"id": "53436f73-bf40-4cc8-9bab-dfbfb412ad50",
"name": "Sticky Note - Process",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1376,
0
],
"parameters": {
"color": 5,
"width": 384,
"height": 592,
"content": "## Calculate & Analyze\n\nCombine voice request data with speaker profiles and audience insights for comprehensive matching."
},
"typeVersion": 1
},
{
"id": "bdf79855-c196-4638-afd4-3a0b81190c80",
"name": "Sticky Note - AI 분석",
"type": "n8n-nodes-base.stickyNote",
"position": [
-928,
96
],
"parameters": {
"color": 6,
"width": 320,
"height": 480,
"content": "## AI Optimization Engine\n\nClaude analyzes speaker-audience fit, diversity, and engagement potential to recommend optimal session lineup."
},
"typeVersion": 1
},
{
"id": "53634ee8-bd33-460a-bb51-48807b2f78bb",
"name": "음성 응답 형식화",
"type": "n8n-nodes-base.code",
"position": [
-528,
288
],
"parameters": {
"jsCode": "// Parse AI response and format recommendations\nconst aiResponse = $json.text || $json.message || JSON.stringify($json);\nconst requestMetadata = $input.first().json.metadata || {};\n\nlet recommendations;\ntry {\n // Extract JSON from the response\n const jsonMatch = aiResponse.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n recommendations = JSON.parse(jsonMatch[0]);\n } else {\n // Try parsing the entire response\n recommendations = typeof aiResponse === 'string' ? JSON.parse(aiResponse) : aiResponse;\n }\n} catch (error) {\n recommendations = {\n error: \"Error parsing recommendations: \" + error.message,\n rawResponse: aiResponse.substring(0, 500)\n };\n}\n\n// Format for output and voice agent response\nconst formattedOutput = {\n status: \"success\",\n requestId: requestMetadata.requestId || \"unknown\",\n timestamp: new Date().toISOString(),\n source: requestMetadata.source || \"unknown\",\n totalRecommendations: recommendations.recommendations?.length || 0,\n recommendations: recommendations.recommendations || [],\n alternativeSpeakers: recommendations.alternativeSpeakers || [],\n eventOptimization: recommendations.eventOptimizationSuggestions || \"\",\n diversityScore: recommendations.diversityScore || 0,\n topicCoverage: recommendations.topicCoverage || [],\n summary: recommendations.summary || \"Recommendations generated successfully\",\n voiceResponse: generateVoiceResponse(recommendations)\n};\n\nfunction generateVoiceResponse(data) {\n if (!data.recommendations || data.recommendations.length === 0) {\n return \"I apologize, but I couldn't generate speaker recommendations at this time. Please try again.\";\n }\n \n const topSpeaker = data.recommendations[0];\n const speakerCount = data.recommendations.length;\n \n return `I've analyzed your event requirements and found ${speakerCount} excellent speaker matches. ` +\n `My top recommendation is ${topSpeaker.speakerName} for a ${topSpeaker.sessionFormat} on ${topSpeaker.sessionTopic}. ` +\n `This speaker has a match score of ${topSpeaker.matchScore}% and would be perfect because ${topSpeaker.reasoning.substring(0, 150)}. ` +\n `Would you like to hear more details about this speaker or the other ${speakerCount - 1} recommendations?`;\n}\n\nreturn { json: formattedOutput };"
},
"typeVersion": 2
},
{
"id": "89f49fa5-6b35-498e-ada4-7ebe54ca4312",
"name": "Sticky Note - Format",
"type": "n8n-nodes-base.stickyNote",
"position": [
-576,
-16
],
"parameters": {
"color": 3,
"width": 192,
"height": 592,
"content": "## Format Recommendations\n\nStructure AI output for both voice agent responses and system storage with match scores and reasoning."
},
"typeVersion": 1
},
{
"id": "2be490a9-eec1-4b73-aa09-628417ac893c",
"name": "Google 시트에 저장",
"type": "n8n-nodes-base.googleSheets",
"position": [
-304,
288
],
"parameters": {
"columns": {
"value": {},
"schema": [],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=2",
"cachedResultName": "Recommendations"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_SPREADSHEET_ID",
"cachedResultName": "Event Data"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "ScSS2KxGQULuPtdy",
"name": "Google Sheets- test"
}
},
"typeVersion": 4
},
{
"id": "d95839b4-b4ad-4ecb-a3f1-30653e826eec",
"name": "Sticky Note - Save",
"type": "n8n-nodes-base.stickyNote",
"position": [
-96,
256
],
"parameters": {
"color": 2,
"width": 352,
"height": 400,
"content": "## Update Tracking Sheet\n\nSave recommendation history and analytics to Google Sheets for tracking and reporting."
},
"typeVersion": 1
},
{
"id": "ddfdb838-d4a2-4f7a-b301-a6fdabf04f5d",
"name": "음성 에이전트 응답 전송",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
-304,
96
],
"parameters": {
"options": {
"responseCode": 200,
"responseHeaders": {
"entries": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json, null, 2) }}"
},
"typeVersion": 1
},
{
"id": "b9a4fd45-b837-4ce5-8113-be8ab9b497b1",
"name": "Sticky Note - Response",
"type": "n8n-nodes-base.stickyNote",
"position": [
-336,
-160
],
"parameters": {
"width": 176,
"height": 784,
"content": "## Voice Agent Response\n\nReturn formatted recommendations to the voice agent with natural language summary and structured data."
},
"typeVersion": 1
},
{
"id": "c35f3ea0-1a0f-4d9b-8765-2ee34f88b4a4",
"name": "오류 확인",
"type": "n8n-nodes-base.if",
"position": [
-304,
480
],
"parameters": {
"options": {},
"conditions": {
"options": {
"combineOperation": "any"
},
"conditions": [
{
"id": "error-check",
"operator": {
"type": "string",
"operation": "notEmpty"
},
"leftValue": "={{ $json.error }}",
"rightValue": ""
},
{
"id": "empty-check",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $json.recommendations?.length || 0 }}",
"rightValue": 0
}
]
}
},
"typeVersion": 2
},
{
"id": "7dd590b4-8091-4029-9153-14c17a0da604",
"name": "오류 응답 형식화",
"type": "n8n-nodes-base.code",
"position": [
-80,
480
],
"parameters": {
"jsCode": "// Generate error response for voice agent\nconst errorData = $input.first().json;\n\nconst errorResponse = {\n status: \"error\",\n requestId: errorData.requestId || \"unknown\",\n timestamp: new Date().toISOString(),\n error: errorData.error || \"Unable to generate recommendations\",\n voiceResponse: \"I apologize, but I encountered an issue while generating speaker recommendations. This could be due to insufficient data or a temporary system issue. Please try again or provide more specific event details.\",\n recommendations: [],\n totalRecommendations: 0\n};\n\nreturn { json: errorResponse };"
},
"typeVersion": 2
},
{
"id": "8bf40bc3-6934-4e00-a3be-3c4d58e823e5",
"name": "오류 응답 전송",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
144,
480
],
"parameters": {
"options": {
"responseCode": 500,
"responseHeaders": {
"entries": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json, null, 2) }}"
},
"typeVersion": 1
},
{
"id": "3fb741b2-6c6f-4d5e-aa3d-a5857dea1c4d",
"name": "AI 에이전트",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-880,
288
],
"parameters": {
"options": {}
},
"typeVersion": 2.2
},
{
"id": "14e6e626-d90b-4ab6-b487-ee4c6d9d50e2",
"name": "Anthropic 채팅 모델",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
-1024,
496
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "claude-sonnet-4-20250514",
"cachedResultName": "Claude 4 Sonnet"
},
"options": {}
},
"credentials": {
"anthropicApi": {
"id": "fK55jZdb6CaYNukq",
"name": "Anthropic account - test"
}
},
"typeVersion": 1.3
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "28462451-7f45-407e-a072-dc9ae8d4ac56",
"connections": {
"3fb741b2-6c6f-4d5e-aa3d-a5857dea1c4d": {
"main": [
[
{
"node": "53634ee8-bd33-460a-bb51-48807b2f78bb",
"type": "main",
"index": 0
}
]
]
},
"82c1fcd7-57b9-4a6d-b298-82efa2d9327c": {
"main": [
[
{
"node": "59e086b3-19bd-4e54-858a-9346171072c6",
"type": "main",
"index": 0
}
]
]
},
"c35f3ea0-1a0f-4d9b-8765-2ee34f88b4a4": {
"main": [
[
{
"node": "7dd590b4-8091-4029-9153-14c17a0da604",
"type": "main",
"index": 0
}
]
]
},
"ecf1cd22-a0b7-432a-9fe1-32a7cefb9da5": {
"main": [
[
{
"node": "3fb741b2-6c6f-4d5e-aa3d-a5857dea1c4d",
"type": "main",
"index": 0
}
]
]
},
"9abf905a-74ac-473f-80ee-35c13ba36291": {
"main": [
[
{
"node": "ecf1cd22-a0b7-432a-9fe1-32a7cefb9da5",
"type": "main",
"index": 0
}
]
]
},
"a49e4d7f-dc5a-45d9-beac-693466ceae3c": {
"main": [
[
{
"node": "ecf1cd22-a0b7-432a-9fe1-32a7cefb9da5",
"type": "main",
"index": 0
}
]
]
},
"59e086b3-19bd-4e54-858a-9346171072c6": {
"main": [
[
{
"node": "a49e4d7f-dc5a-45d9-beac-693466ceae3c",
"type": "main",
"index": 0
},
{
"node": "9abf905a-74ac-473f-80ee-35c13ba36291",
"type": "main",
"index": 0
},
{
"node": "ecf1cd22-a0b7-432a-9fe1-32a7cefb9da5",
"type": "main",
"index": 0
}
]
]
},
"14e6e626-d90b-4ab6-b487-ee4c6d9d50e2": {
"ai_languageModel": [
[
{
"node": "3fb741b2-6c6f-4d5e-aa3d-a5857dea1c4d",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"7dd590b4-8091-4029-9153-14c17a0da604": {
"main": [
[
{
"node": "8bf40bc3-6934-4e00-a3be-3c4d58e823e5",
"type": "main",
"index": 0
}
]
]
},
"53634ee8-bd33-460a-bb51-48807b2f78bb": {
"main": [
[
{
"node": "ddfdb838-d4a2-4f7a-b301-a6fdabf04f5d",
"type": "main",
"index": 0
},
{
"node": "2be490a9-eec1-4b73-aa09-628417ac893c",
"type": "main",
"index": 0
},
{
"node": "c35f3ea0-1a0f-4d9b-8765-2ee34f88b4a4",
"type": "main",
"index": 0
}
]
]
}
}
}이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 기타, AI 챗봇
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
Oneclick AI Squad
@oneclick-aiThe AI Squad Initiative is a pioneering effort to build, automate and scale AI-powered workflows using n8n.io. Our mission is to help individuals and businesses integrate AI agents seamlessly into their daily operations from automating tasks and enhancing productivity to creating innovative, intelligent solutions. We design modular, reusable AI workflow templates that empower creators, developers and teams to supercharge their automation with minimal effort and maximum impact.
이 워크플로우 공유