跳到正文
FunCoding

搜索

搜索文档、文章、Skill 和 MCP

Google Meet configuration

Google Meet plugin config defaults, overrides, and provider examples

Plugin config defaults, optional overrides, and voice-provider examples. Part of the Google Meet plugin guide.

Config

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

{
  plugins: {
    entries: {
      "google-meet": {
        enabled: true,
        config: {},
      },
    },
  },
}

Defaults

KeyDefaultNotes
defaultTransport"chrome"
defaultMode"agent""realtime" is accepted as a legacy alias for "agent"; new callers should say "agent"
chromeNode.nodeunsetNode id/name/IP for chrome-node; required when more than one capable node may be connected
chrome.launchtrueLaunch 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.autoJointrueBest-effort guest-name fill and Join Now click on chrome-node
chrome.reuseExistingTabtrueActivates an existing Meet tab instead of opening duplicates
chrome.waitForInCallMs20000Wait 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.audioBufferBytes4096Processing buffer used to derive generated command latency; values are clamped to a minimum of 17 bytes
chrome.audioInputCommandgenerated native commandAn 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.audioOutputCommandgenerated native commandInjects assistant speech into the virtual microphone using SoX/CoreAudio on macOS or pacat on Linux.
chrome.bargeInInputCommandunsetOptional 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.bargeInRmsThreshold650RMS level counted as human interruption
chrome.bargeInPeakThreshold2500Peak level counted as human interruption
chrome.bargeInCooldownMs900Minimum delay between repeated interruption clears
mode (per-request)"agent"Talk-back mode; see the 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.voiceProviderunsetProvider 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
realtime.instructionsbrief spoken-reply instructionsTells 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.enabledtrueDelegates the Twilio PSTN call, DTMF, and intro greeting to the Voice Call plugin
voiceCall.dtmfDelayMs12000Leading wait before playing a PIN-derived DTMF sequence over Twilio
voiceCall.postDtmfSpeechDelayMs5000Delay 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 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:

{
  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 for authentication and model/voice compatibility.

Optional overrides

{
  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:

{
  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:

{
  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.