跳转至

媒体与附件

Slack 文件如何进入 agent 轮次,以及 OpenClaw 如何将文本和媒体发送回去。

语音输入

目前,要在 Slack 中与 OpenClaw 进行语音交流,请向 OpenClaw 应用发送 Slack 音频片段。Slackbot 的听写麦克风是 Slack 自有的一项独立功能,而非应用 API。

  • Slackbot 语音听写 位于用户私有的 Slackbot 会话中。Slack 会将录音转换为 Slackbot 提示,但不会通过 Events API 向第三方 Slack 应用发出音频文件、听写事件、提示或输入来源标记。OpenClaw Slack 插件无法启用或接收它。
  • Slack 音频片段 是存储在 Slack 中的文件,可以发布到 OpenClaw 私信(DM)、频道或线程中。OpenClaw 使用机器人令牌下载可访问的片段,规范化 Slack 片段的 MIME 元数据,并通过共享的 音频转录管道 发送它。推荐的应用清单包含所需的 files:read 权限范围。

音频片段和 Slackbot 听写在隐私语义上有所不同:片段遵循 Slack 文件保留策略,OpenClaw 会下载它们进行转录;而 Slack 表示听写音频不会被存储。

在启用了 requireMention: true 的频道中,无说明文字的音频片段可以通过说出配置的提及模式来满足该门槛(agents.entries.*.groupChat.mentionPatterns,回退到 messages.groupChat.mentionPatterns)。OpenClaw 在下载或转录片段之前会先验证发送者的授权,并且仅在转录内容匹配时才准入该片段。失败或不匹配的试探性转录会随下载的片段一起丢弃;不会保留在频道历史记录中。原生 Slack @bot 身份无法从语音中推断出来,因此请配置口述名称模式,或包含一条键入的提及。如果启用了转录回显,则仅在准入后才发送回显。

媒体、分块与投递

入站附件

Slack 文件附件从 Slack 托管的私有 URL(基于令牌认证的请求流程)下载;当获取成功且大小限制允许时,会写入媒体存储。文件占位符包含 Slack fileId,这样 agent 可以使用 download-file 获取原始文件。

下载使用有上限的空闲超时和总超时。如果 Slack 文件检索停滞或失败,OpenClaw 会继续处理消息并回退到文件占位符。

运行时入站大小上限默认为 20MB,除非被 channels.slack.mediaMaxMb 覆盖。

出站文本和文件
  • 文本块使用 channels.slack.textChunkLimit(默认 8000,上限为 Slack 自身的消息长度限制)
  • channels.slack.streaming.chunkMode="newline" 启用段落优先拆分
  • 文件发送使用 Slack 上传 API,并可包含线程回复(thread_ts)
  • 较长的文件说明使用第一个 Slack 安全文本块作为上传评论,并将剩余块作为后续消息发送
  • 文本和上下文块会跨分节边界保留代码格式和字面反斜杠
  • 出站媒体上限在配置了 channels.slack.mediaMaxMb 时遵循该设置;否则频道发送使用媒体管道中按 MIME 类型区分的默认值

原生 Block Kit section 区块会保留所有字段,即使其组合无障碍文本超过了首选文本块大小。Slack 的区块限制以及 40,000 字符的消息文本硬性限制仍然适用。

投递目标

首选显式目标:

  • user:<id>:用于 DM
  • channel:<id>:用于频道

仅包含文本/块的 Slack DM 可以直接发布到用户 ID;文件上传和线程发送则需要先通过 Slack 会话 API 打开 DM,因为这些路径需要具体的会话 ID。

附件媒体参考

当 Slack 文件下载成功且大小限制允许时,已下载的媒体可以附加到 agent 轮次中。音频片段可以被转录,图像文件可以经由媒体理解路径或直接传递给支持视觉的回复模型,其他文件仍可作为可下载的文件上下文使用。

按文件 ID 下载附件

message 工具的 download-file 操作需要来自消息或文件占位符的 Slack fileId。除非你提供显式的 channelId,否则它使用当前 Slack 频道。显式的 threadId 还要求文件在该线程中共享;环境中的会话线程不会缩小仅限频道的下载范围。

OpenClaw 在下载前会检查频道现有的访问策略和最新的 files.info 共享证据。如果 Slack 刷新了已过期的下载 URL,它会重新执行文件共享检查。经过核验的官方 npm 和 ClawHub 安装使用与内置 Slack 插件相同的提供方检查。

允许的下载会返回现有的本地媒体产物。图像还会在配置的图像尺寸限制内返回图像内容。配置的读取凭据、Slack/GovSlack 主机限制、HTTPS 和重定向检查,以及 channels.slack.mediaMaxMb 大小上限仍然适用。对于 agent 下载,已取消或已撤销的读取无法返回已接受的产物;清理过程会删除其自身新建的文件,同时保留已存在或被替换的文件。

支持的媒体类型

媒体类型 来源 当前行为 备注
Slack 音频片段 Slack 文件 URL 下载后接入共享音频转录流程 需要 files:read 以及可用的 tools.media.audio 模型或 CLI
媒体类型 来源 当前行为 备注
JPEG / PNG / GIF / WebP 图像 Slack 文件 URL 下载并附加到当前轮次,以便支持视觉的处理 单文件上限:channels.slack.mediaMaxMb(默认 20 MB)
PDF 文件 Slack 文件 URL 下载并作为文件上下文暴露给 download-file 或 pdf 等工具 Slack 入站不会自动将 PDF 转换为图像视觉输入
其他文件 Slack 文件 URL 在可能时下载并作为文件上下文暴露 二进制文件不会被当作图像输入
线程回复 线程起始消息文件 当回复没有直接媒体时,根消息文件可以作为上下文填充 仅包含文件的起始消息使用附件占位符
多文件消息 多个 Slack 文件 每个文件独立评估 Slack 处理每条消息最多八个文件

入站管道

当带有文件附件的 Slack 消息到达时:

  1. OpenClaw 使用 bot token 从 Slack 的私有 URL 下载文件。
  2. 成功后,文件会被写入媒体存储。
  3. 已下载的媒体路径和内容类型会被添加到入站上下文。
  4. 音频片段会被路由到共享的转录管道;支持图像的模型/工具路径可以使用同一上下文中的图像附件。
  5. 其他文件仍可作为文件元数据或媒体引用,供能够处理它们的工具使用。

线程根附件继承

当消息到达线程中(具有 thread_ts 父级)时:

  • 如果回复本身没有直接媒体,且包含的根消息有文件,Slack 可以将根文件填充为线程起始上下文。
  • 根文件仅在新建或重置线程会话时填充。后续纯文本回复会复用现有会话上下文,不会将根文件作为新媒体重新附加。
  • 直接回复附件优先于根消息附件。
  • 只有文件而没有文本的根消息会以附件占位符表示,以便回退逻辑仍可以包含其文件。

多附件处理

当单个 Slack 消息包含多个文件附件时:

  • 每个附件都会通过媒体管道独立处理。
  • 已下载的媒体引用会被聚合到消息上下文中。
  • 处理顺序遵循事件负载中 Slack 的文件顺序。
  • 一个附件下载失败不会阻塞其他附件。
  • 失败或被阻止的文件会保留在 agent 上下文中,并带有有限的原因;在任何 URL 刷新重试之后,每个失败文件都会产生一条警告。
  • 超出八个文件限制的文件不会被下载。它们的引用带有 omitted: 8-file limit 原因。较长的不可用文件列表会被明显截断,而通知会保留不可用附件的总数。

大小、下载和模型限制

  • 大小上限:默认每个文件 20 MB。可通过 channels.slack.mediaMaxMb 配置。
  • 音频转录上限:当下载的文件被发送到转录提供商或 CLI 时,所选支持音频的 tools.media.models[] 条目的 maxBytes 也会生效。
  • 下载失败:Slack 无法提供的文件、过期 URL、不可访问的文件、超大文件以及 Slack 身份验证/登录 HTML 响应会被跳过,而不是报告为不支持的格式。
  • 视觉模型:图像分析在支持视觉时使用当前回复模型,或使用在 agents.defaults.imageModel 配置的图像模型。

已知限制

场景 当前行为 解决方法
Slack 文件 URL 已过期 文件被跳过;不显示错误 在 Slack 中重新上传文件
音频转录不可用 片段仍会附加,但不会生成转录 配置 tools.media.audio 或安装受支持的本地转录 CLI
无字幕片段未通过提及门控 在私有推测性转录后被丢弃;转录和下载被丢弃 配置口语名称提及模式、添加键入的 bot 提及,或使用 DM
未配置视觉模型 图像附件会作为媒体引用存储,但不会作为图像分析 配置 agents.defaults.imageModel 或使用支持视觉的回复模型
非常大的图像(默认 > 20 MB) 按大小上限跳过 如果 Slack 允许,请增大 channels.slack.mediaMaxMb
转发/共享附件 文本和 Slack 托管的图像/文件媒体为尽力而为 直接在 OpenClaw 线程中重新共享
PDF 附件 作为文件/媒体上下文存储,不会自动通过图像视觉路由 使用 download-file 获取文件元数据,或使用 pdf 工具进行 PDF 分析
场景 当前行为 变通方法

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