关于 n8n-daily-report
用于自动生成建筑工地日报的 n8n 工作流。它收集现场数据,处理天气、劳动力和照片信息,生成格式化报告并通过电子邮件分发。
主要功能
- 01定时或 Webhook 触发
- 02从多个来源收集现场数据
- 03处理天气、劳动力和照片
- 04生成 PDF 报告
- 05通过电子邮件分发报告
适用场景
- 01汇总每日建筑现场数据
- 02生成格式化的每日 PDF 报告
- 03通过电子邮件发送报告
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ datadrivenconstruction/ ddc_skills_for_ai_agents_in_construction --skill n8n-daily-report安装后在 Claude Code 中输入/n8n-daily-report确认已加载。
附带文件claw.jsoninstructions.md
详细介绍
n8n 每日报告自动化
业务案例
每日报告至关重要,但耗时费力。此 n8n 工作流可自动从多个来源收集现场数据,并生成格式化的每日报告。
工作流概述
[Site Data Sources] → [n8n Webhook] → [Data Processing] → [Report Generation] → [Distribution]
n8n 工作流配置
1. 触发节点:计划任务 + Webhook
{
"nodes": [
{
"name": "Daily Schedule",
"type": "n8n-nodes-base.scheduleTrigger",
"parameters": {
"rule": {
"interval": [{"field": "cronExpression", "expression": "0 17 * * 1-5"}]
}
}
},
{
"name": "Webhook Input",
"type": "n8n-nodes-base.webhook",
"parameters": {
"httpMethod": "POST",
"path": "daily-report-data"
}
}
]
}
2. 数据收集节点
{
"nodes": [
{
"name": "Get Weather Data",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "https://api.openweathermap.org/data/2.5/weather",
"qs": {
"lat": "={{$json.site_lat}}",
"lon": "={{$json.site_lon}}",
"appid": "={{$env.WEATHER_API_KEY}}"
}
}
},
{
"name": "Get Site Photos",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "={{$env.PROCORE_API}}/projects/{{$json.project_id}}/images",
"authentication": "oAuth2"
}
},
{
"name": "Get Labor Data",
"type": "n8n-nodes-base.spreadsheetFile",
"parameters": {
"operation": "read",
"fileFormat": "xlsx"
}
}
]
}
3. 数据处理
{
"name": "Process Report Data",
"type": "n8n-nodes-base.code",
"parameters": {
"jsCode": "const items = $input.all();\n\nconst weather = items[0].json;\nconst photos = items[1].json;\nconst labor = items[2].json;\n\nconst report = {\n date: new Date().toISOString().split('T')[0],\n project: $('Webhook Input').first().json.project_name,\n weather: {\n condition: weather.weather[0].main,\n temp_high: Math.round(weather.main.temp_max - 273.15),\n temp_low: Math.round(weather.main.temp_min - 273.15)\n },\n labor_summary: {\n total_workers: labor.reduce((sum, l) => sum + l.workers, 0),\n total_hours: labor.reduce((sum, l) => sum + l.hours, 0)\n },\n photo_count: photos.length\n};\n\nreturn [{json: report}];"
}
}
4. 报告生成
{
"name": "Generate PDF Report",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "POST",
"url": "={{$env.PDF_SERVICE_URL}}/generate",
"body": {
"template": "daily_report",
"data": "={{$json}}"
}
}
}
5. 分发
{
"nodes": [
{
"name": "Send Email",
"type": "n8n-nodes-base.emailSend",
"parameters": {
"toEmail": "={{$json.distribution_list}}",
"subject": "Daily Report - {{$json.project}} - {{$json.date}}",
"attachments": "={{$node['Generate PDF Report'].json.file}}"
}
},
{
"name": "Upload to SharePoint",
"type": "n8n-nodes-base.microsoftSharePoint",
"parameters": {
"operation": "upload",
"siteId": "={{$env.SHAREPOINT_SITE}}",
"folderId": "/Daily Reports/{{$json.date}}"
}
}
]
}
Python 辅助函数
import requests
from datetime import date
def trigger_daily_report(project_data: dict, webhook_url: str):
"""Trigger n8n daily report workflow."""
payload = {
"project_id": project_data['id'],
"project_name": project_data['name'],
"site_lat": project_data['latitude'],
"site_lon": project_data['longitude'],
"distribution_list": project_data['stakeholder_emails']
}
response = requests.post(webhook_url, json=payload)
return response.status_code == 200
def format_labor_data(labor_entries: list) -> list:
"""Format labor data for n8n processing."""
formatted = []
for entry in labor_entries:
formatted.append({
'trade': entry['trade'],
'company': entry['company'],
'workers': entry['worker_count'],
'hours': entry['total_hours'],
'activities': entry.get('activities', [])
})
return formatted
快速开始
- 将工作流导入 n8n
- 配置环境变量:
WEATHER_API_KEYPROCORE_APIPDF_SERVICE_URLSHAREPOINT_SITE
- 将计划任务触发器设置为所需时间
- 配置电子邮件分发列表
资源
- n8n 文档:https://docs.n8n.io
- DDC 图书:第 4.2 章 - 工作流自动化
评论
支持 Markdown