UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

225 lines (200 loc) • 15.6 kB
--- summary: "Google Meet plugin config defaults, overrides, and provider examples" read_when: - You are looking up a Google Meet plugin config key and its default - You are pointing Google Meet at a specific realtime or TTS provider - You are configuring the Twilio dial plan for Google Meet title: "Google Meet configuration" sidebarTitle: "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 { 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 { 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 { 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 { 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 { 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.