1. 为什么我决定把日报周报交给 OpenClaw
每天下午五点半,我都要重复一套固定动作:打开 CRM 导出成交数据,翻 Excel 核对回款,再去聊天记录里找当天确认的订单,最后拼成一份日报发到群里。这套流程我掐过表,平均 42 分钟,周五做周报更久,接近一个半小时。最要命的不是慢,是容易错——有一次漏算了一笔退款,日报数字虚高,第二天被财务追着问。
OpenClaw 是一个可以本地运行、通过配置文件驱动的自动化代理工具。它能按你定义的字段去抓取多个来源的数据,套用计算规则,再按模板生成日报或周报,最后定时推送到指定渠道。适合谁?适合每天要交报表、数据来源分散在 CRM、Excel、业务后台和聊天记录里的运营、销售和支持岗。这篇教程聚焦落地配置:从 settings.json 骨架,到统一 Key 和 API 通道接入,再到定时汇总与推送的验证,目标是让你一次跑通,把每天那 40 分钟省下来。
我试过只配一个数据源就上线,结果第一版报表数字就偏了。所以下面每一步我都会把「为什么要这么写」讲清楚,你照着改自己的字段就行。
2. 前置准备:TaoToken 统一 Key 与 API 通道
OpenClaw 本身负责调度和抓取,但它在做字段理解、口径归一和模板填充时,需要调用大模型能力。这里用 TaoToken 做统一入口,好处是一个 Key 走通所有模型调用,不用在多个平台之间来回切换配置。
你需要先拿到两样东西:一个 API Key,以及确认接入地址。接入地址用https://taotoken.net/api,Key 在控制台的 API Keys 页面创建。
创建 Key 的入口在这里:
- 控制台:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=openclaw_daily_report
- API Keys 管理:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=openclaw_daily_report
注意:Key 只显示一次,创建后立刻复制到你的环境变量或配置文件里,别直接提交到 Git 仓库。
如果你后面要做长期编码类或 Agent 类的自动化任务,可以了解 Coding Plan;如果只是想先验证模型能不能正确理解你的字段口径,可以先用模型对话页面测一轮:
- Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=openclaw_daily_report
- 模型对话:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=openclaw_daily_report
接入文档在这里,配置字段含义以文档为准:
- 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=openclaw_daily_report
拿到 Key 之后,先写进环境变量,避免明文散落在配置里:
export TAOTOKEN_API_KEY="sk-你的key" export TAOTOKEN_BASE_URL="https://taotoken.net/api"Windows 下用 PowerShell:
$env:TAOTOKEN_API_KEY="sk-你的key" $env:TAOTOKEN_BASE_URL="https://taotoken.net/api"这一步做完,OpenClaw 的模型调用通道就通了。接下来才是真正的配置文件。
3. 可复制配置:settings.json 骨架与字段口径
OpenClaw 的核心是settings.json。我把它拆成四块:模型通道、数据源、计算规则、模板与推送。下面这份骨架你可以直接复制,把里面的字段换成自己的。
{ "model": { "provider": "taotoken", "base_url": "https://taotoken.net/api", "api_key_env": "TAOTOKEN_API_KEY", "model_name": "claude-sonnet", "timeout_seconds": 60 }, "sources": [ { "name": "crm_deals", "type": "http", "endpoint": "https://your-crm.example.com/api/deals", "auth_env": "CRM_TOKEN", "fields": ["deal_id", "amount", "status", "paid_at", "refund_amount"] }, { "name": "excel_repay", "type": "file", "path": "./data/repay.xlsx", "sheet": "Sheet1", "fields": ["order_no", "repay_amount", "repay_date"] }, { "name": "chat_orders", "type": "file", "path": "./data/chat_export.txt", "fields": ["order_no", "confirm_amount", "confirm_time"] } ], "rules": { "revenue": "sum(paid_amount) - sum(refund_amount)", "exclude_status": ["unpaid", "cancelled"], "dedup_key": "order_no" }, "template": { "path": "./templates/daily.md", "output_dir": "./reports" }, "schedule": [ { "cron": "30 17 * * 1-5", "task": "daily_report" }, { "cron": "0 18 * * 5", "task": "weekly_report" } ], "push": { "channel": "wecom", "webhook_env": "WECOM_WEBHOOK", "retry": { "times": 3, "interval_seconds": 120 } } }几个关键点展开说。
数据源一定要精确到字段。我第一版只写了"name": "crm",没列字段,结果它把未付款订单也算进成交额。后来我把每个来源的字段列全,抓取准确率立刻上来了。fields数组里写的是你真正要用的列,别偷懒。
计算规则的边界条件必须写死。revenue这条我改过好几版,最终定成「已付款减退款,不计未付款订单」。exclude_status和dedup_key就是防止重复计算和脏数据。口径不清,数字天天对不上,这是我最深的教训。
模板用你自己平时在用的那份。把./templates/daily.md换成你的日报模板,占位符用{{revenue}}、{{deal_count}}这种,OpenClaw 会填充。
定时任务用 cron 表达式。30 17 * * 1-5表示周一到周五 17:30 生成日报,0 18 * * 5表示周五 18:00 生成周报。推送渠道我用的企业微信 webhook,retry里配了失败重试三次、间隔两分钟。
提示:
api_key_env和webhook_env都指向环境变量名,不写明文,这样配置文件可以安全地放进版本管理。
4. 验证请求:跑通一次日报生成
配置写完别急着设定时,先手动跑一次,确认数据抓取、计算和模板填充都对。
第一步,验证模型通道是否通。用 curl 打一次接口:
curl -X POST "$TAOTOKEN_BASE_URL/v1/messages" \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet", "max_tokens": 128, "messages": [{"role": "user", "content": "回复 ok"}] }'返回里有正常内容,说明 Key 和地址没问题。如果报 401,检查 Key 是否复制完整;报 404,检查base_url是不是https://taotoken.net/api。
第二步,手动触发一次日报任务:
openclaw run --task daily_report --config ./settings.json --dry-run--dry-run会走完整流程但不推送,方便你核对数字。输出里会打印每个数据源抓到的行数、计算后的revenue、以及生成的报告路径。
第三步,打开./reports下生成的 md 文件,对照你的原始数据核一遍。重点看三个地方:成交额是否扣了退款、未付款订单是否被排除、重复订单是否去重。我一般会拿昨天的数据手工算一遍,和报告对得上,才放心开定时。
第四步,去掉--dry-run正式跑一次,确认企业微信能收到推送:
openclaw run --task daily_report --config ./settings.json收到消息、格式正确,这条链路就算通了。周报同理,把--task换成weekly_report。
5. 本篇常见错排查
配的过程中我踩过几个坑,列出来帮你省时间。
报错source crm_deals returned 0 rows。八成是endpoint或auth_env不对。先用 curl 单独打一次那个接口,确认能拿到数据,再回头看配置。字段名大小写也要和接口返回一致。
数字对不上,成交额偏高。检查exclude_status有没有包含unpaid,以及dedup_key是否生效。我遇到过聊天记录和 CRM 里同一笔订单被算两次,就是没去重。
定时任务不触发。cron 表达式是五段式,别写成六段。另外确认 OpenClaw 的调度进程在后台常驻,openclaw schedule --config ./settings.json要单独跑着。
推送失败但没有报错。企业微信 webhook 有频率限制,retry配了重试但间隔太短也会被限。把interval_seconds调到 120 以上。另外 webhook 地址失效也会静默失败,建议加一个桌面提醒兜底。
模型调用超时。timeout_seconds默认 60,数据量大时可以调到 120。如果频繁超时,检查网络到https://taotoken.net/api是否稳定。
注意:任何一次改完配置,都先用
--dry-run验证,别直接上定时。静默漏数据比报错更麻烦。
6. 把「写报表」变成「确认报表」
整套配下来,我的日常从「写报表的人」变成了「确认报表的人」。17:30 报告自动生成,我花两分钟扫一眼数字,没问题就让它推送。省下的 40 分钟,够我喝杯咖啡再想想更值钱的事。
如果你还想把这套自动化接到更长的编码或 Agent 工作流里,可以看 Coding Plan;日常调试字段口径时,模型对话页面能快速验证模型理解得对不对;配置过程中遇到接入问题,直接翻接入文档最省事。
- 模型对话:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=openclaw_daily_report
- Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=openclaw_daily_report
- 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=openclaw_daily_report
- API Keys:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=openclaw_daily_report
最后一句实在话:别急着抄我的配置,先把你自己的数据口径理清楚。字段指到哪、边界怎么定、重复怎么去,这三件事想明白了,配置只是十分钟的事。