Plugin guides
Google Meet-plugin
De Plugin google-meet neemt namens een OpenClaw-agent deel via expliciete Meet-URL's. De functionaliteit is bewust beperkt:
- De Plugin neemt alleen deel via
https://meet.google.com/...-URL's; de Plugin belt nooit in bij een vergadering via een telefoonnummer dat deze zelf vindt. googlemeet createkan via de Google Meet API (of een browserfallback) een nieuwe Meet-URL genereren en neemt er standaard aan deel.- Deelname via Chrome gebruikt een aangemeld Chrome-profiel, eventueel op een gekoppelde Node. Deelname via Twilio belt via de Plugin voor spraakoproepen een telefoonnummer plus pincode/DTMF; hiermee kan niet rechtstreeks naar een Meet-URL worden gebeld.
mode: "agent"(standaard) transcribeert spraak van deelnemers met een realtimeprovider, stuurt deze naar de geconfigureerde OpenClaw-agent en spreekt het antwoord uit met reguliere OpenClaw-TTS. Metmode: "bidi"kan een realtime spraakmodel rechtstreeks antwoorden.mode: "transcribe"neemt alleen als waarnemer deel, zonder terug te praten.- Er wordt niet automatisch een toestemmingsmelding afgespeeld wanneer de Plugin aan een gesprek deelneemt.
- De CLI-opdracht is
googlemeet;meetis gereserveerd voor bredere workflows voor telefonische vergaderingen met agents.
Snel aan de slag
Installeer de lokale audioafhankelijkheden en stel vervolgens een sleutel voor een realtimeprovider in. OpenAI is de standaardprovider voor transcriptie in de modus agent; Google Gemini Live is beschikbaar als spraakprovider voor de modus bidi:
brew install blackhole-2ch soxexport OPENAI_API_KEY=sk-...# alleen nodig wanneer realtime.voiceProvider voor de bidi-modus "google" isexport GEMINI_API_KEY=...blackhole-2ch installeert het virtuele audioapparaat BlackHole 2ch waarlangs Chrome routeert. Het Homebrew-installatieprogramma vereist dat macOS opnieuw wordt opgestart voordat het apparaat beschikbaar is:
sudo rebootControleer na het opnieuw opstarten beide onderdelen:
system_profiler SPAudioDataType | grep -i BlackHolecommand -v soxSchakel de Plugin in:
{ plugins: { entries: { "google-meet": { enabled: true, config: {}, }, }, },}Controleer de installatie en neem vervolgens deel:
openclaw googlemeet setupopenclaw googlemeet join https://meet.google.com/abc-defg-hijDe uitvoer van setup is leesbaar voor agents en houdt rekening met modus en transport: deze rapporteert het Chrome-profiel, de vastgezette Node en, voor realtime deelname via Chrome, de BlackHole/SoX-audiobrug en de controle voor de vertraagde introductie. Deelname alleen als waarnemer slaat realtimevereisten over:
openclaw googlemeet setup --transport chrome-node --mode transcribeWanneer delegatie via Twilio is geconfigureerd, rapporteert setup ook of voice-call, Twilio-inloggegevens en openbare Webhook-beschikbaarheid gereed zijn. Beschouw elke ok: false-controle als een blokkade voor die combinatie van transport en modus voordat een agent deelneemt. Gebruik --json voor machineleesbare uitvoer en --transport chrome|chrome-node|twilio om een specifiek transport vooraf te controleren:
openclaw googlemeet setup --transport twilioOf laat een agent deelnemen via de tool google_meet:
{ "action": "join", "url": "https://meet.google.com/abc-defg-hij", "transport": "chrome-node", "mode": "agent"}Op Gateway-hosts zonder macOS blijft google_meet zichtbaar voor artefact-, agenda-, installatie-, transcriptie- en Twilio-acties en voor chrome-node-acties, maar lokaal terugpraten via Chrome (transport: "chrome" met mode: "agent" of "bidi") wordt geblokkeerd voordat de audiobrug wordt bereikt, omdat dit pad momenteel afhankelijk is van BlackHole 2ch in macOS. Gebruik in plaats daarvan mode: "transcribe", inbellen via Twilio of een macOS-host voor chrome-node.
Een vergadering maken
openclaw googlemeet create --transport chrome-node --mode agentopenclaw googlemeet create --no-joincreate heeft twee paden, die in het veld source van het resultaat worden vermeld:
api: wordt gebruikt wanneer OAuth-inloggegevens voor Google Meet zijn geconfigureerd. Deterministisch; niet afhankelijk van de status van de browserinterface.browser: wordt gebruikt zonder OAuth-inloggegevens. OpenClaw openthttps://meet.google.com/newop de vastgezette Chrome-Node en wacht tot Google omleidt naar een echte URL met een vergaderingscode; het OpenClaw-Chrome-profiel op die Node moet al bij Google zijn aangemeld. Zowel deelnemen als maken hergebruikt een bestaand Meet-tabblad (of een tabblad met een actieve.../new- of Google-accountprompt) voordat een nieuw tabblad wordt geopend; bij het vergelijken van tabbladen worden onschadelijke queryreeksen zoalsauthusergenegeerd.
create neemt standaard deel en retourneert joined: true plus de deelnamesessie. Geef --no-join (CLI) of "join": false (tool) door om alleen de URL te genereren.
Stel voor via de API gemaakte ruimten een expliciet toegangsbeleid in in plaats van de standaardinstelling van het Google-account over te nemen:
openclaw googlemeet create --access-type OPEN --transport chrome-node --mode agent--access-type |
Wie zonder aankloppen kan deelnemen |
|---|---|
OPEN |
Iedereen met de Meet-URL |
TRUSTED |
Vertrouwde gebruikers van de organisatie van de host, uitgenodigde externe gebruikers en inbellers |
RESTRICTED |
Alleen genodigden |
Dit geldt alleen voor via de API gemaakte ruimten, dus OAuth moet zijn geconfigureerd. Als je je hebt geauthenticeerd voordat deze optie bestond, voer je openclaw googlemeet auth login --json opnieuw uit nadat je het bereik meetings.space.settings aan je OAuth-toestemmingsscherm hebt toegevoegd.
Als de browserfallback wordt geblokkeerd door een Google-aanmelding of een Meet-machtiging, retourneert de tool manualActionRequired: true met manualActionReason, manualActionMessage en de browser.nodeId/browser.targetId/browserUrl. Meld dat bericht en open geen nieuwe Meet-tabbladen totdat de operator de browserstap heeft voltooid.
Alleen als waarnemer deelnemen
Stel "mode": "transcribe" in om de duplex-realtimebrug over te slaan (geen BlackHole/SoX vereist, niet terugpraten). Deelname via Chrome in de transcriptiemodus slaat ook de toekenning van microfoon-/cameramachtigingen door OpenClaw en het Meet-pad Use microphone over; als Meet het tussenscherm voor audiokeuze toont, probeert de automatisering eerst Continue without microphone. Beheerde Chrome-transporten installeren in deze modus zo goed mogelijk een waarnemer voor Meet-ondertiteling. googlemeet status --json en googlemeet doctor rapporteren captioning, captionsEnabledAttempted, transcriptLines, lastCaptionAt, lastCaptionSpeaker, lastCaptionText en een recentTranscript-staart.
Lees voor het begrensde sessietranscript exact het bijgehouden Meet-tabblad:
openclaw googlemeet transcript <session-id>openclaw googlemeet transcript <session-id> --since <next-index> --jsonDe waarnemer bewaart maximaal 2,000 voltooide ondertitelregels op de Meet-pagina. Zichtbare voortschrijdende tekst blijft in de gezondheidsstaart van de status staan totdat de ondertitelregel is voltooid, zodat het opslaan van nextIndex een latere tekstuitbreiding niet kan overslaan; bij het verlaten worden zichtbare regels vóór de momentopname voltooid. droppedLines rapporteert regels die aan het begin verloren zijn gegaan wanneer de limiet wordt overschreden. De vier meest recent beëindigde sessietranscripten blijven leesbaar totdat de Gateway opnieuw wordt gestart. Oudere beëindigde transcripten retourneren evicted: true. Dit is bewust runtimegeheugen en geen duurzame opslag voor vergadergeschiedenis: door de Gateway opnieuw te starten, het tabblad vóór een momentopname te sluiten of de gedocumenteerde limieten te overschrijden, kunnen ondertitels verloren gaan.
Voor een ja/nee-luistertest:
openclaw googlemeet test-listen <meet-url> --transport chrome-nodeDeze neemt deel in de transcriptiemodus, wacht op nieuwe beweging in ondertitels/transcript en retourneert listenVerified, listenTimedOut, velden voor handmatige acties en de huidige status van de ondertiteling.
Status van de realtimesessie
Tijdens sessies waarin wordt teruggepraat, rapporteert de status google_meet de status van Chrome/de audiobrug: inCall, manualActionRequired, providerConnected, realtimeReady, audioInputActive, audioOutputActive, tijdstempels van de laatste invoer/uitvoer, bytetellers en de gesloten status van de brug. Beheerde Chrome-sessies spreken de introductie-/testzin alleen uit nadat de status inCall: true rapporteert; anders wordt speechReady: false gerapporteerd en wordt de spraakpoging geblokkeerd in plaats van stilzwijgend niets te doen.
Lokale deelname via Chrome gebruikt het aangemelde OpenClaw-browserprofiel en vereist BlackHole 2ch voor het microfoon-/luidsprekerpad. Eén BlackHole-apparaat is voldoende voor een eerste rooktest, maar kan echo veroorzaken; gebruik afzonderlijke virtuele apparaten of een Loopback-achtige graaf voor zuivere duplexaudio.
Lokale Gateway + Chrome in Parallels
Een volledige Gateway of API-sleutel voor een model is niet vereist in een macOS-VM wanneer deze alleen Chrome beschikbaar hoeft te stellen. Voer de Gateway en agent lokaal uit; voer een Node-host uit in de VM.
| Wordt uitgevoerd op | Wat |
|---|---|
| Gateway-host | OpenClaw Gateway, agentwerkruimte, model-/API-sleutels, realtimeprovider, configuratie van de Google Meet-Plugin |
| Parallels-macOS-VM | OpenClaw CLI/Node-host, Chrome, SoX, BlackHole 2ch, een bij Google aangemeld Chrome-profiel |
| Niet nodig in de VM | Gateway-service, agentconfiguratie, configuratie van modelprovider |
Installeer de VM-afhankelijkheden, start opnieuw op en controleer:
brew install blackhole-2ch soxsudo rebootsystem_profiler SPAudioDataType | grep -i BlackHolecommand -v soxSchakel de Plugin in de VM in en start de Node-host:
openclaw plugins enable google-meetopenclaw node run --host <gateway-host> --port 18789 --display-name parallels-macosAls <gateway-host> een LAN-IP zonder TLS is, sta dit dan toe voor dat vertrouwde privénetwerk:
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macosGebruik dezelfde vlag bij de installatie als LaunchAgent (het is een procesomgevingsvariabele die, wanneer deze aanwezig is in de installatieopdracht, in de LaunchAgent-omgeving wordt opgeslagen; het is geen instelling voor openclaw.json):
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node install --host <gateway-lan-ip> --port 18789 --display-name parallels-macos --forceopenclaw node restartKeur de Node goed vanaf de Gateway-host en controleer vervolgens of deze zowel googlemeet.chrome als browserfunctionaliteit/browser.proxy aanbiedt:
openclaw devices listopenclaw devices approve <requestId>openclaw nodes statusRouteer Meet via die Node:
{ gateway: { nodes: { allowCommands: ["googlemeet.chrome", "browser.proxy"], }, }, plugins: { entries: { "google-meet": { enabled: true, config: { defaultTransport: "chrome-node", chrome: { guestName: "OpenClaw Agent", autoJoin: true, reuseExistingTab: true, }, chromeNode: { node: "parallels-macos", }, }, }, }, },}Neem nu op de gebruikelijke manier deel vanaf de Gateway-host:
openclaw googlemeet join https://meet.google.com/abc-defg-hijVoor een rooktest met één opdracht die een sessie maakt of hergebruikt, een bekende zin uitspreekt en de sessiestatus afdrukt:
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hijTijdens realtime deelname vult de browserautomatisering de gastnaam in, klikt op Join/Ask to join en accepteert de prompt "Use microphone" van Meet bij het eerste gebruik wanneer deze verschijnt (of "Continue without microphone" bij deelname alleen als waarnemer en het uitsluitend via de browser maken van vergaderingen). Als het profiel is afgemeld, Meet wacht op toelating door de host, Chrome microfoon-/cameramachtiging nodig heeft of Meet vastzit op een onopgeloste prompt, rapporteert het resultaat manualActionRequired: true met manualActionReason en manualActionMessage. Stop met opnieuw proberen, meld dat bericht plus browserUrl/browserTitle en probeer het pas opnieuw nadat de handmatige actie is voltooid.
Als chromeNode.node wordt weggelaten, selecteert OpenClaw alleen automatisch wanneer precies één verbonden Node zowel googlemeet.chrome als browserbesturing aanbiedt; zet chromeNode.node vast (Node-id, weergavenaam of extern IP-adres) wanneer meerdere geschikte Nodes zijn verbonden.
Controles bij veelvoorkomende fouten
| Symptoom | Oplossing |
|---|---|
Configured Google Meet node ... is not usable: offline |
De vastgezette Node is bekend, maar niet beschikbaar. Meld de blokkade in de configuratie; val niet stilzwijgend terug op een ander transport, tenzij daarom wordt gevraagd. |
No connected Google Meet-capable node |
Voer openclaw node run uit in de VM, keur de koppeling goed en voer daar openclaw plugins enable google-meet en openclaw plugins enable browser uit. Controleer of gateway.nodes.allowCommands googlemeet.chrome en browser.proxy bevat. |
BlackHole 2ch audio device not found |
Installeer blackhole-2ch op de host die wordt gecontroleerd en start deze opnieuw op. |
BlackHole 2ch audio device not found on the node |
Installeer blackhole-2ch in de VM en start de VM opnieuw op. |
| Chrome wordt geopend, maar kan niet deelnemen | Meld je aan bij het browserprofiel in de VM of laat chrome.guestName ingesteld. Automatisch deelnemen als gast gebruikt OpenClaw-browserautomatisering via de browserproxy van de Node; richt browser.defaultProfile van de Node (of een benoemd profiel met een bestaande sessie) op het gewenste profiel. |
| Dubbele Meet-tabbladen | Laat chrome.reuseExistingTab: true staan. OpenClaw activeert een bestaand tabblad voor dezelfde URL en hergebruikt tijdens het maken eerst een lopend .../new-tabblad of een tabblad met een Google-accountprompt, voordat een ander tabblad wordt geopend. |
| Geen audio | Leid de microfoon/luidspreker van Meet via het virtuele audiopad dat OpenClaw gebruikt; gebruik afzonderlijke virtuele apparaten of routering zoals Loopback voor heldere duplexaudio. |
Installatieopmerkingen
De standaardconfiguratie voor terugspreken via Chrome gebruikt twee externe hulpprogramma's die OpenClaw niet bundelt of herdistribueert; installeer ze als hostafhankelijkheden via Homebrew:
sox: audiohulpprogramma voor de opdrachtregel. De Plugin geeft expliciete CoreAudio-apparaatopdrachten voor de standaard PCM16-audiobrug van 24 kHz.blackhole-2ch: virtueel audiostuurprogramma voor macOS dat hetBlackHole 2ch-apparaat levert waar Chrome/Meet via wordt gerouteerd.
SoX heeft de licentie LGPL-2.0-only AND GPL-2.0-only; BlackHole heeft de GPL-3.0-licentie. Als je een installatieprogramma of apparaat bouwt dat BlackHole met OpenClaw bundelt, controleer dan de upstreamlicentie van BlackHole of verkrijg een afzonderlijke licentie van Existential Audio.
Transporten
| Transport | Gebruiken wanneer |
|---|---|
chrome |
Chrome/audio actief zijn op de Gateway-host |
chrome-node |
Chrome/audio actief zijn op een gekoppelde Node (bijvoorbeeld een Parallels-VM met macOS) |
twilio |
Terugval op telefonisch inbellen via de Voice Call-Plugin, wanneer deelname via Chrome niet beschikbaar is |
Chrome
Opent de Meet-URL via OpenClaw-browserbesturing en neemt deel als het aangemelde OpenClaw-browserprofiel. Op macOS controleert de Plugin vóór het starten op BlackHole 2ch en voert deze, indien geconfigureerd, een opdracht voor statuscontrole/het starten van de audiobrug uit voordat Chrome wordt geopend. Kies voor lokale Chrome het profiel met browser.defaultProfile; chrome.browserProfile wordt in plaats daarvan doorgegeven aan chrome-node-hosts.
openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chromeopenclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome-nodeAudio van de microfoon/luidspreker van Chrome wordt via de lokale OpenClaw-audiobrug geleid. Als BlackHole 2ch niet is geïnstalleerd, mislukt het deelnemen met een configuratiefout in plaats van zonder audiopad deel te nemen.
Twilio
Een strikt belplan dat is gedelegeerd aan de Voice Call-Plugin. Meet-pagina's worden niet geparseerd op telefoonnummers; Google Meet moet een telefoonnummer en pincode voor telefonisch inbellen voor de vergadering beschikbaar stellen.
Schakel Voice Call in op de Gateway-host, niet op de Chrome-Node:
{ plugins: { allow: ["google-meet", "voice-call", "google"], entries: { "google-meet": { enabled: true, config: { defaultTransport: "chrome-node", // of stel "twilio" in als Twilio de standaard moet zijn }, }, "voice-call": { enabled: true, config: { provider: "twilio", inboundPolicy: "allowlist", realtime: { enabled: true, provider: "google", instructions: "Neem als OpenClaw-agent deel aan deze Google Meet. Houd het kort.", toolPolicy: "safe-read-only", providers: { google: { silenceDurationMs: 500, startSensitivity: "high", }, }, }, }, }, google: { enabled: true, }, }, },}Geef Twilio-inloggegevens via de omgeving door om geheimen buiten openclaw.json te houden:
export TWILIO_ACCOUNT_SID=AC...export TWILIO_AUTH_TOKEN=...export TWILIO_FROM_NUMBER=+15550001234export GEMINI_API_KEY=...Gebruik in plaats daarvan realtime.provider: "openai" met OPENAI_API_KEY als OpenAI de realtime spraakprovider is.
Start de Gateway opnieuw of laad deze opnieuw nadat voice-call is ingeschakeld; wijzigingen in de Plugin-configuratie worden pas na opnieuw laden van kracht. Controleer:
openclaw config validateopenclaw plugins list | grep -E 'google-meet|voice-call'openclaw googlemeet setupWanneer Twilio-delegatie is aangesloten, bevat googlemeet setup controles voor twilio-voice-call-plugin, twilio-voice-call-credentials en twilio-voice-call-webhook.
openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --transport twilio \ --dial-in-number +15551234567 \ --pin 123456Gebruik --dtmf-sequence voor een aangepaste reeks, met voorafgaande w of komma's voor een pauze vóór de pincode:
openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --transport twilio \ --dial-in-number +15551234567 \ --dtmf-sequence ww123456#OAuth en voorbereidende controle
OAuth is optioneel voor het maken van een Meet-link, omdat googlemeet create kan terugvallen op browserautomatisering. Configureer OAuth voor het maken via de officiële API, het omzetten naar een ruimte of de voorbereidende controle van de Meet Media API. Deelnemen via Chrome/Chrome-Node is nooit afhankelijk van OAuth; hiervoor worden hoe dan ook een aangemeld Chrome-profiel, BlackHole/SoX en (voor chrome-node) een verbonden Node gebruikt.
Google-inloggegevens maken
In Google Cloud Console:
Een project maken of selecteren
De Google Meet REST API inschakelen
Het OAuth-toestemmingsscherm configureren
Internal is het eenvoudigst voor een Google Workspace-organisatie. External werkt voor persoonlijke/testconfiguraties; voeg, zolang de app de status Testing heeft, elk Google-account dat de app zal autoriseren toe als testgebruiker.
De gevraagde bereiken toevoegen
https://www.googleapis.com/auth/meetings.space.createdhttps://www.googleapis.com/auth/meetings.space.readonlyhttps://www.googleapis.com/auth/meetings.space.settingshttps://www.googleapis.com/auth/meetings.conference.media.readonlyhttps://www.googleapis.com/auth/calendar.events.readonly(agenda opzoeken)https://www.googleapis.com/auth/drive.meet.readonly(export van de documenttekst van transcript/slimme notitie)
Een OAuth-client-ID maken
Applicatietype Web application. Geautoriseerde omleidings-URI:
http://localhost:8085/oauth2callbackDe client-ID en het clientgeheim kopiëren
meetings.space.created is vereist door spaces.create. meetings.space.readonly zet Meet-URL's/-codes om naar ruimten. Met meetings.space.settings kan OpenClaw SpaceConfig-instellingen zoals accessType doorgeven tijdens het maken van een ruimte via de API. meetings.conference.media.readonly is bedoeld voor de voorbereidende controle van de Meet Media API en mediawerk; Google kan inschrijving voor Developer Preview vereisen voor daadwerkelijk gebruik van de Media API. calendar.events.readonly is alleen nodig voor het opzoeken in de agenda via --today/--event. drive.meet.readonly is alleen nodig voor de export via --include-doc-bodies. Als je alleen via de browser aan Chrome-sessies wilt deelnemen, kun je OAuth volledig overslaan.
Het vernieuwingstoken genereren
Configureer oauth.clientId en optioneel oauth.clientSecret (of geef ze door als omgevingsvariabelen) en voer vervolgens het volgende uit:
openclaw googlemeet auth login --jsonDit voert een PKCE-stroom uit met een localhost-callback op http://localhost:8085/oauth2callback en drukt een oauth-configuratieblok met een vernieuwingstoken af. Voeg --manual toe voor een kopieer-en-plakstroom wanneer de browser de lokale callback niet kan bereiken:
OPENCLAW_GOOGLE_MEET_CLIENT_ID="your-client-id" \OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \openclaw googlemeet auth login --json --manualJSON-uitvoer:
{ "oauth": { "clientId": "your-client-id", "clientSecret": "your-client-secret", "refreshToken": "refresh-token", "accessToken": "access-token", "expiresAt": 1770000000000 }, "scope": "..."}Sla het oauth-object op onder de Plugin-configuratie:
{ plugins: { entries: { "google-meet": { enabled: true, config: { oauth: { clientId: "your-client-id", clientSecret: "your-client-secret", refreshToken: "refresh-token", }, }, }, }, },}Gebruik bij voorkeur omgevingsvariabelen als je het vernieuwingstoken niet in de configuratie wilt opnemen; eerst wordt de configuratie verwerkt en daarna de omgeving als terugval. Als je je hebt geverifieerd voordat ondersteuning bestond voor het maken van vergaderingen, het opzoeken in de agenda of het exporteren van documenttekst, voer openclaw googlemeet auth login --json dan opnieuw uit zodat het vernieuwingstoken de huidige verzameling bereiken dekt.
OAuth controleren met doctor
openclaw googlemeet doctor --oauth --jsonDit controleert of de OAuth-configuratie bestaat en of het vernieuwingstoken een toegangstoken kan genereren, zonder de Chrome-runtime te laden of een verbonden Node te vereisen. Het rapport bevat alleen statusvelden (ok, configured, tokenSource, expiresAt, controlemeldingen) en drukt nooit het toegangstoken, vernieuwingstoken of clientgeheim af.
| Controle | Betekenis |
|---|---|
oauth-config |
oauth.clientId plus oauth.refreshToken, of een toegangstoken in de cache, is aanwezig |
oauth-token |
Het toegangstoken in de cache is nog geldig of het vernieuwingstoken heeft een nieuw token gegenereerd |
meet-spaces-get |
De optionele controle van --meeting heeft een bestaande Meet-ruimte gevonden |
meet-spaces-create |
De optionele controle van --create-space heeft een nieuwe Meet-ruimte gemaakt |
Bewijs dat de Meet API is ingeschakeld en dat het bereik spaces.create beschikbaar is met de aanmaakcontrole die bijwerkingen heeft:
openclaw googlemeet doctor --oauth --create-space --jsonBewijs leestoegang tot een bestaande ruimte:
openclaw googlemeet doctor --oauth --meeting https://meet.google.com/abc-defg-hij --jsonopenclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hijEen 403 bij deze controles betekent meestal dat de Meet REST API is uitgeschakeld, dat het vereiste bereik ontbreekt in het vernieuwingstoken of dat het Google-account geen toegang heeft tot die ruimte. Een fout met het vernieuwingstoken betekent dat je openclaw googlemeet auth login --json opnieuw moet uitvoeren en het nieuwe oauth-blok moet opslaan.
Voor de browserterugval is geen OAuth nodig; Google-verificatie is daar afkomstig van het aangemelde Chrome-profiel op de geselecteerde Node, niet van de OpenClaw-configuratie.
Deze omgevingsvariabelen worden als terugvalopties geaccepteerd:
OPENCLAW_GOOGLE_MEET_CLIENT_IDofGOOGLE_MEET_CLIENT_IDOPENCLAW_GOOGLE_MEET_CLIENT_SECRETofGOOGLE_MEET_CLIENT_SECRETOPENCLAW_GOOGLE_MEET_REFRESH_TOKENofGOOGLE_MEET_REFRESH_TOKENOPENCLAW_GOOGLE_MEET_ACCESS_TOKENofGOOGLE_MEET_ACCESS_TOKENOPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_ATofGOOGLE_MEET_ACCESS_TOKEN_EXPIRES_ATOPENCLAW_GOOGLE_MEET_DEFAULT_MEETINGofGOOGLE_MEET_DEFAULT_MEETINGOPENCLAW_GOOGLE_MEET_PREVIEW_ACKofGOOGLE_MEET_PREVIEW_ACK
Artefacten herleiden, vooraf controleren en lezen
openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hijopenclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hijNadat Meet conferentierecords heeft aangemaakt:
openclaw googlemeet artifacts --meeting https://meet.google.com/abc-defg-hijopenclaw googlemeet attendance --meeting https://meet.google.com/abc-defg-hijopenclaw googlemeet export --meeting https://meet.google.com/abc-defg-hij --output ./meet-exportMet --meeting gebruiken artifacts en attendance standaard het nieuwste conferentierecord; geef --all-conference-records door voor elk bewaard record.
Bij het opzoeken in de agenda wordt de vergader-URL vanuit Google Calendar herleid voordat artefacten worden gelezen (hiervoor is een vernieuwingstoken vereist met het alleen-lezenbereik voor Calendar-gebeurtenissen):
openclaw googlemeet latest --todayopenclaw googlemeet calendar-events --today --jsonopenclaw googlemeet artifacts --event "Weekly sync"openclaw googlemeet attendance --today --format csv --output attendance.csv--today doorzoekt de primary-agenda van vandaag naar een gebeurtenis met een Meet-link; --event <query> zoekt naar overeenkomende gebeurtenistekst; --calendar <id> richt zich op een niet-primaire agenda. calendar-events toont een voorbeeld van overeenkomende gebeurtenissen en markeert welke latest/artifacts/attendance/export zal kiezen.
Als je de id van het conferentierecord al kent, kun je het rechtstreeks adresseren:
openclaw googlemeet latest --meeting https://meet.google.com/abc-defg-hijopenclaw googlemeet artifacts --conference-record conferenceRecords/abc123 --jsonopenclaw googlemeet attendance --conference-record conferenceRecords/abc123 --jsonSluit de ruimte voor een via de API aangemaakte ruimte:
openclaw googlemeet end-active-conference https://meet.google.com/abc-defg-hijRoept spaces.endActiveConference aan en vereist OAuth met het bereik meetings.space.created voor een ruimte die het geautoriseerde account kan beheren. Accepteert een Meet-URL, vergadercode of spaces/{id} en herleidt deze eerst tot de API-ruimtebron. Dit staat los van googlemeet leave: leave stopt de lokale/sessiedeelname van OpenClaw; end-active-conference vraagt Google Meet de actieve conferentie voor de ruimte te beëindigen.
Schrijf een leesbaar rapport:
openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 \ --format markdown --output meet-artifacts.mdopenclaw googlemeet attendance --conference-record conferenceRecords/abc123 \ --format csv --output meet-attendance.csvopenclaw googlemeet export --conference-record conferenceRecords/abc123 \ --include-doc-bodies --zip --output meet-exportopenclaw googlemeet export --conference-record conferenceRecords/abc123 \ --include-doc-bodies --dry-runartifacts retourneert metadata van conferentierecords plus bronmetadata voor deelnemers, opnamen, transcripties, gestructureerde transcriptvermeldingen en slimme notities wanneer Google deze beschikbaar stelt. --no-transcript-entries slaat het opzoeken van vermeldingen over voor grote vergaderingen. attendance breidt deelnemers uit naar deelnemerssessierijen met tijdstippen waarop ze voor het eerst en laatst zijn gezien, de totale sessieduur, markeringen voor te laat komen/vroeg vertrekken en dubbele deelnemersbronnen die zijn samengevoegd op basis van de aangemelde gebruiker of weergavenaam; --no-merge-duplicates houdt onbewerkte bronnen gescheiden, --late-after-minutes/--early-before-minutes passen de drempelwaarden aan.
export schrijft een map met summary.md, attendance.csv, transcript.md, artifacts.json, attendance.json en manifest.json. manifest.json registreert de gekozen invoer, exportopties, conferentierecords, uitvoerbestanden, aantallen, tokenbron, eventueel gebruikte Calendar-gebeurtenissen en waarschuwingen voor gedeeltelijk ophalen. --zip schrijft ook een overdraagbaar archief naast de map. --include-doc-bodies exporteert de tekst van gekoppelde Google Docs met transcripties/slimme notities via Drive files.export (vereist het alleen-lezenbereik van Drive voor Meet); zonder dit bereik bevatten exports alleen Meet-metadata en gestructureerde transcriptvermeldingen. Bij een gedeeltelijke artefactfout (fout bij het weergeven van slimme notities, transcriptvermeldingen of documentinhoud) blijft de waarschuwing in de samenvatting/het manifest staan in plaats van dat de hele export mislukt. --dry-run haalt dezelfde gegevens op en drukt de manifest-JSON af zonder de map of het ZIP-bestand aan te maken.
Agents gebruiken dezelfde acties via de tool google_meet (export, create met accessType, end_active_conference, test_listen); zie Tool.
Live-rooktest
OPENCLAW_LIVE_TEST=1 \OPENCLAW_GOOGLE_MEET_LIVE_MEETING=https://meet.google.com/abc-defg-hij \pnpm test:live -- extensions/google-meet/google-meet.live.test.tsopenclaw googlemeet setup --transport chrome-node --mode transcribeopenclaw googlemeet test-listen https://meet.google.com/abc-defg-hij --transport chrome-node --timeout-ms 30000| Variabele | Doel |
|---|---|
OPENCLAW_LIVE_TEST=1 |
Schakelt afgeschermde live-tests in |
OPENCLAW_GOOGLE_MEET_LIVE_MEETING |
Bewaarde Meet-URL, code of spaces/{id} |
OPENCLAW_GOOGLE_MEET_CLIENT_ID / GOOGLE_MEET_CLIENT_ID |
OAuth-client-id |
OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN / GOOGLE_MEET_REFRESH_TOKEN |
Vernieuwingstoken |
OPENCLAW_GOOGLE_MEET_CLIENT_SECRET, OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN, OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT |
Optioneel; dezelfde terugvalnamen zonder het voorvoegsel OPENCLAW_ werken ook |
De basisrooktest voor artefacten/aanwezigheid vereist meetings.space.readonly en meetings.conference.media.readonly. Opzoeken in de agenda vereist calendar.events.readonly. Voor het exporteren van documentinhoud uit Drive is drive.meet.readonly vereist.
Aanmaakvoorbeelden
openclaw googlemeet createDrukt de nieuwe vergader-URI, bron en deelnamesessie af. Met OAuth gebruikt dit de Meet API; zonder OAuth het aangemelde profiel van de vastgezette Chrome-Node. JSON van de browserterugval:
{ "source": "browser", "meetingUri": "https://meet.google.com/abc-defg-hij", "joined": true, "browser": { "nodeId": "ba0f4e4bc...", "targetId": "tab-1" }, "join": { "session": { "id": "meet_...", "url": "https://meet.google.com/abc-defg-hij" } }}Als de browserterugval eerst op de Google-aanmelding of een blokkering van Meet-machtigingen stuit, retourneert google_meet gestructureerde details in plaats van een gewone tekenreeks:
{ "source": "browser", "error": "google-login-required: Sign in to Google in the OpenClaw browser profile, then retry meeting creation.", "manualActionRequired": true, "manualActionReason": "google-login-required", "manualActionMessage": "Sign in to Google in the OpenClaw browser profile, then retry meeting creation.", "browser": { "nodeId": "ba0f4e4bc...", "targetId": "tab-1", "browserUrl": "https://accounts.google.com/signin", "browserTitle": "Sign in - Google Accounts" }}JSON bij aanmaken via de API:
{ "source": "api", "meetingUri": "https://meet.google.com/abc-defg-hij", "joined": true, "space": { "name": "spaces/abc-defg-hij", "meetingCode": "abc-defg-hij", "meetingUri": "https://meet.google.com/abc-defg-hij" }, "join": { "session": { "id": "meet_...", "url": "https://meet.google.com/abc-defg-hij" } }}Bij het aanmaken wordt standaard deelgenomen, maar Chrome/Chrome-Node heeft nog steeds een aangemeld Google-profiel nodig om via de browser deel te nemen; als het profiel is afgemeld, meldt OpenClaw manualActionRequired: true of een browserterugvalfout en wordt de beheerder gevraagd de Google-aanmelding te voltooien voordat die het opnieuw probeert.
Stel preview.enrollmentAcknowledged: true pas in nadat je hebt bevestigd dat je Cloud-project, OAuth-principal en vergaderdeelnemers zijn ingeschreven voor het Google Workspace Developer Preview Program voor Meet-media-API's.
Configuratie
Voor het algemene Chrome-Agent-pad hoeven alleen de Plugin, BlackHole en SoX te zijn ingeschakeld en moeten een sleutel voor een realtimeprovider en een OpenClaw TTS-provider zijn geconfigureerd:
{ plugins: { entries: { "google-meet": { enabled: true, config: {}, }, }, },}Standaardwaarden
| Sleutel | Standaard | Opmerkingen |
|---|---|---|
defaultTransport |
"chrome" |
|
defaultMode |
"agent" |
"realtime" wordt geaccepteerd als verouderde alias voor "agent"; nieuwe aanroepers moeten "agent" gebruiken |
chromeNode.node |
niet ingesteld | Node-id/-naam/-IP voor chrome-node; vereist wanneer meer dan één geschikte Node verbonden kan zijn |
chrome.launch |
true |
Start Chrome om deel te nemen; stel false alleen in wanneer je een reeds geopende sessie hergebruikt |
chrome.audioBackend |
"blackhole-2ch" |
|
chrome.guestName |
"OpenClaw Agent" |
Wordt weergegeven op het Meet-gastscherm wanneer je niet bent ingelogd |
chrome.autoJoin |
true |
Best-effort invullen van de gastnaam en klikken op Join Now voor chrome-node |
chrome.reuseExistingTab |
true |
Activeert een bestaand Meet-tabblad in plaats van duplicaten te openen |
chrome.waitForInCallMs |
20000 |
Wacht tot het Meet-tabblad meldt dat het gesprek actief is voordat de terugspreekintro wordt gestart |
chrome.audioFormat |
"pcm16-24khz" |
Audio-indeling voor opdrachtparen; "g711-ulaw-8khz" is alleen bedoeld voor verouderde/aangepaste opdrachtparen die telefonieaudio uitvoeren |
chrome.audioBufferBytes |
4096 |
SoX-verwerkingsbuffer voor gegenereerde audio-opdrachten van opdrachtparen (de helft van SoX' standaardbuffer van 8192 bytes, waardoor de pijplijnlatentie afneemt); waarden worden begrensd op minimaal 17 bytes |
chrome.audioInputCommand |
gegenereerde SoX-opdracht | Leest van CoreAudio BlackHole 2ch en schrijft audio in chrome.audioFormat |
chrome.audioOutputCommand |
gegenereerde SoX-opdracht | Leest audio in chrome.audioFormat en schrijft naar CoreAudio BlackHole 2ch |
chrome.bargeInInputCommand |
niet ingesteld | Optionele lokale microfoonopdracht die ondertekende 16-bits little-endian mono-PCM schrijft voor detectie van menselijke onderbrekingen tijdens het afspelen van de assistent; van toepassing op de door de Gateway gehoste opdrachtpaarbridge |
chrome.bargeInRmsThreshold |
650 |
RMS-niveau dat als menselijke onderbreking wordt beschouwd |
chrome.bargeInPeakThreshold |
2500 |
Piekniveau dat als menselijke onderbreking wordt beschouwd |
chrome.bargeInCooldownMs |
900 |
Minimale vertraging tussen herhaalde wisacties voor onderbrekingen |
mode (per verzoek) |
"agent" |
Terugspreekmodus; zie de tabel Agent- en bidi-modi |
realtime.provider |
"openai" |
Compatibiliteitsterugval die wordt gebruikt wanneer de onderstaande velden binnen het bereik niet zijn ingesteld |
realtime.transcriptionProvider |
"openai" |
Provider-id die door de modus agent wordt gebruikt voor realtime transcriptie |
realtime.voiceProvider |
niet ingesteld | Provider-id die door de modus bidi wordt gebruikt voor directe realtime spraak; stel in op "google" voor Gemini Live terwijl transcriptie in agentmodus OpenAI blijft gebruiken. Combineer met realtime.model om het specifieke Gemini Live-model te kiezen. |
realtime.toolPolicy |
"safe-read-only" |
Zie Agent- en bidi-modi |
realtime.instructions |
korte instructies voor gesproken antwoorden | Instrueert het model om kort te spreken en openclaw_agent_consult te gebruiken voor uitgebreidere antwoorden |
realtime.introMessage |
"Say exactly: I'm here and listening." |
Wordt eenmaal uitgesproken wanneer de realtime bridge verbinding maakt; stel in op "" om geruisloos deel te nemen |
realtime.agentId |
"main" |
OpenClaw-agent-id die wordt gebruikt voor openclaw_agent_consult |
voiceCall.enabled |
true |
Delegeert de Twilio PSTN-oproep, DTMF en introductiebegroeting aan de Voice Call-plugin |
voiceCall.dtmfDelayMs |
12000 |
Wachttijd voorafgaand aan het afspelen van een van een pincode afgeleide DTMF-reeks via Twilio |
voiceCall.postDtmfSpeechDelayMs |
5000 |
Vertraging voordat de realtime introductiebegroeting wordt aangevraagd nadat Voice Call het Twilio-deel heeft gestart |
Met chrome.audioBridgeCommand en chrome.audioBridgeHealthCommand kan een externe bridge het volledige lokale audiopad beheren in plaats van chrome.audioInputCommand/chrome.audioOutputCommand; zie Opmerkingen voor de beperking van welke modus deze kan gebruiken.
Er bestaat een openclaw doctor --fix-migratie voor de verouderde realtime.provider: "google"-structuur: deze verplaatst die intentie naar realtime.voiceProvider: "google" plus realtime.transcriptionProvider: "openai" wanneer die velden nog niet zijn ingesteld.
Optionele overschrijvingen
{ defaults: { meeting: "https://meet.google.com/abc-defg-hij", }, browser: { defaultProfile: "openclaw", }, chrome: { guestName: "OpenClaw Agent", waitForInCallMs: 30000, bargeInInputCommand: [ "sox", "-q", "-t", "coreaudio", "External Microphone", "-r", "24000", "-c", "1", "-b", "16", "-e", "signed-integer", "-t", "raw", "-", ], }, chromeNode: { node: "parallels-macos", }, defaultMode: "agent", realtime: { provider: "openai", transcriptionProvider: "openai", voiceProvider: "google", model: "gemini-3.1-flash-live-preview", agentId: "jay", toolPolicy: "owner", introMessage: "Say exactly: I'm here.", providers: { google: { speakerVoice: "Kore", }, }, },}ElevenLabs voor zowel luisteren als spreken in agentmodus:
{ messages: { tts: { provider: "elevenlabs", providers: { elevenlabs: { modelId: "eleven_v3", speakerVoiceId: "pMsXgVXv3BLzUgSXRplE", }, }, }, }, plugins: { entries: { "google-meet": { config: { realtime: { transcriptionProvider: "elevenlabs", providers: { elevenlabs: { modelId: "scribe_v2_realtime", audioFormat: "ulaw_8000", sampleRate: 8000, commitStrategy: "vad", }, }, }, }, }, }, },}De permanente Meet-stem komt uit messages.tts.providers.elevenlabs.speakerVoiceId. Agentantwoorden kunnen ook [[tts:speakerVoiceId=... model=eleven_v3]]-richtlijnen per antwoord gebruiken wanneer overschrijvingen van het TTS-model zijn ingeschakeld, maar de configuratie is de deterministische standaard voor vergaderingen. Bij deelname tonen de logboeken transcriptionProvider=elevenlabs, en elk gesproken antwoord registreert provider=elevenlabs model=eleven_v3 speakerVoiceId=<voiceId>.
Configuratie uitsluitend voor Twilio:
{ defaultTransport: "twilio", twilio: { defaultDialInNumber: "+15551234567", defaultPin: "123456", }, voiceCall: { gatewayUrl: "ws://127.0.0.1:18789", },}Met voiceCall.enabled: true (de standaard) en Twilio-transport plaatst Voice Call de DTMF-reeks voordat de realtime mediastream wordt geopend en gebruikt vervolgens de opgeslagen introductietekst als eerste realtime begroeting. Als voice-call niet is ingeschakeld, kan Google Meet het belplan nog steeds valideren en vastleggen, maar de Twilio-oproep niet plaatsen.
Laat voiceCall.gatewayUrl uitgeschakeld om de lokale vertrouwde Gateway-runtime te gebruiken, waarmee de
aanroepende agent gedurende de volledige aanroep behouden blijft. Een geconfigureerde Gateway-URL blijft een expliciet WebSocket-doel en
kan de herkomst van plugins niet verifiëren; deelnames door niet-standaardagents worden standaard geweigerd in plaats van stilzwijgend
een andere agent te gebruiken. Voer Google Meet en Voice Call in hetzelfde Gateway-proces uit wanneer routering
per agent vereist is.
Tool
Agents gebruiken de tool google_meet:
{ "action": "join", "url": "https://meet.google.com/abc-defg-hij", "transport": "chrome-node", "mode": "agent"}action |
Doel |
|---|---|
join |
Deelnemen via een expliciete Meet-URL |
create |
Een ruimte maken (en standaard deelnemen); ondersteunt accessType/entryPointAccess |
status |
Actieve sessies weergeven of er één inspecteren via sessionId |
setup_status |
Dezelfde controles uitvoeren als googlemeet setup |
resolve_space |
Een URL/code/spaces/{id} omzetten via spaces.get |
preflight |
Vereisten voor OAuth en het omzetten van vergaderingen valideren |
latest |
De nieuwste conferentierecord voor een vergadering zoeken |
calendar_events |
Een voorbeeld weergeven van Agenda-afspraken met Meet-links |
artifacts |
Conferentierecords en metadata van deelnemers/opnamen/transcripties/slimme notities weergeven |
attendance |
Deelnemers en deelnemerssessies weergeven |
export |
De bundel met artefacten/aanwezigheid/transcript/manifest schrijven; stel "dryRun": true in voor alleen het manifest |
recover_current_tab |
Een bestaand Meet-tabblad activeren/inspecteren zonder een nieuw tabblad te openen |
transcript |
Het begrensde ondertitelingstranscript lezen; sinceIndex gaat verder vanaf de vorige nextIndex |
leave |
Een sessie beëindigen (Chrome klikt op Verlaten; sluit alleen zelf geopende tabbladen; Twilio verbreekt de verbinding) |
end_active_conference |
De actieve Google Meet-conferentie beëindigen voor een via de API beheerde ruimte |
speak |
De realtime-agent onmiddellijk laten spreken met sessionId en message |
test_speech |
Een sessie maken/hergebruiken, een bekende zin activeren en de Chrome-status retourneren |
test_listen |
Een alleen-observeren-sessie maken/hergebruiken en wachten op beweging in ondertiteling/transcript |
test_speech dwingt altijd mode: "agent" of "bidi" af en mislukt bij een verzoek om in mode: "transcribe" te worden uitgevoerd, omdat alleen-observeren-sessies geen spraak kunnen voortbrengen. Het resultaat speechOutputVerified is gebaseerd op een toename van realtime-audio-uitvoerbytes tijdens die aanroep, zodat een hergebruikte sessie met oudere audio niet als een nieuwe controle telt.
Voor Chrome-transports houdt leave een hergebruikt tabblad van de gebruiker open nadat op de knop Verlaten van Meet is geklikt. Door OpenClaw geopende tabbladen worden na vertrek gesloten.
Gebruik transport: "chrome" wanneer Chrome op de Gateway-host draait en transport: "chrome-node" wanneer Chrome op een gekoppelde Node draait. In beide gevallen draaien de modelproviders en openclaw_agent_consult op de Gateway-host, zodat modelreferenties daar blijven. Logboeken in agentmodus bevatten bij het starten van de bridge de gekozen transcriptieprovider/het gekozen transcriptiemodel en na elk gesynthetiseerd antwoord de TTS-provider/het TTS-model/de stem/de uitvoerindeling/de samplefrequentie. Onbewerkte mode: "realtime" wordt nog geaccepteerd als verouderde compatibiliteitsalias voor mode: "agent", maar wordt niet meer vermeld in de mode-enum van de tool.
create met een door een API ondersteunde ruimte en een expliciet toegangsbeleid:
{ "action": "create", "transport": "chrome-node", "mode": "agent", "accessType": "OPEN"}De actieve conferentie van een bekende ruimte beëindigen:
{ "action": "end_active_conference", "meeting": "https://meet.google.com/abc-defg-hij"}Validatie waarbij eerst wordt geluisterd voordat wordt beweerd dat een vergadering bruikbaar is:
{ "action": "test_listen", "url": "https://meet.google.com/abc-defg-hij", "transport": "chrome-node", "timeoutMs": 30000}Op verzoek spreken:
{ "action": "speak", "sessionId": "meet_...", "message": "Zeg precies: Ik ben er en luister."}status bevat indien beschikbaar de Chrome-status:
| Veld | Betekenis |
|---|---|
inCall |
Chrome lijkt zich in het Meet-gesprek te bevinden |
micMuted |
Meet-microfoonstatus op basis van beste inspanning |
manualActionRequired / manualActionReason / manualActionMessage |
Het browserprofiel vereist handmatig aanmelden, toelating door de Meet-host, machtigingen of herstel van browserbesturing voordat spraak kan werken |
speechReady / speechBlockedReason / speechBlockedMessage |
Of beheerde Chrome-spraak nu is toegestaan; speechReady: false betekent dat OpenClaw de introductie-/testzin niet heeft verzonden |
providerConnected / realtimeReady |
Status van de realtime-spraakbridge |
lastInputAt / lastOutputAt |
Laatste audio die van/naar de bridge is waargenomen/verzonden |
audioOutputRouted / audioOutputDeviceLabel |
Of de media-uitvoer van het Meet-tabblad actief naar het BlackHole-apparaat van de bridge werd gerouteerd |
lastSuppressedInputAt / suppressedInputBytes |
Loopback-invoer genegeerd terwijl het afspelen van de assistent actief is |
Agent- en bidi-modi
| Modus | Wie het antwoord bepaalt | Pad voor spraakuitvoer | Gebruiken wanneer |
|---|---|---|---|
agent |
De geconfigureerde OpenClaw-agent | Normale OpenClaw TTS-runtime | Je gedrag wilt waarbij je agent in de vergadering zit |
bidi |
Het realtime-spraakmodel | Audiorespons van de realtime-spraakprovider | Je een conversatiespraaklus met de laagste latentie wilt |
agent-modus: de realtime-transcriptieprovider hoort de vergaderaudio, definitieve deelnemerstranscripties worden via de geconfigureerde OpenClaw-agent gerouteerd en het antwoord wordt uitgesproken via de reguliere OpenClaw TTS. Nabijgelegen definitieve transcriptfragmenten worden vóór de raadpleging samengevoegd, zodat één gesproken beurt niet meerdere verouderde gedeeltelijke antwoorden oplevert; realtime-invoer wordt onderdrukt terwijl in de wachtrij geplaatste assistentaudio nog wordt afgespeeld en recente transcriptie-echo's die op de assistent lijken, worden vóór de raadpleging genegeerd, zodat BlackHole-loopback er niet voor zorgt dat de agent zijn eigen spraak beantwoordt.
bidi-modus: het realtime-spraakmodel antwoordt rechtstreeks en kan openclaw_agent_consult aanroepen voor diepere redenering, actuele informatie of normale OpenClaw-tools. De raadpleegtool voert achter de schermen de reguliere OpenClaw-agent uit met recente context uit het vergaderingstranscript en retourneert een beknopt gesproken antwoord; in de agent-modus stuurt OpenClaw dat antwoord rechtstreeks naar TTS, in de bidi-modus kan het realtime-spraakmodel het uitspreken. Deze modus gebruikt hetzelfde gedeelde raadpleegmechanisme als Voice Call.
Standaard worden raadplegingen uitgevoerd voor de agent main; stel realtime.agentId in om een Meet-route te koppelen aan een speciale agentwerkruimte, standaardmodellen, toolbeleid, geheugen en sessiegeschiedenis. Raadplegingen in agentmodus gebruiken per vergadering een sessiesleutel agent:<id>:subagent:google-meet:<session>, zodat vervolgvragen de vergadercontext behouden en tegelijkertijd het normale agentbeleid overnemen. Wanneer een agent in agentmodus google_meet aanroept, maakt de consultantsessie een fork van het huidige transcript van de aanroeper voordat spraak van deelnemers wordt beantwoord; de Meet-sessie blijft gescheiden, zodat vervolgvragen in de vergadering het transcript van de aanroeper niet rechtstreeks wijzigen.
realtime.toolPolicy bepaalt de raadplegingsuitvoering:
| Beleid | Gedrag |
|---|---|
safe-read-only |
De raadpleegtool beschikbaar stellen; de reguliere agent beperken tot read, web_search, web_fetch, x_search, memory_search, memory_get |
owner |
De raadpleegtool beschikbaar stellen; de reguliere agent het normale toolbeleid laten gebruiken |
none |
De raadpleegtool niet beschikbaar stellen aan het realtime-spraakmodel |
De sessiesleutel voor raadplegingen heeft een bereik per Meet-sessie, zodat volgende raadplegingsaanroepen tijdens dezelfde vergadering eerdere raadplegingscontext hergebruiken.
Dwing een gesproken gereedheidscontrole af nadat Chrome volledig heeft deelgenomen:
openclaw googlemeet speak meet_... "Say exactly: I'm here and listening."Volledige rooktest voor deelnemen en spreken:
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ --transport chrome-node \ --message "Say exactly: I'm here and listening."Checklist voor livetests
Voordat je een vergadering overdraagt aan een onbeheerde agent:
openclaw googlemeet setupopenclaw nodes statusopenclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ --transport chrome-node \ --message "Say exactly: Google Meet speech test complete."Verwachte Chrome-node-status:
googlemeet setupis volledig groen en bevatchrome-node-connectedwanneer Chrome-node het standaardtransport is of een Node is vastgezet.nodes statusgeeft aan dat de geselecteerde Node verbonden is en zowelgooglemeet.chromealsbrowser.proxyaanbiedt.- Het Meet-tabblad neemt deel en
test-speechretourneert de Chrome-status metinCall: true.
Voor een externe Chrome-host, zoals een Parallels macOS-VM, is dit de kortste veilige controle na het bijwerken van de Gateway of de VM:
openclaw googlemeet setupopenclaw nodes status --connectedopenclaw nodes invoke \ --node parallels-macos \ --command googlemeet.chrome \ --params '{"action":"setup"}'Dit bewijst dat de Gateway-plugin is geladen, de VM-Node is verbonden met het huidige token en de Meet-audiobridge beschikbaar is voordat een agent een echt vergaderingstabblad opent.
Gebruik voor een Twilio-rooktest een vergadering die telefonische inbelgegevens beschikbaar stelt:
openclaw googlemeet setupopenclaw googlemeet join https://meet.google.com/abc-defg-hij \ --transport twilio \ --dial-in-number +15551234567 \ --pin 123456Verwachte Twilio-status:
googlemeet setupbevat groene controles voortwilio-voice-call-plugin,twilio-voice-call-credentialsentwilio-voice-call-webhook.voicecallis beschikbaar in de CLI nadat de Gateway opnieuw is geladen.- De geretourneerde sessie heeft
transport: "twilio"en eentwilio.voiceCallId. openclaw logs --followtoont DTMF-TwiML die vóór realtime-TwiML wordt aangeboden, gevolgd door een realtime-bridge waarbij de eerste begroeting in de wachtrij staat.googlemeet leave <sessionId>beëindigt de gedelegeerde spraakoproep.
Problemen oplossen
Agent kan de Google Meet-tool niet zien
Controleer of de plugin is ingeschakeld en laad de Gateway opnieuw; de actieve agent ziet alleen plugintools die door het huidige Gateway-proces zijn geregistreerd:
openclaw plugins list | grep google-meetopenclaw googlemeet setupOp Gateway-hosts zonder macOS blijft google_meet zichtbaar, maar lokale Chrome-acties voor terugspreken worden geblokkeerd voordat ze de audiobridge bereiken. Gebruik mode: "transcribe", inbellen via Twilio of een macOS-host met chrome-node in plaats van het standaardpad voor de lokale Chrome-agent.
Geen verbonden Node met ondersteuning voor Google Meet
Op de Node-host:
openclaw plugins enable google-meetopenclaw plugins enable browserOPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macosOp de Gateway-host:
openclaw devices listopenclaw devices approve <requestId>openclaw nodes statusDe Node moet verbonden zijn en googlemeet.chrome plus browser.proxy vermelden; de Gateway-configuratie moet beide toestaan:
{ gateway: { nodes: { allowCommands: ["browser.proxy", "googlemeet.chrome"], }, },}Als googlemeet setup niet slaagt voor chrome-node-connected, of het Gateway-logboek gateway token mismatch meldt, installeer of herstart je de Node met het huidige Gateway-token:
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node install \ --host <gateway-lan-ip> \ --port 18789 \ --display-name parallels-macos \ --forceLaad daarna de Node-service opnieuw en voer dit nogmaals uit:
openclaw googlemeet setupopenclaw nodes status --connectedBrowser wordt geopend, maar agent kan niet deelnemen
Voer googlemeet test-listen uit voor deelnames waarbij alleen wordt geobserveerd, of googlemeet test-speech voor realtime-deelnames, en controleer vervolgens de geretourneerde Chrome-status. Als een van beide manualActionRequired: true meldt, toon je manualActionMessage aan de beheerder en probeer je het niet opnieuw totdat de browseractie is voltooid.
Veelvoorkomende handmatige acties: meld je aan bij het Chrome-profiel; laat de gast toe vanuit het Meet-hostaccount; verleen Chrome toestemming voor de microfoon en camera wanneer de systeemeigen prompt verschijnt; sluit of herstel een vastgelopen dialoogvenster voor Meet-machtigingen.
Meld niet dat de gebruiker "niet is aangemeld" alleen omdat Meet vraagt "Do you want people to hear you in the meeting?"; dit is het tussenscherm van Meet voor de audiokeuze. OpenClaw klikt indien beschikbaar via browserautomatisering op Use microphone en blijft wachten op de werkelijke vergaderstatus; bij een browserfallback die alleen een vergadering aanmaakt, kan het in plaats daarvan op Continue without microphone klikken, omdat voor het genereren van de URL geen realtime-audiopad nodig is.
Vergadering aanmaken mislukt
googlemeet create gebruikt de Meet-API spaces.create wanneer OAuth is geconfigureerd, en anders de browser van de vastgezette Chrome-Node. Controleer het volgende:
- Aanmaken via API:
oauth.clientIdenoauth.refreshToken(of overeenkomendeOPENCLAW_GOOGLE_MEET_*-omgevingsvariabelen) zijn aanwezig en het vernieuwingstoken is aangemaakt nadat ondersteuning voor aanmaken werd toegevoegd; oudere tokens hebben mogelijk geenmeetings.space.created, dus voeropenclaw googlemeet auth login --jsonopnieuw uit. - Browserfallback:
defaultTransport: "chrome-node"enchromeNode.nodeverwijzen naar een verbonden Node metbrowser.proxyengooglemeet.chrome; het OpenClaw Chrome-profiel op die Node is aangemeld en kanhttps://meet.google.com/newopenen. - Nieuwe pogingen met browserfallback: hergebruik een bestaand tabblad met
.../newof een Google-accountprompt voordat je een nieuw tabblad opent; probeer de toolaanroep opnieuw in plaats van handmatig nog een tabblad te openen. - Handmatige actie: als de tool
manualActionRequired: trueretourneert, gebruik jebrowser.nodeId,browser.targetId,browserUrlenmanualActionMessageom de beheerder te begeleiden; probeer het niet herhaaldelijk opnieuw. - Tussenscherm voor audiokeuze: als Meet "Do you want people to hear you in the meeting?" toont, laat je het tabblad open. OpenClaw hoort op Use microphone of (alleen bij aanmaken) Continue without microphone te klikken en te blijven wachten op de gegenereerde URL; als dat niet lukt, hoort de fout
meet-audio-choice-requiredte vermelden, nietgoogle-login-required.
Agent neemt deel, maar spreekt niet
openclaw googlemeet setupopenclaw googlemeet doctorGebruik mode: "agent" voor het pad STT -> OpenClaw-agent -> TTS en mode: "bidi" voor de directe realtime-spraakfallback. mode: "transcribe" start opzettelijk geen bridge voor terugspreken. Voer voor foutopsporing waarbij alleen wordt geobserveerd openclaw googlemeet status --json <session-id> uit nadat deelnemers hebben gesproken en controleer captioning, transcriptLines en lastCaptionText. Als inCall waar is maar transcriptLines 0 blijft, zijn Meet-ondertitels mogelijk uitgeschakeld, heeft niemand gesproken sinds de observator werd geïnstalleerd, is de Meet-interface gewijzigd of zijn live-ondertitels niet beschikbaar voor de taal of het account van de vergadering.
googlemeet test-speech controleert altijd het realtime-pad en meldt of tijdens die aanroep uitvoerbytes van de bridge zijn waargenomen. Als speechOutputVerified onwaar is en speechOutputTimedOut waar is, heeft de realtime-provider de uiting mogelijk geaccepteerd, maar heeft OpenClaw geen nieuwe uitvoerbytes de Chrome-audiobridge zien bereiken.
Controleer ook het volgende: er is een sleutel voor een realtime-provider (OPENAI_API_KEY of GEMINI_API_KEY) beschikbaar op de Gateway-host; BlackHole 2ch is zichtbaar op de Chrome-host; sox bestaat daar; de microfoon en luidspreker van Meet worden via het virtuele audiopad geleid (doctor hoort meet output routed: yes te tonen voor lokale realtime-deelnames via Chrome).
googlemeet doctor [session-id] toont de sessie, Node, status tijdens het gesprek, reden voor handmatige actie, verbinding met de realtime-provider, realtimeReady, activiteit van audio-invoer en -uitvoer, tijdstempels van de laatste audio, bytetellers en browser-URL. Gebruik googlemeet status [session-id] --json voor onbewerkte JSON en googlemeet doctor --oauth (voeg --meeting of --create-space toe) om OAuth-vernieuwing te controleren zonder tokens prijs te geven.
Als een agent een time-out heeft bereikt en er al een Meet-tabblad is geopend, controleer je dit zonder nog een tabblad te openen:
openclaw googlemeet recover-tabopenclaw googlemeet recover-tab https://meet.google.com/abc-defg-hijDe equivalente toolactie is recover_current_tab: deze stelt een bestaand Meet-tabblad voor het geselecteerde transport scherp en controleert het (lokale browserbesturing voor chrome, de geconfigureerde Node voor chrome-node) zonder een nieuw tabblad of een nieuwe sessie te openen, en meldt de huidige blokkade (aanmelding, toelating, machtigingen, status van audiokeuze). De CLI-opdracht communiceert met de geconfigureerde Gateway, die actief moet zijn; voor chrome-node moet de Node bovendien verbonden zijn.
Twilio-installatiecontroles mislukken
twilio-voice-call-plugin mislukt wanneer voice-call niet is toegestaan of niet is ingeschakeld: voeg deze toe aan plugins.allow, schakel plugins.entries.voice-call in en laad de Gateway opnieuw.
twilio-voice-call-credentials mislukt wanneer de account-SID, het authenticatietoken of het nummer van de beller ontbreekt in de Twilio-backend:
export TWILIO_ACCOUNT_SID=AC...export TWILIO_AUTH_TOKEN=...export TWILIO_FROM_NUMBER=+15550001234twilio-voice-call-webhook mislukt wanneer voice-call geen openbare Webhook-blootstelling heeft of publicUrl naar loopback- of privé-netwerkruimte verwijst. Gebruik localhost, 127.0.0.1, 0.0.0.0, 10.x, 172.16.x-172.31.x, 192.168.x, 169.254.x, fc00::/7 of fd00::/8 niet als publicUrl; terugbelverzoeken van de provider kunnen deze niet bereiken. Stel plugins.entries.voice-call.config.publicUrl in op een openbare URL of configureer blootstelling via een tunnel of Tailscale:
{ plugins: { entries: { "voice-call": { enabled: true, config: { provider: "twilio", fromNumber: "+15550001234", publicUrl: "https://voice.example.com/voice/webhook", }, }, }, },}Gebruik voor lokale ontwikkeling blootstelling via een tunnel of Tailscale in plaats van een URL van een privéhost:
{ plugins: { entries: { "voice-call": { config: { tunnel: { provider: "ngrok" }, // of tailscale: { mode: "funnel", path: "/voice/webhook" }, }, }, }, },}Herstart of herlaad de Gateway en voer vervolgens dit uit:
openclaw googlemeet setup --transport twilioopenclaw voicecall setupopenclaw voicecall smokevoicecall smoke controleert standaard alleen of het systeem gereed is. Voer een test zonder uitvoering uit voor een specifiek nummer:
openclaw voicecall smoke --to "+15555550123"Voeg --yes alleen toe om bewust een echte uitgaande oproep te plaatsen:
openclaw voicecall smoke --to "+15555550123" --yesTwilio-oproep start, maar komt nooit in de vergadering
Controleer of de Meet-gebeurtenis telefonische inbelgegevens bevat en geef het exacte inbelnummer plus de pincode of een aangepaste DTMF-reeks door:
openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --transport twilio \ --dial-in-number +15551234567 \ --dtmf-sequence ww123456#Gebruik vooraan w of komma's in --dtmf-sequence voor een pauze vóór de pincode.
Als de oproep is aangemaakt, maar de deelnemerslijst van Meet de inbellende deelnemer nooit toont:
openclaw googlemeet doctor <session-id>: controleer de gedelegeerde Twilio-oproep-ID, of DTMF in de wachtrij is geplaatst en of om de inleidende begroeting is gevraagd.openclaw voicecall status --call-id <id>: controleer of de oproep nog actief is.openclaw voicecall tail: controleer of Twilio-webhooks bij de Gateway aankomen.openclaw logs --follow: zoek naar de Twilio Meet-reeks: Google Meet delegeert de deelname, Voice Call slaat TwiML voor DTMF vóór de verbinding op en biedt dit aan, Voice Call biedt realtime-TwiML voor de Twilio-oproep aan en vervolgens vraagt Google Meet metvoicecall.speakom de inleidende spraak.- Voer
openclaw googlemeet setup --transport twilioopnieuw uit; een groene installatiecontrole is vereist, maar bewijst niet dat de pincodereeks van de vergadering correct is. - Controleer of het inbelnummer bij dezelfde Meet-uitnodiging en regio hoort als de pincode.
- Verhoog
voiceCall.dtmfDelayMsvanaf de standaardwaarde van 12 seconden als Meet langzaam opneemt of het oproeptranscript de vraag om de pincode nog steeds toont nadat DTMF vóór de verbinding is verzonden. - Als de deelnemer binnenkomt maar je de begroeting niet hoort, controleer je
openclaw logs --followop hetvoicecall.speak-verzoek na DTMF en op TTS-weergave via de mediastream of de Twilio-fallbackOPENCLAW_DOCS_MARKER:calloutOpen:U2F5. Als het transcript nog steeds "enter the meeting PIN" toont, is het telefoongedeelte nog niet toegetreden tot de Meet-ruimte en zullen deelnemers dus geen spraak horen.
Als webhooks niet aankomen, spoor je eerst problemen in de Voice Call-plugin op: de provider moet plugins.entries.voice-call.config.publicUrl of de geconfigureerde tunnel kunnen bereiken. Zie Problemen met spraakoproepen oplossen.
Opmerkingen
De officiële media-API van Google Meet is gericht op ontvangen, dus om in een oproep te spreken is nog steeds een deelnemerspad nodig. Deze plugin houdt die grens zichtbaar: Chrome verwerkt browserdeelname en lokale audioroutering; Twilio verwerkt deelname via telefonisch inbellen.
Chrome-modi voor terugspreken hebben BlackHole 2ch plus een van de volgende nodig:
chrome.audioInputCommandpluschrome.audioOutputCommand: OpenClaw beheert de bridge en stuurt audio inchrome.audioFormattussen deze commando's en de geselecteerde provider. De modusagentgebruikt realtime transcriptie plus reguliere TTS; de modusbidigebruikt de realtime spraakprovider. Het standaardpad is 24 kHz PCM16 metchrome.audioBufferBytes: 4096; 8 kHz G.711 mu-law blijft beschikbaar voor verouderde commandoparen.chrome.audioBridgeCommand: een extern bridge-commando beheert het volledige lokale audiopad en moet afsluiten nadat de daemon is gestart of gevalideerd. Alleen geldig voorbidi, omdat de modusagentdirecte toegang tot het commandopaar nodig heeft voor TTS.
Met de Chrome-bridge met commandopaar kan chrome.bargeInInputCommand naar een afzonderlijke lokale microfoon luisteren en het afspelen van de assistent onderbreken wanneer een persoon begint te praten, zodat menselijke spraak voorrang houdt op de uitvoer van de assistent, zelfs wanneer de gedeelde BlackHole-loopbackinvoer tijdelijk wordt onderdrukt tijdens het afspelen van de assistent. Net als chrome.audioInputCommand/chrome.audioOutputCommand is dit een door de operator geconfigureerd lokaal commando: gebruik een expliciet vertrouwd commandopad of een expliciete argumentenlijst, nooit een script uit een niet-vertrouwde locatie.
Voor zuivere duplexaudio stuur je de Meet-uitvoer en de Meet-microfoon via afzonderlijke virtuele apparaten of een virtuele apparaatgraaf in Loopback-stijl; één gedeeld BlackHole-apparaat kan andere deelnemers terug de oproep in laten echoën.
googlemeet speak activeert de actieve audiobridge voor terugspreken voor een Chrome-sessie; googlemeet leave stopt deze (en beëindigt bij Twilio-sessies die via Voice Call zijn gedelegeerd de onderliggende oproep). Gebruik googlemeet end-active-conference om ook de actieve Google Meet-conferentie voor een via de API beheerde ruimte te sluiten.