跳转至

线程与会话

Discord 线程、论坛和频道如何映射到 OpenClaw 会话。

论坛频道

Discord 论坛和媒体频道仅接受线程帖子。OpenClaw 支持两种创建方式:

  • 向论坛父级(channel:<forumId>)发送消息以自动创建线程。线程标题是消息中的第一个非空行(截断到 Discord 的 100 个字符线程名称限制)。
  • 使用 openclaw message thread create 直接创建线程。对于论坛频道,不要传递 --message-id。

向论坛父级发送以创建线程:

openclaw message send --channel discord --target channel:<forumId> \
  --message "Topic title\nBody of the post"

显式创建论坛线程:

openclaw message thread create --channel discord --target channel:<forumId> \
  --thread-name "Topic title" --message "Body of the post"

论坛父级不接受 Discord 组件。如果需要组件,请发送到线程本身(channel:<threadId>)。

当 thread-create 成功发送所有初始内容时,其结果会在 initialMessageDelivery 中报告已确认的消息 ID 和分块数量,且 status: "delivered"。 threadSnapshot: "creation" 表示返回的 thread 字段描述的是创建时间;不要基于 message_count 或 last_message_id 重试内容。 空的独立线程没有初始投递回执。部分失败会单独报告已接受的分块;failedChunkDelivery: "unknown" 表示失败的分块可能已经投递,因此重试前请先检查线程。

会话与线程行为

历史、上下文和线程行为

服务器历史上下文:

  • channels.discord.historyLimit 默认 20
  • 回退:messages.groupChat.historyLimit
  • 0 禁用自动读取服务器/线程历史,但不禁用显式消息读取或回复上下文。

已接受的服务器回合会从 Discord 获取其最近窗口,包括 Gateway 重启后。线程回合使用确切的线程频道,而不是其父级。在需要提及的房间中,未提及的消息保持静默。当前和批处理源消息、后续消息以及活动会话边界之前的行都会被排除。发送者可见性仍然适用;过滤后得到的消息可能少于配置的限制。即使 allowBots: false 禁用了其他机器人触发回合的能力,其他机器人的消息仍可作为上下文使用。接收机器人的自身输出会从自动历史中排除。

人类回复会携带所选的父消息,独立于 allowBots。缺失或空的嵌套回复负载会从 Discord 获取。如果父消息已删除或不可用,其回复 ID 会保留在上下文中,而不是悄悄地将该消息变成无关的顶级问题。contextVisibility 仍然控制包含哪些补充回复内容。

Discord 拥有历史:新读取会反映其当前消息内容、删除、权限和可用性。不会创建单独的持久消息归档。如果自动恢复失败,OpenClaw 会记录该遗漏并继续处理被寻址的回合。没有可重用本地媒体的历史附件会被标记为不可用,而不是恢复过期的媒体。恢复不会重写先前的代理转录。

现有的 message(action="read") 工具保留原生分页和精确消息查找。重启或 /new 后,较早的读取仍然可用,具体取决于 Discord 的 Read Message History 权限和当前访问规则。

DM 历史控制:

  • channels.discord.dmHistoryLimit
  • channels.discord.dms["<user_id>"].historyLimit

线程行为:

  • Discord 线程作为频道会话路由,并继承父频道配置,除非被覆盖。
  • 线程会话继承父频道的会话级 /model 选择,作为仅模型的回退;线程本地的 /model 选择优先,并且除非启用转录继承,否则不会复制父级转录历史。
  • channels.discord.thread.inheritParent(默认 false)让新的自动线程选择从父级转录进行播种。按账号覆盖:channels.discord.accounts.<id>.thread.inheritParent。
  • 消息工具表情回应可以解析 user:<id> DM 目标。
  • guilds.<guild>.channels.<channel>.requireMention: false 在回复阶段激活回退期间会被保留。

频道主题会作为 不可信 上下文注入。允许列表控制谁可以触发代理,而不是完整的补充上下文屏蔽边界。

子代理的线程绑定会话
Discord 可以将线程绑定到会话目标,以便该线程中的后续消息继续路由到同一会话(包括子代理会话)。

命令:

- `/session unbind` 移除当前线程绑定,而不关闭其代理会话
- `/agents` 显示活动运行和绑定状态
- `/session idle <duration|off>` 检查/更新当前绑定的非活动过期时间
- `/session max-age <duration|off>` 检查/更新当前绑定的硬性最大年龄

配置:
{
  session: {
    threadBindings: {
      enabled: true,
      idleHours: 24,
      maxAgeHours: 0,
      spawnSessions: true,
      defaultSpawnContext: "fork",
    },
  },
}
说明:

- `session.threadBindings.*` 是 Discord 和 Telegram 的规范策略。
- `spawnSessions` 控制 `sessions_spawn({ thread: true })` 和 ACP 线程生成的自动创建/绑定线程。默认:`true`。
- `defaultSpawnContext` 控制线程绑定生成的原生子代理上下文。默认:`"fork"`。
- 已弃用的 `spawnSubagentSessions`/`spawnAcpSessions` 键会通过 `openclaw doctor --fix` 迁移。
- 如果线程绑定被禁用,则线程绑定生成不可用。

参见 [子代理](../../tools/subagents.md), [ACP 代理](../../tools/acp-agents.md), 以及 [配置参考](../../gateway/configuration-reference.md)。
持久化 ACP 通道绑定
对于稳定的“始终在线”ACP 工作区,请配置顶层类型化 ACP 绑定,以指向 Discord 对话。

配置路径:`bindings[]`,其中 `type: "acp"` 且 `match.channel: "discord"`。
{
  agents: {
    entries: {
      codex: {
        runtime: {
          type: "acp",
          acp: {
            agent: "codex",
            backend: "acpx",
            mode: "persistent",
            cwd: "/workspace/openclaw",
          },
        },
      },
    },
  },
  bindings: [
    {
      type: "acp",
      agentId: "codex",
      match: {
        channel: "discord",
        accountId: "default",
        peer: { kind: "channel", id: "222222222222222222" },
      },
      acp: { label: "codex-main" },
    },
  ],
  channels: {
    discord: {
      guilds: {
        "111111111111111111": {
          channels: {
            "222222222222222222": {
              requireMention: false,
            },
          },
        },
      },
    },
  },
}
说明:

- `/acp spawn codex --bind here` 会就地绑定当前频道或线程,并让后续消息保持在同一 ACP 会话中。线程消息会继承父频道的绑定。
- 在已绑定的频道或线程中,`/new` 和 `/reset` 会就地重置同一 ACP 会话。临时线程绑定在生效期间可以覆盖目标解析。
- `spawnSessions` 通过 `--thread auto|here` 控制子线程的创建/绑定。

有关绑定行为详情,请参阅 [ACP Agents](../../tools/acp-agents.md)。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw