AI アクティビティとバジェットオーケストレーション套件
これはProject Management, Multimodal AI分野の自動化ワークフローで、20個のノードを含みます。主にCode, Merge, Slack, Webhook, EmailSendなどのノードを使用。 イベント企画と予算最適化の自動化を実現:Claude AI、Google Sheets
- •Slack Bot Token または Webhook URL
- •HTTP Webhookエンドポイント(n8nが自動生成)
- •Google Sheets API認証情報
- •Anthropic API Key
{
"id": "KjnG4Wn0rWx8YM2N",
"meta": {
"instanceId": "dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281",
"templateCredsSetupCompleted": true
},
"name": "AI Event & Budget Orchestration Suite",
"tags": [],
"nodes": [
{
"id": "a3da1a86-2036-4134-a947-6adc55068f04",
"name": "オーケストレーショントリガー",
"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": "クライアントブリーフを読込",
"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": "予算見積を読込",
"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": "実績コストを読込",
"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": "ベンダーデータベースを読込",
"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": "全データ統合",
"type": "n8n-nodes-base.merge",
"position": [
-112,
584
],
"parameters": {
"mode": "mergeByPosition"
},
"typeVersion": 3
},
{
"id": "c3ea1e44-1472-43e2-ac30-da2b19f17a6b",
"name": "データ融合エンジン",
"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コア",
"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": "AIオーケストレーションエンジン",
"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": "解析・最終化",
"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": "オーケストレーション計画を保存",
"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": "チーム同期",
"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": "エグゼクティブレポート",
"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": "付箋",
"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": "付箋1",
"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": "付箋2",
"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": "付箋3",
"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": "付箋4",
"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": "付箋5",
"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": "付箋6",
"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
}
]
]
}
}
}このワークフローの使い方は?
上記の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.
このワークフローを共有