> ## Documentation Index
> Fetch the complete documentation index at: https://openclaw.ai2me.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Google Meet configuration

Plugin config defaults, optional overrides, and voice-provider examples. Part of the [Google Meet plugin](/plugins/google-meet) guide.

## Config

The common Chrome agent path only needs the plugin enabled, BlackHole, SoX, a realtime provider key, and a configured OpenClaw TTS provider:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  plugins: {
    entries: {
      "google-meet": {
        enabled: true,
        config: {},
      },
    },
  },
}
```

### Defaults

| Key | Default | Notes |
| - | - | - |
| `defaultTransport` | `"chrome"` | |
| `defaultMode` | `"agent"` | `"realtime"` is accepted as a legacy alias for `"agent"`; new callers should say `"agent"` |
| `chromeNode.node` | unset | Node id/name/IP for `chrome-node`; required when more than one capable node may be connected |
| `chrome.launch` | `true` | Launch Chrome for the join; set `false` only when reusing an already-open session |
| `chrome.audioBackend` | `"auto"` | Selects `blackhole-2ch` on macOS or `pipewire-pulse` on Linux; set an explicit backend when a paired Chrome node uses a different OS than the Gateway |
| `chrome.guestName` | `"OpenClaw Agent"` | Shown on the signed-out Meet guest screen |
| `chrome.autoJoin` | `true` | Best-effort guest-name fill and Join Now click on `chrome-node` |
| `chrome.reuseExistingTab` | `true` | Activates an existing Meet tab instead of opening duplicates |
| `chrome.waitForInCallMs` | `20000` | Wait for the Meet tab to report in-call before the talk-back intro fires |
| `chrome.audioFormat` | `"pcm16-24khz"` | Command-pair audio format; `"g711-ulaw-8khz"` is only for legacy/custom command pairs that emit telephony audio |
| `chrome.audioBufferBytes` | `4096` | Processing buffer used to derive generated command latency; values are clamped to a minimum of 17 bytes |
| `chrome.audioInputCommand` | generated native command | An explicit command supplies participant input to the provider. Without an override, browser playback supplies participant input and the generated native command verifies assistant injection. Uses SoX/CoreAudio on macOS or `parec` on Linux. |
| `chrome.audioOutputCommand` | generated native command | Injects assistant speech into the virtual microphone using SoX/CoreAudio on macOS or `pacat` on Linux. |
| `chrome.bargeInInputCommand` | unset | Optional separate local microphone for providers supporting host-driven interruption on the Gateway-hosted command-pair bridge. GPT-Live handles interruptions itself and does not start this command. |
| `chrome.bargeInRmsThreshold` | `650` | RMS level counted as human interruption |
| `chrome.bargeInPeakThreshold` | `2500` | Peak level counted as human interruption |
| `chrome.bargeInCooldownMs` | `900` | Minimum delay between repeated interruption clears |
| `mode` (per-request) | `"agent"` | Talk-back mode; see the [Agent and bidi modes](/plugins/google-meet/tool-and-modes#agent-and-bidi-modes) table |
| `realtime.provider` | `"openai"` | Compatibility fallback used when the scoped fields below are unset |
| `realtime.transcriptionProvider` | `"openai"` | Provider id used by `agent` mode for realtime transcription |
| `realtime.voiceProvider` | unset | Provider id used by `bidi` mode. Set `"google"` for Gemini Live or `"openai"` for OpenAI realtime voice; pair with `realtime.model` for an explicit model. |
| `realtime.toolPolicy` | `"safe-read-only"` | See [Agent and bidi modes](/plugins/google-meet/tool-and-modes#agent-and-bidi-modes) |
| `realtime.instructions` | brief spoken-reply instructions | Tells the model to speak briefly and use `openclaw_agent_consult` for deeper answers |
| `realtime.introMessage` | `"Say exactly: I'm here and listening."` | Spoken once when the realtime bridge connects; set to `""` to join silently |
| `realtime.agentId` | `"main"` | OpenClaw agent id used for function-tool consults and native Live delegation. |
| `voiceCall.enabled` | `true` | Delegates the Twilio PSTN call, DTMF, and intro greeting to the Voice Call plugin |
| `voiceCall.dtmfDelayMs` | `12000` | Leading wait before playing a PIN-derived DTMF sequence over Twilio |
| `voiceCall.postDtmfSpeechDelayMs` | `5000` | Delay before requesting the realtime intro greeting after Voice Call starts the Twilio leg |

`chrome.audioBridgeCommand` and `chrome.audioBridgeHealthCommand` let an external bridge own the whole local audio path instead of `chrome.audioInputCommand`/`chrome.audioOutputCommand`; see [Notes](/plugins/google-meet#notes) for the constraint on which mode can use them.

An `openclaw doctor --fix` migration exists for the legacy `realtime.provider: "google"` shape: it moves that intent to `realtime.voiceProvider: "google"` plus `realtime.transcriptionProvider: "openai"` when those fields are not already set.

### GPT-Live with Cove

Select `bidi` mode for GPT-Live speech. `agent` mode continues to use realtime
transcription and regular OpenClaw TTS; changing the realtime voice model does
not change that mode's voice.

Sign in on the Gateway host with `openclaw models auth login --provider openai`,
then configure the existing model and provider fields:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  plugins: {
    entries: {
      "google-meet": {
        config: {
          defaultMode: "bidi",
          realtime: {
            voiceProvider: "openai",
            model: "gpt-live-1-codex",
            providers: {
              openai: { voice: "cove" },
            },
          },
        },
      },
    },
  },
}
```

This uses the same Gateway-owned GPT-Live route as Discord and Talk, including
native agent delegation and provider-owned interruption. Leave
`chrome.audioFormat` at its 24 kHz PCM16 default. Existing unpinned meeting
configurations keep the provider's default model; choose Live explicitly.

Remove any explicit `chrome.audioInputCommand` to use Live's managed isolated
browser input. Existing custom input commands retain their provider-input
behavior for other models; Live rejects that path because its isolation cannot
be verified. Selecting Live does not silently discard a configured input source.

For the public Platform API route, use `model: "gpt-live-1"` and a supported
voice such as `voice: "marin"`, with an OpenAI API key on the Gateway host.
`cove` belongs to the Codex route. See
[OpenAI voice and speech](/providers/openai/voice-and-speech) for authentication
and model/voice compatibility.

### Optional overrides

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  defaults: {
    meeting: "https://meet.google.com/abc-defg-hij",
  },
  browser: {
    defaultProfile: "openclaw",
  },
  chrome: {
    guestName: "OpenClaw Agent",
    waitForInCallMs: 30000,
    bargeInInputCommand: [
      "sox",
      "-q",
      "-t",
      "coreaudio",
      "External Microphone",
      "-r",
      "24000",
      "-c",
      "1",
      "-b",
      "16",
      "-e",
      "signed-integer",
      "-t",
      "raw",
      "-",
    ],
  },
  chromeNode: {
    node: "parallels-macos",
  },
  defaultMode: "agent",
  realtime: {
    provider: "openai",
    transcriptionProvider: "openai",
    voiceProvider: "google",
    model: "gemini-3.1-flash-live-preview",
    agentId: "jay",
    toolPolicy: "owner",
    introMessage: "Say exactly: I'm here.",
    providers: {
      google: {
        speakerVoice: "Kore",
      },
    },
  },
}
```

ElevenLabs for both agent-mode listening and speaking:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  tts: {
    provider: "elevenlabs",
    providers: {
      elevenlabs: {
        modelId: "eleven_v3",
        speakerVoiceId: "pMsXgVXv3BLzUgSXRplE",
      },
    },
  },
  plugins: {
    entries: {
      "google-meet": {
        config: {
          realtime: {
            transcriptionProvider: "elevenlabs",
            providers: {
              elevenlabs: {
                modelId: "scribe_v2_realtime",
                audioFormat: "ulaw_8000",
                sampleRate: 8000,
                commitStrategy: "vad",
              },
            },
          },
        },
      },
    },
  },
}
```

The persistent Meet voice comes from `tts.providers.elevenlabs.speakerVoiceId`. Agent replies can also use per-reply `[[tts:speakerVoiceId=... model=eleven_v3]]` directives when TTS model overrides are enabled, but config is the deterministic default for meetings. On join, logs show `transcriptionProvider=elevenlabs`, and each spoken reply logs `provider=elevenlabs model=eleven_v3 speakerVoiceId=<voiceId>`.

Twilio-only config:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  defaultTransport: "twilio",
  twilio: {
    defaultDialInNumber: "+15551234567",
    defaultPin: "123456",
  },
  voiceCall: {
    gatewayUrl: "ws://127.0.0.1:18789",
  },
}
```

With `voiceCall.enabled: true` (the default) and Twilio transport, Voice Call places the DTMF sequence before opening the realtime media stream, then uses the saved intro text as the initial realtime greeting. If `voice-call` is not enabled, Google Meet can still validate and record the dial plan but cannot place the Twilio call.

Leave `voiceCall.gatewayUrl` unset to use the local trusted Gateway runtime, which preserves the
invoking agent for the full call. A configured Gateway URL remains an explicit WebSocket target and
cannot authenticate plugin provenance; non-default agent joins fail closed instead of silently
using another agent. Run Google Meet and Voice Call in the same Gateway process when per-agent
routing is required.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.