Token导航 LogoToken导航TokenDH.com
研究检索需要联网github未标认证来源可访问许可证需确认审计提醒

n8n-workflow-automationn8n 工作流程自动化

Agent Skill

用于辅助数据整理、表格处理、CSV/Excel 分析、指标计算和图表准备。它适合让 Agent 清洗字段、汇总数据、发现异常、生成统计口径或把分析结果转成可读说明。使用时需要确认数据来源、字段含义和时间范围,避免把样本数据当全量事实;涉及敏感数据、导出文件或批量写回时,应先确认权限和脱敏边界。

总安装

423

周安装

18

GitHub Stars

113

下载量

148
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:n8n-workflow-automation(n8n 工作流程自动化)
来源仓库:https://github.com/datadrivenconstruction/ddc_skills_for_ai_agents_in_construction
仓库路径:skills/n8n-workflow-automation
安装命令:
npx skills add https://github.com/datadrivenconstruction/ddc_skills_for_ai_agents_in_construction --skill n8n-workflow-automation
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/datadrivenconstruction/ddc_skills_for_ai_agents_in_construction --skill n8n-workflow-automation

简介

使用 n8n 可视化工具构建建筑业务流程自动化。

  • 桥接 BIM 模型与成本估算环节。
  • 减少重复任务与人工干预需求。适用宿主包括 Codex、Claude、Cursor、Gemini CLI,接入前应确认版本、权限和运行环境要求。
  • 部署前应在隔离环境测试工作流逻辑。
  • n8n-workflow-automation 属于研究检索类 Skill,可作为该场景下的辅助能力补充。

SKILL.md

n8n Workflow Automation for Construction

Overview

This skill implements visual workflow automation for construction processes using n8n. Automate repetitive tasks, integrate systems, and build PROJECT TO BUDGET pipelines without extensive programming.

Inspired by DDC Methodology - Automating the bridge between BIM models and cost estimation.

"Автоматизация процесса 'от проекта к смете' позволяет сократить время на подготовку бюджета с недель до часов." — DDC LinkedIn Post

Quick Start

n8n Installation

# Using Docker (recommended)
docker run -it --rm \
  --name n8n \
  -p 5678:5678 \
  -v ~/.n8n:/home/node/.n8n \
  n8nio/n8n

# Using npm
npm install n8n -g
n8n start

# Access at: http://localhost:5678

Construction Workflow Examples

1. Revit to Budget Pipeline

{
  "name": "Revit to Budget Automation",
  "nodes": [
    {
      "name": "Watch Revit Export Folder",
      "type": "n8n-nodes-base.localFileTrigger",
      "parameters": {
        "path": "/data/revit_exports",
        "events": ["add"],
        "fileExtension": ".xlsx"
      }
    },
    {
      "name": "Read Excel Data",
      "type": "n8n-nodes-base.readWriteFile",
      "parameters": {
        "operation": "read",
        "filePath": "={{ $json.fileName }}"
      }
    },
    {
      "name": "Parse BIM Elements",
      "type": "n8n-nodes-base.code",
      "parameters": {
        "language": "python",
        "code": "import pandas as pd\nimport json\n\ndf = pd.read_excel(items[0].binary.data)\n\nelements = df.to_dict('records')\n\nreturn [{'json': {'elements': elements, 'count': len(elements)}}]"
      }
    },
    {
      "name": "Match to Unit Prices",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "http://api.construction-prices.com/match",
        "method": "POST",
        "body": "={{ JSON.stringify($json.elements) }}"
      }
    },
    {
      "name": "Calculate Costs",
      "type": "n8n-nodes-base.code",
      "parameters": {
        "language": "javascript",
        "code": "const elements = items[0].json.elements;\n\nlet totalCost = 0;\nconst costBreakdown = [];\n\nfor (const elem of elements) {\n  const cost = elem.quantity * elem.unit_price;\n  totalCost += cost;\n  costBreakdown.push({\n    category: elem.category,\n    quantity: elem.quantity,\n    unit_price: elem.unit_price,\n    total: cost\n  });\n}\n\nreturn [{\n  json: {\n    total_cost: totalCost,\n    breakdown: costBreakdown\n  }\n}];"
      }
    },
    {
      "name": "Generate Report",
      "type": "n8n-nodes-base.spreadsheetFile",
      "parameters": {
        "operation": "create",
        "fileName": "cost_estimate_{{ $now.format('yyyy-MM-dd') }}.xlsx"
      }
    },
    {
      "name": "Send Email Notification",
      "type": "n8n-nodes-base.emailSend",
      "parameters": {
        "to": "project-team@company.com",
        "subject": "New Cost Estimate Generated",
        "text": "Total estimate: ${{ $json.total_cost }}"
      }
    }
  ]
}

2. Daily Project Report Automation

{
  "name": "Daily Project Report",
  "nodes": [
    {
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.cron",
      "parameters": {
        "cronExpression": "0 6 * * 1-5"
      }
    },
    {
      "name": "Fetch Project Data",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "{{ $env.PROJECT_API }}/status",
        "method": "GET"
      }
    },
    {
      "name": "Fetch Weather Data",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "https://api.openweathermap.org/data/2.5/weather",
        "qs": {
          "q": "{{ $json.project_location }}",
          "appid": "{{ $env.WEATHER_API_KEY }}"
        }
      }
    },
    {
      "name": "Generate Report",
      "type": "n8n-nodes-base.code",
      "parameters": {
        "language": "javascript",
        "code": "const project = items[0].json;\nconst weather = items[1].json;\n\nconst report = {\n  date: new Date().toISOString().split('T')[0],\n  project_name: project.name,\n  progress: project.progress_pct,\n  weather: {\n    condition: weather.weather[0].main,\n    temp: Math.round(weather.main.temp - 273.15)\n  },\n  tasks_today: project.scheduled_tasks,\n  blockers: project.blockers || []\n};\n\nreturn [{ json: report }];"
      }
    },
    {
      "name": "Post to Slack",
      "type": "n8n-nodes-base.slack",
      "parameters": {
        "channel": "#project-updates",
        "text": "📊 Daily Report - {{ $json.project_name }}\n\nProgress: {{ $json.progress }}%\n🌡️ Weather: {{ $json.weather.condition }} ({{ $json.weather.temp }}°C)\n\nToday's Tasks:\n{{ $json.tasks_today.join('\\n') }}"
      }
    }
  ]
}

3. BIM Model Change Detection

{
  "name": "BIM Change Detection",
  "nodes": [
    {
      "name": "Watch IFC Folder",
      "type": "n8n-nodes-base.localFileTrigger",
      "parameters": {
        "path": "/models",
        "events": ["change"],
        "fileExtension": ".ifc"
      }
    },
    {
      "name": "Extract Model Data",
      "type": "n8n-nodes-base.executeCommand",
      "parameters": {
        "command": "python /scripts/extract_ifc.py {{ $json.fileName }}"
      }
    },
    {
      "name": "Compare with Previous",
      "type": "n8n-nodes-base.code",
      "parameters": {
        "language": "python",
        "code": "import json\n\ncurrent = json.loads(items[0].json.output)\nprevious = load_previous_version()\n\nchanges = {\n  'added': [],\n  'modified': [],\n  'deleted': []\n}\n\n# Compare logic\nfor elem in current:\n  if elem['id'] not in previous:\n    changes['added'].append(elem)\n  elif elem != previous[elem['id']]:\n    changes['modified'].append(elem)\n\nfor elem_id in previous:\n  if elem_id not in [e['id'] for e in current]:\n    changes['deleted'].append(previous[elem_id])\n\nreturn [{'json': changes}]"
      }
    },
    {
      "name": "Update Database",
      "type": "n8n-nodes-base.postgres",
      "parameters": {
        "operation": "executeQuery",
        "query": "INSERT INTO model_changes (timestamp, changes) VALUES (NOW(), '{{ JSON.stringify($json) }}')"
      }
    },
    {
      "name": "Notify Team",
      "type": "n8n-nodes-base.microsoftTeams",
      "parameters": {
        "message": "🔔 Model Updated\n\n+{{ $json.added.length }} elements added\n📝 {{ $json.modified.length }} elements modified\n-{{ $json.deleted.length }} elements deleted"
      }
    }
  ]
}

Common Workflow Patterns

Data Extraction Pattern

// n8n Code Node - Extract BIM Quantities
const xlsx = require('xlsx');

// Read uploaded file
const workbook = xlsx.read(items[0].binary.data, { type: 'buffer' });
const sheetName = workbook.SheetNames[0];
const data = xlsx.utils.sheet_to_json(workbook.Sheets[sheetName]);

// Process BIM elements
const quantities = {};
for (const row of data) {
  const category = row['Category'] || 'Unknown';
  const volume = parseFloat(row['Volume']) || 0;

  if (!quantities[category]) {
    quantities[category] = { count: 0, volume: 0 };
  }
  quantities[category].count++;
  quantities[category].volume += volume;
}

return [{ json: { quantities, total_elements: data.length } }];

Cost Matching Pattern

// n8n Code Node - Match elements to unit prices
const elements = items[0].json.elements;
const priceDatabase = $env.PRICE_DATABASE;

const matched = [];

for (const elem of elements) {
  // Fuzzy match description to price items
  const match = await $http.post(`${priceDatabase}/search`, {
    query: elem.description,
    category: elem.category
  });

  matched.push({
    ...elem,
    matched_item: match.data.best_match,
    unit_price: match.data.unit_price,
    confidence: match.data.confidence
  });
}

return [{ json: { matched_elements: matched } }];

Report Generation Pattern

// n8n Code Node - Generate PDF Report
const PDFDocument = require('pdfkit');

const doc = new PDFDocument();
const buffers = [];

doc.on('data', buffers.push.bind(buffers));

// Header
doc.fontSize(20).text('Cost Estimate Report', { align: 'center' });
doc.moveDown();

// Project Info
doc.fontSize(12).text(`Project: ${items[0].json.project_name}`);
doc.text(`Date: ${new Date().toLocaleDateString()}`);
doc.moveDown();

// Cost Summary
doc.fontSize(14).text('Cost Summary', { underline: true });
for (const [category, cost] of Object.entries(items[0].json.costs)) {
  doc.fontSize(10).text(`${category}: $${cost.toLocaleString()}`);
}

doc.end();

return new Promise(resolve => {
  doc.on('end', () => {
    resolve([{
      json: { success: true },
      binary: {
        data: Buffer.concat(buffers).toString('base64'),
        fileName: 'cost_report.pdf',
        mimeType: 'application/pdf'
      }
    }]);
  });
});

Integration Nodes

Useful n8n Nodes for Construction

Data Sources:
  - Google Sheets: Project tracking, cost databases
  - Airtable: Element databases, issue tracking
  - PostgreSQL: BIM databases, project data
  - HTTP Request: API integrations

File Processing:
  - Read/Write File: Excel, CSV, JSON
  - Execute Command: Python scripts, CLI tools
  - Code: Custom processing logic

Communication:
  - Slack: Team notifications
  - Microsoft Teams: Project updates
  - Email: Reports, alerts
  - Telegram: Mobile notifications

Cloud Storage:
  - AWS S3: Model storage
  - Google Drive: Document sharing
  - Dropbox: File sync

Workflow Templates

Template: QTO to Excel

{
  "workflow": "QTO Extraction",
  "trigger": "Manual/Webhook",
  "steps": [
    "Receive IFC file",
    "Extract quantities (Python/IfcOpenShell)",
    "Group by category",
    "Add unit prices",
    "Calculate totals",
    "Generate Excel report",
    "Upload to cloud storage",
    "Send notification"
  ]
}

Template: Daily Status Collection

{
  "workflow": "Daily Status",
  "trigger": "Cron (6:00 AM)",
  "steps": [
    "Fetch project status from API",
    "Get weather forecast",
    "Check scheduled tasks",
    "Compile daily report",
    "Post to Slack/Teams",
    "Email to stakeholders"
  ]
}

Best Practices

1. **Error Handling**
   - Always add error branches
   - Log failures to database
   - Send alerts on critical failures

2. **Data Validation**
   - Validate input data format
   - Check for required fields
   - Handle missing values gracefully

3. **Performance**
   - Use batch processing for large datasets
   - Implement pagination for API calls
   - Cache frequently used data

4. **Security**
   - Store credentials in environment variables
   - Use encryption for sensitive data
   - Implement access controls

Quick Reference

Workflow TypeTriggerCommon Nodes
File ProcessingFile TriggerCode, HTTP, Spreadsheet
Scheduled ReportsCronHTTP, Code, Email
Data SyncWebhookDatabase, API, Code
NotificationsVariousSlack, Teams, Email

Resources

Next Steps

  • See etl-pipeline for code-based data pipelines
  • See llm-data-automation for AI-powered automation
  • See vector-search for intelligent document search

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

35.06%
按下载量换算52

Claude

29.3%
按下载量换算43

Cursor

19.77%
按下载量换算29

Gemini CLI

9.45%
按下载量换算14

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

可疑

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在 warning/failed 结果,不能写成本站确认安全。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills