渠道 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¶
针对一个真实的 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-canarychannel-mention-gating
每次运行都会在所选输出目录下写入 qa-suite-report.md、qa-suite-summary.json 和 qa-evidence.json。报告会标识真实的 Buzz 中继路径,但省略凭据值。
Telegram QA¶
针对 Telegram 测试服务器上的一个共享私有群组。一个 Convex 租约包含 SUT 机器人以及一个用于 QA 用户的独立 TDLib 授权。该用户发送测试消息,并通过一个长生命周期的 TDLib 进程观察 SUT 消息和编辑。共享实时群组要求提及租约机器人或回复该机器人;场景使用 @openclaw,适配器会将其替换为租约机器人用户名。原生命令指向同一个机器人。
必需环境变量:
OPENCLAW_QA_CONVEX_SITE_URLOPENCLAW_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.mdqa-suite-summary.jsonqa-evidence.json- 实时传输检查的证据条目,包括 profile、coverage、provider、channel、artifacts、result 和 RTT 字段。
打包 Telegram 运行使用相同的 Telegram 凭据契约。重复的 RTT 测量是正常打包 Telegram 实时通道的一部分;所选 RTT 检查的 RTT 分布会折叠到 qa-evidence.json 的 result.timing 下。
打包实时包装器会租用一个 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¶
针对一个真实的私有 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_IDOPENCLAW_QA_DISCORD_CHANNEL_IDOPENCLAW_QA_DISCORD_DRIVER_BOT_TOKENOPENCLAW_QA_DISCORD_SUT_BOT_TOKENOPENCLAW_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-canarydiscord-mention-gatingdiscord-native-help-command-registrationdiscord-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 语音自动加入场景:
在成功启动的子网关拆除期间,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.mdqa-suite-summary.jsonqa-evidence.json- 实时传输检查的证据条目。discord-qa-reaction-timelines.json和discord-status-reactions-tool-only-timeline.png(当状态反应场景运行时)。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw