auto: sync OpenClaw config 2026-09-17 04:13

This commit is contained in:
2026-09-17 04:13:36 +08:00
parent f6383f5725
commit 376fde448b
27 changed files with 899 additions and 3 deletions
@@ -0,0 +1,38 @@
---
name: "cross-channel-send"
description: "消息发不出去/跨频道发送:Cross-context messaging denied、飞书主动私聊不可用时,用 CLI openclaw message send 跨频道投递并核实送达。"
---
# 跨频道发送(cross-channel send
用于「这条消息发不出去」「改投钉钉/飞书」「飞书私聊推不动」这类场景:把消息实际送到**当前会话未绑定**的频道,并拿到可核实的送达证据。与定时提醒无关(提醒的路由写在 cron `delivery` 上,见 `scheduled-reminders`)。
## 事实基础(本机 2026-09-16 实测,OpenClaw 2026.8.1
- `message(action=send)` **受会话绑定频道限制**:主会话绑 feishu 时,指定 `channel="dingtalk-connector"` 直接被拒:
`Cross-context messaging denied: action=send target provider "dingtalk-connector" while bound to "feishu"`
这是策略拒绝,不是投递失败——**原样重试无效**,换 CLI。
- 同一时刻 CLI 跨频道发送成功(`--channel` 接受插件频道名):
```bash
openclaw message send --channel dingtalk-connector --target 0464031658857345 --message "..."
# → ✅ Sent via DingTalk. Message ID: card_...
```
- 飞书「机器人主动向用户发私聊」当前不可用,报 `Feishu send failed: Sending messages to users is temporarily unavailable.`**群 / chat_id 可达、open_id 私聊不可达**,可复现;此时按第 3 步改投钉钉。
- 该飞书故障**换 CLI 也一样报错**(`openclaw message send --channel feishu ...` 同样失败)→ 属飞书侧限制,不是 CLI 或工具层问题。
## 步骤
1. 先用 `message(action=send)` 发当前频道。读错误分类:
- `Cross-context messaging denied` → 走第 2 步(跨频道)。
- `Sending messages to users is temporarily unavailable` → 走第 3 步(换通道)。
2. 跨频道补发:`openclaw message send --channel <频道> --target <目标id> --message "..."`。
目标 id 用该频道已知可达的会话:钉钉 `0464031658857345`;飞书 DM chat_id 见 `scheduled-reminders` 的「投递通道」。发送后回读输出确认 `✅ Sent via ...` + Message ID。
3. 原频道本身不可达时(如飞书主动私聊),把结果改投用户实际能收到的通道(钉钉),并在正文里说明「原频道故障 + 已改投」,让用户知道换通道的原因。
4. 核对送达:只有 CLI 输出 `✅ Sent via ...` 或 `message` 工具返回成功才算发出;任何 `Feishu send failed` / `denied` 都不算,不要在回复里声称已送达。
5. 原频道恢复或用户要求切回时,改回原频道,并撤掉临时的替代通道推送,避免同一条内容双通道重复打扰。
## 注意
- 跨频道发送属「离开本机的对外发送」,只在用户任务范围内做。
- 诊断类测试消息必须标注「测试/请忽略」,且**只发一次**——用飞书群做过一次诊断后不要再往同一群发第二条。
- 频道名以插件注册名为准(`dingtalk-connector`、`feishu`、`openclaw-weixin`);上面写死的目标 id 是本机惯例值,换部署要重新确认。
@@ -28,8 +28,11 @@ description: "创建/管理定时提醒(每周/每天/睡前等周期或一次
- **飞书目标必须用 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 目标。
- **可达性分两类**:同日实测飞书**群 / chat_id 可达**,而**机器人主动向用户私聊(open_id)不可达**、可复现——该错误文案里虽然带「temporarily」,但先按不可达处理,别计划性地依赖飞书私聊推送。
- **换通道只动 delivery**`--agent main`、时间、打卡机制等其余规则一律不变。
- **通了没有要实测,不要推断**:可临时建一条一次性测试任务,用 `automations run <jobId>` 立即跑一次,看 `state.lastDelivered` / `lastDeliveryError`,验证完把测试任务删掉。
- **测试只发一次**:验证投递时按上面的 run 方式做,不要额外往群或私聊手发多条诊断消息;确需手发时正文标注「测试/请忽略」。
- **cron 的 delivery 与手动发消息是两条路**:本 skill 的投递只写在 delivery 参数上;「消息发不出去 / 要跨频道手动投递」另见 `cross-channel-send`
## 创建一条周期提醒
@@ -95,11 +98,13 @@ openclaw cron add "打卡检查" \
只改周期任务的 payload 就完事,会一直错下去;要配一条恢复任务:
1.`automations update <jobId>`(或 `openclaw cron edit <id> --command '...'`)换成当晚版本,回读 `automations get <jobId>` 确认文案已生效
2. 同一步里建一条一次性任务,在次日合适时间把 payload 改回标准版本。它跑在 isolated 会话、**没有本次对话的记忆**,所以 message 必须写全 jobId 与目标文案原文,并注明改完回读校验、成功即回 `NO_REPLY`
3. 恢复任务不需要给人看:按核心规则加 `--no-deliver`
1.`automations update <jobId>`(或 `openclaw cron edit <id> --command '...'`把周期任务换成当晚版本。
2. 回读 `automations get <jobId>` 确认文案已生效,再继续
3. 同期建一条一次性任务,在次日合适时间把 payload 改回标准版本。它跑在 isolated 会话、**没有本次对话的记忆**,所以 message 必须写全 jobId 与目标文案原文,并注明改完回读校验、成功即回 `NO_REPLY`
4. 恢复任务不需要给人看:按核心规则加 `--no-deliver`
## 参考
- 生日提醒(农历换算、每年重设、一次性任务):见 `birthday-reminder` skill
- 消息发不出去 / 跨频道手动投递:见 `cross-channel-send` skill
- 完整钉钉推送规范:`workspace/TOOLS.md`「📢 钉钉推送统一规范」