事件与操作
OpenClaw 会观察哪些 Slack 事件,以及它如何处理这些事件。
事件与运行行为¶
- 消息编辑/删除会被映射为系统事件。
- 线程广播(“同时发送到频道”的线程回复)会作为普通用户消息处理。
- 表情回应添加/移除事件会被映射为系统事件。
- 成员加入/离开、频道创建/重命名、以及固定消息添加/移除事件会被映射为系统事件。
- 当机器人自身加入一个被允许的频道时,它会基于频道名称、用途或主题、以及可用的近期消息发布一条介绍。介绍默认启用,绝不在私聊中运行,并且可以通过
channels.slack.joinIntro: false禁用,或通过channels.slack.accounts.<accountId>.joinIntro按账户覆盖。参见群组加入介绍以了解历史记录限制、每房间仅一次行为、以及不受信任内容的处理方式。 - 可选的存在状态轮询可以将观察到的人类参与者的
away到active转换映射到该参与者最近活跃的合格 Slack 会话。默认关闭。 - 当启用
configWrites时,channel_id_changed可以迁移频道配置键。 - 频道主题/用途元数据被视为不受信任的上下文,并且可以注入路由上下文。
- Agent View 的
app_context实体按 Slack 相关性顺序验证,并且仅作为结构化的不受信任上下文公开;省略的上下文会清空当前轮次,而不是重用过期的实体。 - 线程发起者和初始线程历史上下文种子在适用时会根据配置的发送者允许列表进行过滤。
- 用于探测、范围发现、对话分类和投递核对(delivery reconciliation)的专用 Web API 读取,每次请求尝试有 30 秒的截止时间。瞬时故障仍然可以重试,因此整个操作可能需要更长时间。共享的 Bolt 和可变更客户端不会获得此默认截止时间,因为 Slack 可能在延迟响应到达 OpenClaw 之前就提交了变更。
- 块操作、快捷方式和模态交互会发出结构化
Slack interaction: ...系统事件,并带有丰富的有效载荷字段: - 块操作:选中的值、标签、选择器值和
workflow_*元数据 - 全局快捷方式:回调和操作者元数据,路由到操作者的直接会话
- 消息快捷方式:回调、操作者、频道、线程和选中消息的上下文
- 模态框
view_submission和view_closed事件,带有路由频道元数据和表单输入
在 Slack 应用配置中定义全局或消息快捷方式,并使用任意非空回调 ID。OpenClaw 会确认匹配的快捷方式有效载荷,应用与其他 Slack 交互相同的私聊/频道发送者策略,并将经过清理的事件排队送入路由的 Agent 会话。触发器 ID 和响应 URL 会从 Agent 上下文中移除。
存在状态事件¶
Slack 不会通过 Events API 或 Socket Mode 发送存在状态变化。OpenClaw 可以对那些消息已通过正常 Slack 访问和路由检查的人类参与者轮询 users.getPresence。
{
channels: {
slack: {
presenceEvents: {
mode: "auto",
prompt: "Do not send a greeting. Stay silent.",
},
channels: {
C0123456789: { presenceEvents: { mode: "on" } },
C0987654321: { presenceEvents: { mode: "off" } },
},
},
},
}
off(默认):不运行存在状态计时器,也不调用 Slack API。auto:监控过去 24 小时内活跃的私聊、群组私聊和 Slack 线程,最多观察 8 位人类参与者。顶级频道会话被排除在外。on:监控相同会话但不设参与者上限,并包含顶级频道会话。使用按频道覆盖来强制或抑制某个频道。
OpenClaw 每个 Slack 账户每分钟最多轮询 45 个唯一的工作区-用户对,首次结果只做种子填充而不唤醒 Agent,并且仅在观察到 away 到 active 转换时才唤醒。每个 Slack 账户、工作区和用户都有一个持久性的 8 小时冷却期,即使该人参与了多个线程也是如此。该事件仅路由到该人最近活跃的合格会话,并告诉 Agent 在决定是否发送一条简短问候之前,先查阅记忆/知识库和已知的时区上下文。Agent 也可以保持沉默。
事件包含 observed_away_at_ms、observed_active_at_ms 和 observed_away_duration_ms。该时长是当前监控运行中首次采样到 away 状态与后来采样到 active 状态之间经过的时间。这并不是精确的离开时长,因为存在状态可能在两次轮询之间发生变化,而且当监控器重启或目标过期后,观察会重新开始。事件记录的是 Slack 报告的内容,而不是该人是否真的在键盘前;Slack 可以自动或手动将某人标记为离开,而 users.getPresence 对于另一个用户来说无法区分这两种情况。
presenceEvents.prompt 会替换事件事实之后的默认问候指导。账户级值默认生效,channels.<channel-id>.presenceEvents.prompt 可以为单个频道覆盖它。自定义值会原样包含,并且限制为 20,000 个字符,与默认每个文件的 AGENTS.md 引导限制一致。将其设置为空字符串可以省略事件特定的指导,让工作区指令(如 AGENTS.md)决定如何处理该事件。存在状态事实始终包含在内。
机器人令牌需要 users:read,该权限已包含在推荐的 manifest 中。Enterprise Grid 组织级安装只有在授权事件标识出该工作区后,才会创建一个工作区范围的轮询客户端;存在状态、冷却期和投递目标始终按工作区分隔。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw