name: dingtalk-cron-job description: "钉钉渠道专用定时提醒技能。触发场景:用户提到任何时间点提醒、某时间做某事、循环提醒(如'每隔X分钟提醒我'、'下午3点提醒我'、'10分钟后叫我')时,必须使用 cron job。" metadata: {"openclaw": {"always": true}}
钉钉定时提醒
当用户提到任何与时间点提醒相关的内容时,必须使用exec直接调用 openclaw cron add 创建定时任务。不要用OpenClaw 内置的 cron 工具。
触发场景
以下情况必须使用 cron job:
- "X点提醒我..."
- "X分钟/小时后提醒我..."
- "每隔X时间提醒我一次..."
- "明天/后天X点..."
- 任何涉及定时、延时、循环提醒的请求
命令模板
openclaw cron add \
--name "<根据对话生成的任务名>" \
--at "<时间>" \
--session isolated \
--message "直接输出以下内容(禁止调用工具):<具体提醒内容>" \
--announce \
--channel "clawdbot-dingtalk" \
--to "<用户的senderStaffId>"
参数规则(必须严格遵守)
| 参数 | 规则 | 说明 |
|---|---|---|
--name |
根据对话自动生成 | 简短描述任务,如"站立活动提醒"、"会议提醒" |
--at |
绝对时间需带时区 | 绝对时间用 ISO8601 且包含时区偏移或 Z,如 2026-02-02T14:30:00+08:00 / 2026-02-02T06:30:00Z;相对时间用 20m / 2h 等 |
--cron |
循环任务用此参数 | 配合 --tz "Asia/Shanghai" 使用 |
--session |
必须是 isolated |
不可用 main,否则消息可能丢失 |
--message |
必须以"直接输出以下内容"开头 | 见下方详细说明 |
--announce |
建议显式写出 | isolated 任务默认就是 announce 模式,但显式写出更明确意图 |
--channel |
必须是 clawdbot-dingtalk |
钉钉渠道固定值 |
--to |
单聊用 senderStaffId;群聊用 dingtalk:group:<cid...> |
群提醒见下方说明 |
--delete-after-run |
循环任务不要加 | --at 一次性任务默认自动删除,无需手动加 |
命令白名单(严格使用)
只允许使用以下命令做验证/排障,禁止自造变体:
openclaw cron run <job-id> --force --expect-final
openclaw cron runs --id <job-id> --limit 5
openclaw cron rm <job-id>
说明:
cron run只接受位置参数<job-id>,不要写--idcron runs必须写--id--expect-final用于等待最终回复,避免"看起来成功但无最终输出"
群聊提醒(本群/提醒所有人)
当用户说"在群里提醒大家/提醒本群"时,用群目标而不是用户 staffId:
--to "dingtalk:group:<cid...>"
示例:
openclaw cron add \
--name "群打卡提醒" \
--cron "0 17 * * *" \
--tz "Asia/Shanghai" \
--session isolated \
--message "直接输出以下内容(禁止调用工具):该下班打卡啦~" \
--announce \
--channel "clawdbot-dingtalk" \
--to "dingtalk:group:cidxxxxxxxx"
--announce 与 --deliver
--announce 和 --deliver 是同一功能的别名,--deliver 已弃用,请统一使用 --announce。它们的作用是把隔离任务输出投递到渠道/用户;不投递则只在内部/主会话可见。isolated 任务默认就是 announce 模式,但建议显式写出 --announce 以明确意图。
message 参数关键规则
核心理解:--message 的内容会作为 prompt 发给一个隔离的 AI session。该 session 的 纯文本输出 会被 announce 机制自动投递给用户的钉钉。AI 不需要也不应该调用任何工具(如 message)来发送消息。
错误写法 ❌
--message "提醒用户:起来活动一下"
执行时 AI 会误认为需要调用 message 工具主动发送,导致因缺少 target 参数而报错 "Action send requires a target."。
正确写法 ✅
--message "直接输出以下内容(禁止调用工具):该起来活动一下了!久坐对身体不好,请起身走动几分钟。"
message 句式模板(固定前缀 + 实际内容)
直接输出以下内容(禁止调用工具):<内容>直接生成一条关于<主题>的提醒并输出(禁止调用工具)
完整示例
一次性提醒(指定时间点)
用户说:"下午3点提醒我开会"
openclaw cron add \
--name "开会提醒" \
--at "2026-02-02T15:00:00+08:00" \
--session isolated \
--message "直接输出以下内容(禁止调用工具):下午3点的会议马上开始了,请准备参会。" \
--announce \
--channel "clawdbot-dingtalk" \
--to "02482523065424091871"
一次性提醒(相对时间)
用户说:"20分钟后提醒我喝水"
openclaw cron add \
--name "喝水提醒" \
--at "20m" \
--session isolated \
--message "直接输出以下内容(禁止调用工具):该喝水了!保持水分很重要。" \
--announce \
--channel "clawdbot-dingtalk" \
--to "manager9140"
循环提醒
用户说:"每2小时提醒我休息一下"
openclaw cron add \
--name "定时休息提醒" \
--cron "0 */2 * * *" \
--tz "Asia/Shanghai" \
--session isolated \
--message "直接输出以下内容(禁止调用工具):已经过去2小时了,该休息一下眼睛和身体。" \
--announce \
--channel "clawdbot-dingtalk" \
--to "manager9140"
每日固定时间提醒
用户说:"每天早上9点提醒我看日报"
openclaw cron add \
--name "日报提醒" \
--cron "0 9 * * *" \
--tz "Asia/Shanghai" \
--session isolated \
--message "直接输出以下内容(禁止调用工具):早上好!该查看今日日报了。" \
--announce \
--channel "clawdbot-dingtalk" \
--to "manager9140"
常见错误检查清单
创建任务前确认:
- 绝对时间带时区(或
--cron配合--tz "Asia/Shanghai") -
--session isolated不是 main -
--message以"直接输出以下内容(禁止调用工具)"开头,不要用"提醒用户"句式 - 使用了
--announce(显式声明投递意图) - 全局
cron.enabled未被关闭,且未设置OPENCLAW_SKIP_CRON=1 -
--channel是clawdbot-dingtalk -
--to是正确的 senderStaffId
创建后最小验收(必须执行)
创建任务成功后,必须立刻做两步验收:
- 强制触发一次并等待最终输出
openclaw cron run <job-id> --force --expect-final
- 查看最近运行记录(确认 run log 已写入)
openclaw cron runs --id <job-id> --limit 5
若两步任一步失败,不要宣称"已稳定定时发送"。必须明确告知用户当前仅完成"任务创建",调度执行仍待确认。
失败告警模板(固定句式)
当最小验收失败时,直接使用类似以下文案:
已完成任务创建,但本次强制触发/运行记录校验未通过。 这通常表示调度器尚未实际执行。 我已给出可复现命令:
openclaw cron run <job-id> --force --expect-final和openclaw cron runs --id <job-id> --limit 5。 在看到有效 run 记录前,不应视为"已稳定定时发送"。
调试命令(仅限白名单)
# 查看所有任务
openclaw cron list
# 立即测试任务(强制 + 等待 final)
openclaw cron run <job-id> --force --expect-final
# 查看运行记录
openclaw cron runs --id <job-id> --limit 5
# 删除任务
openclaw cron rm <job-id>