消息通知发不出去,很多人第一反应是模型抽风。其实我自己排下来,绝大多数情况跟模型关系不大,问题往往卡在 delivery、channel、权限或渠道配置上。
所以这篇我不聊理论,就按我自己排故的顺序来:先看任务跑没跑,再看 delivery,再看渠道权限。
先确认任务执行,再确认投递目标,最后再查渠道侧权限和限流。
一、先确认任务到底有没有执行
这个步骤看起来像废话,但现场最容易忽略。任务没跑和任务跑了但没投递,处理方式完全不一样。
如果你是定时任务,先回到任务历史里确认有没有执行记录。
如果是外部事件触发,先确认 webhook 或入口请求有没有真的进入 OpenClaw。
只有任务已经执行过,才值得继续往 delivery 这层看。
二、delivery 这 4 个字段是排查核心
{
"delivery": {
"mode": "announce",
"channel": "feishu",
"to": "ou_xxxxx",
"bestEffort": true
}
}mode决定要不要投递结果。channel决定投到哪个渠道。to决定投给谁。bestEffort适合在渠道不稳定时避免任务整体失败。
我自己排的时候最常遇到的,不是 mode 写错,而是 channel 和 to 没配完整,最后结果回退到了“上一次回复的位置”,于是你以为它丢了。
这个顺序很关键:任务执行 -> delivery 配置 -> 渠道凭证 -> 权限策略。
三、如果你走的是飞书,我会再看这一组配置
channels.feishu.accounts.<id>.appId和appSecret。channels.feishu.dmPolicy、allowFrom、groupPolicy、groupAllowFrom。verificationToken、encryptKey、webhookPath这组 webhook 相关配置。
如果是“能收到一部分消息、另一部分完全没动静”,我通常优先怀疑的不是网络,而是策略:比如私聊是否只允许配对用户、群聊是否在允许列表里。
四、我现场最常记录的几种日志线索
[delivery] channel=feishu to=ou_xxxxx mode=announce
[feishu] provider ready
[feishu] rejected by dmPolicy allowlist
[delivery] fallback to last route日志格式不一定完全一样,但你要找的重点差不多:渠道有没有 ready、策略有没有拒绝、结果是不是回退到了别的路由。
五、给你一张最短排查表
| 现象 | 先看什么 | 通常怎么修 |
|---|---|---|
任务运行了但没人收到 | delivery.channel / delivery.to | 把目标写死先验证一次,别先依赖最后路由。 |
只有部分用户能收到 | dmPolicy / allowFrom | 优先查飞书权限策略。 |
群里收不到,私聊能收 | groupPolicy / groupAllowFrom | 确认群聊策略是否放开。 |
偶尔失败 | bestEffort 与渠道限流 | 保留日志,再决定要不要把通知失败从主流程里剥离。 |











还没有评论,来说两句吧...