跳转至

渠道 QA 参考

Buzz、Discord、Slack、Telegram 和 WhatsApp QA 参考

Matrix 适配器使用在 Matrix 实时通道 中记录的、基于 Docker 的一次性通道。Buzz、Discord、Slack、Telegram 和 WhatsApp 可以针对已存在的真实传输运行,因此它们的参考文档位于此处。

共享 CLI 标志

这些通道通过共享 QA runner CLI 契约注册。传输插件可以负责注册,而 QA Lab 仍然是套件宿主。它们接受相同的标志:

标志 默认值 描述
--scenario <id> - 仅运行此场景。可重复。
--output-dir <path> <repo>/.artifacts/qa-e2e/<transport>-<timestamp> 报告、摘要、证据、传输特定工件以及输出日志的写入位置。相对路径相对于 --repo-root 解析。
--repo-root <path> process.cwd() 从中性 cwd 调用时的仓库根目录。
--sut-account <id> sut QA 网关配置中的临时账户 id。
--provider-mode <mode> live-frontier(Buzz:mock-openai) mock-openai、aimock 或 live-frontier。
--model <ref> / --alt-model <ref> provider 默认值 主模型/备用模型引用。
--fast 关闭 在支持时启用 provider 快速模式。
--credential-source <source> 共享环境(Buzz:file 加凭据文件) 现有通道使用 env 或 convex;Buzz 在设置 --credential-file 时使用本地文件,否则委托给 OPENCLAW_QA_CREDENTIAL_SOURCE 和共享环境源。参见 Convex 凭据池。
--credential-role <maintainer\|ci> CI 中为 ci,否则为 maintainer 当 --credential-source convex 时使用的角色。
--credential-file <path> - 仅 Buzz 使用的本地运行 JSON 凭据文件。
--allow-failures 关闭 当场景失败时写入工件,而不返回失败退出码。

Telegram 将 --credential-source 固定为 convex。其 Test Server userbot 凭据无法通过共享环境凭据模式提供。

每个通道在任何场景失败时都会以非零退出码退出。--allow-failures 会写入工件而不设置失败退出码。Discord、Slack 和 Telegram 还接受 --list-scenarios,用于打印所选场景 ID 并退出。

Buzz QA

pnpm openclaw qa buzz \
  --credential-file /secure/path/buzz-qa-credentials.json

针对一个真实的 Buzz 房间,使用两个专用的 Nostr 身份。驱动程序发布入站房间事件;SUT 身份配置在子 OpenClaw Gateway 中,其出站事件从中继观察。默认 mock-openai 提供程序可验证真实的 Buzz 传输,而无需模型提供程序凭据。

本地运行使用 --credential-file <path>,并配合一个私有 JSON 文件,其中包含 relayUrl、roomId、driverPrivateKey 和 sutPrivateKey。封闭中继可能还需要 driverAuthTag 和 sutAuthTag。相对路径从 --repo-root 解析。托管中继必须使用 wss://;明文 ws:// 仅接受用于回环开发中继。

两个身份都必须是专用房间的成员,并且 SUT 公钥必须具有 Bot 角色。托管的封闭中继还可能要求两个公钥都注册为中继成员。仅使用专用 QA 身份;切勿使用人类所有者或管理员私钥。确保所有私钥和授权值不出现在日志、命令行、工件、截图和源代码控制中。

默认场景为:

  • channel-canary
  • channel-mention-gating

每次运行都会在所选输出目录下写入 qa-suite-report.md、qa-suite-summary.json 和 qa-evidence.json。报告会标识真实的 Buzz 中继路径,但省略凭据值。

Telegram QA

pnpm openclaw qa telegram

针对 Telegram 测试服务器上的一个共享私有群组。一个 Convex 租约包含 SUT 机器人以及一个用于 QA 用户的独立 TDLib 授权。该用户发送测试消息,并通过一个长生命周期的 TDLib 进程观察 SUT 消息和编辑。共享实时群组要求提及租约机器人或回复该机器人;场景使用 @openclaw,适配器会将其替换为租约机器人用户名。原生命令指向同一个机器人。

必需环境变量:

  • OPENCLAW_QA_CONVEX_SITE_URL
  • OPENCLAW_QA_CONVEX_SECRET_MAINTAINER 用于默认本地角色,或 配合 --credential-role ci 使用的 OPENCLAW_QA_CONVEX_SECRET_CI

--credential-source 默认为 convex;env 会被拒绝。租约拥有测试服务器群组、SUT token 和恢复的 TDLib 会话。该通道不使用生产 Telegram 凭据或 Bot-to-Bot Communication Mode。

release 配置文件会选择由分类法拥有的 Telegram 场景,这些场景声明了通道、使用 flow 执行类型,并匹配请求的提供程序和模型通道。显式 --scenario 值会缩小同一选择范围,而不是绕过其约束。使用 pnpm openclaw qa telegram --list-scenarios --provider-mode mock-openai 可打印当前选择及其回归引用。提供 --model 会将相同的模型约束应用于列表和运行。

telegram-startup-getme-live 是一个目录脚本生产者,而不是实时适配器流程。请通过 qa suite --scenario telegram-startup-getme-live 运行它;专用的 qa telegram 命令和 --list-scenarios 会故意省略它。

输出工件:

  • qa-suite-report.md
  • qa-suite-summary.json
  • qa-evidence.json - 实时传输检查的证据条目,包括 profile、coverage、provider、channel、artifacts、result 和 RTT 字段。

打包 Telegram 运行使用相同的 Telegram 凭据契约。重复的 RTT 测量是正常打包 Telegram 实时通道的一部分;所选 RTT 检查的 RTT 分布会折叠到 qa-evidence.json 的 result.timing 下。

OPENCLAW_QA_CREDENTIAL_SOURCE=convex \
pnpm test:docker:npm-telegram-live

打包实时包装器会租用一个 kind: "telegram-test-userbot" 凭据,恢复其隔离的 TDLib 用户会话,并通过 Test Bot API 代理路由 SUT 机器人。它会为租约发送心跳,并在关闭时释放租约。打包包装器默认对 channel-canary 执行 20 次 RTT 检查,RTT 超时为 30 秒,并且在 CI 之外使用 Convex 角色 maintainer。覆盖 OPENCLAW_NPM_TELEGRAM_RTT_SAMPLES、OPENCLAW_NPM_TELEGRAM_RTT_TIMEOUT_MS 或 OPENCLAW_NPM_TELEGRAM_RTT_MAX_FAILURES 可调整 RTT 测量,而无需创建单独的 RTT 命令或 Telegram 专用摘要格式。

Discord QA

pnpm openclaw qa discord

针对一个真实的私有 Discord 服务器频道,使用两个机器人:一个由测试框架控制的驱动机器人,以及一个由子 OpenClaw Gateway 通过捆绑的 Discord 插件启动的 SUT 机器人。验证频道提及处理、SUT 机器人是否已在 Discord 注册原生 /help 命令,以及可选的 Mantis 证据场景。

对于可复用的代理驱动证明,请使用仓库中的 .agents/skills/discord-e2e/SKILL.md。其可选命令会通过现有已认证的 Convex CLI 发现 QA broker;无需复制机器人 token 或 broker 机密:

pnpm openclaw qa discord --doctor
pnpm openclaw qa discord \
  --scenario-file qa/scenarios/channels/discord-e2e-lifecycle.yaml

这些模式默认使用 Convex、CI 凭据角色和 mock-openai。显式标志或凭据环境变量设置仍然优先。--scenario-file 可重复使用,并接受完整的 YAML flow,其中声明 execution.channel: discord 和 execution.config.agentE2e: true。原生写入 flow 只运行一次;正的 retryCount 值会被拒绝。它们仍位于精选默认套件之外。

生命周期会区分原生 fixture 操作和关联的 SUT Gateway 回复。私有事件回执涵盖修订、表情回应、正在输入和删除;渲染和人工交互仍需要真实客户端。清理会保留租约权限,直到 Gateway 停止,并且只删除拥有的对象。如果没有现有的线程管理权限,拥有的线程会被归档,而不是删除。斜杠命令、组件点击、模态框、临时交互和机器人私信需要手动 Discord 客户端;不使用用户账户自动化。

当 --credential-source env 时必需的环境变量:

  • OPENCLAW_QA_DISCORD_GUILD_ID
  • OPENCLAW_QA_DISCORD_CHANNEL_ID
  • OPENCLAW_QA_DISCORD_DRIVER_BOT_TOKEN
  • OPENCLAW_QA_DISCORD_SUT_BOT_TOKEN
  • OPENCLAW_QA_DISCORD_SUT_APPLICATION_ID - 必须与 Discord 返回的 SUT 机器人用户 ID 匹配(否则该 lane 会快速失败)。

语音目标:

  • OPENCLAW_QA_DISCORD_VOICE_CHANNEL_ID 为 discord-voice-autojoin 选择语音/舞台频道;如果没有它,场景会为 SUT 机器人选择第一个可见的语音/舞台频道。使用环境变量凭据时,discord-transcripts-voice-authorization 需要它。

Discord YAML 模块场景(qa/scenarios/channels/discord-*.yaml):

  • discord-canary
  • discord-mention-gating
  • discord-native-help-command-registration
  • discord-progress-draft-lifecycle - 运行一个确定性的工具轮次,验证最终答案中没有合成的活动回执,确认在成功生成最终答案后工作草稿被删除,并确认错误最终答案会保留其草稿可见,作为诊断上下文。
  • discord-voice-autojoin - 可选启用的语音场景。独立运行,启用 channels.discord.voice.autoJoin,并验证 SUT 机器人当前的 Discord 语音状态是目标语音/舞台频道。Convex Discord 凭据可包含可选的 voiceChannelId;否则 runner 适配器会在服务器中发现第一个可见的语音/舞台频道。
  • discord-transcripts-voice-authorization - 可选启用的实时模型场景。一条真实的 driver-bot 消息首先证明:被排除在目标语音频道之外的发送者,在未加入的情况下会收到可见的 transcript-tool 拒绝。随后同一发送者被加入允许列表,并且必须开始、停止并离开实时捕获。该场景会写入脱敏的 JSON 证据,并在清理期间删除其已知的 Discord 消息。它要求在租用的凭据中显式提供 voiceChannelId,或提供 OPENCLAW_QA_DISCORD_VOICE_CHANNEL_ID;它绝不会自动发现房间。操作员必须在运行前预留一个专用的空 QA 语音频道。显式 ID 并不能证明该前提:测试框架观察的是 SUT 机器人的连接,而不是房间的完整成员列表。
  • discord-status-reactions-tool-only - 可选启用的 Mantis 场景。独立运行,因为它会将 SUT 切换为始终开启、仅工具的服务器回复,并设置 messages.statusReactions.enabled=true,然后捕获 REST 反应时间线以及 HTML/PNG 视觉产物。Mantis 前后报告还会将场景提供的 MP4 产物保存为 baseline.mp4 和 candidate.mp4。
  • discord-thread-reply-filepath-attachment - 可选启用的 Mantis 场景;参见 Discord Mantis 场景。

显式运行 Discord 语音自动加入场景:

pnpm openclaw qa discord \
  --scenario discord-voice-autojoin \
  --provider-mode mock-openai

在成功启动的子网关拆除期间,Discord 适配器会保留其凭据租约和心跳,直到该网关停止。如果关闭失败,测试套件会暂缓释放租约。

使用 Convex 租约运行转录授权场景,其负载包含预留 QA 房间的 voiceChannelId:

pnpm openclaw qa discord \
  --scenario discord-transcripts-voice-authorization \
  --provider-mode live-frontier \
  --credential-source convex \
  --credential-role maintainer

显式运行 Mantis 状态反应场景:

pnpm openclaw qa discord \
  --scenario discord-status-reactions-tool-only \
  --provider-mode live-frontier \
  --model openai/gpt-5.6-luna \
  --alt-model openai/gpt-5.6-luna \
  --fast

输出产物:

  • qa-suite-report.md
  • qa-suite-summary.json
  • qa-evidence.json - 实时传输检查的证据条目。
  • discord-qa-reaction-timelines.json 和 discord-status-reactions-tool-only-timeline.png(当状态反应场景运行时)。

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