Appearance
OpenClaw 的 Channel Docking 让一个活跃会话的回复路由从当前聊天渠道切换到另一个已关联渠道(例如从 Telegram 切到 Discord),会话上下文和聊天历史保持不变。需要先在配置中设置 session.identityLinks 将源发送者和目标 peer 放到同一身份组,然后从现有会话发送 /dock_discord(或别名 /dock-discord)等命令。切换后,后续回复会发到目标渠道,但不影响其他会话,也不绕过渠道 allowlist 或 DM 策略。
OpenClaw Channel Docking:回复路由跨渠道切换
Channel Docking 是 OpenClaw 会话的“呼叫转移”。它维持同一个会话上下文,但改变该会话后续回复的投递位置。
示例
Alice 可以在 Telegram 和 Discord 上向 OpenClaw 发送消息,配置如下:
json5
{
session: {
identityLinks: {
alice: ["telegram:123", "discord:456"],
},
},
}如果 Alice 从 Telegram 发送:
text
/dock_discordOpenClaw 会保持当前会话上下文并更改回复路由:
| 对接前 | 执行 /dock_discord 后 |
|---|---|
回复发送到 Telegram 123 | 回复发送到 Discord 456 |
会话不会被重建,聊天历史仍保留在同一个会话中。
为什么使用
当一个任务在一个聊天应用中启动,但后续回复需要落到其他平台时,使用 Docking。
常见流程:
- 从 Telegram 发起一个智能体任务。
- 转到 Discord 继续协调工作。
- 从 Telegram 会话发送
/dock_discord。 - 保持同一个 OpenClaw 会话,但后续回复会出现在 Discord 中。
必需配置
Docking 要求有 session.identityLinks。源发送者和目标 peer 必须在同一个身份组内:
json5
{
session: {
identityLinks: {
alice: ["telegram:123", "discord:456", "slack:U123"],
},
},
}值为渠道前缀的 peer id:
| 值 | 含义 |
|---|---|
telegram:123 | Telegram 发送者 id 123 |
discord:456 | Discord 直连 peer id 456 |
slack:U123 | Slack 用户 id U123 |
配置中的 key(如 alice)只用作共享身份组名称。Dock 命令使用渠道前缀的值来证明源发送者和目标 peer 是同一人。
命令
Dock 命令由已加载的支持原生命令的渠道插件生成。当前内置命令:
| 目标渠道 | 命令 | 别名 |
|---|---|---|
| Discord | /dock-discord | /dock_discord |
| Mattermost | /dock-mattermost | /dock_mattermost |
| Slack | /dock-slack | /dock_slack |
| Telegram | /dock-telegram | /dock_telegram |
下划线别名在 Telegram 等原生命令界面中更常用。
变化的内容
Docking 会更新活跃会话的投递字段:
| 会话字段 | 执行 /dock_discord 后的示例 |
|---|---|
lastChannel | discord |
lastTo | 456 |
lastAccountId | 目标渠道账号,或 default |
这些字段会被持久化到会话存储中,后续回复投递时会使用。
不变的内容
Docking 不会:
- 创建渠道账号
- 连接一个新的 Discord、Telegram、Slack 或 Mattermost 机器人
- 授予用户访问权限
- 绕过渠道 allowlist 或 DM 策略
- 将聊天历史移动到另一个会话
- 让不相关的用户共享同一个会话
它只改变当前会话的投递路由。
常见问题
/dock 命令报“sender is not linked”怎么解决?
将当前发送者和目标 peer 都加入到同一个 session.identityLinks 组。例如,如果 Telegram 发送者 123 要对接 Discord peer 456,则必须同时包含 telegram:123 和 discord:456。
/dock 命令报“no active session exists”怎么解决?
必须从一个已有的直接聊天会话发送 dock 命令。命令需要一个活跃的会话记录才能写入新的路由。
回复仍然发到了旧渠道,怎么办?
确认命令是否回复了成功消息,并确认目标 peer id 与目标渠道使用的 id 一致。Docking 只改变当前活跃会话的路由,其他会话可能仍然路由到别处。另外检查是否配置了 session.identityLinks 且发送者/peer 匹配。
如何切回原来的渠道?
从同一个已关联的发送者向当前会话发送原来渠道对应的 dock 命令,例如 /dock_telegram 或 /dock-telegram。