---
summary: "Choose and configure Google Meet, Microsoft Teams, or Zoom meeting 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, 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, and Zoom. All three 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, 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 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                                                                     |
| 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 a mode

The three 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.                                                  | 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.

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.

The bounded live transcript remains available only in `transcribe` mode. In all
three modes, browser joins also persist completed caption rows and a derived
summary to the shared state database. Leaving the meeting finalizes visible
captions and writes the 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. 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.

| 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`                                              |

## 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` |
| 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.

## Install or disable plugins

Install the meeting plugins you need. Each is enabled by default after installation:

```bash
openclaw plugins install npm:@openclaw/google-meet
openclaw plugins install @openclaw/teams-meetings
openclaw plugins install @openclaw/zoom-meetings
openclaw gateway restart
```

Disable any meeting plugin you do not use:

```bash
openclaw plugins disable google-meet
openclaw plugins disable teams-meetings
openclaw plugins disable zoom-meetings
```

Restart the Gateway if your plugin-management path does not restart it automatically. Then run the platform setup check before joining.

## 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/...'` |
| 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, and Zoom do not report `speechOutputVerified: true` when only the output-byte counter advances or unrelated participant audio is present.

## 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.
- 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) 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 fourth browser meeting plugin.

## Platform guides

- [Google Meet plugin](/plugins/google-meet)
- [Microsoft Teams meetings plugin](/plugins/teams-meetings)
- [Zoom meetings plugin](/plugins/zoom-meetings)
- [Manage plugins](/plugins/manage-plugins)
- [Browser control](/tools/browser)
