From 22ad59a806531e1b157375df77280280d7b79ec6 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-sync[bot]" Date: Fri, 24 Apr 2026 01:18:35 +0000 Subject: [PATCH] chore(sync): mirror docs from openclaw/openclaw@8129ac0f269ad8b0839326c96c989cbc06ee574b --- .openclaw-sync/source.json | 4 +- docs/docs.json | 13 +++ docs/plugins/google-meet.md | 225 ++++++++++++++++++++++++++++++++++++ 3 files changed, 240 insertions(+), 2 deletions(-) create mode 100644 docs/plugins/google-meet.md diff --git a/.openclaw-sync/source.json b/.openclaw-sync/source.json index 9b61ac302..710bc679b 100644 --- a/.openclaw-sync/source.json +++ b/.openclaw-sync/source.json @@ -1,5 +1,5 @@ { "repository": "openclaw/openclaw", - "sha": "e0072ef91aff6839e2f2e68903a0365449d187a1", - "syncedAt": "2026-04-24T01:14:43.175Z" + "sha": "8129ac0f269ad8b0839326c96c989cbc06ee574b", + "syncedAt": "2026-04-24T01:16:50.888Z" } diff --git a/docs/docs.json b/docs/docs.json index 301f94887..31d3326bb 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -1142,6 +1142,7 @@ "plugins/community", "plugins/bundles", "plugins/codex-harness", + "plugins/google-meet", "plugins/webhooks", "plugins/voice-call", "plugins/memory-wiki", @@ -2535,6 +2536,7 @@ "ja-JP/plugins/community", "ja-JP/plugins/bundles", "ja-JP/plugins/codex-harness", + "ja-JP/plugins/google-meet", "ja-JP/plugins/webhooks", "ja-JP/plugins/voice-call", "ja-JP/plugins/memory-wiki", @@ -3313,6 +3315,7 @@ "es/plugins/community", "es/plugins/bundles", "es/plugins/codex-harness", + "es/plugins/google-meet", "es/plugins/webhooks", "es/plugins/voice-call", "es/plugins/memory-wiki", @@ -4091,6 +4094,7 @@ "pt-BR/plugins/community", "pt-BR/plugins/bundles", "pt-BR/plugins/codex-harness", + "pt-BR/plugins/google-meet", "pt-BR/plugins/webhooks", "pt-BR/plugins/voice-call", "pt-BR/plugins/memory-wiki", @@ -4869,6 +4873,7 @@ "ko/plugins/community", "ko/plugins/bundles", "ko/plugins/codex-harness", + "ko/plugins/google-meet", "ko/plugins/webhooks", "ko/plugins/voice-call", "ko/plugins/memory-wiki", @@ -5647,6 +5652,7 @@ "de/plugins/community", "de/plugins/bundles", "de/plugins/codex-harness", + "de/plugins/google-meet", "de/plugins/webhooks", "de/plugins/voice-call", "de/plugins/memory-wiki", @@ -6425,6 +6431,7 @@ "fr/plugins/community", "fr/plugins/bundles", "fr/plugins/codex-harness", + "fr/plugins/google-meet", "fr/plugins/webhooks", "fr/plugins/voice-call", "fr/plugins/memory-wiki", @@ -7203,6 +7210,7 @@ "ar/plugins/community", "ar/plugins/bundles", "ar/plugins/codex-harness", + "ar/plugins/google-meet", "ar/plugins/webhooks", "ar/plugins/voice-call", "ar/plugins/memory-wiki", @@ -7981,6 +7989,7 @@ "it/plugins/community", "it/plugins/bundles", "it/plugins/codex-harness", + "it/plugins/google-meet", "it/plugins/webhooks", "it/plugins/voice-call", "it/plugins/memory-wiki", @@ -8759,6 +8768,7 @@ "tr/plugins/community", "tr/plugins/bundles", "tr/plugins/codex-harness", + "tr/plugins/google-meet", "tr/plugins/webhooks", "tr/plugins/voice-call", "tr/plugins/memory-wiki", @@ -9537,6 +9547,7 @@ "uk/plugins/community", "uk/plugins/bundles", "uk/plugins/codex-harness", + "uk/plugins/google-meet", "uk/plugins/webhooks", "uk/plugins/voice-call", "uk/plugins/memory-wiki", @@ -10315,6 +10326,7 @@ "id/plugins/community", "id/plugins/bundles", "id/plugins/codex-harness", + "id/plugins/google-meet", "id/plugins/webhooks", "id/plugins/voice-call", "id/plugins/memory-wiki", @@ -11093,6 +11105,7 @@ "pl/plugins/community", "pl/plugins/bundles", "pl/plugins/codex-harness", + "pl/plugins/google-meet", "pl/plugins/webhooks", "pl/plugins/voice-call", "pl/plugins/memory-wiki", diff --git a/docs/plugins/google-meet.md b/docs/plugins/google-meet.md new file mode 100644 index 000000000..37a5aed32 --- /dev/null +++ b/docs/plugins/google-meet.md @@ -0,0 +1,225 @@ +--- +summary: "Google Meet plugin: join explicit Meet URLs through Chrome or Twilio with realtime voice defaults" +read_when: + - You want an OpenClaw agent to join a Google Meet call + - You are configuring Chrome or Twilio as a Google Meet transport +title: "Google Meet Plugin" +--- + +# Google Meet (plugin) + +Google Meet participant support for OpenClaw. + +The plugin is explicit by design: + +- It only joins an explicit `https://meet.google.com/...` URL. +- `realtime` voice is the default mode. +- Auth starts as personal Google OAuth or an already signed-in Chrome profile. +- There is no automatic consent announcement. +- The default Chrome audio backend is `BlackHole 2ch`. +- Twilio accepts a dial-in number plus optional PIN or DTMF sequence. +- The CLI command is `googlemeet`; `meet` is reserved for broader agent + teleconference workflows. + +## Transports + +### Chrome + +Chrome transport opens the Meet URL in Google Chrome and joins as the signed-in +Chrome profile. On macOS, the plugin checks for `BlackHole 2ch` before launch. +If configured, it also runs an audio bridge health command and startup command +before opening Chrome. + +```bash +openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome +``` + +Route Chrome microphone and speaker audio through the local OpenClaw audio +bridge. If `BlackHole 2ch` is not installed, the join fails with a setup error +instead of silently joining without an audio path. + +### Twilio + +Twilio transport is a strict dial plan delegated to the Voice Call plugin. It +does not parse Meet pages for phone numbers. + +```bash +openclaw googlemeet join https://meet.google.com/abc-defg-hij \ + --transport twilio \ + --dial-in-number +15551234567 \ + --pin 123456 +``` + +Use `--dtmf-sequence` when the meeting needs a custom sequence: + +```bash +openclaw googlemeet join https://meet.google.com/abc-defg-hij \ + --transport twilio \ + --dial-in-number +15551234567 \ + --dtmf-sequence ww123456# +``` + +## OAuth and preflight + +Google Meet Media API access uses a personal OAuth client first. Configure +`oauth.clientId` and optionally `oauth.clientSecret`, then run: + +```bash +openclaw googlemeet auth login --json +``` + +The command prints an `oauth` config block with a refresh token. It uses PKCE, +localhost callback on `http://localhost:8085/oauth2callback`, and a manual +copy/paste flow with `--manual`. + +These environment variables are accepted as fallbacks: + +- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` or `GOOGLE_MEET_CLIENT_ID` +- `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` or `GOOGLE_MEET_CLIENT_SECRET` +- `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN` or `GOOGLE_MEET_REFRESH_TOKEN` +- `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN` or `GOOGLE_MEET_ACCESS_TOKEN` +- `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` or + `GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` +- `OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING` or `GOOGLE_MEET_DEFAULT_MEETING` +- `OPENCLAW_GOOGLE_MEET_PREVIEW_ACK` or `GOOGLE_MEET_PREVIEW_ACK` + +Resolve a Meet URL, code, or `spaces/{id}` through `spaces.get`: + +```bash +openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij +``` + +Run preflight before media work: + +```bash +openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij +``` + +Set `preview.enrollmentAcknowledged: true` only after confirming your Cloud +project, OAuth principal, and meeting participants are enrolled in the Google +Workspace Developer Preview Program for Meet media APIs. + +## Config + +Set config under `plugins.entries.google-meet.config`: + +```json5 +{ + plugins: { + entries: { + "google-meet": { + enabled: true, + config: { + defaultTransport: "chrome", + defaultMode: "realtime", + defaults: { + meeting: "https://meet.google.com/abc-defg-hij", + }, + preview: { + enrollmentAcknowledged: false, + }, + chrome: { + audioBackend: "blackhole-2ch", + launch: true, + browserProfile: "Default", + // Command-pair bridge: input writes 8 kHz G.711 mu-law audio to stdout. + audioInputCommand: [ + "rec", + "-q", + "-t", + "raw", + "-r", + "8000", + "-c", + "1", + "-e", + "mu-law", + "-b", + "8", + "-", + ], + // Output reads 8 kHz G.711 mu-law audio from stdin. + audioOutputCommand: [ + "play", + "-q", + "-t", + "raw", + "-r", + "8000", + "-c", + "1", + "-e", + "mu-law", + "-b", + "8", + "-", + ], + }, + twilio: { + defaultDialInNumber: "+15551234567", + defaultPin: "123456", + }, + voiceCall: { + enabled: true, + gatewayUrl: "ws://127.0.0.1:18789", + dtmfDelayMs: 2500, + }, + realtime: { + provider: "openai", + model: "gpt-realtime", + instructions: "You are joining a private Google Meet as Peter's OpenClaw agent. Keep replies brief unless asked.", + toolPolicy: "safe-read-only", + providers: { + openai: { + apiKey: { env: "OPENAI_API_KEY" }, + }, + }, + }, + auth: { + provider: "google-oauth", + }, + oauth: { + clientId: "your-google-oauth-client-id.apps.googleusercontent.com", + refreshToken: "stored-refresh-token", + }, + }, + }, + }, + }, +} +``` + +## Tool + +Agents can use the `google_meet` tool: + +```json +{ + "action": "join", + "url": "https://meet.google.com/abc-defg-hij", + "transport": "chrome", + "mode": "realtime" +} +``` + +Use `action: "status"` to list active sessions or inspect a session ID. Use +`action: "leave"` to mark a session ended. + +## Notes + +Google Meet's official media API is receive-oriented, so speaking into a Meet +call still needs a participant path. This plugin keeps that boundary visible: +Chrome handles browser participation and local audio routing; Twilio handles +phone dial-in participation. + +Chrome realtime mode needs either: + +- `chrome.audioInputCommand` plus `chrome.audioOutputCommand`: OpenClaw owns the + realtime model bridge and pipes 8 kHz G.711 mu-law audio between those + commands and the selected realtime voice provider. +- `chrome.audioBridgeCommand`: an external bridge command owns the whole local + audio path and must exit after starting or validating its daemon. + +For clean duplex audio, route Meet output and Meet microphone through separate +virtual devices or a Loopback-style virtual device graph. A single shared +BlackHole device can echo other participants back into the call.