Suite d'automatisation d'activités et de planification budgétaire IA

Avancé

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

Prérequis
  • 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
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "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
          }
        ]
      ]
    }
  }
}
Foire aux questions

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.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds20
Catégorie2
Types de nœuds9
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Auteur
Oneclick AI Squad

Oneclick AI Squad

@oneclick-ai

The 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.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34