跳转至

传输

Chrome、Chrome 节点和 Twilio 传输方式、Parallels macOS 虚拟机拓扑,以及它们所需的主机音频工具。属于 Google Meet 插件 指南的一部分。

本地 Gateway + Parallels Chrome

在 macOS 虚拟机中,仅为了给它提供 Chrome,并不需要完整的 Gateway 或模型 API 密钥。在本地运行 Gateway 和代理;在虚拟机中运行节点主机。

运行位置 内容
Gateway 主机 OpenClaw Gateway、代理工作区、模型/API 密钥、实时提供商、Google Meet 插件配置
Parallels macOS 虚拟机 OpenClaw CLI/节点主机、Chrome、SoX、BlackHole 2ch、已登录 Google 的 Chrome 配置文件
虚拟机中不需要 Gateway 服务、代理配置、模型提供商设置

安装虚拟机依赖项,重启并验证:

brew install blackhole-2ch sox
sudo reboot
system_profiler SPAudioDataType | grep -i BlackHole
command -v sox

在虚拟机中安装插件(该插件默认启用),并启动节点主机:

openclaw plugins install @openclaw/google-meet
openclaw node run --host <gateway-host> --port 18789 --display-name parallels-macos

如果 <gateway-host> 是没有 TLS 的局域网 IP,请针对该受信任的私有网络选择加入:

OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
  openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macos

作为 LaunchAgent 安装时使用相同的标志(它是进程环境变量,如果安装命令中存在,会存储在 LaunchAgent 环境中,而不是 openclaw.json 设置):

OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
  openclaw node install --host <gateway-lan-ip> --port 18789 --display-name parallels-macos --force
openclaw node restart

从 Gateway 主机批准该节点,然后确认它同时通告 googlemeet.chrome 和浏览器能力/browser.proxy:

openclaw devices list
openclaw devices approve <requestId>
openclaw nodes status

通过该节点路由 Meet:

{
  gateway: {
    nodes: {
      commands: { allow: ["googlemeet.chrome", "browser.proxy"] },
    },
  },
  plugins: {
    entries: {
      "google-meet": {
        enabled: true,
        config: {
          defaultTransport: "chrome-node",
          chrome: {
            guestName: "OpenClaw Agent",
            autoJoin: true,
            reuseExistingTab: true,
          },
          chromeNode: {
            node: "parallels-macos",
          },
        },
      },
    },
  },
}

现在从 Gateway 主机正常加入:

openclaw googlemeet join https://meet.google.com/abc-defg-hij

用于一条命令的冒烟测试,它会创建或复用会话、说出已知短语,并打印会话健康状态:

openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij

在实时加入期间,浏览器自动化会填写访客名称,点击“加入/请求加入”,并在出现时接受 Meet 首次运行的“使用麦克风”提示(或在仅观察加入和仅浏览器创建会议期间接受“继续而不使用麦克风”)。如果配置文件已退出登录、Meet 正在等待主机批准、Chrome 需要麦克风/摄像头权限,或 Meet 卡在未解决的提示上,结果将包含 manualAction: { reason, message }。停止重试,报告该消息以及 browserUrl/browserTitle,并且仅在手动操作完成后重试。

如果省略 chromeNode.node,OpenClaw 仅当恰好有一个已连接节点同时通告 googlemeet.chrome 和浏览器控制时才会自动选择;当多个具备能力的节点已连接时,请固定 chromeNode.node(节点 ID、显示名称或远程 IP)。

常见故障检查

症状 修复
Configured Google Meet node ... is not usable: offline 已固定的节点已知但不可用。报告设置阻塞;除非要求,否则不要静默回退到另一种传输方式。
No connected Google Meet-capable node 在虚拟机中安装 npm:@openclaw/google-meet,运行 openclaw plugins enable browser,启动 openclaw node run,并批准配对。如果 Google Meet 被显式禁用,也启用它。确认 gateway.nodes.commands.allow 包含 googlemeet.chrome 和 browser.proxy。
BlackHole 2ch audio device not found 在 macOS 上,在被检查的主机上安装 blackhole-2ch 并重启。
PipeWire-Pulse is unavailable 在 Linux 上,启动桌面用户的 pipewire-pulse 服务并安装 pulseaudio-utils;不要以 root 身份运行节点,也不要脱离 Chrome 用户的音频会话运行。
Chrome 打开但无法加入 在虚拟机中登录浏览器配置文件,或保持 chrome.guestName 已设置。访客自动加入通过节点浏览器代理使用 OpenClaw 浏览器自动化;将节点的 browser.defaultProfile(或命名的现有会话配置文件)指向你需要的配置文件。
症状 修复
重复的 Meet 标签页 保持 chrome.reuseExistingTab: true。OpenClaw 会激活同一 URL 的现有标签页,并在创建时复用正在进行中的 .../new 或 Google 账户提示标签页,然后再打开另一个标签页。
无音频 将 Meet 的麦克风/扬声器通过 OpenClaw 使用的虚拟音频路径进行路由;使用独立的虚拟设备或 Loopback 式路由以获得干净的全双工音频。

安装说明

Chrome talk-back 默认使用主机上的音频工具,OpenClaw 不捆绑或再分发这些工具:

  • sox:命令行音频工具。该插件会为默认的 24 kHz PCM16 音频桥接发出明确的 CoreAudio 设备命令。
  • blackhole-2ch:macOS 虚拟音频驱动程序,提供 Chrome/Meet 所路由经过的 BlackHole 2ch 设备。
  • pactl、pacat 和 parec:用于针对 PipeWire-Pulse 的 Linux PulseAudio 工具,通过 OpenClaw Meeting Audio 进行配置和流式传输。

SoX 的许可证为 LGPL-2.0-only AND GPL-2.0-only;BlackHole 为 GPL-3.0。如果你构建的安装程序或设备将 BlackHole 与 OpenClaw 捆绑在一起,请审查 BlackHole 的上游许可证,或从 Existential Audio 获取单独的许可证。

传输方式

传输 适用场景
chrome Chrome/音频位于 Gateway 主机上
chrome-node Chrome/音频位于配对的节点上(例如 Parallels macOS 虚拟机)
twilio 当 Chrome 参与不可用时,通过 Voice Call 插件进行电话拨入回退

Chrome

通过 OpenClaw 浏览器控制打开 Meet URL,并以已登录的 OpenClaw 浏览器配置文件加入。对于 talk-back 模式,插件会在浏览器操作之前检查或配置主机的原生虚拟音频后端。本地 Chrome 还会在此时运行任何已配置的音频桥接健康检查命令;chrome-node 在启动其桥接时会在节点上运行该检查。talk-back 桥接仅在浏览器健康检查确认虚拟输入/输出音频路由后启动。对于本地 Chrome,使用 browser.defaultProfile 选择配置文件;chrome.browserProfile 则传递给 chrome-node 主机。

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

使用生成的输入命令时,共享浏览器桥接会将参与者播放与助手输出分开捕获。原生后端会将助手音频注入 Meet 的虚拟麦克风,并捕获该注入以进行波形验证。远程播放被保持在麦克风总线之外,并且相同的路径可在本地或配对节点上运行。显式的 chrome.audioInputCommand 覆盖会保留其已配置的 provider 输入路径。Live 需要受管理的隔离捕获,因此在选择它之前请移除输入覆盖。如果所需的原生后端或浏览器捕获不可用,加入将因音频路径错误而失败。

如果在 OpenClaw 获取 command-pair 音频桥接后启动失败,它会尝试在回滚由失败加入打开的标签页之前停止该桥接。此启动清理不会改动被复用或采用的标签页,包括 chrome.launch: false 会话。节点清理针对返回的桥接 ID;如果节点启动在返回 ID 之前失败,Gateway 无法保证远程桥接清理。外部桥接命令管理其自身的进程生命周期。

Twilio

一个严格的拨号计划,委托给 Voice call 插件。它不会解析 Meet 页面以获取电话号码;Google Meet 必须为会议提供电话拨入号码和 PIN。

在 Gateway 主机上启用 Voice Call,而不是在 Chrome 节点上:

{
  plugins: {
    allow: ["google-meet", "voice-call", "google"],
    entries: {
      "google-meet": {
        enabled: true,
        config: {
          defaultTransport: "chrome-node",
          // or set "twilio" if Twilio should be the default
        },
      },
      "voice-call": {
        enabled: true,
        config: {
          provider: "twilio",
          inboundPolicy: "allowlist",
          realtime: {
            enabled: true,
            provider: "google",
            instructions: "Join this Google Meet as an OpenClaw agent. Be brief.",
            toolPolicy: "safe-read-only",
            providers: {
              google: {
                silenceDurationMs: 500,
                startSensitivity: "high",
              },
            },
          },
        },
      },
      google: {
        enabled: true,
      },
    },
  },
}

通过环境变量提供 Twilio 凭据,以避免将密钥写入 openclaw.json:

export TWILIO_ACCOUNT_SID=AC...
export TWILIO_AUTH_TOKEN=...
export TWILIO_FROM_NUMBER=+15550001234
export GEMINI_API_KEY=...

如果 OpenAI 是实时语音 provider,请改用 realtime.provider: "openai" 和 OPENAI_API_KEY。

插件启用和配置更改会在默认混合重载模式下自动生效(参见热重载)。如果你更改了 Gateway 的进程环境,请在这些变量可用的情况下重启它。验证:

openclaw config validate
openclaw plugins list | grep -E 'google-meet|voice-call'
openclaw googlemeet setup

当 Twilio 委托已配置时,googlemeet setup 会包含 twilio-voice-call-plugin、twilio-voice-call-credentials 和 twilio-voice-call-webhook 检查。

openclaw googlemeet join https://meet.google.com/abc-defg-hij \
  --transport twilio \
  --dial-in-number +15551234567 \
  --pin 123456

使用 --dtmf-sequence 指定自定义序列,并在 PIN 前使用开头的 w 或逗号表示暂停:

openclaw googlemeet join https://meet.google.com/abc-defg-hij \
  --transport twilio \
  --dial-in-number +15551234567 \
  --dtmf-sequence ww123456#

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