Motor de Recomendación de Ponentes y Sesiones Impulsado por IA
Este es unMiscellaneous, AI Chatbotflujo de automatización del dominio deautomatización que contiene 20 nodos.Utiliza principalmente nodos como If, Code, Webhook, GoogleSheets, Agent. Usar Claude AI y Google Sheets para generar recomendaciones de oradores para eventos
- •Punto final de HTTP Webhook (n8n generará automáticamente)
- •Credenciales de API de Google Sheets
- •Clave de API de Anthropic
Nodos utilizados (20)
Categoría
{
"id": "do05AK6BdVAE5AWC",
"meta": {
"instanceId": "dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281",
"templateCredsSetupCompleted": true
},
"name": "AI-Driven Speaker & Session Recommendation Engine",
"tags": [],
"nodes": [
{
"id": "82c1fcd7-57b9-4a6d-b298-82efa2d9327c",
"name": "Disparador Webhook Trigger",
"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": "Nota Adhesiva - Disparador 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": "Analizar Solicitud de Voz",
"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": "Obtener Datos de Ponentes",
"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": "Nota Adhesiva - Obtener",
"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": "Obtener Datos de Audiencia",
"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": "Agregar Todos los Datos",
"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": "Nota Adhesiva - Procesar",
"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": "Nota Adhesiva - Análisis de IA",
"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": "Formatear para Respuesta de Voz",
"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": "Nota Adhesiva - Formatear",
"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": "Guardar en Hojas de 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": "Nota Adhesiva - Guardar",
"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": "Enviar Respuesta del Agentee de Voz",
"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": "Nota Adhesiva - Respuesta",
"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": "Verificar Errores",
"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": "Formatear Respuesta de Error",
"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": "Enviar Respuesta de Error",
"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": "Agentee de IA",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-880,
288
],
"parameters": {
"options": {}
},
"typeVersion": 2.2
},
{
"id": "14e6e626-d90b-4ab6-b487-ee4c6d9d50e2",
"name": "Modelo de chat 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": {
"Agente de IA": {
"main": [
[
{
"node": "53634ee8-bd33-460a-bb51-48807b2f78bb",
"type": "main",
"index": 0
}
]
]
},
"Webhook Trigger": {
"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": "Agente de IA",
"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
}
]
]
},
"Anthropic Chat Model": {
"ai_languageModel": [
[
{
"node": "Agente de IA",
"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": "Enviar Respuesta del Agente de Voz",
"type": "main",
"index": 0
},
{
"node": "Guardar en Google Sheets",
"type": "main",
"index": 0
},
{
"node": "c35f3ea0-1a0f-4d9b-8765-2ee34f88b4a4",
"type": "main",
"index": 0
}
]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Avanzado - Varios, Chatbot de IA
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
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.
Compartir este flujo de trabajo