openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
232 lines (178 loc) • 17.4 kB
Markdown
---
summary: "Choose and configure Google Meet, Microsoft Teams, Slack huddles, or Zoom participation"
doc-schema-version: 1
read_when:
- You want an OpenClaw agent to join a video meeting
- You are choosing between the Google Meet, Microsoft Teams meetings, Slack huddles, and Zoom meetings plugins
- You need the shared Chrome, virtual-audio, or meeting-mode setup
title: "Meeting plugins"
---
OpenClaw has separate plugins for Google Meet, Microsoft Teams meetings, Slack huddles, and Zoom. All four can join through Chrome, use the same participation modes, and run Chrome either on the Gateway host or on a paired node. Their platform URLs, accounts, installation model, and extra capabilities differ.
These plugins participate in meetings. They are separate from messaging channels such as the [Microsoft Teams channel](/channels/msteams) and [Slack channel](/channels/slack), and from the [Voice call plugin](/plugins/voice-call).
## Choose a plugin
| Platform | Plugin | Accepted meeting links | Installation | Participation paths | Platform-specific capabilities |
| --------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| Google Meet | [`google-meet`](/plugins/google-meet) | `meet.google.com/...` | Install from npm or ClawHub; enabled by default | Local Chrome, Chrome on a paired node, or Twilio dial-in | Can create meetings through the Meet API or a signed-in browser; can read supported Meet artifacts with OAuth |
| Microsoft Teams | [`teams-meetings`](/plugins/teams-meetings) | Work links under `teams.microsoft.com/l/meetup-join/...` and consumer links under `teams.live.com/meet/...` | Install from npm or ClawHub; enabled by default | Local Chrome or Chrome on a paired node | Guest join for work and consumer meetings |
| Slack huddles | [`slack-huddles`](/plugins/slack-huddles) | Slack `/huddle/<TEAM>/<CHANNEL>` or `/huddle/<CHANNEL>` links, or a channel id | Install from npm or ClawHub; enable explicitly | Local Chrome or Chrome on a paired node | Joins active huddles as a dedicated signed-in Slack user |
| Zoom | [`zoom-meetings`](/plugins/zoom-meetings) | `zoom.us/j/...` and account subdomains such as `example.zoom.us/j/...` | Install from npm or ClawHub; enabled by default | Local Chrome or Chrome on a paired node | Guest join through the Zoom Web App |
Choose Google Meet when you need meeting creation, Google API artifacts, or a Twilio phone path. Choose Teams or Zoom for direct browser guest participation on those platforms. The Teams and Zoom plugins do not create meetings, dial in, call the vendor API, or capture audio/video recordings.
Choose Slack huddles to call the agent into an active huddle. It requires a
dedicated Slack user signed into the OpenClaw Chrome profile with membership in
the conversation. Slack app and bot tokens cannot join huddles or read their
audio. The plugin does not start huddles or answer incoming rings.
## Choose a mode
The four plugins share the same modes:
| Mode | Behavior | Audio requirements |
| ------------ | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
| `agent` | Realtime transcription goes to the configured OpenClaw agent; regular OpenClaw TTS speaks the reply. | Chrome talk-back requires a supported virtual-audio backend. |
| `bidi` | A realtime voice model listens and replies directly, with OpenClaw agent delegation when supported. | Chrome talk-back requires a supported virtual-audio backend. |
| `transcribe` | Joins observe-only and exposes a bounded live-caption transcript when the platform provides captions. | No virtual-audio bridge. |
Use `transcribe` when the agent only needs meeting text. Use `agent` for normal OpenClaw reasoning and tools. Use `bidi` when low-latency direct voice is more important than routing each turn through the regular agent.
Google Meet, Teams, Slack huddles, and Zoom use one shared meeting audio engine. In `bidi`
mode they support GPT-Live through the same provider selection, native agent
delegation, and interruption policy used by Discord and Talk. GPT-Live owns
interruptions; participant audio stays open while the model speaks.
In `bidi` mode, recoverable provider diagnostics are logged without stopping the audio bridge. Providers that support reconnecting own that recovery. Terminal provider closure, exhausted recovery, failed initial setup, and local audio-transport failures still stop the bridge; leaving the meeting also stops it.
Stopping a meeting requests cancellation of any active agent consult. In `agent` mode, OpenClaw finishes active output and turn events before closing the session, then ignores late speech synthesis and audio delivery results.
Leaving also waits for audio startup already admitted by that session and stops the resulting runtime before reporting completion. If a join fails after attaching a runtime and cleanup cannot finish, status keeps the ended session visible so `leave` can retry. A replacement for the same meeting waits for pending audio startup or stop work and can reject if audio cleanup still fails; other meetings remain independent. Browser leave results remain separate: a settled browser-only leave failure remains retryable without permanently blocking another join.
The bounded live transcript remains available only in `transcribe` mode. In all
three modes, browser joins also persist completed caption rows and meeting notes
to the shared state database. Notes update about every five minutes when new
speech is saved, using the meeting agent's utility model with primary-model and
heuristic fallbacks. Leaving the meeting finalizes visible captions and writes
the final summary; use [`openclaw transcripts`](/cli/transcripts)
to list, inspect, or export it. This durable notes path does not change the live
agent-consult transcript or create an audio/video recording.
Automatic notes are on by default. Set `transcripts.enabled: false` to disable
durable notes globally. An explicitly selected `transcribe` session retains its
bounded live-caption tail without writing durable rows. Caption availability
still depends on the meeting platform, account, language, and host policy.
## Configure Teams or Zoom
The Teams and Zoom plugins share the same configuration shape for their common
meeting runtime. Slack huddles uses these settings too, except that its Slack
account supplies the display name. Add an entry only when you need to override a default. This
example selects the normal agent path, changes the guest display name, and runs
Chrome on a paired node:
```json5
{
plugins: {
entries: {
"teams-meetings": {
config: {
defaultMode: "agent",
chrome: { guestName: "OpenClaw Agent" },
chromeNode: { node: "meeting-node" },
},
},
},
},
}
```
Use `"zoom-meetings"` as the entry id for Zoom. Omit `chromeNode` to run
Chrome on the Gateway host.
For Slack, use `"slack-huddles"`, enable the plugin explicitly, and follow its
[account setup](/plugins/slack-huddles#requirements).
| Setting | Purpose |
| -------------------------------- | --------------------------------------------------------------------------------- |
| `defaultMode` | `agent` (default), `bidi`, or `transcribe` |
| `chrome.guestName` | Guest display name entered on the platform prejoin page |
| `chrome.browserProfile` | OpenClaw browser profile used for the meeting |
| `chrome.audioBackend` | `auto` (default), `blackhole-2ch`, or `pipewire-pulse` |
| `chromeNode.node` | Paired node id, name, or IP that owns Chrome and the native virtual-audio backend |
| `realtime.transcriptionProvider` | Realtime transcription provider used by `agent` mode |
| `realtime.voiceProvider` | Realtime voice provider used by `bidi` mode |
| `realtime.model` | Optional realtime model override |
| `realtime.agentId` | Agent consulted in `agent` mode |
| `realtime.toolPolicy` | `safe-read-only`, `owner`, or `none` |
For GPT-Live with Cove, set `defaultMode: "bidi"`,
`realtime.voiceProvider: "openai"`, `realtime.model: "gpt-live-1-codex"`, and
`realtime.providers.openai.voice: "cove"`. Sign in with
`openclaw models auth login --provider openai` on the Gateway host. The
[Google Meet configuration example](/plugins/google-meet/config#gpt-live-with-cove)
uses the same fields; substitute `teams-meetings`, `slack-huddles`, or `zoom-meetings` for the
plugin entry. Unpinned configurations keep their provider's default model.
`agent` mode continues to use regular OpenClaw TTS.
## Prepare Chrome and audio
Chrome can run on the Gateway host or on a paired node. A remote Chrome node must allow `browser.proxy` plus the platform command:
| Plugin | Node command |
| --------------- | ---------------------- |
| Google Meet | `googlemeet.chrome` |
| Microsoft Teams | `teamsmeetings.chrome` |
| Slack huddles | `slackhuddles.chrome` |
| Zoom | `zoommeetings.chrome` |
For `agent` or `bidi` mode through Chrome, install the native audio dependencies on the host that runs Chrome. On macOS:
```bash
brew install blackhole-2ch sox
sudo reboot
system_profiler SPAudioDataType | grep -i BlackHole
command -v sox
```
On a Linux desktop with PipeWire-Pulse, install the PulseAudio command-line tools. OpenClaw creates and reuses an `OpenClaw Meeting Audio` null sink and matching source in the desktop user's audio session:
```bash
# Debian/Ubuntu
sudo apt install pipewire-audio pulseaudio-utils
systemctl --user --now enable pipewire pipewire-pulse wireplumber
pactl info
command -v pactl pacat parec
```
Run the Gateway or paired node as the same desktop user that runs Chrome. A root service or headless service without that user's `XDG_RUNTIME_DIR` cannot access the PipeWire-Pulse socket and fails setup with an actionable error.
The Gateway host still owns the OpenClaw agent and model credentials when Chrome runs on a paired node. Configure a realtime transcription provider and OpenClaw TTS for `agent` mode, or a realtime voice provider for `bidi` mode. The platform guides contain the provider and audio-command options.
Chrome sessions without an explicit `chrome.audioInputCommand` capture participant audio directly from browser
playback and keep that playback off the virtual microphone. The native output
command injects assistant speech into the microphone; the native input command
verifies that injection. Isolated participant input remains open during both
realtime speech and TTS. A capture failure stops the bridge with an error;
mixed loopback audio is not used as a fallback for Live.
Explicit input commands retain their existing provider-input behavior on both
local and paired-node Chrome, including custom capture, filters, and mixers.
They keep the existing echo protection. To select GPT-Live, remove the input
override and use managed isolated capture; Live rejects a custom command path
whose isolation cannot be verified instead of silently replacing it.
## Install or disable plugins
Install the meeting plugins you need. Google Meet, Teams, and Zoom are enabled
by default after installation. Slack huddles requires explicit enablement after
setting up its dedicated user account:
```bash
openclaw plugins install @openclaw/google-meet
openclaw plugins install @openclaw/teams-meetings
openclaw plugins install @openclaw/slack-huddles
openclaw plugins enable slack-huddles
openclaw plugins install @openclaw/zoom-meetings
```
Disable any meeting plugin you do not use:
```bash
openclaw plugins disable google-meet
openclaw plugins disable teams-meetings
openclaw plugins disable slack-huddles
openclaw plugins disable zoom-meetings
```
These changes apply to a running Gateway automatically. If it is offline, start it before joining. Check the application result, then run the platform setup check below; see [Apply changes and inspect](/plugins/manage-plugins#apply-changes-and-inspect).
## Verify and join
| Platform | Setup check | Join command |
| --------------- | ------------------------------ | ----------------------------------------------------------------------------- |
| Google Meet | `openclaw googlemeet setup` | `openclaw googlemeet join 'https://meet.google.com/abc-defg-hij'` |
| Microsoft Teams | `openclaw teamsmeetings setup` | `openclaw teamsmeetings join 'https://teams.microsoft.com/l/meetup-join/...'` |
| Slack huddles | `openclaw slackhuddles setup` | `openclaw slackhuddles join 'channel:C0123ABCD'` |
| Zoom | `openclaw zoommeetings setup` | `openclaw zoommeetings join 'https://zoom.us/j/1234567890'` |
Treat any failed setup check as a blocker for that transport and mode. For an observe-only smoke test, select `transcribe` mode and confirm that status reports an in-call session before expecting caption text.
For talk-back smoke tests, verified speech requires more than bytes accepted by the playback command. The shared command-pair bridge correlates a bounded waveform fingerprint from the current output generation with audio returning on the selected virtual microphone capture path; Google Meet, Teams, Slack huddles, and Zoom do not report `speechOutputVerified: true` when only the output-byte counter advances or unrelated participant audio is present.
That verifies local microphone injection. Use a controlled second participant
to prove remote audibility and interruption during an actual meeting.
## Handle platform policy prompts
Browser automation handles the normal guest-name, prejoin camera and microphone, join, in-call, and leave controls. It does not bypass platform or organizer policy.
- Google Meet may require Google sign-in, host admission, or a browser permission decision.
- Microsoft Teams may require tenant sign-in, email verification, or organizer admission.
- Slack huddles requires a signed-in user and an active huddle; confirmation, another device, request-to-join, or browser permissions can require manual action. Enable the account's captions-on-join preference for caption transcripts.
- Zoom may require authentication, email verification, a passcode, CAPTCHA completion, or host admission; an account can also disable browser join.
When a join or status result includes `manualAction`, complete its reported step in the same OpenClaw Chrome profile before retrying. Repeatedly opening new tabs does not resolve an account, tenant, lobby, or CAPTCHA gate.
Only join meetings where the operator is authorized to add an agent. Tell participants when local policy or consent rules require disclosure of automated participation, transcription, or synthesized speech.
## Discord voice chat
[Discord voice channels](/channels/discord/voice-channels#voice-channels) provide native, audio-only realtime conversation without browser meeting automation. OpenClaw can join a voice channel, listen, route turns through an OpenClaw agent or realtime voice model, and speak replies. It does not send or receive camera video or screen sharing, even when people use video in the same Discord channel, so Discord voice is a related live-conversation surface rather than a browser meeting plugin.
## Platform guides
- [Google Meet plugin](/plugins/google-meet)
- [Microsoft Teams meetings plugin](/plugins/teams-meetings)
- [Slack huddles plugin](/plugins/slack-huddles)
- [Zoom meetings plugin](/plugins/zoom-meetings)
- [Manage plugins](/plugins/manage-plugins)
- [Browser control](/tools/browser)