






















@@ -0,0 +1,225 @@
1+---
2+summary: "Google Meet plugin: join explicit Meet URLs through Chrome or Twilio with realtime voice defaults"
3+read_when:
4+ - You want an OpenClaw agent to join a Google Meet call
5+ - You are configuring Chrome or Twilio as a Google Meet transport
6+title: "Google Meet Plugin"
7+---
8+9+# Google Meet (plugin)
10+11+Google Meet participant support for OpenClaw.
12+13+The plugin is explicit by design:
14+15+- It only joins an explicit `https://meet.google.com/...` URL.
16+- `realtime` voice is the default mode.
17+- Auth starts as personal Google OAuth or an already signed-in Chrome profile.
18+- There is no automatic consent announcement.
19+- The default Chrome audio backend is `BlackHole 2ch`.
20+- Twilio accepts a dial-in number plus optional PIN or DTMF sequence.
21+- The CLI command is `googlemeet`; `meet` is reserved for broader agent
22+ teleconference workflows.
23+24+## Transports
25+26+### Chrome
27+28+Chrome transport opens the Meet URL in Google Chrome and joins as the signed-in
29+Chrome profile. On macOS, the plugin checks for `BlackHole 2ch` before launch.
30+If configured, it also runs an audio bridge health command and startup command
31+before opening Chrome.
32+33+```bash
34+openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome
35+```
36+37+Route Chrome microphone and speaker audio through the local OpenClaw audio
38+bridge. If `BlackHole 2ch` is not installed, the join fails with a setup error
39+instead of silently joining without an audio path.
40+41+### Twilio
42+43+Twilio transport is a strict dial plan delegated to the Voice Call plugin. It
44+does not parse Meet pages for phone numbers.
45+46+```bash
47+openclaw googlemeet join https://meet.google.com/abc-defg-hij \
48+ --transport twilio \
49+ --dial-in-number +15551234567 \
50+ --pin 123456
51+```
52+53+Use `--dtmf-sequence` when the meeting needs a custom sequence:
54+55+```bash
56+openclaw googlemeet join https://meet.google.com/abc-defg-hij \
57+ --transport twilio \
58+ --dial-in-number +15551234567 \
59+ --dtmf-sequence ww123456#
60+```
61+62+## OAuth and preflight
63+64+Google Meet Media API access uses a personal OAuth client first. Configure
65+`oauth.clientId` and optionally `oauth.clientSecret`, then run:
66+67+```bash
68+openclaw googlemeet auth login --json
69+```
70+71+The command prints an `oauth` config block with a refresh token. It uses PKCE,
72+localhost callback on `http://localhost:8085/oauth2callback`, and a manual
73+copy/paste flow with `--manual`.
74+75+These environment variables are accepted as fallbacks:
76+77+- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` or `GOOGLE_MEET_CLIENT_ID`
78+- `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` or `GOOGLE_MEET_CLIENT_SECRET`
79+- `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN` or `GOOGLE_MEET_REFRESH_TOKEN`
80+- `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN` or `GOOGLE_MEET_ACCESS_TOKEN`
81+- `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` or
82+`GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT`
83+- `OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING` or `GOOGLE_MEET_DEFAULT_MEETING`
84+- `OPENCLAW_GOOGLE_MEET_PREVIEW_ACK` or `GOOGLE_MEET_PREVIEW_ACK`
85+86+Resolve a Meet URL, code, or `spaces/{id}` through `spaces.get`:
87+88+```bash
89+openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij
90+```
91+92+Run preflight before media work:
93+94+```bash
95+openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij
96+```
97+98+Set `preview.enrollmentAcknowledged: true` only after confirming your Cloud
99+project, OAuth principal, and meeting participants are enrolled in the Google
100+Workspace Developer Preview Program for Meet media APIs.
101+102+## Config
103+104+Set config under `plugins.entries.google-meet.config`:
105+106+```json5
107+{
108+ plugins: {
109+ entries: {
110+"google-meet": {
111+ enabled: true,
112+ config: {
113+ defaultTransport: "chrome",
114+ defaultMode: "realtime",
115+ defaults: {
116+ meeting: "https://meet.google.com/abc-defg-hij",
117+ },
118+ preview: {
119+ enrollmentAcknowledged: false,
120+ },
121+ chrome: {
122+ audioBackend: "blackhole-2ch",
123+ launch: true,
124+ browserProfile: "Default",
125+// Command-pair bridge: input writes 8 kHz G.711 mu-law audio to stdout.
126+ audioInputCommand: [
127+"rec",
128+"-q",
129+"-t",
130+"raw",
131+"-r",
132+"8000",
133+"-c",
134+"1",
135+"-e",
136+"mu-law",
137+"-b",
138+"8",
139+"-",
140+ ],
141+// Output reads 8 kHz G.711 mu-law audio from stdin.
142+ audioOutputCommand: [
143+"play",
144+"-q",
145+"-t",
146+"raw",
147+"-r",
148+"8000",
149+"-c",
150+"1",
151+"-e",
152+"mu-law",
153+"-b",
154+"8",
155+"-",
156+ ],
157+ },
158+ twilio: {
159+ defaultDialInNumber: "+15551234567",
160+ defaultPin: "123456",
161+ },
162+ voiceCall: {
163+ enabled: true,
164+ gatewayUrl: "ws://127.0.0.1:18789",
165+ dtmfDelayMs: 2500,
166+ },
167+ realtime: {
168+ provider: "openai",
169+ model: "gpt-realtime",
170+ instructions: "You are joining a private Google Meet as Peter's OpenClaw agent. Keep replies brief unless asked.",
171+ toolPolicy: "safe-read-only",
172+ providers: {
173+ openai: {
174+ apiKey: { env: "OPENAI_API_KEY" },
175+ },
176+ },
177+ },
178+ auth: {
179+ provider: "google-oauth",
180+ },
181+ oauth: {
182+ clientId: "your-google-oauth-client-id.apps.googleusercontent.com",
183+ refreshToken: "stored-refresh-token",
184+ },
185+ },
186+ },
187+ },
188+ },
189+}
190+```
191+192+## Tool
193+194+Agents can use the `google_meet` tool:
195+196+```json
197+{
198+"action": "join",
199+"url": "https://meet.google.com/abc-defg-hij",
200+"transport": "chrome",
201+"mode": "realtime"
202+}
203+```
204+205+Use `action: "status"` to list active sessions or inspect a session ID. Use
206+`action: "leave"` to mark a session ended.
207+208+## Notes
209+210+Google Meet's official media API is receive-oriented, so speaking into a Meet
211+call still needs a participant path. This plugin keeps that boundary visible:
212+Chrome handles browser participation and local audio routing; Twilio handles
213+phone dial-in participation.
214+215+Chrome realtime mode needs either:
216+217+- `chrome.audioInputCommand` plus `chrome.audioOutputCommand`: OpenClaw owns the
218+ realtime model bridge and pipes 8 kHz G.711 mu-law audio between those
219+ commands and the selected realtime voice provider.
220+- `chrome.audioBridgeCommand`: an external bridge command owns the whole local
221+ audio path and must exit after starting or validating its daemon.
222+223+For clean duplex audio, route Meet output and Meet microphone through separate
224+virtual devices or a Loopback-style virtual device graph. A single shared
225+BlackHole device can echo other participants back into the call.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。