Moteur de recommandation de conférenciers et de sessions piloté par l'IA
Ceci est unMiscellaneous, AI Chatbotworkflow d'automatisation du domainecontenant 20 nœuds.Utilise principalement des nœuds comme If, Code, Webhook, GoogleSheets, Agent. Générer des recommandations de conférenciers pour des événements avec Claude AI et Google Sheets
- •Point de terminaison HTTP Webhook (généré automatiquement par n8n)
- •Informations d'identification Google Sheets API
- •Clé API Anthropic
Nœuds utilisés (20)
Catégorie
{
"id": "do05AK6BdVAE5AWC",
"meta": {
"instanceId": "dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281",
"templateCredsSetupCompleted": true
},
"name": "AI-Driven Speaker & Session Recommendation Engine",
"tags": [],
"nodes": [
{
"id": "82c1fcd7-57b9-4a6d-b298-82efa2d9327c",
"name": "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": "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": "Analyser la Demande Vocale",
"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": "Récupérer les Données des Conférenciers",
"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": "Note - Récupération",
"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": "Récupérer les Données de l'Audience",
"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": "Agréger Toutes les Données",
"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": "Note - Traitement",
"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": "Note - Analyse 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": "Formater pour la Réponse Vocale",
"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": "Note - Formatage",
"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": "Sauvegarder dans Google Sheets",
"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": "Note - Sauvegarde",
"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": "Envoyer la Réponse de l'Agent Vocal",
"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": "Note - Réponse",
"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": "Vérifier les Erreurs",
"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": "Formater la Réponse d'Erreur",
"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": "Envoyer la Réponse d'Erreur",
"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": "Agent IA",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-880,
288
],
"parameters": {
"options": {}
},
"typeVersion": 2.2
},
{
"id": "14e6e626-d90b-4ab6-b487-ee4c6d9d50e2",
"name": "Anthropic Chat Model",
"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
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Avancé - Divers, Chatbot IA
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
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.
Partager ce workflow