chore(i18n): refresh zh-CN translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-25 07:09:52 +00:00
parent 3692999938
commit 9adba58a43

View File

@ -1,37 +1,36 @@
---
read_when:
- 你想让一个 OpenClaw 智能体加入 Google Meet 通话
- 你想让一个 OpenClaw 智能体创建一个新的 Google Meet 通话
- 你希望一个 OpenClaw 智能体加入 Google Meet 通话
- 你希望一个 OpenClaw 智能体创建一个新的 Google Meet 通话
- 你正在将 Chrome、Chrome 节点或 Twilio 配置为 Google Meet 传输方式
summary: Google Meet 插件:通过 Chrome 或 Twilio 加入明确指定的 Meet URL并使用实时语音默认设置
summary: Google Meet 插件:通过 Chrome 或 Twilio 加入显式的 Meet URL并默认启用实时语音
title: Google Meet 插件
x-i18n:
generated_at: "2026-04-25T07:01:15Z"
generated_at: "2026-04-25T07:07:51Z"
model: gpt-5.4
provider: openai
source_hash: 0c632ec97b38c6b21ed1ea9d748f8ade94a6ad0921bd13c0d22134ae679ed9cc
source_hash: 16291e144ff60b88af8ca182d5b67233af1ff3b00ea414fae18c46fb2ef909fb
source_path: plugins/google-meet.md
workflow: 15
---
OpenClaw 的 Google Meet 参支持——该插件在设计上是显式的:
OpenClaw 的 Google Meet 参与者支持——该插件在设计上是显式的:
- 它只会加入明确指定`https://meet.google.com/...` URL。
- 它只会加入显式`https://meet.google.com/...` URL。
- 它可以通过 Google Meet API 创建一个新的 Meet 空间,然后加入返回的 URL。
- `realtime` 语音是默认模式。
- 当需要更深入的推理或工具时,实时语音可以回调到完整的 OpenClaw 智能体。
- 智能体使用 `mode` 选择加入行为:实时收听/回话使用 `realtime`,或者使用 `transcribe` 来加入/控制浏览器而不启用实时语音桥接
- 身份验证从个人 Google OAuth 或已登录的 Chrome 配置文件开始
- 没有自动的同意提示公告
- 智能体通过 `mode` 选择加入行为:实时收听/回话使用 `realtime`,加入/控制浏览器但不启用实时语音桥接则使用 `transcribe`
- 认证起始方式可以是个人 Google OAuth或一个已经登录的 Chrome 配置文件
- 不会自动播报同意声明
- 默认的 Chrome 音频后端是 `BlackHole 2ch`
- Chrome 可以在本地运行,也可以在已配对的节点主机上运行。
- Twilio 接受拨入号码以及可选的 PIN 或 DTMF 序列。
- CLI 命令是 `googlemeet``meet` 保留给更广的智能体电话会议工作流。
- Twilio 接受一个拨入号码以及可选的 PIN 或 DTMF 序列。
- CLI 命令是 `googlemeet``meet` 保留给更广的智能体电话会议工作流。
## 快速开始
安装本地音频依赖并配置一个后端实时语音提供商。OpenAI 是默认选项Google Gemini Live 也可用,配合
`realtime.provider: "google"`
安装本地音频依赖并配置一个后端实时语音提供商。OpenAI 是默认选项Google Gemini Live 也可用,需配合 `realtime.provider: "google"`
```bash
brew install blackhole-2ch sox
@ -40,20 +39,20 @@ export OPENAI_API_KEY=sk-...
export GEMINI_API_KEY=...
```
`blackhole-2ch` 会安装 `BlackHole 2ch` 虚拟音频设备。Homebrew 的安装程序要重启后macOS 才会暴露该设备:
`blackhole-2ch` 会安装 `BlackHole 2ch` 虚拟音频设备。Homebrew 的安装程序要重启后macOS 才会暴露该设备:
```bash
sudo reboot
```
重启后,验证这两项是否都已就绪:
重启后,验证这两项都已就绪:
```bash
system_profiler SPAudioDataType | grep -i BlackHole
command -v rec play
```
启用插件:
启用插件:
```json5
{
@ -74,9 +73,9 @@ command -v rec play
openclaw googlemeet setup
```
设置输出旨在让智能体可读。它会报告 Chrome 配置文件、音频桥接、节点固定、延迟的实时引导,以及在已配置 Twilio 委派时,`voice-call` 插件和 Twilio 凭证是否就绪。
在让智能体加入之前,将任何 `ok: false` 的检查都视为阻塞项。
对于脚本或机器可读输出请使用 `openclaw googlemeet setup --json`
设置输出旨在便于智能体读取。它会报告 Chrome 配置文件、音频桥接、节点固定、延迟的实时介绍,以及在配置了 Twilio 委托时,`voice-call` 插件和 Twilio 凭证是否已就绪。
将任何 `ok: false` 的检查都视为阻塞项,在要求智能体加入之前先解决
脚本或机器可读输出请使用 `openclaw googlemeet setup --json`
加入会议:
@ -109,15 +108,14 @@ openclaw googlemeet create --no-join
`googlemeet create` 有两条路径:
- API 创建:当已配置 Google Meet OAuth 凭证时使用。这是最确定的路径,不依赖浏览器 UI 状态。
- 浏览器回退:当缺少 OAuth 凭证时使用。OpenClaw 会使用固定的 Chrome 节点,打开 `https://meet.google.com/new`,等待 Google 重定向到真实的会议代码 URL然后返回该 URL。路径要求节点上的 OpenClaw Chrome 配置文件已登录 Google。
浏览器自动化会处理 Meet 自身首次运行时的麦克风提示;该提示不会被视为 Google 登录失败。
加入和创建流程也会尽量复用现有的 Meet 标签页,而不是打开新标签页。匹配时会忽略无害的 URL 查询字符串,比如 `authuser`,这样智能体重试时会聚焦到已打开的会议,而不是创建第二个 Chrome 标签页。
- API 创建:当配置了 Google Meet OAuth 凭证时使用。这是最可预测的路径,并且不依赖浏览器 UI 状态。
- 浏览器回退:当缺少 OAuth 凭证时使用。OpenClaw 会使用固定的 Chrome 节点,打开 `https://meet.google.com/new`,等待 Google 重定向到真实的会议代码 URL然后返回该 URL。这条路径要求节点上的 OpenClaw Chrome 配置文件已登录 Google。
浏览器自动化会处理 Meet 自身首次运行麦克风提示;该提示不会被视为 Google 登录失败。
加入和创建流程也会尝试复用现有的 Meet 标签页,而不是新开一个。匹配时会忽略像 `authuser` 这样的无害 URL 查询字符串,因此智能体重试时应聚焦到已经打开的会议,而不是创建第二个 Chrome 标签页。
命令/工具输出包含一个 `source` 字段(`api` 或 `browser`),以便智能体解释使用了哪条路径。`create` 默认会加入新会议,并返回 `joined: true` 以及加入会话。若只想生成 URL请在 CLI 中使用
`create --no-join`,或者向工具传入 `"join": false`
命令/工具输出包含一个 `source` 字段(`api` 或 `browser`),因此智能体可以解释使用了哪条路径。`create` 默认会加入新会议,并返回 `joined: true` 以及加入会话。若仅需生成 URL请在 CLI 中使用 `create --no-join`,或向工具传入 `"join": false`
或者告诉智能体:“创建一个 Google Meet用实时语音加入然后把链接发给我。” 智能体应调用 `google_meet`,使用 `action: "create"`,然后分享返回的 `meetingUri`
或者你可以告诉智能体:“创建一个 Google Meet用实时语音加入然后把链接发给我。” 智能体应当使用 `action: "create"` 调用 `google_meet`,然后分享返回的 `meetingUri`
```json
{
@ -127,17 +125,17 @@ openclaw googlemeet create --no-join
}
```
要进行仅观察/浏览器控制的加入,请设置 `"mode": "transcribe"`。这不会启动双向实时模型桥接,因此它不会在会议中回话。
只需观察/控制浏览器的加入方式,请设置 `"mode": "transcribe"`。这不会启动双向实时模型桥接,因此它不会在会议中回话。
在实时会话期间,`google_meet` 状态包括浏览器和音频桥接健康状况,例如 `inCall`、`manualActionRequired`、`providerConnected`、`realtimeReady`、`audioInputActive`、`audioOutputActive`、最近输入/输出时间戳、字节计数以及桥接关闭状态。如果出现安全的 Meet 页面提示,浏览器自动化会在可能时处理它。登录、主持人准入,以及浏览器/操作系统权限提示会作为手动操作报告,并附带原因和消息,供智能体转
在实时会话期间,`google_meet` 状态会包含浏览器和音频桥接的健康信息,例如 `inCall`、`manualActionRequired`、`providerConnected`、`realtimeReady`、`audioInputActive`、`audioOutputActive`、最近输入/输出时间戳、字节计数以及桥接关闭状态。如果出现安全的 Meet 页面提示,浏览器自动化会在可能时处理它。登录、主持人准入,以及浏览器/操作系统权限提示会作为手动操作报告,并附带原因和消息,供智能体转
Chrome 会以已登录的 Chrome 配置文件身份加入。在 Meet 中,为 OpenClaw 使用的麦克风/扬声器路径选择 `BlackHole 2ch`。若要获得干净的双工音频,请使用独立的虚拟设备或类似 Loopback 的图形;单个 BlackHole 设备足够完成首次冒烟测试,但可能会产生回声。
Chrome 会以已登录的 Chrome 配置文件身份加入。在 Meet 中,选择 `BlackHole 2ch`为 OpenClaw 使用的麦克风/扬声器路径。若要获得干净的双工音频,请使用独立的虚拟设备或类似 Loopback 的音频图;单个 BlackHole 设备足以完成首次冒烟测试,但可能会产生回声。
### 本地 Gateway 网关 + Parallels Chrome
你**不**需要在 macOS VM 中运行完整的 OpenClaw Gateway 网关或配置模型 API 密钥,只是为了让 VM 托管 Chrome。你可以在本地运行 Gateway 网关和智能体,然后在 VM 中运行一个节点主机。只需在 VM 中启用一次内置插件,这样节点就会发布 Chrome 命令:
你**不**需要在 macOS VM 中运行完整的 OpenClaw Gateway 网关或配置模型 API 密钥,仅仅为了让 VM 托管 Chrome。你可以在本地运行 Gateway 网关和智能体,然后在 VM 中运行一个节点主机。只需在 VM 中启用一次内置插件,这样节点就会宣告 Chrome 命令:
部分的运行位置
组件运行位置如下
- Gateway 网关主机OpenClaw Gateway 网关、智能体工作区、模型/API 密钥、实时提供商,以及 Google Meet 插件配置。
- Parallels macOS VMOpenClaw CLI/节点主机、Google Chrome、SoX、BlackHole 2ch以及一个已登录 Google 的 Chrome 配置文件。
@ -149,13 +147,13 @@ Chrome 会以已登录的 Chrome 配置文件身份加入。在 Meet 中,为 O
brew install blackhole-2ch sox
```
安装 BlackHole 后重启 VM以便 macOS 暴露 `BlackHole 2ch`
安装 BlackHole 后重启 VM这样 macOS 才会暴露 `BlackHole 2ch`
```bash
sudo reboot
```
重启后,验证 VM 能看到该音频设备 SoX 命令:
重启后,验证 VM 能看到该音频设备以及 SoX 命令:
```bash
system_profiler SPAudioDataType | grep -i BlackHole
@ -174,14 +172,14 @@ openclaw plugins enable google-meet
openclaw node run --host <gateway-host> --port 18789 --display-name parallels-macos
```
如果 `<gateway-host>` 是局域网 IP且你未使用 TLS则节点会拒绝该明文 WebSocket除非你显式允许该受信任私有网络
如果 `<gateway-host>` 是局域网 IP且你没有使用 TLS则除非你显式为该受信任私有网络启用明文 WebSocket否则节点会拒绝连接
```bash
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macos
```
当你将节点安装为 LaunchAgent 时,也要使用相同的环境变量:
将节点安装为 LaunchAgent 时,也请使用相同的环境变量:
```bash
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
@ -189,24 +187,23 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node restart
```
`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` 是进程环境变量,不是
`openclaw.json` 设置。`openclaw node install` 会在安装命令中存在该变量时,将其存储到 LaunchAgent 环境中。
`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` 是进程环境变量,不是 `openclaw.json` 设置。
`openclaw node install` 执行安装命令时检测到该变量存在,就会把它存入 LaunchAgent 环境中。
从 Gateway 网关主机批准该节点:
在 Gateway 网关主机上批准该节点:
```bash
openclaw devices list
openclaw devices approve <requestId>
```
确认 Gateway 网关能看到该节点,并且它同时发布了 `googlemeet.chrome`
和浏览器能力/`browser.proxy`
确认 Gateway 网关能看到该节点,并且它宣告了 `googlemeet.chrome` 以及浏览器能力/`browser.proxy`
```bash
openclaw nodes status
```
在 Gateway 网关主机上通过该节点路由 Meet
在 Gateway 网关主机上将 Meet 路由到该节点
```json5
{
@ -236,67 +233,60 @@ openclaw nodes status
}
```
现在可以像平常一样从 Gateway 网关主机加入:
现在你就可以在 Gateway 网关主机上像平常一样加入:
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij
```
或者智能体使用 `google_meet` 工具,并设置 `transport: "chrome-node"`
或者要求智能体使用 `google_meet` 工具,并设置 `transport: "chrome-node"`
若要执行一个单命令冒烟测试,用于创建或复用会话、说出一段已知短语并打印会话健康状态:
如果你想做一个单命令冒烟测试,用来创建或复用会话、说出一段已知短语,并打印会话健康状态:
```bash
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij
```
在加入期间OpenClaw 浏览器自动化会填写访客名称,点击“加入/请求加入”,并在出现 Meet 首次运行的“使用麦克风”选项时接受它。在仅浏览器创建会议期间,如果 Meet 未显示使用麦克风按钮,它也可以在没有麦克风的情况下继续通过相同提示。
如果浏览器配置文件未登录、Meet 正在等待主持人准入、Chrome 需要麦克风/摄像头权限,或者 Meet 卡在自动化无法解决的提示上,则 join/test-speech 结果会报告
`manualActionRequired: true`,并附带 `manualActionReason`
`manualActionMessage`。智能体应停止重试加入,报告该精确消息以及当前的 `browserUrl`/`browserTitle`,并且仅在手动浏览器操作完成后再重试。
在加入过程中OpenClaw 浏览器自动化会填写访客名称、点击“加入/请求加入”,并在出现时接受 Meet 首次运行的“使用麦克风”选择。在仅浏览器创建会议期间,如果 Meet 没有显示“使用麦克风”按钮,它也可以在不使用麦克风的情况下继续通过相同提示。
如果浏览器配置文件未登录、Meet 正在等待主持人准入、Chrome 需要麦克风/摄像头权限,或者 Meet 卡在某个自动化无法解决的提示上,则加入/`test-speech` 结果会报告 `manualActionRequired: true`,并附带 `manualActionReason``manualActionMessage`。智能体应停止重复重试加入,原样报告该消息以及当前的 `browserUrl`/`browserTitle`,并且只在手动浏览器操作完成后再重试。
如果省略 `chromeNode.node`只有在恰好有一个已连接节点同时发布 `googlemeet.chrome` 和浏览器控制能力时OpenClaw 才会自动选择。如果连接了多个可用节点,请将 `chromeNode.node` 设置为节点 id、显示名称或远程 IP。
如果省略 `chromeNode.node`OpenClaw 只有在恰好只有一个已连接节点同时宣告 `googlemeet.chrome` 和浏览器控制时,才会自动选择该节点。如果连接了多个具备能力的节点,请将 `chromeNode.node` 设置为节点 id、显示名称或远程 IP。
常见故障检查:
- `No connected Google Meet-capable node`:在 VM 中启动 `openclaw node run`,批准配对,并确保你已在 VM 中运行 `openclaw plugins enable google-meet``openclaw plugins enable browser`。同时确认 Gateway 网关主机通过
`gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]` 允许这两个节点命令。
- `BlackHole 2ch audio device not found on the node`:在 VM 中安装 `blackhole-2ch`,并重启 VM。
- Chrome 打开了但无法加入:在 VM 中登录浏览器配置文件,或者保持设置 `chrome.guestName` 用于访客加入。访客自动加入会通过节点浏览器代理使用 OpenClaw 浏览器自动化;请确保节点浏览器配置指向你想要的配置文件,例如
`browser.defaultProfile: "user"` 或一个已存在会话的命名配置文件。
- 重复的 Meet 标签页:保持启用 `chrome.reuseExistingTab: true`。OpenClaw 会先为相同的 Meet URL 激活现有标签页,然后才打开新标签页;浏览器会议创建也会复用进行中的 `https://meet.google.com/new` 或 Google 账号提示标签页,而不是再打开一个。
- 没有音频:在 Meet 中,将麦克风/扬声器路由到 OpenClaw 使用的虚拟音频设备路径;使用独立虚拟设备或类似 Loopback 的路由来获得干净的双工音频。
- `No connected Google Meet-capable node`:在 VM 中启动 `openclaw node run`,批准配对,并确保已经在 VM 中运行 `openclaw plugins enable google-meet``openclaw plugins enable browser`。还要确认 Gateway 网关主机通过 `gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]` 允许这两个节点命令。
- `BlackHole 2ch audio device not found on the node`:在 VM 中安装 `blackhole-2ch` 并重启 VM。
- Chrome 能打开但无法加入:在 VM 内的浏览器配置文件中登录,或者保持设置 `chrome.guestName` 以供访客加入。访客自动加入会通过节点浏览器代理使用 OpenClaw 浏览器自动化;请确保节点浏览器配置指向你想使用的配置文件,例如 `browser.defaultProfile: "user"` 或一个已命名的现有会话配置文件。
- 重复的 Meet 标签页:保持启用 `chrome.reuseExistingTab: true`。OpenClaw 会在打开新标签页之前激活相同 Meet URL 的现有标签页,而浏览器创建会议时,也会在新开之前复用一个进行中的 `https://meet.google.com/new` 或 Google 账号提示标签页。
- 没有音频:在 Meet 中,将麦克风/扬声器路由到 OpenClaw 使用的虚拟音频设备路径;若要获得干净的双工音频,请使用独立的虚拟设备或类似 Loopback 的路由方式。
## 安装说明
Chrome 实时默认设置使用两个外部工具:
Chrome 实时默认配置会使用两个外部工具:
- `sox`:命令行音频工具。该插件使用它的 `rec``play`
命令作为默认 8 kHz G.711 mu-law 音频桥接。
- `blackhole-2ch`macOS 虚拟音频驱动。它会创建 `BlackHole 2ch`
音频设备,供 Chrome/Meet 路由使用。
- `sox`:命令行音频工具。插件使用它的 `rec``play` 命令来实现默认的 8 kHz G.711 mu-law 音频桥接。
- `blackhole-2ch`macOS 虚拟音频驱动。它会创建 `BlackHole 2ch` 音频设备,供 Chrome/Meet 路由使用。
OpenClaw 不会捆绑或重新分发这两个软件包。文档要求用户通过 Homebrew 将它们作为主机依赖安装。SoX 的许可证是
`LGPL-2.0-only AND GPL-2.0-only`BlackHole 是 GPL-3.0。如果你正在构建一个捆绑 BlackHole 和 OpenClaw 的安装程序或设备,请审查 BlackHole 上游许可条款,或从 Existential Audio 获取单独许可证。
OpenClaw 不会捆绑或重新分发这两个软件包。文档要求用户通过 Homebrew 将它们作为主机依赖安装。SoX 的许可证为 `LGPL-2.0-only AND GPL-2.0-only`BlackHole 为 GPL-3.0。如果你要构建一个将 BlackHole 与 OpenClaw 一起打包的安装程序或设备,请审阅 BlackHole 上游的许可条款,或向 Existential Audio 获取单独许可。
## 传输方式
### Chrome
Chrome 传输方式会在 Google Chrome 中打开 Meet URL并以已登录的 Chrome 配置文件身份加入。在 macOS 上,插件会在启动前检查 `BlackHole 2ch`。如果已配置,它还会在打开 Chrome 之前运行音频桥接健康检查命令和启动命令。当 Chrome/音频位于 Gateway 网关主机上时使用 `chrome`;当 Chrome/音频位于已配对节点(例如 Parallels macOS VM上时使用 `chrome-node`
Chrome 传输方式会在 Google Chrome 中打开 Meet URL并以已登录的 Chrome 配置文件身份加入。在 macOS 上,插件会在启动前检查 `BlackHole 2ch`。如果已配置,它还会在打开 Chrome 之前运行音频桥接健康检查命令和启动命令。当 Chrome/音频运行在 Gateway 网关主机上时使用 `chrome`;当 Chrome/音频运行在已配对节点(例如 Parallels macOS VM上时使用 `chrome-node`
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome
openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome-node
```
将 Chrome 麦克风和扬声器音频通过本地 OpenClaw 音频桥接进行路由。如果未安装 `BlackHole 2ch`,加入因设置错误而失败,而不是在没有音频路径的情况下静默加入。
将 Chrome 麦克风和扬声器音频通过本地 OpenClaw 音频桥接进行路由。如果未安装 `BlackHole 2ch`,加入操作会因设置错误而失败,而不是在没有音频路径的情况下静默加入。
### Twilio
Twilio 传输方式是一种严格的拨号计划,委派给 Voice Call 插件。它不会从 Meet 页面解析电话号码。
Twilio 传输方式是一个严格的拨号计划,并委托给 Voice Call 插件。它不会解析 Meet 页面来提取电话号码。
无法使用 Chrome 参会,或者你想要电话拨入作为回退方案时请使用此方式。Google Meet 必须为该会议提供电话拨入号码和 PINOpenClaw 不会从 Meet 页面中发现这些信息。
Chrome 参与方式不可用,或你想使用电话拨入作为回退方案时请使用此方式。Google Meet 必须为该会议提供电话拨入号码和 PINOpenClaw 不会从 Meet 页面中发现这些信息。
在 Gateway 网关主机上启用 Voice Call 插件,而不是在 Chrome 节点上:
@ -323,7 +313,7 @@ Twilio 传输方式是一种严格的拨号计划,委派给 Voice Call 插件
}
```
通过环境变量或配置提供 Twilio 凭证。环境变量可将密钥保留在 `openclaw.json` 之外
通过环境变量或配置提供 Twilio 凭证。环境变量可以让密钥不出现在 `openclaw.json`
```bash
export TWILIO_ACCOUNT_SID=AC...
@ -331,9 +321,9 @@ export TWILIO_AUTH_TOKEN=...
export TWILIO_FROM_NUMBER=+15550001234
```
启用 `voice-call` 后,重启或重新加载 Gateway 网关;在已经运行的 Gateway 网关进程重新加载之前,插件配置更改不会生效
启用 `voice-call` 后,请重启或重新加载 Gateway 网关;在 Gateway 网关重新加载之前,已经运行中的 Gateway 网关进程不会看到插件配置更改
然后验证:
然后进行验证:
```bash
openclaw config validate
@ -341,8 +331,7 @@ openclaw plugins list | grep -E 'google-meet|voice-call'
openclaw googlemeet setup
```
当 Twilio 委派连线完成后,`googlemeet setup` 将包含成功的
`twilio-voice-call-plugin``twilio-voice-call-credentials` 检查。
当 Twilio 委托已正确接通时,`googlemeet setup` 会包含成功的 `twilio-voice-call-plugin``twilio-voice-call-credentials` 检查。
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
@ -362,11 +351,11 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
## OAuth 和预检
由于 `googlemeet create` 可以回退到浏览器自动化,因此 OAuth 对于创建 Meet 链接是可选的。当你想使用官方 API 创建、空间解析或 Meet Media API 预检时,请配置 OAuth。
对于创建 Meet 链接来说OAuth 是可选的,因为 `googlemeet create` 可以回退到浏览器自动化。当你需要官方 API 创建、空间解析或 Meet Media API 预检时,再配置 OAuth。
Google Meet API 访问使用用户 OAuth创建一个 Google Cloud OAuth 客户端,请求所需作用域,授权一个 Google 账号,然后将生成的刷新令牌存储 Google Meet 插件配置中,或提供 `OPENCLAW_GOOGLE_MEET_*` 环境变量。
Google Meet API 访问使用用户 OAuth创建一个 Google Cloud OAuth 客户端,请求所需作用域,授权一个 Google 账号,然后将生成的刷新令牌存储 Google Meet 插件配置中,或提供 `OPENCLAW_GOOGLE_MEET_*` 环境变量。
OAuth 不会替代 Chrome 加入路径。当你使用浏览器参会时,`chrome` 和 `chrome-node` 传输方式仍然通过已登录的 Chrome 配置文件、BlackHole/SoX 以及一个已连接节点来加入。OAuth 仅用于官方 Google Meet API 路径:创建会议空间、解析空间,以及运行 Meet Media API 预检。
OAuth 不会替代 Chrome 加入路径。当你使用浏览器参与方式时Chrome 和 chrome-node 传输方式仍然通过一个已登录的 Chrome 配置文件、BlackHole/SoX以及一个已连接节点来加入。OAuth 只用于官方 Google Meet API 路径:创建会议空间、解析空间,以及执行 Meet Media API 预检。
### 创建 Google 凭证
@ -376,12 +365,12 @@ OAuth 不会替代 Chrome 加入路径。当你使用浏览器参会时,`chrom
2. 为该项目启用 **Google Meet REST API**
3. 配置 OAuth 同意屏幕。
- 对于 Google Workspace 组织,**Internal** 最简单。
- **External** 适用于个人/测试环境;当应用处于 Testing 状态时,将每个会授权该应用的 Google 账号添加为测试用户。
- 对于个人/测试设置,**External** 也可以;当应用处于 Testing 状态时,将每个会授权该应用的 Google 账号添加为测试用户。
4. 添加 OpenClaw 请求的作用域:
- `https://www.googleapis.com/auth/meetings.space.created`
- `https://www.googleapis.com/auth/meetings.space.readonly`
- `https://www.googleapis.com/auth/meetings.conference.media.readonly`
5. 创建一个 OAuth 客户端 ID。
5. 创建一个 OAuth client ID。
- 应用类型:**Web application**。
- 已获授权的重定向 URI
@ -389,22 +378,22 @@ OAuth 不会替代 Chrome 加入路径。当你使用浏览器参会时,`chrom
http://localhost:8085/oauth2callback
```
6. 复制客户端 ID 和客户端密钥
6. 复制 client ID 和 client secret
`meetings.space.created` 是 Google Meet `spaces.create` 所必需的。
`meetings.space.readonly` 允许 OpenClaw 将 Meet URL/代码解析为空间。
`meetings.conference.media.readonly` 用于 Meet Media API 预检和媒体相关工作Google 可能要求加入 Developer Preview 才能实际使用 Media API
如果你只需要基于浏览器的 Chrome 加入,可以完全跳过 OAuth。
`meetings.space.readonly` 让 OpenClaw 能将 Meet URL/代码解析为会议空间。
`meetings.conference.media.readonly` 用于 Meet Media API 预检和媒体相关工作;实际使用 Media API 时,Google 可能要求加入 Developer Preview。
如果你只需要基于浏览器的 Chrome 加入方式,可以完全跳过 OAuth。
### 生成刷新令牌
配置 `oauth.clientId`,并可选择配置 `oauth.clientSecret`,或者将它们作为环境变量传入,然后运行:
配置 `oauth.clientId`,并可选配置 `oauth.clientSecret`,或者通过环境变量传入它们,然后运行:
```bash
openclaw googlemeet auth login --json
```
该命令会打印一个带有刷新令牌的 `oauth` 配置块。它使用 PKCE、本地主机回调 `http://localhost:8085/oauth2callback`,并支持使用 `--manual`手动复制/粘贴流程。
该命令会打印一个包含刷新令牌的 `oauth` 配置块。它使用 PKCE、本地回调 `http://localhost:8085/oauth2callback`,并支持通过 `--manual` 进行手动复制/粘贴流程。
示例:
@ -414,7 +403,7 @@ OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \
openclaw googlemeet auth login --json
```
当浏览器无法访问本地回调时,使用手动模式:
当浏览器无法访问本地回调时,使用手动模式:
```bash
OPENCLAW_GOOGLE_MEET_CLIENT_ID="your-client-id" \
@ -422,7 +411,7 @@ OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \
openclaw googlemeet auth login --json --manual
```
JSON 输出包
JSON 输出包
```json
{
@ -458,50 +447,54 @@ JSON 输出包括:
}
```
如果你不想将刷新令牌写入配置,优先使用环境变量。如果配置和环境变量同时存在,插件会先解析配置,再回退到环境变量。
如果你不希望将刷新令牌写入配置中,优先使用环境变量。
如果配置和环境变量同时存在,插件会优先解析配置,然后再回退到环境变量。
OAuth 同意包括 Meet 空间创建、Meet 空间读取访问和 Meet 会议媒体读取访问。如果你在支持会议创建之前就已完成身份验证,请重新运行 `openclaw googlemeet auth login --json`,以便刷新令牌具有 `meetings.space.created` 作用域。
OAuth 同意范围包括 Meet 空间创建、Meet 空间读取访问和 Meet 会议媒体读取访问。
如果你是在会议创建支持存在之前完成认证的,请重新运行 `openclaw googlemeet auth login --json`,以便刷新令牌包含 `meetings.space.created` 作用域。
### 使用 Doctor 验证 OAuth
当你想要快速、非敏感信息的健康检查时,运行 OAuth Doctor
当你需要一个快速且不泄露敏感信息的健康检查时,请运行 OAuth Doctor
```bash
openclaw googlemeet doctor --oauth --json
```
这不会加载 Chrome 运行时,也不需要已连接的 Chrome 节点。它会检查 OAuth 配置是否存在以及刷新令牌是否能够生成访问令牌。JSON 报告只包含 `ok`、`configured`、`tokenSource`、`expiresAt` 和检查消息等状态字段;不会打印访问令牌、刷新令牌或客户端密钥。
这不会加载 Chrome 运行时,也不要求连接 Chrome 节点。
它会检查 OAuth 配置是否存在以及刷新令牌是否能够生成访问令牌。JSON 报告只包含 `ok`、`configured`、`tokenSource`、`expiresAt` 和检查消息等状态字段;不会打印访问令牌、刷新令牌或 client secret。
常见结果:
| 检查项 | 含义 |
| -------------------- | ---------------------------------------------------------------------------------------- |
| `oauth-config` | 存在 `oauth.clientId``oauth.refreshToken`,或存在缓存的访问令牌。 |
| `oauth-token` | 缓存的访问令牌仍然有效,或刷新令牌已生成新的访问令牌。 |
| `meet-spaces-get` | 可选的 `--meeting` 检查已解析现有 Meet 空间。 |
| `meet-spaces-create` | 可选的 `--create-space` 检查已创建新的 Meet 空间。 |
| 检查项 | 含义 |
| -------------------- | --------------------------------------------------------------------------------------- |
| `oauth-config` | 存在 `oauth.clientId``oauth.refreshToken`,或存在缓存的访问令牌。 |
| `oauth-token` | 缓存的访问令牌仍然有效,或刷新令牌已生成新的访问令牌。 |
| `meet-spaces-get` | 可选的 `--meeting` 检查已解析一个现有 Meet 空间。 |
| `meet-spaces-create` | 可选的 `--create-space` 检查已创建一个新的 Meet 空间。 |
若还要验证 Google Meet API 已启用以及 `spaces.create` 作用域,请运行带副作用的创建检查:
如果还需要证明 Google Meet API 已启用,并且具备 `spaces.create` 作用域,请运行会产生副作用的创建检查:
```bash
openclaw googlemeet doctor --oauth --create-space --json
openclaw googlemeet create --no-join --json
```
`--create-space` 会创建一个一次性的 Meet URL。当你需要确认 Google Cloud 项目已启用 Meet API并且授权账号具 `meetings.space.created` 作用域时,请使用它。
`--create-space` 会创建一个一次性的 Meet URL。当你需要确认 Google Cloud 项目已启用 Meet API并且授权账号具 `meetings.space.created` 作用域时,请使用它。
若要验证对现有会议空间的读取访问
若要证明对现有会议空间具有读取权限
```bash
openclaw googlemeet doctor --oauth --meeting https://meet.google.com/abc-defg-hij --json
openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij
```
`doctor --oauth --meeting``resolve-space` 用于验证已授权 Google 账号可访问的现有空间的读取权限。这些检查返回 `403` 通常意味着 Google Meet REST API 未启用、已同意的刷新令牌缺少所需作用域,或者该 Google 账号无法访问该 Meet 空间。刷新令牌错误则表示需要重新运行 `openclaw googlemeet auth login --json` 并存储新的 `oauth` 块。
`doctor --oauth --meeting``resolve-space` 可以证明已授权的 Google 账号对其可访问的现有空间具有读取权限。
这些检查返回 `403` 通常意味着 Google Meet REST API 未启用、已同意的刷新令牌缺少所需作用域,或者该 Google 账号无法访问该 Meet 空间。若是刷新令牌错误,则表示你需要重新运行 `openclaw googlemeet auth login --json`,并存储新的 `oauth` 配置块。
浏览器回退不需要 OAuth 凭证。在该模式下Google 身份验证来自所选节点上已登录的 Chrome 配置文件,而不是 OpenClaw 配置。
浏览器回退模式不需要任何 OAuth 凭证。在该模式下Google 认证来自所选节点上已登录的 Chrome 配置文件,而不是 OpenClaw 配置。
以下环境变量可作为回退
以下环境变量可作为回退来源
- `OPENCLAW_GOOGLE_MEET_CLIENT_ID``GOOGLE_MEET_CLIENT_ID`
- `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET``GOOGLE_MEET_CLIENT_SECRET`
@ -518,7 +511,7 @@ openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij
```
在媒体相关工作之前运行预检:
执行媒体相关工作之前运行预检:
```bash
openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij
@ -531,14 +524,15 @@ openclaw googlemeet artifacts --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet attendance --meeting https://meet.google.com/abc-defg-hij
```
如果你已经知道会议记录 id直接使用它:
如果你已经知道 conference record id可以直接使用它:
```bash
openclaw googlemeet latest --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 --json
openclaw googlemeet attendance --conference-record conferenceRecords/abc123 --json
```
写出可读报告:
输出一份可读报告:
```bash
openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 \
@ -547,7 +541,8 @@ openclaw googlemeet attendance --conference-record conferenceRecords/abc123 \
--format markdown --output meet-attendance.md
```
`artifacts` 会在 Google 为会议暴露这些数据时,返回会议记录元数据以及参会者、录制、转录、结构化 transcript-entry 和智能笔记资源元数据。对于大型会议,使用 `--no-transcript-entries` 可跳过条目查询。`attendance` 会将参会者扩展为带有加入/离开时间戳的参会者会话行。这些命令只使用 Meet REST APIGoogle Docs/Drive 文档正文下载被有意排除在范围之外,因为那需要单独的 Google Docs/Drive 访问权限。
`artifacts` 会返回会议记录元数据,以及当 Google 为该会议提供这些资源时的参与者、录制、转录、结构化 transcript-entry 和智能笔记资源元数据。对于大型会议,可使用 `--no-transcript-entries` 跳过条目查询。
`attendance` 会将参与者展开为 participant-session 行,并包含加入/离开时间戳。这些命令只使用 Meet REST APIGoogle Docs/Drive 文档正文下载被有意排除在范围之外,因为那需要额外的 Google Docs/Drive 访问权限。
创建一个新的 Meet 空间:
@ -555,9 +550,9 @@ openclaw googlemeet attendance --conference-record conferenceRecords/abc123 \
openclaw googlemeet create
```
该命令会打印新的 `meeting uri`、来源以及加入会话。有 OAuth 凭证时,它使用官方 Google Meet API。没有 OAuth 凭证时,它会回退为使用固定 Chrome 节点上已登录的浏览器配置文件。智能体可以使用 `google_meet` 工具并设置 `action: "create"`一步完成创建和加入。若只创建 URL请传入 `"join": false`
该命令会打印新的 `meeting uri`、来源以及加入会话。有 OAuth 凭证时,它使用官方 Google Meet API。没有 OAuth 凭证时,它会使用固定的 Chrome 节点中已登录的浏览器配置文件作为回退。智能体可以通过使用 `action: "create"``google_meet` 工具一步完成创建和加入。若只创建 URL请传入 `"join": false`
浏览器回退的 JSON 输出示例:
浏览器回退模式下的 JSON 输出示例:
```json
{
@ -577,26 +572,25 @@ openclaw googlemeet create
}
```
如果浏览器回退在能够创建 URL 之前遇到 Google 登录或 Meet 权限阻塞Gateway 网关方法返回失败响应,而 `google_meet` 工具会返回结构化细节,而不是纯字符串:
如果浏览器回退在创建 URL 之前遇到 Google 登录或 Meet 权限阻塞Gateway 网关方法返回失败响应,而 `google_meet` 工具会返回结构化细节,而不是纯字符串:
```json
{
"source": "browser",
"error": "google-login-required: 在 OpenClaw 浏览器配置文件中登录 Google然后重试会议创建。",
"error": "google-login-required: 在 OpenClaw 浏览器配置文件中登录 Google然后重试创建会议。",
"manualActionRequired": true,
"manualActionReason": "google-login-required",
"manualActionMessage": "在 OpenClaw 浏览器配置文件中登录 Google然后重试会议创建。",
"manualActionMessage": "在 OpenClaw 浏览器配置文件中登录 Google然后重试创建会议。",
"browser": {
"nodeId": "ba0f4e4bc...",
"targetId": "tab-1",
"browserUrl": "https://accounts.google.com/signin",
"browserTitle": "登录 - Google 账号"
"browserTitle": "Sign in - Google Accounts"
}
}
```
当智能体看到 `manualActionRequired: true` 时,它应报告
`manualActionMessage`,以及浏览器节点/标签页上下文,并停止打开新的 Meet 标签页,直到操作员完成浏览器步骤。
当智能体看到 `manualActionRequired: true` 时,它应报告 `manualActionMessage`,以及浏览器节点/标签页上下文,并停止打开新的 Meet 标签页,直到操作员完成该浏览器步骤。
API 创建的 JSON 输出示例:
@ -619,14 +613,13 @@ API 创建的 JSON 输出示例:
}
```
创建 Meet 默认会立即加入。`chrome` 或 `chrome-node` 传输方式仍然需要一个已登录 Google 的 Chrome 配置文件,才能通过浏览器加入。如果该配置文件已退出登录OpenClaw 会报告 `manualActionRequired: true` 或浏览器回退错误,并要求操作员先完成 Google 登录再重试。
创建 Meet 默认会直接加入。`chrome` 或 `chrome-node` 传输方式仍然需要一个已登录 Google 的 Chrome 配置文件,才能通过浏览器加入。如果该配置文件已登出OpenClaw 会报告 `manualActionRequired: true` 或浏览器回退错误,并要求操作员先完成 Google 登录进行重试。
只有在确认你的 Cloud 项目、OAuth 主体以及会议参与者都已加入用于 Meet 媒体 API 的 Google Workspace Developer Preview Program 后,才设置 `preview.enrollmentAcknowledged: true`
只有在确认你的 Cloud 项目、OAuth 主体以及会议参与者都已加入用于 Meet 媒体 API 的 Google Workspace Developer Preview Program 后,才设置 `preview.enrollmentAcknowledged: true`
## 配置
常见的 Chrome 实时路径只需要启用该插件、BlackHole、SoX以及一个后端实时语音提供商密钥。OpenAI 是默认选项;设置
`realtime.provider: "google"` 可使用 Google Gemini Live
常见的 Chrome 实时路径只需要启用插件、安装 BlackHole 和 SoX以及一个后端实时语音提供商密钥。OpenAI 是默认值;设置 `realtime.provider: "google"` 可使用 Google Gemini Live
```bash
brew install blackhole-2ch sox
@ -656,20 +649,16 @@ export GEMINI_API_KEY=...
- `defaultMode: "realtime"`
- `chromeNode.node``chrome-node` 的可选节点 id/名称/IP
- `chrome.audioBackend: "blackhole-2ch"`
- `chrome.guestName: "OpenClaw Agent"`:在已退出登录的 Meet 访客
界面上使用的名称
- `chrome.autoJoin: true`:在 `chrome-node` 上通过 OpenClaw 浏览器自动化尽力填写访客名称并点击“立即加入”
- `chrome.reuseExistingTab: true`:激活现有 Meet 标签页,而不是
打开重复标签页
- `chrome.waitForInCallMs: 20000`:等待 Meet 标签页报告已在通话中,
然后再触发实时引导
- `chrome.guestName: "OpenClaw Agent"`:用于已登出 Meet 访客界面的名称
- `chrome.autoJoin: true`:通过 OpenClaw 浏览器自动化,在 `chrome-node` 上尽力填写访客名并点击“立即加入”
- `chrome.reuseExistingTab: true`:激活现有 Meet 标签页,而不是打开重复标签页
- `chrome.waitForInCallMs: 20000`:等待 Meet 标签页报告已在通话中,然后才触发实时介绍
- `chrome.audioInputCommand`:将 8 kHz G.711 mu-law 音频写入 stdout 的 SoX `rec` 命令
- `chrome.audioOutputCommand`:从 stdin 读取 8 kHz G.711 mu-law 音频的 SoX `play` 命令
- `realtime.provider: "openai"`
- `realtime.toolPolicy: "safe-read-only"`
- `realtime.instructions`:简短的口头回复,较深入的回答使用
`openclaw_agent_consult`
- `realtime.introMessage`:实时桥接连接时的简短口头就绪检查;将其设置为 `""` 可静默加入
- `realtime.instructions`:简短口头回复,需要更深入回答时使用 `openclaw_agent_consult`
- `realtime.introMessage`:当实时桥接连接时,做一个简短口头就绪检查;将其设为 `""` 可静默加入
可选覆盖项:
@ -715,7 +704,7 @@ export GEMINI_API_KEY=...
}
```
`voiceCall.enabled` 默认为 `true`;使用 Twilio 传输方式时,它会将实际的 PSTN 呼叫和 DTMF 委派给 Voice Call 插件。如果未启用 `voice-call`Google Meet 仍然可以验证并记录拨号计划,但无法发起 Twilio 呼叫。
`voiceCall.enabled` 默认为 `true`;使用 Twilio 传输方式时,它会将实际 PSTN 呼叫和 DTMF 委托给 Voice Call 插件。如果未启用 `voice-call`Google Meet 仍然可以验证并记录拨号计划,但无法发起 Twilio 呼叫。
## 工具
@ -730,18 +719,17 @@ export GEMINI_API_KEY=...
}
```
当 Chrome 运行在 Gateway 网关主机上时,使用 `transport: "chrome"`。当 Chrome 运行在已配对节点(例如 Parallels VM上时使用
`transport: "chrome-node"`。在这两种情况下,实时模型和 `openclaw_agent_consult` 都运行在 Gateway 网关主机上,因此模型凭证会保留在那里。
当 Chrome 运行在 Gateway 网关主机上时,使用 `transport: "chrome"`。当 Chrome 运行在已配对节点(如 Parallels VM上时使用 `transport: "chrome-node"`。无论哪种情况,实时模型和 `openclaw_agent_consult` 都运行在 Gateway 网关主机上,因此模型凭证会留在那里。
使用 `action: "status"` 列出活动会话或检查某个会话 ID。使用带 `sessionId``message``action: "speak"`,让实时智能体立即发言。使用 `action: "test_speech"` 来创建或复用会话、触发一条已知短语,并在 Chrome 主机能够报告时返回 `inCall` 健康状态。使用 `action: "leave"` 将会话标记为结束。
使用 `action: "status"` 列出活动会话或检查某个会话 ID。使用带 `sessionId``message``action: "speak"` 可让实时智能体立即发言。使用 `action: "test_speech"` 可创建或复用会话、触发一段已知短语,并在 Chrome 主机可报告时返回 `inCall` 健康状态。使用 `action: "leave"` 将会话标记为结束。
`status` 在可用时包含 Chrome 健康状态
在可用时,`status` 包含 Chrome 健康信息
- `inCall`Chrome 看起来已进入 Meet 通话
- `micMuted`:尽力判断的 Meet 麦克风状态
- `manualActionRequired` / `manualActionReason` / `manualActionMessage`浏览器配置文件需要手动登录、Meet 主持人准入、权限授予,或浏览器控制修复,发言功能才能工作
- `micMuted`:尽力检测的 Meet 麦克风状态
- `manualActionRequired` / `manualActionReason` / `manualActionMessage`浏览器配置文件需要手动登录、Meet 主持人准入、权限授予,或浏览器控制修复后,语音功能才能工作
- `providerConnected` / `realtimeReady`:实时语音桥接状态
- `lastInputAt` / `lastOutputAt`:最近一次从桥接接收到或发送到桥接的音频时间
- `lastInputAt` / `lastOutputAt`:最近一次从桥接接收/发送音频的时间
```json
{
@ -753,19 +741,17 @@ export GEMINI_API_KEY=...
## 实时智能体咨询
Chrome 实时模式针对实时语音循环进行了优化。实时语音提供商会听取会议音频,并通过配置的音频桥接发声。当实时模型需要更深入的推理、当前信息或常规 OpenClaw 工具时,它可以调用 `openclaw_agent_consult`
Chrome 实时模式针对实时语音循环了优化。实时语音提供商会听取会议音频,并通过配置的音频桥接发声。当实时模型需要更深入的推理、最新信息或常规 OpenClaw 工具时,它可以调用 `openclaw_agent_consult`
咨询工具会在后台运行常规 OpenClaw 智能体,并带最近的会议转录上下文,然后向实时语音会话返回简洁的口头回答。随后语音模型可以将该回答说回会议中。它使用与 Voice Call 相同的共享实时咨询工具。
咨询工具会在后台运行常规 OpenClaw 智能体,并带最近的会议转录上下文,然后向实时语音会话返回一个简洁的口头回答。随后语音模型可以将该回答说回会议中。它与 Voice Call 共用同一个实时咨询工具。
`realtime.toolPolicy` 控制咨询运行方式:
- `safe-read-only`:暴露咨询工具,并将常规智能体限制为
`read`、`web_search`、`web_fetch`、`x_search`、`memory_search` 和
`memory_get`
- `owner`:暴露咨询工具,并允许常规智能体使用普通智能体工具策略。
- `none`:不要向实时语音模型暴露咨询工具。
- `safe-read-only`:暴露咨询工具,并将常规智能体限制为使用 `read`、`web_search`、`web_fetch`、`x_search`、`memory_search` 和 `memory_get`
- `owner`:暴露咨询工具,并允许常规智能体使用正常的智能体工具策略
- `none`:不向实时语音模型暴露咨询工具
咨询会话键按每个 Meet 会话划分作用域,因此在同一会议期间,后续咨询调用可以复用之前的咨询上下文。
咨询会话键按 Meet 会话分别作用域,因此在同一次会议期间,后续咨询调用可以复用先前的咨询上下文。
若要在 Chrome 完全加入通话后强制执行一次口头就绪检查:
@ -783,7 +769,7 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \
## 实时测试检查清单
在将会议交给无人值守的智能体之前,使用以下顺序
在将会议交给无人值守智能体之前,使用以下流程
```bash
openclaw googlemeet setup
@ -793,16 +779,15 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \
--message "Say exactly: Google Meet speech test complete."
```
预期的 Chrome-node 状态:
预期的 chrome-node 状态:
- `googlemeet setup` 全部为绿色。
- 当 `chrome-node` 是默认传输方式或已固定某个节点时,`googlemeet setup` 包含 `chrome-node-connected`
- 当 `chrome-node` 是默认传输方式或已固定节点时,`googlemeet setup` 包含 `chrome-node-connected`
- `nodes status` 显示所选节点已连接。
- 所选节点同时发布 `googlemeet.chrome``browser.proxy`
- Meet 标签页加入通话,并且 `test-speech` 返回带有
`inCall: true` 的 Chrome 健康状态。
- 所选节点同时宣告 `googlemeet.chrome``browser.proxy`
- Meet 标签页加入通话,并且 `test-speech` 返回包含 `inCall: true` 的 Chrome 健康状态。
对于远程 Chrome 主机(如 Parallels macOS VM在更新 Gateway 网关或 VM 后,这是最短且安全的检查方式
对于远程 Chrome 主机(如 Parallels macOS VM在更新 Gateway 网关或 VM 后,这是最短且安全的检查流程
```bash
openclaw googlemeet setup
@ -813,7 +798,7 @@ openclaw nodes invoke \
--params '{"action":"setup"}'
```
这可以证明 Gateway 网关插件已加载、VM 节点使用当前令牌已连接并且在智能体打开真实会议标签页之前Meet 音频桥接已可用
这可以证明 Gateway 网关插件已加载、VM 节点已使用当前令牌连接,并且 Meet 音频桥接可用,然后智能体才会打开真实的会议标签页
对于 Twilio 冒烟测试,请使用一个公开电话拨入详情的会议:
@ -827,28 +812,28 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
预期的 Twilio 状态:
- `googlemeet setup` 包含绿色的 `twilio-voice-call-plugin`
`twilio-voice-call-credentials` 检查。
- `googlemeet setup` 包含绿色的 `twilio-voice-call-plugin``twilio-voice-call-credentials` 检查。
- Gateway 网关重新加载后CLI 中可用 `voicecall`
- 返回的会话具有 `transport: "twilio"` `twilio.voiceCallId`
- `googlemeet leave <sessionId>` 会挂断已委的语音呼叫。
- 返回的会话包含 `transport: "twilio"` 和一个 `twilio.voiceCallId`
- `googlemeet leave <sessionId>` 会挂断已委的语音呼叫。
## 故障排除
### 智能体看不到 Google Meet 工具
确认插件已在 Gateway 网关配置中启用,并重新加载 Gateway 网关:
确认插件已在 Gateway 网关配置中启用,并重新加载 Gateway 网关:
```bash
openclaw plugins list | grep google-meet
openclaw googlemeet setup
```
如果你刚刚编辑了 `plugins.entries.google-meet`,请重启或重新加载 Gateway 网关。运行中的智能体只能看到由当前 Gateway 网关进程注册的插件工具。
如果你刚修改了 `plugins.entries.google-meet`,请重启或重新加载 Gateway 网关。
运行中的智能体只能看到当前 Gateway 网关进程已注册的插件工具。
### 没有已连接的 Google Meet 可用节点
在节点主机上运行:
在节点主机上运行:
```bash
openclaw plugins enable google-meet
@ -865,7 +850,7 @@ openclaw devices approve <requestId>
openclaw nodes status
```
节点必须已连接,并列出 `googlemeet.chrome` 以及 `browser.proxy`
节点必须已连接,并列出 `googlemeet.chrome` 以及 `browser.proxy`
Gateway 网关配置必须允许这些节点命令:
```json5
@ -878,7 +863,7 @@ Gateway 网关配置必须允许这些节点命令:
}
```
如果 `googlemeet setup``chrome-node-connected` 检查失败,或 Gateway 网关日志报告 `gateway token mismatch`,请使用当前 Gateway 网关令牌重新安装或重启节点。对于局域网 Gateway 网关,这通常意味着:
如果 `googlemeet setup` `chrome-node-connected` 失败,或 Gateway 网关日志报告 `gateway token mismatch`,请使用当前 Gateway 网关令牌重新安装或重启节点。对于局域网 Gateway 网关,这通常意味着:
```bash
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
@ -896,36 +881,33 @@ openclaw googlemeet setup
openclaw nodes status --connected
```
### 浏览器打开,但智能体无法加入
### 浏览器打开,但智能体无法加入
运行 `googlemeet test-speech` 并检查返回的 Chrome 健康状态。如果它报告 `manualActionRequired: true`,请向操作员显示 `manualActionMessage`,并停止重试,直到浏览器操作完成。
运行 `googlemeet test-speech` 并检查返回的 Chrome 健康信息。如果它报告 `manualActionRequired: true`,请向操作员显示 `manualActionMessage`,并停止重试,直到浏览器操作完成。
常见手动操作:
常见手动操作:
- 登录 Chrome 配置文件。
- 从 Meet 主持人账号准入该访客
- 从 Meet 主持人账号允许该访客进入
- 当出现 Chrome 原生权限提示时,授予 Chrome 麦克风/摄像头权限。
- 关闭或修复卡住的 Meet 权限对话框。
不要仅因为 Meet 显示“你希望其他人在会议中听到你吗?”就报告“未登录”。这是 Meet 的音频选择过渡界面OpenClaw 会在可用时通过浏览器自动化点击 **Use microphone**,并继续等待真实会议状态。对于仅创建的浏览器回退OpenClaw 可能会点击 **Continue without microphone**,因为创建 URL 不需要实时音频路径。
不要仅因为 Meet 显示 “Do you want people to hear you in the meeting?” 就报告“未登录”。那是 Meet 的音频选择过渡页OpenClaw 会在可用时通过浏览器自动化点击 **Use microphone**,并继续等待真正的会议状态。对于仅创建 URL 的浏览器回退OpenClaw 可能会点击 **Continue without microphone**,因为创建 URL 不需要实时音频路径。
### 会议创建失败
当已配置 OAuth 凭证时,`googlemeet create` 会首先使用 Google Meet API 的 `spaces.create` 端点。没有 OAuth 凭证时,它会回退到固定的 Chrome 节点浏览器。请确认:
当配置了 OAuth 凭证时,`googlemeet create` 会首先使用 Google Meet API `spaces.create` 端点。
如果没有 OAuth 凭证,它会回退到固定的 Chrome 节点浏览器。请确认:
- 对于 API 创建:已配置 `oauth.clientId``oauth.refreshToken`,或者存在匹配的 `OPENCLAW_GOOGLE_MEET_*` 环境变量。
- 对于 API 创建:刷新令牌是在添加创建支持之后生成的。较旧的令牌可能缺少 `meetings.space.created` 作用域;请重新运行 `openclaw googlemeet auth login --json` 并更新插件配置。
- 对于浏览器回退:`defaultTransport: "chrome-node"` 和
`chromeNode.node` 指向一个已连接的节点,并且该节点具有 `browser.proxy`
`googlemeet.chrome`
- 对于 API 创建:已配置 `oauth.clientId``oauth.refreshToken`,或存在对应的 `OPENCLAW_GOOGLE_MEET_*` 环境变量。
- 对于 API 创建:刷新令牌是在添加创建支持之后生成的。旧令牌可能缺少 `meetings.space.created` 作用域;请重新运行 `openclaw googlemeet auth login --json` 并更新插件配置。
- 对于浏览器回退:`defaultTransport: "chrome-node"`,并且 `chromeNode.node` 指向一个已连接、具备 `browser.proxy``googlemeet.chrome` 的节点。
- 对于浏览器回退:该节点上的 OpenClaw Chrome 配置文件已登录 Google并且可以打开 `https://meet.google.com/new`
- 对于浏览器回退:重试会复用现有的 `https://meet.google.com/new` 或 Google 账号提示标签页,而不是打开新标签页。如果智能体超时,请重试工具调用,而不是手动再打开一个 Meet 标签页。
- 对于浏览器回退:如果工具返回 `manualActionRequired: true`,请使用返回的
`browser.nodeId`、`browser.targetId`、`browserUrl` 和
`manualActionMessage` 来引导操作员。在该操作完成之前,不要循环重试。
- 对于浏览器回退:如果 Meet 显示“你希望其他人在会议中听到你吗请保持该标签页打开。OpenClaw 应通过浏览器自动化点击 **Use microphone**,或者在仅创建回退时点击 **Continue without microphone**,然后继续等待生成的 Meet URL。如果无法完成错误中应提到 `meet-audio-choice-required`,而不是 `google-login-required`
- 对于浏览器回退:如果工具返回 `manualActionRequired: true`,请使用返回的 `browser.nodeId`、`browser.targetId`、`browserUrl` 和 `manualActionMessage` 来引导操作员。在该操作完成之前,不要循环重试。
- 对于浏览器回退:如果 Meet 显示 “Do you want people to hear you in the meeting?”请保持该标签页打开。OpenClaw 应通过浏览器自动化点击 **Use microphone**,或者在仅创建的回退模式下点击 **Continue without microphone**,然后继续等待生成的 Meet URL。如果无法做到错误中应提到 `meet-audio-choice-required`,而不是 `google-login-required`
### 智能体已加入,但没有说话
### 智能体已加入,但不会说话
检查实时路径:
@ -936,31 +918,29 @@ openclaw googlemeet doctor
使用 `mode: "realtime"` 进行收听/回话。`mode: "transcribe"` 按设计不会启动双向实时语音桥接。
验证:
外还要验证:
- Gateway 网关主机上有可用的实时提供商密钥,例如
`OPENAI_API_KEY``GEMINI_API_KEY`
- 在 Chrome 主机上可以看到 `BlackHole 2ch`
- 在 Chrome 主机上存在 `rec``play`
- Meet 麦克风和扬声器已通过 OpenClaw 使用的虚拟音频路径进行路由。
- Gateway 网关主机上可用一个实时提供商密钥,例如 `OPENAI_API_KEY``GEMINI_API_KEY`
- `BlackHole 2ch` 在 Chrome 主机上可见。
- `rec``play` 在 Chrome 主机上存在。
- Meet 的麦克风和扬声器已通过 OpenClaw 使用的虚拟音频路径进行路由。
`googlemeet doctor [session-id]` 会打印会话、节点、通话内状态、手动操作原因、实时提供商连接、`realtimeReady`、音频输入/输出活动、最近音频时间戳、字节计数以及浏览器 URL。当你需要原始 JSON 时,请使用
`googlemeet status [session-id]`。当你需要验证 Google Meet OAuth 刷新且不暴露令牌时,请使用 `googlemeet doctor --oauth`;当你还需要 Google Meet API 证明时,可附加 `--meeting``--create-space`
`googlemeet doctor [session-id]` 会打印会话、节点、通话中状态、手动操作原因、实时提供商连接、`realtimeReady`、音频输入/输出活动、最近音频时间戳、字节计数,以及浏览器 URL。当你需要原始 JSON 时,请使用 `googlemeet status [session-id]`。当你需要在不暴露令牌的情况下验证 Google Meet OAuth 刷新时,请使用 `googlemeet doctor --oauth`;当你还需要 Google Meet API 证明时,添加 `--meeting``--create-space`
如果智能体超时,而你可以看到一个 Meet 标签页已经打开,请检查该标签页,而不要再打开另一个:
如果智能体超时,而你看到一个 Meet 标签页已经打开,请检查该标签页,而不是再打开一个:
```bash
openclaw googlemeet recover-tab
openclaw googlemeet recover-tab https://meet.google.com/abc-defg-hij
```
对应的工具操作是 `recover_current_tab`。它会聚焦并检查已配置 Chrome 节点上的现有 Meet 标签页。它不会打开新标签页也不会创建新会话它会报告当前阻塞项例如登录、准入、权限或音频选择状态。CLI 命令会与已配置的 Gateway 网关通信,因此 Gateway 网关必须正在运行,并且 Chrome 节点必须已连接。
对应的工具操作是 `recover_current_tab`。它会在已配置的 Chrome 节点上聚焦并检查现有的 Meet 标签页。它不会打开新标签页也不会创建新会话它会报告当前阻塞项例如登录、准入、权限或音频选择状态。CLI 命令会与已配置的 Gateway 网关通信,因此 Gateway 网关必须正在运行,并且 Chrome 节点必须已连接。
### Twilio 设置检查失败
`voice-call` 未被允许或未启用时,`twilio-voice-call-plugin` 会失败。将添加到 `plugins.allow`,启用 `plugins.entries.voice-call`,然后重新加载 Gateway 网关。
`voice-call` 未被允许或未启用时,`twilio-voice-call-plugin` 会失败。将添加到 `plugins.allow`,启用 `plugins.entries.voice-call`,然后重新加载 Gateway 网关。
当 Twilio 后端缺少 account SID、auth token 或 caller number 时,`twilio-voice-call-credentials` 会失败。在 Gateway 网关主机上设置这些值
当 Twilio 后端缺少 account SID、auth token 或主叫号码时,`twilio-voice-call-credentials` 会失败。在 Gateway 网关主机上设置这些变量
```bash
export TWILIO_ACCOUNT_SID=AC...
@ -976,13 +956,13 @@ openclaw voicecall setup
openclaw voicecall smoke
```
`voicecall smoke` 默认仅执行就绪性检查。若要对特定号码执行干运行
`voicecall smoke` 默认仅做就绪性检查。若要对某个特定号码进行 dry-run
```bash
openclaw voicecall smoke --to "+15555550123"
```
只有在你确实想发起真实的外呼通知电话时,才添加 `--yes`
只有在你明确要发起真实的外呼通知电话时,才添加 `--yes`
```bash
openclaw voicecall smoke --to "+15555550123" --yes
@ -990,7 +970,7 @@ openclaw voicecall smoke --to "+15555550123" --yes
### Twilio 呼叫已开始,但始终未进入会议
确认 Meet 事件公开了电话拨入详情。传入精确的拨入号码和 PIN或自定义 DTMF 序列:
确认 Meet 事件公开了电话拨入详情。传入准确的拨入号码以及 PIN 或自定义 DTMF 序列:
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
@ -999,23 +979,24 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
--dtmf-sequence ww123456#
```
如果提供商在输入 PIN 前需要停,请在 `--dtmf-sequence` 中使用前导 `w` 或逗号。
如果提供商在输入 PIN 前需要停,请在 `--dtmf-sequence` 中使用前导 `w` 或逗号。
## 说明
Google Meet 的官方媒体 API 偏向接收,因此要在 Meet 通话中发言仍然需要一个参会者路径。该插件让这个边界保持可见Chrome 处理浏览器参会和本地音频路由Twilio 处理电话拨入参会。
Google Meet 的官方媒体 API 偏向接收,因此要向 Meet 通话中发声,仍然需要一个参与者路径。这个插件让这一边界保持清晰可见:
Chrome 负责浏览器参与和本地音频路由Twilio 负责电话拨入参与。
Chrome 实时模式需要以下之一:
Chrome 实时模式需要以下二者之一:
- `chrome.audioInputCommand``chrome.audioOutputCommand`OpenClaw 拥有实时模型桥接,并在这些命令与所选实时语音提供商之间传输 8 kHz G.711 mu-law 音频。
- `chrome.audioBridgeCommand`一个外部桥接命令拥有整个本地音频路径,并且必须在启动或验证其守护进程后退出。
- `chrome.audioBridgeCommand`:外部桥接命令拥有整个本地音频路径,并且必须在启动或验证其守护进程后退出。
为了获得干净的双工音频,请通过独立的虚拟设备或类似 Loopback 的虚拟设备图来路由 Meet 输出和 Meet 麦克风。单个共享的 BlackHole 设备可能会将其他参会者的声音回送到通话中。
若要获得干净的双工音频,请通过独立的虚拟设备或类似 Loopback 的虚拟设备图来分别路由 Meet 输出和 Meet 麦克风。单个共享的 BlackHole 设备可能会把其他参与者的声音回送进通话中。
`googlemeet speak` 会触发 Chrome 会话的活动实时音频桥接。`googlemeet leave` 会停止该桥接。对于通过 Voice Call 插件委的 Twilio 会话,`leave` 还会挂断底层语音呼叫。
`googlemeet speak` 会触发 Chrome 会话的活动实时音频桥接。`googlemeet leave` 会停止该桥接。对于通过 Voice Call 插件委的 Twilio 会话,`leave` 还会挂断底层语音呼叫。
## 相关内容
- [Voice call 插件](/zh-CN/plugins/voice-call)
- [通话模式](/zh-CN/nodes/talk)
- [Talk mode](/zh-CN/nodes/talk)
- [构建插件](/zh-CN/plugins/building-plugins)