7.0 KiB
7.0 KiB
name, description
| name | description |
|---|---|
| scheduled-reminders | 创建/管理定时提醒(每周/每天/睡前等周期或一次性)并推送到钉钉或飞书。触发:帮我设提醒、每天X点提醒、每周提醒、推送到飞书。 |
scheduled-reminders
创建和管理杨轩的定时提醒:周期性(每周/每天)或一次性,默认推送钉钉,用户点名时改投飞书(见「投递通道」)。非生日类提醒走本 skill;生日提醒走 birthday-reminder skill。
触发场景
- 杨轩说「帮我设个提醒」「每天 X 点提醒我」「每周三提醒」「睡前提醒」等
- 需要查看/修改/删除已有提醒任务
核心规则(必须遵守)
所有提醒都是 OpenClaw cron 任务,统一:
- 投递只交给 delivery:payload 只输出文案(
--command 'echo "..."'),路由写在 delivery 参数上;默认钉钉:--announce --channel dingtalk-connector --to 0464031658857345。用户要求飞书时按「投递通道」换参数。 - 多频道下频道必须显式:本机已配 3 个频道(dingtalk-connector / feishu / openclaw-weixin),省略投递参数时
cron add直接失败:cron announce delivery requires an explicit channel when multiple channels are configured。要推送就照上面写全;不需要推送给人的内部维护任务加--no-deliver(实测结果delivery.mode=none),不要只把 flag 省掉。 - 禁止在命令里手动调
openclaw message send——CLI 的 message send 不认识dingtalk-connector(内置频道枚举无 DingTalk 插件名),会 exit 1 失败。 - 必须
--agent main:多 agent 环境下无 owner(agent-less)的 cron 任务会让调度器 nextWake 锁死,阻塞所有提醒。 - 时间参数:周期性用
--cron "<表达式>" --tz Asia/Shanghai;一次性用--at(不带时区按 UTC 处理,北京时间 = UTC+8)。
投递通道:钉钉(默认)/ 飞书
杨轩说「推送到飞书」时,只把 delivery 换掉:--announce --channel feishu --to <目标>。
- 飞书目标必须用 DM 会话 chat_id:
oc_8eecfa0e1cc185c1cb19b4f3950cbc52(杨轩的飞书私聊)。 - 不要用用户 open_id(
ou_28124d6721134f0e31d6122d30088418):2026-09-16 实测 cron 投递报Feishu send failed: Sending messages to users is temporarily unavailable.,判为 not-delivered;同一时刻改投上面的 chat_id 即刻成功。错误文案含「temporarily」,条件可能变化,但先用 chat_id 就不必试错。用conversations_list(channel="feishu")可复核 DM 目标。 - 换通道只动 delivery:
--agent main、时间、打卡机制等其余规则一律不变。 - 通了没有要实测,不要推断:可临时建一条一次性测试任务,用
automations run <jobId>立即跑一次,看state.lastDelivered/lastDeliveryError,验证完把测试任务删掉。
创建一条周期提醒
openclaw cron add "任务名" \
--cron "0 21 * * 2" --tz Asia/Shanghai \
--agent main --session isolated --announce \
--channel dingtalk-connector --to 0464031658857345 \
--wake now --display-name "任务名" \
--command 'echo "提醒文案"'
cron 星期数字:周日 = 0,周一 = 1 … 周六 = 6(容易记错,务必核对)。
写在脚本里时用 CLI 绝对路径:/home/yangxuan/.openclaw/tmp/agent-cli/openclaw(裸 openclaw 是同一目录下的 shim,只在 exec 的 PATH 里有效)。shell 助手/批量脚本若自行重设了 PATH,裸 openclaw 会报「未找到命令」(2026-09-16 实测);用绝对路径,或把该目录并入 PATH。
一次创建多条(批量)
多条同类提醒时,写一个 shell 助手函数把上面的标准 flag 包起来,再用循环调用(模板见 examples/batch-reminders.sh),比逐条手敲省大量往返。文案相同的提醒合并成变量复用,避免重复粘贴。
验证(必做)
创建后用 openclaw cron get <id> 逐条确认:
agentId=maindelivery.mode=announce,且delivery.channel/delivery.to就是本次要求的目标(钉钉:dingtalk-connector+0464031658857345;飞书:feishu+ chat_id)schedule.expr与下次触发nextRunAtMs正确
整库不应残留 message send 字样。
带打卡确认的提醒(用户要求「要打卡/要确认」时)
提醒发出后用户可能不回复,需要二次确认时,用「提醒 + 延后检查」两条任务:
- 提醒文案末尾加一句打卡要求:
完成后回我一句「打卡」✅ - 另建一条延后检查任务(如提醒 21:00、检查 22:30),payload 用
--message(agentTurn),先读会话再决定是否催:- 用
sessions_history读会话agent:main:dingtalk-connector:direct:0464031658857345当天消息 - 用户已在提醒时间后回复过关键词(如「打卡」)→ 回
NO_REPLY(不打扰) - 未回复 → 发一条温和催促
- 用
- 检查任务用与提醒相同的 delivery 参数(
--agent main、announce、dingtalk-connector)。
openclaw cron add "打卡检查" \
--cron "30 22 * * *" --tz Asia/Shanghai \
--agent main --session isolated --announce \
--channel dingtalk-connector --to 0464031658857345 \
--wake now \
--message '检查打卡:用 sessions_history 读会话 agent:main:dingtalk-connector:direct:0464031658857345 今天的消息;若用户在提醒时间后回复过「打卡」则回 NO_REPLY,否则发一条温和催促。'
盘点已有提醒(用户问「某提醒还在不在 / 是不是在钉钉」时)
automations list(includeDisabled: true)按name定位目标;返回已含schedule、effectiveAgentId、nextRunAt。- 对关心的每条
automations get <jobId>,确认agentId=main、delivery.mode=announce,并读实际delivery.channel/to回报它是投到钉钉还是飞书(不要默认钉钉)。 - 回报时给下次触发时间 + 上次投递结果(
state.lastDeliveryStatus=delivered才算真的发出去过)。
修改 / 删除
- 改文案/时间:
openclaw cron edit <id> --command '...'(或--cron/--message),也可用automations工具的update <jobId> - 删除:
openclaw cron rm <id>
临时改一次(某晚停用某产品、出门在外等)
只改周期任务的 payload 就完事,会一直错下去;要配一条恢复任务:
- 用
automations update <jobId>(或openclaw cron edit <id> --command '...')换成当晚版本,回读automations get <jobId>确认文案已生效。 - 同一步里建一条一次性任务,在次日合适时间把 payload 改回标准版本。它跑在 isolated 会话、没有本次对话的记忆,所以 message 必须写全 jobId 与目标文案原文,并注明改完回读校验、成功即回
NO_REPLY。 - 恢复任务不需要给人看:按核心规则加
--no-deliver。
参考
- 生日提醒(农历换算、每年重设、一次性任务):见
birthday-reminderskill - 完整钉钉推送规范:
workspace/TOOLS.md「📢 钉钉推送统一规范」