10分钟自制Codex钉钉通知Skill:AI干完活自动钉钉提醒你

让 AI 执行长任务时,最浪费时间的往往不是任务本身,而是等待。

跑测试、分析日志、批量修改代码、生成报告,这些工作可能需要十几分钟甚至几个小时之久。人不可能一直盯着 Codex 窗口,但如果隔一会儿就回来刷新一次,又失去了自动化的意义。

我的解决办法很简单:让 Codex 完成任务并验证结果后,主动给钉钉发一条消息。

最终我保留了两条发送链路:

  1. 通过群机器人 Webhook 发通知,适合 AI 长任务完成提醒。
  2. 给钉钉联系人发个人消息,例如"文件小助手",适合保存普通结果。

这两种方式看起来相似,底层依赖却完全不同。理解这个区别,能少走很多弯路。

首选方案:用群机器人通知长任务完成

群机器人是最适合 Codex 的方案。

它只依赖一个 Webhook 地址和网络,不要求电脑打开钉钉客户端,也不要求当前账号保持登录。即使更换电脑,只要把 Webhook 和 Skill 配置迁移过去,就能继续使用。

更重要的是,机器人向群里发送消息后,钉钉会产生群聊未读提示。相比"文件小助手"里的普通消息,这种提醒更醒目,适合在 AI 完成长任务后通知自己。

日常使用时,我只需要对 Codex 说:

text 复制代码
群发 任务已完成

或者在任务开始前直接交代:

text 复制代码
完成任务并验证结果后,钉钉通知我。

Codex 会在任务结束后发送类似下面的消息:

text 复制代码
任务已完成
2026-10-16 15:29:35

配置钉钉群机器人

先在钉钉中创建一个群,进入群设置,添加"自定义机器人",然后配置安全关键词,例如:

text 复制代码
ai通知

创建完成后,钉钉会生成一个 Webhook:

text 复制代码
https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN

Webhook 本质上是发送凭证。谁拿到它,谁就能向这个群发送消息,因此不要把真实地址提交到 Git、截图公开或放进公开文章。

机器人发送消息时必须满足安全关键词规则。可以把关键词放进 Markdown 消息的标题里,这样正文仍然可以保持干净。

下面是一个脱敏后的 curl 示例:

bash 复制代码
WEBHOOK='https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN'
TIME=$(TZ=Asia/Shanghai date '+%Y-%m-%d %H:%M:%S')

curl "$WEBHOOK" \
  -H 'Content-Type: application/json' \
  -d "{
    \"msgtype\": \"markdown\",
    \"markdown\": {
      \"title\": \"ai通知\",
      \"text\": \"任务已完成\\n\\n${TIME}\"
    }
  }"

成功时,钉钉通常返回:

json 复制代码
{"errcode":0,"errmsg":"ok"}

这里有一个关键结论:群机器人不需要 dws。 dws 只是对钉钉能力的一层命令行封装,直接调用 Webhook 同样可以完成群通知。

把发送规则沉淀成 Codex Skill

每次都向 Codex 解释 Webhook、关键词和时间格式很麻烦,更稳妥的做法是把规则写进 Skill。

在 macOS 上创建:

text 复制代码
~/.codex/skills/dingtalk-notifier/SKILL.md

可以使用下面这份精简模板:

markdown 复制代码
---
name: dingtalk-notifier
description: 发送钉钉通知。用户要求群发、钉钉通知或任务完成后通知时,通过默认群机器人发送;用户指定钉钉联系人时发送个人消息。
---

# 钉钉通知

消息只发送一次。状态不明时先检查结果,不自动重发。

## 使用机器人发送群通知

1. 使用默认群 Webhook:`https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN`。
2. 使用标题 `ai通知` 满足机器人的安全关键词要求。
3. 在正文最后换行追加上海时间 `YYYY-MM-DD HH:MM:SS`。
4. 通过 Webhook 发送,仅在返回 `errcode: 0` 时报告成功。
5. 不在回复或日志中输出 Webhook。

## 给个人发送消息

1. 使用钉钉连接器、`dws` 或已登录的 macOS 钉钉客户端。
2. 发送前确认联系人名称与用户指定的名称完全匹配,例如"文件小助手"。
3. 在正文最后换行追加上海时间 `YYYY-MM-DD HH:MM:SS`。
4. 发送后核对最新聊天记录,再报告是否成功。

配置后,群发 xxx 会走机器人 Webhook;给钉钉上的文件小助手发送 xxx 会走个人消息流程。一个 Skill 就可以完成路由,不需要分别维护两份规则。

给个人发送消息为什么不同

个人联系人没有群机器人的 Webhook。要给"文件小助手"或其他联系人发送消息,必须通过钉钉账号能力完成,通常需要以下方式之一:

  • 使用已经授权的 dws。
  • 使用可访问钉钉的连接器。
  • 操作 Mac 上已登录的钉钉客户端。

例如:

text 复制代码
给钉钉上的文件小助手发送:任务已完成

这种方式适合保存结果,但普通个人消息不一定产生醒目的未读提示。因此,我把群机器人设为长任务完成通知的默认方式,把个人消息作为补充。

几个容易踩的坑

第一个坑是安全关键词不匹配。钉钉会返回 310000,提示消息中没有包含机器人配置的关键词。检查消息标题或正文是否包含关键词即可。

第二个坑是把群名当成路由条件。机器人实际绑定的是 Webhook,不是群名。修改群名不会影响发送;删除机器人、重置 Webhook 或把 Skill 中的 Token 换错,才会改变投递结果。

第三个坑是失败后盲目重试。网络超时不等于发送失败,自动重试可能让群里出现两条相同消息。正确做法是只发送一次,根据钉钉的 JSON 回执判断业务是否成功;状态不明确时先检查,不要立刻重发。

第四个坑是泄露 Webhook。真实 Token 不应该出现在公开博客、开源仓库和聊天截图中。如果已经泄露,应立即在钉钉中重置机器人 Webhook。

最后

这套方案真正有价值的地方,不是"用 Codex 发了一条钉钉消息",而是把长任务从需要人工盯守的流程,变成了完成后主动通知的异步工作流。

我的实际选择很明确:长任务完成提醒优先走群机器人,个人联系人消息只作为补充。 前者不依赖钉钉客户端和 dws,迁移简单,还有醒目的群聊未读提示;后者适合把结果留在文件小助手中,方便随后查阅。

当 Codex 能在任务完成、验证通过或执行失败后主动通知你,AI 才真正从"需要盯着使用的工具"变成了"可以放心交付工作的助手"。

相关推荐
大孜然1 小时前
孜然QQ频道自动化程序机器人配置教程
前端
用户469384921551 小时前
AIUI 焦点高亮切换失效排查与规避:为什么按钮不变换形态呢?
前端
派大鑫wink1 小时前
纯前端实现软考中级·软件设计师备考学习网站
前端·学习
kyriewen1 小时前
我扒了 npm 三年数据:AI 没把依赖变胖,是把包变多了
前端·人工智能·程序员
liqingdi4372 小时前
[SWPUCTF 2023 秋季新生赛]Easy SMC
服务器·前端·javascript
用户87359865635872 小时前
为什么 greedy 也可能出不同 token,MoE 为什么更严重
前端
Gizzap_Tech2 小时前
多语言官网如何兼顾统一与本地化?从页面生成到语言切换
前端
IT_陈寒2 小时前
Java缓存踩坑记:明明设置了过期时间,怎么还是读到脏数据?
前端·人工智能·后端
靠coding维持生计的potato2 小时前
使用 unified diff 为 pnpm 依赖编写可复现补丁
前端