多通道测试 CLI
- 原始链接:https://github.com/openclaw/multipass
- 来源章节:7. 官方仓库与生态仓库
- 来源小节:无
- 抓取方式:jina:https://r.jina.ai/http://github.com/openclaw/multipass
- 抓取时间:2026-04-05 13:47:10
- 状态:ok
中文内容
用于确定性消息传递提供程序测试的独立 CLI。 multipass 是配置驱动的,CI 友好的,并且有意不具有 openclaw 依赖性。现在,它可以对完整的 OpenClaw 消息传递矩阵进行建模:“bluebubbles”、“discord”、“feishu”、“googlechat”、“imessage”、“irc”、“line”、“matrix”、“mattermost”、“msteams”、“nextcloudtalk”、“nostr”、“signal”、“slack”、“synologychat”、“telegram”、“tlon”、“twitch”、 webchat、whatsapp、zalo、zalouser。
v1 形状为:
- 内置“loopback”提供程序,用于本地开发和合约测试
- 由 Chat SDK Discord 适配器支持的本机
discord提供程序 - 由 Chat SDK Slack 适配器支持的本机
slack提供程序 - 用于“matrix”和“imessage”的本机社区适配器
- 用于其余 OpenClaw 支持的消息通道的“脚本”桥
- Slack
watch/webhook的支持 webhook 的录音机模式 - Discord 的交互 webhook + 网关支持的记录器模式
- Matrix 和 iMessage 的录音机支持观看模式
- 基于随机数的
send、roundtrip、agent、probe、run、watch、doctor - 默认文本输出,稳定的
--json用于自动化 - 核心提供商模型与 Vercel Chat SDK 概念一致
安装
即插即用安装 PNPM 构建 PNPM 验证
本地运行:
pnpm dev 装置 --config 装置/示例/multipass.example.yaml pnpm dev 往返环回-roundtrip --config Fixtures/examples/multipass.example.yaml
质量门
PNPM 验证
这强制执行:
oxlint具有严格的正确性/可疑规则以及导入和 Vitest 检查strict、noUncheckedIndexedAccess、exactOptionalPropertyTypes下的tsc --noEmit- Vitest 覆盖率,语句、行和函数的全局阈值为 80%
oxfmt --check格式
GitHub Actions 在推送到“main”和拉取请求时运行相同的“pnpm verify”流程,并上传覆盖工件。
配置
--config <路径>./multipass.yaml./multipass.yml./multipass.json
顶层形状:
配置版本:1 用户名:多通道 提供者: 本地: 适配器:环回|脚本|松弛|不和谐|矩阵|即时消息 平台:请参阅下面的支持矩阵 固定装置:
- id: 字符串 提供者:字符串 账户ID:字符串? 模式: 探头 |发送 |往返 |代理人 目标: id: 字符串 频道ID:字符串? 线程ID:字符串? 行为:回声|代理|下沉? 入境比赛: 作者: 助理 |用户 |系统|任何 策略:包含|准确|正则表达式 随机数:包含 |准确|忽略 模式:字符串? 超时时间:数量 重试次数: 次数 标签: 字符串[] 环境:字符串[] 注释: 字符串?
凭证保留在环境中,而不是固定装置中。
支持矩阵
ready:loopback、原生slack、原生discord、原生社区matrix、原生社区imessagebridge:bluebubbles、feishu、googlechat、irc、line、mattermost、msteams、nextcloudtalk、nostr、signal、synologychat、telegram、tlon、twitch、webchat、whatsapp、zalo、zalouser- OpenClaw 中的插件支持,仍然通过桥支持:
feishu、line、mattermost、msteams、nextcloudtalk、nostr、synologychat、tlon、twitch、zalo、zalouser - 今天推荐的仅桥接路径:
bluebubbles、googlechat、irc、signal、telegram、webchat、whatsapp
电报桥注释:
- 使用一个机器人加一个真实的 Telegram 用户身份进行双向测试。
- 不要将 Telegram 往返建模为机器人到机器人; Telegram 机器人不会接收来自其他机器人的消息,并且 Bot API 传递是基于更新队列/webhook 的,而不是任意历史记录获取。
- 最佳操作员路径:首先是 DM,一旦 DM 往返稳定,然后是组/主题。
- 对于无人值守的自动化,请使用 MTProto(例如 Telethon)驱动用户端,而不是第二个机器人。
本机 Discord 提供程序选项:
提供者: 不和谐原生: 适配器:不和谐 平台:不和谐 环境: - DISCORD_BOT_TOKEN 不和谐: applicationId: "123456789012345678" # 可选;省略时从机器人令牌自动发现 publicKey: "0123456789abcdef..." # 可选;省略时从机器人令牌自动发现 录音机: 路径:./.multipass/recorders/discord-native.jsonl 网络钩子: 主机:127.0.0.1 端口:8788 路径:/discord/交互 publicUrl: https://example.ngrok.app/discord/interactions # 可选
Discord 夹具定位规则:
- 公会频道:设置
target.metadata.guildId和原始频道 ID 或完全编码的discord:guild:channel[:thread]id。 - DM:省略
target.metadata.guildId;target.id被视为用户 ID。 - 在 YAML 中引用 Discord 雪花,使它们保持字符串状态。
Discord 元数据默认为仅令牌设置。当省略“applicationId”或“publicKey”时,“multipass”会在第一次连接时使用机器人令牌从 Discord 中获取它们。
Discord watch 和 roundtrip 启动本地交互服务器以及 Discord Gateway 监听器。对于本地网关驱动的接收测试,“publicUrl”是可选的,但如果您希望 Discord 本身从计算机外部访问交互端点,则需要使用“publicUrl”。
本机 Slack 提供商选项:
提供者: 松弛本机: 适配器:松弛 平台:松弛 松弛: 录音机: 路径:./.multipass/recorders/slack-native.jsonl 网络钩子: 主机:127.0.0.1 端口:8787 路径:/slack/事件 publicUrl: https://example.ngrok.app/slack/events # 可选但有用
watch(别名:webhook)启动本地 Slack webhook 侦听器并追踪记录的入站 JSONL 流。 roundtrip 和 agent 还会根据需要启动 webhook 侦听器,并将在配置的端口上重用已运行的侦听器。
本机 Matrix 提供程序选项:
提供者: 矩阵原生: 适配器:矩阵 平台:矩阵 环境: - MATRIX_BASE_URL - MATRIX_ACCESS_TOKEN 矩阵: 基本URL:https://matrix.example.com 录音机: 路径:./.multipass/recorders/matrix-native.jsonl
本机 iMessage 提供商选项:
提供者: imessage-native: 适配器: 消息 平台: 微信 环境: - IMESSAGE_API_KEY - IMESSAGE_SERVER_URL 消息: 本地:假 服务器网址:https://imessage-gateway.example.com 录音机: 路径:./.multipass/recorders/imessage-native.jsonl
Matrix 和 iMessage “watch” 跟踪本地记录器流。 Matrix 没有 webhook 监听器; iMessage 在底层使用适配器网关侦听器。
赛程示例
请参阅 fixtures/examples/multipass.example.yaml。
完整的 OpenClaw 桥矩阵示例:
环回:
pnpm dev 往返环回-roundtrip --config Fixtures/examples/multipass.example.yaml pnpm 开发代理环回代理--config 固定装置/示例/multipass.example.yaml
原生松弛:
SLACK_BOT_TOKEN=xoxb-...
SLACK_SIGNING_SECRET=...
pnpm dev 探针 slack-native-agent --config Fixtures/examples/multipass.example.yaml
SLACK_BOT_TOKEN=xoxb-...
SLACK_SIGNING_SECRET=...
pnpm dev watch slack-native-agent --config Fixtures/examples/multipass.example.yaml
原生不和谐:
DISCORD_BOT_TOKEN=...
pnpm dev 探针discord-native-agent --config Fixtures/examples/multipass.example.yaml
DISCORD_BOT_TOKEN=...
pnpm dev watch discord-native-agent --config Fixtures/examples/multipass.example.yaml
通过 OpenClaw 桥接电报:
OPENCLAW_URL=http://127.0.0.1:8080
OPENCLAW_TOKEN=...
pnpm dev 往返 telegram-openclaw-roundtrip --config Fixtures/examples/openclaw-supported.yaml
对于真正的 Telegram 双向验证,请将“target.id”指向专用的人工测试帐户,而不是另一个机器人。
本机矩阵:
MATRIX_BASE_URL=https://matrix.example.com
MATRIX_ACCESS_TOKEN=...
pnpm dev 探针矩阵-native-agent --config 装置/示例/multipass.example.yaml
MATRIX_BASE_URL=https://matrix.example.com
MATRIX_ACCESS_TOKEN=...
pnpm dev watch matrix-native-agent --config Fixtures/examples/multipass.example.yaml
原生 iMessage:
IMESSAGE_SERVER_URL=https://imessage-gateway.example.com
IMESSAGE_API_KEY=...
pnpm dev 探针 imessage-native-agent --config 固定装置/示例/multipass.example.yaml
IMESSAGE_SERVER_URL=https://imessage-gateway.example.com
IMESSAGE_API_KEY=...
pnpm dev watch imessage-native-agent --config Fixtures/examples/multipass.example.yaml
脚本桥:
OPENCLAW_URL=http://127.0.0.1:18789
OPENCLAW_TOKEN=秘密
pnpm dev 探针 slack-openclaw-demo --config 夹具/示例/multipass.example.yaml
全桥矩阵自举:
OPENCLAW_URL=http://127.0.0.1:18789
OPENCLAW_TOKEN=秘密
pnpm 开发提供者 --config Fixtures/examples/openclaw-supported.yaml
命令
多通道提供商 多道夹具 多通道探头<夹具|提供者> 多通道发送<夹具> 多程往返 <固定装置> 多通道代理<夹具> 多次运行<夹具...> 多通道手表<固定装置> multipass webhook # watch 的别名 多次医生
脚本适配器合约
script 提供者在 stdin 上接收 JSON,并且必须在 stdout 上发出 JSON。
探针输入:
{ “夹具”:{“...”:“夹具配置”}, “提供商”:{ "id": "slack-openclaw", "manifestPath": "...", "config": { "...": "提供商配置" } } }
探针输出:
{ “健康”:真实, "details": ["令牌正常", "通道可达"] }
发送输出:
{ “已接受”:正确, “消息ID”:“123”, “threadId”:“松弛:C123:线程” }
waitForInbound 输出:
{ “消息”:{ “id”:“456”, "作者": "助理", "sentAt": "2026-03-13T21:00:00.000Z", "text": "ACK mp-demo-...", “threadId”:“松弛:C123:线程” } }
或:
{ “超时”:真 }
添加提供商
- 在“providers”下添加已配置的提供程序实例。
- 将“platform”设置为支持矩阵中受支持的 OpenClaw 通道 ID 之一。
- 对于原生 Slack 使用
adapter: slack,否则使用adapter: script用于基于桥的真正的 E2E。 - 添加一个或多个指向稳定模拟账户/目标的装置。
- 运行“multipass doctor”、“multipassprobe”,然后运行“multipass run ...”。
当前范围
- 真正的内置提供者:
loopback、本机slack - 真正的外部桥:完整 OpenClaw 通道矩阵的“脚本”
- 尚未实现:Slack 之外的本机适配器、更丰富的入站事件存储、富媒体/卡、记录器压缩/查询工具