踩坑无数!终于搞定 OpenClaw 定时任务推送
最近在用 OpenClaw 搭建自动化推送系统,本以为配置个定时任务很简单,没想到踩了一堆坑。折腾了好几天,终于搞明白正确的配置方式,赶紧来分享一下。
坑一:system-event 模式不靠谱
最开始按照直觉配置了定时任务:
--session main \
--system-event "请执行脚本并发送内容"
结果令人崩溃:有时候只发摘要,有时候干脆什么都不发!
后来才明白:system-event 模式下,智能体收到事件后只是"参考"一下,并不会主动把脚本的输出发送给用户。
坑二:isolated + announce 也有问题
改成 isolated 模式后,以为这下稳了:
--session isolated \
--message "执行推送脚本" \
--announce
结果发现默认发送的是摘要,不是完整内容。而且如果智能体理解不到位,还可能完全不执行发送操作。
坑三:多脚本共用状态 = 灾难
最崩溃的是内容重复和跳节问题。原因很简单:
旧脚本和新脚本指向不同目录 两者更新同一个状态文件 结果:状态混乱,内容错乱
正确的配置方案
1. 推送脚本自己负责发送
在脚本内部直接调用 openclaw message send:
import subprocess
def send_message(text):
"""直接发送消息到指定渠道"""
subprocess.run([
'openclaw', 'message', 'send',
'--channel', 'qqbot', # 或其他渠道
'--target', '目标ID',
'--message', text
])
这样脚本自己掌控发送逻辑,不依赖定时任务框架转发。
2. 定时任务用 agentTurn 模式
openclaw cron create \
--name "每日定时推送" \
--cron "0 7,9,11,13,15,17,19,21 * * *" \
--tz "Asia/Shanghai" \
--session isolated \
--message "python3 /path/to/push_script.py" \
--wake now
关键点:
使用 agentTurn而不是system-event使用 isolated会话避免污染主会话--wake now确保到点就执行
3. 统一管理内容和状态
只用一个推送脚本 内容放在固定目录不随意改动 状态文件专人专用,避免冲突
配置对比总结
| 场景 | 错误方式 | 正确方式 |
|---|---|---|
| 触发类型 | system-event | agentTurn |
| 会话模式 | main | isolated |
| 发送逻辑 | 依赖框架转发 | 脚本自己发 |
| 状态管理 | 多脚本混用 | 统一脚本 |
现在的效果
✅ 定时任务稳定运行
✅ 每次推送内容完整无误
✅ 状态管理清晰不混乱
✅ 支持文字+图片混合推送
写在最后
配置自动化任务真的需要耐心和细心。关键是要理解各个参数的真正含义,不能想当然。希望我的经验能帮到你,少走一些弯路。
如果你也在用 OpenClaw 做定时推送,欢迎在评论区交流心得!
本文分享个人配置经验,希望能对你有所帮助
夜雨聆风