飞书

排查三个原因:

  • 明确要求AI使用内置cron创建任务,写在你的AGENTS文件里,不然默认用CLI方式。
  • channels.feishu.allowFrom 需要配上你的open_id。(这个规则很迷,用的是配对模式,但不知道为啥还是校验了)
  • 使用CLI需要带上token参数

钉钉

排查一个原因:

  • 明确要求AI使用内置cron创建任务,写在你的AGENTS文件里,不然默认用CLI方式。
  • 使用CLI需要带上token参数

AI自动整理

这是一个分隔线,下面的内容由我的龙虾自动整理,我只复制拷贝

飞书

问题现象

用户要求创建5分钟后出门提醒,任务创建完成后到点没有收到提醒,开始排查。

最终结论(经过多轮验证修正)

正确逻辑梳理

根据官方文档和最终验证:

  • channels.feishu.groupPolicy:对应 群聊 访问控制,匹配 groupAllowFrom 白名单
  • channels.feishu.allowFrom:对应 单聊 访问控制,控制哪些sender可以发送入站消息
  • 出站消息(推送提醒、重启通知等):永远不拦截,所以即使sender不在白名单,也能正常推送消息
  • 入站消息(用户发的指令、创建任务请求):sender不在 allowFrom 白名单会被静默拦截,服务端收不到消息

根因

最初没收到提醒的根本原因:

  • channels.feishu.allowFrom 没有添加你的sender ID
  • 所以你发送的创建任务指令被飞书插件静默拦截,我收不到指令,任务根本没创建成功
  • 而出站消息(比如重启通知)不受影响,所以重启通知能正常收到,你能收到,但任务创建不了

解决方法

只需要将你的飞书sender ID添加到 channels.feishu.allowFrom 即可,不需要修改 groupPolicy

"channels": {
  "feishu": {
    "enabled": true,
    "appId": "cli_xxxxxx",
    "appSecret": "xxxxxx",
    "connectionMode": "websocket",
    "domain": "feishu",
    "allowFrom": [
      "ou_yourSenderIdHere"
    ]
  }
}

验证结果

  • ✅ 添加sender ID到 allowFrom 后,入站消息能正常接收,创建任务成功,提醒能正常发送
  • ✅ 出站消息一直正常,不受影响
  • ✅ 问题彻底解决

排查过程回顾

第一次误判

一开始误以为是 groupPolicy: "allowlist" 拦截了发送提醒的出站消息,所以误判方向,后来经过用户指导纠正,找到了正确根因。

关键验证

  • 出站消息永远不拦截:即使sender不在白名单,推送提醒/重启通知都能正常收到
  • 入站消息才拦截:sender不在白名单,你的指令被静默丢弃,任务创建不了
  • 添加sender ID到 allowFrom 后,一切正常

经验教训

  1. 严格遵守操作规范:任何持久化变更必须先输出方案,得到用户明确确认才能执行,禁止擅自操作
  2. 控制变量验证:每次只能修改一个变量,才能准确找到问题根因,避免误判
  3. 认真理解官方文档:区分开 groupPolicy(群聊)和 allowFrom(单聊)的不同作用
  4. 禁止手动修改jobs.json:创建cron任务必须通过CLI命令或者内置cron工具API,禁止手动编辑 jobs.json 文件

钉钉

概述

OpenClaw钉钉渠道创建定时任务有两种方式,优先使用内置cron工具API,稳定性更高,无需处理额外参数。


方式一:内置cron工具API(⭐ 推荐)

适用场景

所有钉钉频道内用户发起的定时提醒需求,不需要通过命令行操作的场景。

调用示例

// 2分钟后提醒用户洗澡
cron.add({
  name: "洗澡提醒",
  schedule: {
    kind: "at",
    at: "2026-03-25T01:34:00+08:00"
  },
  payload: {
    kind: "agentTurn",
    message: "直接输出以下内容(禁止调用工具):⏰ 提醒你该去洗澡啦!"
  },
  sessionTarget: "isolated",
  delivery: {
    mode: "announce",
    channel: "clawdbot-dingtalk",
    to: "<用户senderStaffId>"
  }
})

优势

✅ 运行时内部直接调用,无需连接外部网关
✅ 不需要处理认证、超时等问题,稳定性100%
✅ 无需记忆复杂命令参数,不易出错


方式二:openclaw CLI命令

适用场景

仅在命令行运维、脚本自动化场景下使用。

调用模板

openclaw cron add \
  --name "<任务名称>" \
  --at "<触发时间,支持ISO时间或相对时间如2m>" \
  --session isolated \
  --message "直接输出以下内容(禁止调用工具):<提醒内容>" \
  --announce \
  --channel "clawdbot-dingtalk" \
  --to "<用户senderStaffId>" \
  --token "<网关认证token>" # 必须携带,否则会被网关拒绝

注意事项

⚠️ 必须携带--token参数,网关开启token认证时不带token会直接连接失败
⚠️ CLI默认3秒握手超时,加载全量插件时可能首次超时,CLI会自动重试,最终会创建成功
⚠️ 不要对一次性--at任务执行openclaw cron run,会导致任务提前删除


常见问题排查

1. 执行CLI命令报错gateway closed

  • 检查是否携带了正确的--token参数
  • 确认网关服务正常运行:openclaw gateway status
  • 多执行一次命令,大概率是首次超时重试即可成功

2. 任务创建成功但没收到提醒

  • 检查--to参数是否为正确的用户senderStaffId
  • 检查--channel是否为clawdbot-dingtalk
  • 检查用户是否在钉钉渠道的allowFrom白名单中

3. 任务创建后不执行

  • 检查任务状态:openclaw cron list
  • 确认触发时间是否正确,时区是否为Asia/Shanghai
  • 查看网关日志确认任务执行情况:tail -f /tmp/openclaw/openclaw-$(date +%Y-%m-%d).log

最佳实践总结

  1. 日常用户提醒优先使用内置cron工具API,简单稳定
  2. 批量运维/自动化场景使用CLI命令,记得加–token参数
  3. 所有定时任务统一使用isolated会话模式,避免影响主会话
  4. 提醒内容统一使用直接输出以下内容(禁止调用工具):前缀,避免工具调用错误
Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐