Suite d'automatisation d'activités et de planification budgétaire IA
Ceci est unProject Management, Multimodal AIworkflow d'automatisation du domainecontenant 20 nœuds.Utilise principalement des nœuds comme Code, Merge, Slack, Webhook, EmailSend. Automatisation de la planification d'événements et de l'optimisation du budget avec Claude AI et Google Sheets
- •Token Bot Slack ou URL Webhook
- •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": "KjnG4Wn0rWx8YM2N",
"meta": {
"instanceId": "dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281",
"templateCredsSetupCompleted": true
},
"name": "AI Event & Budget Orchestration Suite",
"tags": [],
"nodes": [
{
"id": "a3da1a86-2036-4134-a947-6adc55068f04",
"name": "Déclencheur d'Orchestration",
"type": "n8n-nodes-base.webhook",
"position": [
-560,
584
],
"webhookId": "event-orchestrate-webhook",
"parameters": {
"path": "event-orchestrate",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2
},
{
"id": "65fa224a-7f5a-49d2-9ec6-5dd24dd86f50",
"name": "Lire le Brief Client",
"type": "n8n-nodes-base.googleSheets",
"position": [
-336,
296
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "ClientBriefs"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.spreadsheetId || '1234567890abcdefghijklmnop' }}"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "ScSS2KxGQULuPtdy",
"name": "Google Sheets- test"
}
},
"typeVersion": 4.5
},
{
"id": "3844dc0e-e84f-45ed-aa29-eb09ab4d7bcd",
"name": "Lire les Estimations Budgétaires",
"type": "n8n-nodes-base.googleSheets",
"position": [
-336,
488
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "BudgetEstimates"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.spreadsheetId || '1234567890abcdefghijklmnop' }}"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "ScSS2KxGQULuPtdy",
"name": "Google Sheets- test"
}
},
"typeVersion": 4.5
},
{
"id": "6545f261-99a3-4ca1-90d8-f5d514dcd68d",
"name": "Lire les Coûts Réels",
"type": "n8n-nodes-base.googleSheets",
"position": [
-336,
680
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "ActualCosts"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.spreadsheetId || '1234567890abcdefghijklmnop' }}"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "ScSS2KxGQULuPtdy",
"name": "Google Sheets- test"
}
},
"typeVersion": 4.5
},
{
"id": "8c47bb9f-4969-4627-8888-bf64df202de8",
"name": "Lire la Base de Données Fournisseurs",
"type": "n8n-nodes-base.googleSheets",
"position": [
-336,
872
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "VendorDatabase"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.vendorSpreadsheetId || $json.spreadsheetId }}"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "ScSS2KxGQULuPtdy",
"name": "Google Sheets- test"
}
},
"typeVersion": 4.5
},
{
"id": "23f81562-d7e7-45c7-8c52-d42750b1b68f",
"name": "Fusionner Toutes les Données",
"type": "n8n-nodes-base.merge",
"position": [
-112,
584
],
"parameters": {
"mode": "mergeByPosition"
},
"typeVersion": 3
},
{
"id": "c3ea1e44-1472-43e2-ac30-da2b19f17a6b",
"name": "Moteur de Fusion de Données",
"type": "n8n-nodes-base.code",
"position": [
112,
584
],
"parameters": {
"jsCode": "const all = $input.all();\nconst brief = all.find(i => i.json.clientName)?.json || {};\nconst budgets = all.filter(i => i.json.budgetAmount !== undefined).map(i => i.json);\nconst actuals = all.filter(i => i.json.actualCost !== undefined).map(i => i.json);\nconst vendors = all.filter(i => i.json.vendorName).map(i => i.json);\n\n// Metadata\nconst meta = {\n eventId: brief.eventId || `EVT-${Date.now()}`,\n clientName: brief.clientName || 'Client',\n eventType: brief.eventType || 'Conference',\n attendees: parseInt(brief.attendees) || 150,\n targetBudget: parseFloat(brief.budget) || 75000,\n eventDate: brief.eventDate || 'TBD',\n plannerEmail: brief.plannerEmail || 'planner@company.com',\n spreadsheetId: brief.spreadsheetId || '1234567890abcdefghijklmnop',\n teamChannel: brief.teamChannel || '#event-orchestration',\n priority: brief.priority || 'Medium'\n};\n\n// Budget aggregation\nlet totalBudgeted = 0, totalEstimated = 0, totalActual = 0;\nconst categories = {};\n\nbudgets.forEach(b => {\n const cat = b.category || 'Other';\n const budgeted = parseFloat(b.budgetAmount || 0);\n const estimated = parseFloat(b.estimatedCost || 0);\n totalBudgeted += budgeted;\n totalEstimated += estimated;\n if (!categories[cat]) categories[cat] = { budgeted: 0, estimated: 0, actual: 0, items: [] };\n categories[cat].budgeted += budgeted;\n categories[cat].estimated += estimated;\n categories[cat].items.push(b);\n});\n\nactuals.forEach(a => {\n const cat = a.category || 'Other';\n const actual = parseFloat(a.actualCost || 0);\n totalActual += actual;\n if if (categories[cat]) categories[cat].actual += actual;\n});\n\nconst variance = totalBudgeted - totalEstimated;\nconst variancePct = totalBudgeted > 0 ? ((variance / totalBudgeted) * 100).toFixed(2) : 0;\n\nreturn {\n json: {\n ...meta,\n budgets, actuals, vendors,\n totalBudgeted: totalBudgeted.toFixed(2),\n totalEstimated: totalEstimated.toFixed(2),\n totalActual: totalActual.toFixed(2),\n variance: variance.toFixed(2),\n variancePct,\n overBudget: variance < 0,\n categories: Object.values(categories),\n validation: { errors: [], warnings: [] },\n timestamp: new Date().toISOString()\n }\n};"
},
"typeVersion": 2
},
{
"id": "033b6830-f7af-4a48-be42-02d4f568d5ab",
"name": "Claude AI Core",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
408,
808
],
"parameters": {
"model": "claude-3-5-sonnet-20241022",
"options": {
"temperature": 0.3
}
},
"credentials": {
"anthropicApi": {
"id": "fK55jZdb6CaYNukq",
"name": "Anthropic account - test"
}
},
"typeVersion": 1.1
},
{
"id": "874f36ce-4862-4f15-988c-a5eb08d21594",
"name": "Moteur d'Orchestration IA",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
336,
584
],
"parameters": {
"options": {
"systemMessage": "=You are an elite event orchestration strategist. Generate a complete event plan + budget optimization in JSON.\n\n**Client:** {{ $json.clientName }}\n**Event:** {{ $json.eventType }} | {{ $json.attendees }} guests | {{ $json.eventDate }}\n**Budget:** ${{ $json.totalBudgeted }} (Target: ${{ $json.targetBudget }}) | Variance: ${{ $json.variance }} ({{ $json.variancePct }}%)\n\n**Current Spend:** Estimated ${{ $json.totalEstimated }} | Actual ${{ $json.totalActual }}\n\n**Categories:** {{ $json.categories.map(c => `${c.category}: $${c.budgeted} → $${c.estimated}`).join(', ') }}\n\n**Vendors Available:** {{ $json.vendors.map(v => v.vendorName).join(', ') }}\n\n**Deliver JSON with:**\n- planSummary\n- optimizedTimeline (phases with dates)\n- optimizedBudgetBreakdown (category, current, recommended, savings)\n- taskList (task, owner, due, priority)\n- vendorRecommendations\n- riskAnalysis (risk, probability, impact, mitigation)\n- totalSavings, finalCost, roiImprovement\n- autoApproval: true/false"
}
},
"typeVersion": 2.2
},
{
"id": "5a91a3b7-02ac-49cf-9536-37dc72355e20",
"name": "Analyser et Finaliser",
"type": "n8n-nodes-base.code",
"position": [
688,
584
],
"parameters": {
"jsCode": "const ai = $input.first().json.response || $input.first().json.text;\nconst base = $('Data Fusion Engine').first().json;\nlet plan; try { plan = JSON.parse(ai.match(/\\{[\\s\\S]*\\}/)[0]); } catch { plan = { planSummary: 'AI parse failed' }; }\n\nconst savings = (plan.optimizedBudgetBreakdown || []).reduce((s, c) => s + (c.savings || 0), 0);\nconst final = base.totalEstimated - savings;\nconst roi = ((savings / base.totalEstimated) * 100).toFixed(1);\nconst riskScore = (plan.riskAnalysis || []).reduce((s, r) => s + (r.probability === 'High' ? 3 : r.probability === 'Medium' ? 2 : 1) * (r.impact === 'High' ? 3 : 2 : 1), 0);\nconst riskLevel = riskScore > 12 ? 'High' : riskScore > 6 ? 'Medium' : 'Low';\nconst autoApprove = plan.autoApproval !== false && riskLevel !== 'High' && savings > 0;\n\nreturn { json: { ...base, ...plan, totalSavings: savings.toFixed(2), finalCost: final.toFixed(2), roiImprovement: roi, riskScore, riskLevel, autoApprove, orchestratedAt: new Date().toISOString() } };"
},
"typeVersion": 2
},
{
"id": "83fbc169-9531-4ba2-9abd-8bfb8367b9b2",
"name": "Sauvegarder le Plan Orchestré",
"type": "n8n-nodes-base.googleSheets",
"position": [
912,
392
],
"parameters": {
"columns": {
"value": {},
"schema": [],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "OrchestratedPlans"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.spreadsheetId }}"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "ScSS2KxGQULuPtdy",
"name": "Google Sheets- test"
}
},
"typeVersion": 4.5
},
{
"id": "3c2551b2-68ca-44c4-b60b-0c33b11c4f75",
"name": "Synchronisation d'Équipe",
"type": "n8n-nodes-base.slack",
"position": [
912,
584
],
"webhookId": "3e1216b9-e7dc-4123-87b9-6d5c20e2171d",
"parameters": {
"text": "=*{{ $json.eventId }}: {{ $json.clientName }} - {{ $json.eventType }}*\n\n*Status:* {{ $json.autoApprove ? 'AUTO-APPROVED' : 'REVIEW NEEDED' }}\n*Savings:* ${{ $json.totalSavings }} ({{ $json.roiImprovement }}% ROI)\n*Risk:* {{ $json.riskLevel }}\n\n{{ $json.autoApprove ? 'Proceeding to execution' : 'Team review required' }}\n\n[View Full Plan](https://docs.google.com/spreadsheets/d/{{ $json.spreadsheetId }})",
"select": "channel",
"channelId": "={{ $json.teamChannel }}",
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "MQ0fgwuS8AzfwFvy",
"name": "Slack account - test "
}
},
"typeVersion": 2.2
},
{
"id": "0cb88543-7089-43e2-87d5-090da88bf447",
"name": "Rapport Direction",
"type": "n8n-nodes-base.emailSend",
"position": [
912,
776
],
"webhookId": "49513419-b372-4ecc-88c0-c5c2612e429e",
"parameters": {
"options": {},
"subject": "={{ $json.autoApprove ? 'Approved' : 'Review' }}: {{ $json.eventId }} Plan & Budget",
"toEmail": "={{ $json.plannerEmail }}",
"fromEmail": "ai-orchestrator@company.com"
},
"credentials": {
"smtp": {
"id": "G1kyF8cSWTZ4vouN",
"name": "SMTP -test"
}
},
"typeVersion": 2.1
},
{
"id": "90e4cb72-7890-4f58-ab49-51702e273cc1",
"name": "Note Adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-592,
352
],
"parameters": {
"width": 160,
"height": 480,
"content": "Webhook (POST /event-orchestrate) or Daily @ 7 AM schedule"
},
"typeVersion": 1
},
{
"id": "f176b3a1-86c7-4d52-b928-3d64a7d7095d",
"name": "Note Adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
80,
368
],
"parameters": {
"width": 160,
"height": 480,
"content": "Aggregates totals, calculates variance, validates data"
},
"typeVersion": 1
},
{
"id": "795cbb12-04b2-4540-a0b0-af0876ae2383",
"name": "Note Adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
320,
368
],
"parameters": {
"width": 256,
"height": 480,
"content": "Sends structured prompt to Claude AI"
},
"typeVersion": 1
},
{
"id": "523ede3a-588a-45f2-bff7-05fc4dd0e8d0",
"name": "Note Adhésive3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-144,
384
],
"parameters": {
"width": 160,
"height": 480,
"content": "Merges all sources into unified dataset"
},
"typeVersion": 1
},
{
"id": "71f0b271-cb1e-4ead-92b9-76f86fffb7c2",
"name": "Note Adhésive4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-368,
-48
],
"parameters": {
"width": 160,
"height": 1104,
"content": "Pulls event metadata from ClientBriefs sheet\n\nFetches budgetAmount, estimatedCost, vendor\n\nLoads real-time spend from ActualCosts\n\nRetrieves pricing, ratings, and reliability"
},
"typeVersion": 1
},
{
"id": "abad8a6f-7029-4d85-8015-e4f332dc61ac",
"name": "Note Adhésive5",
"type": "n8n-nodes-base.stickyNote",
"position": [
656,
368
],
"parameters": {
"width": 160,
"height": 480,
"content": "Extracts JSON, computes savings, ROI, risk, sets auto-approve"
},
"typeVersion": 1
},
{
"id": "d016d1ad-268d-4c5e-94c0-cba1694e883b",
"name": "Note Adhésive6",
"type": "n8n-nodes-base.stickyNote",
"position": [
880,
80
],
"parameters": {
"width": 160,
"height": 848,
"content": "Writes full plan + KPIs to OrchestratedPlans\n\nPosts rich Slack message with status & link\n\nSends interactive HTML email to planner"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "0ab79068-95e9-4212-ba5c-bd692eaf49dc",
"connections": {
"23f81562-d7e7-45c7-8c52-d42750b1b68f": {
"main": [
[
{
"node": "c3ea1e44-1472-43e2-ac30-da2b19f17a6b",
"type": "main",
"index": 0
}
]
]
},
"033b6830-f7af-4a48-be42-02d4f568d5ab": {
"ai_languageModel": [
[
{
"node": "874f36ce-4862-4f15-988c-a5eb08d21594",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"5a91a3b7-02ac-49cf-9536-37dc72355e20": {
"main": [
[
{
"node": "83fbc169-9531-4ba2-9abd-8bfb8367b9b2",
"type": "main",
"index": 0
},
{
"node": "3c2551b2-68ca-44c4-b60b-0c33b11c4f75",
"type": "main",
"index": 0
},
{
"node": "0cb88543-7089-43e2-87d5-090da88bf447",
"type": "main",
"index": 0
}
]
]
},
"6545f261-99a3-4ca1-90d8-f5d514dcd68d": {
"main": [
[
{
"node": "23f81562-d7e7-45c7-8c52-d42750b1b68f",
"type": "main",
"index": 0
}
]
]
},
"65fa224a-7f5a-49d2-9ec6-5dd24dd86f50": {
"main": [
[
{
"node": "23f81562-d7e7-45c7-8c52-d42750b1b68f",
"type": "main",
"index": 0
}
]
]
},
"c3ea1e44-1472-43e2-ac30-da2b19f17a6b": {
"main": [
[
{
"node": "874f36ce-4862-4f15-988c-a5eb08d21594",
"type": "main",
"index": 0
}
]
]
},
"a3da1a86-2036-4134-a947-6adc55068f04": {
"main": [
[
{
"node": "65fa224a-7f5a-49d2-9ec6-5dd24dd86f50",
"type": "main",
"index": 0
},
{
"node": "3844dc0e-e84f-45ed-aa29-eb09ab4d7bcd",
"type": "main",
"index": 0
},
{
"node": "6545f261-99a3-4ca1-90d8-f5d514dcd68d",
"type": "main",
"index": 0
},
{
"node": "8c47bb9f-4969-4627-8888-bf64df202de8",
"type": "main",
"index": 0
}
]
]
},
"8c47bb9f-4969-4627-8888-bf64df202de8": {
"main": [
[
{
"node": "23f81562-d7e7-45c7-8c52-d42750b1b68f",
"type": "main",
"index": 1
}
]
]
},
"3844dc0e-e84f-45ed-aa29-eb09ab4d7bcd": {
"main": [
[
{
"node": "23f81562-d7e7-45c7-8c52-d42750b1b68f",
"type": "main",
"index": 1
}
]
]
},
"874f36ce-4862-4f15-988c-a5eb08d21594": {
"main": [
[
{
"node": "5a91a3b7-02ac-49cf-9536-37dc72355e20",
"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é - Gestion de projet, IA Multimodale
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