惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
博客园 - 【当耐特】
月光博客
月光博客
Vercel News
Vercel News
D
Docker
I
InfoQ
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
GbyAI
GbyAI
有赞技术团队
有赞技术团队
雷峰网
雷峰网
博客园 - 聂微东
小众软件
小众软件
Y
Y Combinator Blog
腾讯CDC
L
LangChain Blog
The GitHub Blog
The GitHub Blog
宝玉的分享
宝玉的分享
Stack Overflow Blog
Stack Overflow Blog
大猫的无限游戏
大猫的无限游戏
T
The Blog of Author Tim Ferriss

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
feat: add Google Meet participant plugin · openclaw/openc...
steipete · 2026-04-24 · via Recent Commits to openclaw:main

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