2026-10-07 · 原文发布日
把工地 WhatsApp 语音照片变成日报
WhatsApp 消息到达或每晚6点触发:先按 Sheets 的 Crew/Projects 识别 sender 与项目,未登记号码礼貌拒绝;语音用 OpenAI 转写、照片描述并存 Drive,文本直接保留,再抽取摘要、工时、材料、问题、安全等字段写入 Site log。需关注项即时 Gmail 告警,傍晚按项目汇总生成日报、寄出并写入 Daily reports。
原文要点
原模板说明:WhatsApp 消息到达或每晚6点触发;先用 Sheets 的 Crew/Projects 识别 sender 与项目,未登记号码礼貌拒绝并停止;登记后语音用 OpenAI 转写、照片描述并保存到 Drive,文本直接通过;再抽取 summary、category、hours、materials、issues、safety、attention 等字段写 Site log,回执 WhatsApp,需关注项立即 Gmail 告警。18点读当天 Site log 按项目分组,OpenAI 写每项目日报或无更新通知,Gmail 寄出并写 Daily reports;Projects Active=no 跳过。
这次做成什么
做一套“工地 WhatsApp 到日报”的独立练习:Webhook/定时双触发→号码与项目识别→语音/照片/文本分流→OpenAI 结构化→Sheets/Drive/Gmail 输出。不提供原工作流文件;Meta webhook、节点按钮和模型名需以原模板与账号后台核对。
准备什么
- WhatsApp Business Cloud API 测试号与 Meta 开发者应用,能把 webhook 指向 n8n 测试地址
- OpenAI API Key,可用于音频转写、图像描述和文本生成;需自行确认额度与费用
- Google Sheets 四标签页 Crew/Projects/Site log/Daily reports,Drive 测试文件夹,Gmail 测试账号
- 仅用合成号码、图片与语音,不收集真实工人个人信息
具体怎么做
建 Crew 与 Projects
Sheets 建四页。Crew 列 Phone,Name,Role,Active;Projects 列 Project_Name,Active,Report_emails;Site log 列 Time,Phone,Project,Summary,Category,Hours,Materials,Issues,Safety,Needs_Attention,Media_File_ID;Daily reports 列 Date,Project,Report_Text,Email_To。
接 WhatsApp 双入口
WhatsApp Trigger 收消息;另建 Schedule Trigger 每天18:00。入口后先查 Crew:Phone 不在或 Active=no,用 WhatsApp 回复“请先登记为班组成员”并 Stop;登记则查 Projects,文本含 #项目名 时优先匹配,否则用 sender 默认项目。
分流三类消息
Switch 按 message type:audio 调 OpenAI transcription 得文本;image 取 media URL,调 OpenAI 图片描述,并把原图存 Drive 文件夹返回 file id;text 原样保留。合并成 raw_text 与 media_ref。
抽取字段与告警
OpenAI 用下方提示词输出严格 JSON 写 Site log;Needs_Attention=yes 时 Gmail 立即发该项目 Report_emails。18点分支读今日 Site log,按 Project 分组,Active=no 跳过,无更新生成“未收到更新”提示,有更新生成中文日报,Gmail 寄出并写 Daily reports。
可直接复制的材料
现场更新抽取提示词
本站独立编写示例;在原模板中需核对其抽取提示词、字段名与所用 OpenAI 模型。
你是建筑工地日志结构化助手。只能使用 crew 报告的 raw_text 与 photo_description,不得发明数量、进度或事故。输出严格JSON:{"summary":"<=60字中文","category":"progress|material|issue|safety|other","hours":数字或null,"materials":["字符串"],"issues":["字符串"],"safety":"无|描述","needs_attention":"yes|no","confidence":0-1}。若信息不足,hours用null,needs_attention仅当issues或safety明确存在时为yes。输入:{"raw_text":"...","photo_description":"...","report_language":"zh"}Crew/Projects 合成 CSV
合成练习数据;邮箱用测试别名,电话号码为虚构。
Crew
Phone,Name,Role,Active
+8613800000001,李工,钢筋工,yes
+8613800000002,王工,木工,yes
Projects
Project_Name,Active,Report_emails
北站综合体,yes,pm-test@example.com
旧城改造,no,pm-test@example.comConfiguration 字段示例
本站示例配置;不是原模板文件,ID与时间需在节点中替换。
{"sheetUrl":"练习表URL_替换","driveFolderId":"Drive测试文件夹ID_替换","fallbackOfficeEmail":"office-test@example.com","reportLanguage":"zh","eveningReportTime":"18:00"}输入与输出示例
本站虚构演示,非原作者运行结果;未实际调用 WhatsApp/OpenAI。
输入
合成 WhatsApp:来自 +8613800000001 的语音转写为“北站综合体 三层钢筋绑扎完成约6小时,发现东侧临边防护缺一块,需要明天复核”,无照片;未登记号码 +8613999999999 同时发来文本。对应输出
登记号码写入 Site log 一行:Project=北站综合体, Summary=三层钢筋绑扎并发现临边防护缺口, Category=safety, Hours=6, Safety=东侧临边防护缺一块, Needs_Attention=yes;Gmail 立即告警到 pm-test@example.com;未登记号码只收到礼貌拒绝且不写日志。18点北站综合体日报含该安全项,旧城改造因 Active=no 跳过。做完检查这些
- 未登记 Phone 只收到 WhatsApp 礼貌拒绝,Site log/Drive/Gmail 均无新增
- audio/image/text 三路径最终都合并到同一 raw_text,image 另有 Drive file id
- 抽取 JSON 含 summary/category/hours/materials/issues/safety/needs_attention/confidence,空数量不为0而写null
- 18点分支只处理 Projects.Active=yes,按项目分组;无更新项目生成无更新通知
容易卡住的地方
- Meta webhook 订阅字段或验证 token 错配会导致 Trigger 无事件;测试号通常只能发给已登记收件人
- 语音/照片媒体 URL 可能短期有效,拉取与存 Drive 要在同一轮尽快完成
- OpenAI 图像描述不能当测量依据,提示词必须禁止编造方量与进度
- 把18点当成硬时限不稳妥:时区、队列延迟和 API 失败都可能推迟,需设重试与告警
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Create daily construction site reports from WhatsApp with OpenAI and Google
- 原作者
- Anna Cole
- 原始发布日期
- 2026-10-06T17:29:54.217Z
- 来源
- https://n8n.io/workflows/20556