Skip to main content
De Plugin google-meet neemt namens een OpenClaw-agent deel via expliciete Meet-URL’s. De functie 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 de Plugin zelf vindt.
  • googlemeet create kan via de Google Meet-API (of een browserfallback) een nieuwe Meet-URL genereren en neemt er standaard aan deel.
  • Voor deelname via Chrome wordt een aangemeld Chrome-profiel gebruikt, eventueel op een gekoppelde Node. Voor deelname via Twilio wordt via de Plugin voor spraakoproepen een telefoonnummer plus pincode/DTMF gebeld; hiermee kan niet rechtstreeks naar een Meet-URL worden gebeld.
  • mode: "agent" (standaard) transcribeert de spraak van deelnemers met een realtimeprovider, stuurt deze naar de geconfigureerde OpenClaw-agent en spreekt het antwoord uit met de reguliere OpenClaw-TTS. Met mode: "bidi" kan een realtime spraakmodel rechtstreeks antwoorden. Met mode: "transcribe" wordt alleen als waarnemer deelgenomen, zonder terugspraak.
  • Er wordt niet automatisch een toestemmingsmelding afgespeeld wanneer de Plugin aan een gesprek deelneemt.
  • De CLI-opdracht is googlemeet; meet is gereserveerd voor bredere workflows voor telefonische vergaderingen van agents.

Snel aan de slag

Installeer de Plugin en 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:
blackhole-2ch installeert het virtuele audioapparaat BlackHole 2ch waar Chrome audio doorheen stuurt. Het installatieprogramma van Homebrew vereist een herstart voordat macOS het apparaat beschikbaar stelt:
Controleer na de herstart beide onderdelen:
De Plugin wordt na installatie standaard ingeschakeld. Voeg alleen een vermelding toe om de configuratie aan te passen:
Voer openclaw plugins disable google-meet uit als je de Plugin niet actief wilt hebben. Controleer de configuratie en neem vervolgens deel:
De uitvoer van setup is leesbaar voor agents en houdt rekening met de modus en het transport: de uitvoer vermeldt het Chrome-profiel, de vastgezette Node en, voor realtime deelname via Chrome, de BlackHole/SoX-audiobrug en de controle voor de vertraagde introductie. Bij deelname alleen als waarnemer worden realtimevereisten overgeslagen:
Wanneer delegatie aan Twilio is geconfigureerd, meldt setup ook of voice-call, de Twilio-inloggegevens en de openbare beschikbaarheid van de Webhook gereed zijn. Beschouw elke controle met ok: false 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:
Of laat een agent deelnemen via de tool google_meet:
Op Gateway-hosts zonder macOS blijft google_meet zichtbaar voor acties voor artefacten, agenda’s, configuratie, transcriptie, Twilio en chrome-node, maar lokale terugspraak via Chrome (transport: "chrome" met mode: "agent" of "bidi") wordt geblokkeerd voordat de audiobrug wordt bereikt, omdat dat pad momenteel afhankelijk is van BlackHole 2ch van macOS. Gebruik in plaats daarvan mode: "transcribe", inbellen via Twilio of een macOS-host met chrome-node.

Een vergadering maken

create heeft twee paden, die worden vermeld in het veld source van het resultaat:
  • 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 opent https://meet.google.com/new op de vastgezette Chrome-Node en wacht totdat Google doorstuurt naar een echte URL met een vergaderingscode; het OpenClaw Chrome-profiel op die Node moet al bij Google zijn aangemeld. Zowel deelnemen als maken hergebruiken een bestaand Meet-tabblad (of een tabblad met een lopende .../new- of Google-accountprompt) voordat een nieuw tabblad wordt geopend; bij het vergelijken van tabbladen worden onschuldige queryreeksen zoals authuser genegeerd.
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 kamers die via de API worden gemaakt een expliciet toegangsbeleid in, in plaats van de standaardinstelling van het Google-account over te nemen:
Dit is alleen van toepassing op kamers die via de API worden gemaakt, 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 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 beheerder de browserstap heeft voltooid.

Alleen als waarnemer deelnemen

Stel "mode": "transcribe" in om de bidirectionele realtimebrug over te slaan (geen BlackHole/SoX vereist en geen terugspraak). Bij deelname via Chrome in de transcriptiemodus worden ook de machtiging voor de microfoon/camera van OpenClaw en het Meet-pad Use microphone overgeslagen; als Meet het tussenscherm voor audiokeuze toont, probeert de automatisering eerst Continue without microphone. Beheerde Chrome-transporten installeren in elke modus naar beste vermogen een waarnemer voor Meet-ondertiteling, zodat duurzame notities beschikbaar zijn zonder het pad voor live raadpleging van de agent te wijzigen. googlemeet status --json en googlemeet doctor melden captioning, captionsEnabledAttempted, transcriptLines, lastCaptionAt, lastCaptionSpeaker, lastCaptionText en een recentTranscript-staart. Lees voor het begrensde sessietranscript het exact bijgehouden Meet-tabblad:
De waarnemer bewaart maximaal 2.000 voltooide ondertitelregels op de Meet-pagina. Zichtbare voortschrijdende tekst blijft in de gezondheidsstaart van de status totdat de ondertitelregel is voltooid, zodat het opslaan van nextIndex een latere tekstuitbreiding niet kan overslaan; bij het verlaten worden zichtbare regels voltooid voordat de momentopname wordt gemaakt. droppedLines meldt regels die aan het begin verloren zijn gegaan wanneer de limiet wordt overschreden. De begrensde googlemeet transcript-staart bewaart nog steeds alleen de vier laatst beëindigde sessies en wordt opnieuw ingesteld met de Gateway. Daarnaast voegt OpenClaw gedurende de vergadering voltooide ondertitelregels toe aan de gedeelde statusdatabase en schrijft het bij vertrek een afgeleide samenvatting. Gebruik openclaw transcripts om deze duurzame notities te bekijken of te exporteren. Automatische notities zijn standaard ingeschakeld. Stel transcripts.enabled: false in om duurzame notities globaal uit te schakelen; de expliciete modus transcribe stelt nog steeds alleen de begrensde live-staart beschikbaar. Twilio-deelnames hebben geen browserstroom voor ondertiteling en worden via dit pad niet vastgelegd. Voor een ja/nee-luistertest:
Deze neemt deel in de transcriptiemodus, wacht op nieuwe beweging in ondertiteling/transcriptie en retourneert listenVerified, listenTimedOut, velden voor handmatige acties en de huidige status van de ondertiteling.

Status van de realtimesessie

Tijdens sessies met terugspraak meldt de status van 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 pas uit nadat de status inCall: true meldt; anders speechReady: false en wordt de spraakpoging geblokkeerd in plaats van stilzwijgend niets te doen. Lokale deelname via Chrome verloopt via 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 bidirectionele audio.

Lokale Gateway + Chrome in Parallels

Een volledige Gateway of API-sleutel voor een model is niet vereist in een macOS-VM als deze alleen Chrome beschikbaar hoeft te stellen. Voer de Gateway en agent lokaal uit; voer een Node-host uit in de VM. Installeer de VM-afhankelijkheden, start opnieuw op en controleer:
Installeer de Plugin in de VM, waar deze standaard wordt ingeschakeld, en start de Node-host:
Als <gateway-host> een LAN-IP-adres zonder TLS is, meld je dan expliciet aan voor dat vertrouwde privénetwerk:
Gebruik dezelfde vlag bij installatie als LaunchAgent (het is een procesomgevingsvariabele die in de LaunchAgent-omgeving wordt opgeslagen wanneer deze bij de installatieopdracht aanwezig is, geen instelling van openclaw.json):
Keur de Node goed vanaf de Gateway-host en controleer vervolgens of deze zowel googlemeet.chrome als browserfunctionaliteit/browser.proxy aanbiedt:
Leid Meet via die Node:
Neem nu op de normale manier deel vanaf de Gateway-host:
Voor een rooktest met één opdracht die een sessie maakt of hergebruikt, een bekende zin uitspreekt en de sessiestatus afdrukt:
Tijdens realtime deelname vult browserautomatisering de gastnaam in, klikt op Join/Ask to join en accepteert de prompt ‘Use microphone’ van Meet bij de eerste uitvoering wanneer deze verschijnt (of ‘Continue without microphone’ tijdens deelname in alleen-observerenmodus en het uitsluitend via de browser maken van vergaderingen). Als het profiel is afgemeld, Meet wacht op toelating door de host, Chrome toestemming voor microfoon/camera nodig heeft of Meet vastzit bij een onopgeloste prompt, rapporteert het resultaat manualActionRequired: true met manualActionReason en manualActionMessage. Stop met opnieuw proberen, rapporteer dat bericht plus browserUrl/browserTitle en probeer het pas opnieuw nadat de handmatige actie is voltooid. Als chromeNode.node is weggelaten, selecteert OpenClaw alleen automatisch wanneer precies één verbonden Node zowel googlemeet.chrome als browserbesturing aanbiedt; leg chromeNode.node vast (Node-id, weergavenaam of extern IP-adres) wanneer meerdere geschikte Nodes zijn verbonden.

Controles voor veelvoorkomende fouten

Installatie-opmerkingen

De standaardinstelling voor terugspreken via Chrome gebruikt twee externe tools die OpenClaw niet bundelt of distribueert; installeer ze als hostafhankelijkheden via Homebrew:
  • sox: audiohulpprogramma voor de opdrachtregel. De Plugin geeft expliciete CoreAudio-apparaatopdrachten voor de standaard 24 kHz PCM16-audiobrug.
  • blackhole-2ch: virtueel audiostuurprogramma voor macOS dat het BlackHole 2ch-apparaat levert waar Chrome/Meet via wordt gerouteerd.
SoX heeft de licentie LGPL-2.0-only AND GPL-2.0-only; BlackHole is GPL-3.0. Als je een installatieprogramma of appliance bouwt waarin BlackHole met OpenClaw wordt gebundeld, controleer dan de upstreamlicentie van BlackHole of verkrijg een afzonderlijke licentie van Existential Audio.

Transporten

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.
De audio van de Chrome-microfoon/luidspreker wordt via de lokale OpenClaw-audiobrug geleid. Als BlackHole 2ch niet is geïnstalleerd, mislukt deelname met een installatiefout in plaats van zonder audiopad deel te nemen.

Twilio

Een strikt belplan dat is gedelegeerd aan de Voice Call-Plugin. Het parseert Meet-pagina’s niet op telefoonnummers; Google Meet moet een telefonisch inbelnummer en een pincode voor de vergadering beschikbaar stellen. Schakel Voice Call in op de Gateway-host, niet op de Chrome-Node:
Geef Twilio-referenties via de omgeving op om geheimen buiten openclaw.json te houden:
Gebruik in plaats daarvan realtime.provider: "openai" met OPENAI_API_KEY als OpenAI de realtime spraakprovider is. Start of herlaad de Gateway nadat je voice-call hebt ingeschakeld; wijzigingen in de Plugin-configuratie worden pas na herladen van kracht. Controleer:
Wanneer Twilio-delegatie is aangesloten, bevat googlemeet setup controles voor twilio-voice-call-plugin, twilio-voice-call-credentials en twilio-voice-call-webhook.
Gebruik --dtmf-sequence voor een aangepaste reeks, met vooraan w of komma’s voor een pauze vóór de pincode:

OAuth en preflight

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, ruimteresolutie of preflight van de Meet Media API. Deelnames via Chrome/Chrome-Node zijn nooit afhankelijk van OAuth; ze gebruiken hoe dan ook een aangemeld Chrome-profiel, BlackHole/SoX en (voor chrome-node) een verbonden Node.

Google-referenties maken

In Google Cloud Console:
1

Een project maken of selecteren

2

De Google Meet REST API inschakelen

3

Het OAuth-toestemmingsscherm configureren

Internal is het eenvoudigst voor een Google Workspace-organisatie. External werkt voor persoonlijke/testinstallaties; zolang de app zich in Testing bevindt, voeg je elk Google-account dat de app zal autoriseren toe als testgebruiker.
4

De gevraagde bereiken toevoegen

  • https://www.googleapis.com/auth/meetings.space.created
  • https://www.googleapis.com/auth/meetings.space.readonly
  • https://www.googleapis.com/auth/meetings.space.settings
  • https://www.googleapis.com/auth/meetings.conference.media.readonly
  • https://www.googleapis.com/auth/calendar.events.readonly (agenda opzoeken)
  • https://www.googleapis.com/auth/drive.meet.readonly (export van de hoofdtekst van transcript/slimme notitie)
5

Een OAuth-client-ID maken

Applicatietype Web application. Geautoriseerde omleidings-URI:
6

Het client-ID en clientgeheim kopiëren

meetings.space.created is vereist door spaces.create. meetings.space.readonly zet Meet-URL’s/-codes om naar ruimtes. Met meetings.space.settings kan OpenClaw SpaceConfig-instellingen zoals accessType doorgeven bij het maken van een ruimte via de API. meetings.conference.media.readonly is voor preflight en mediawerk met de Meet Media API; 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 --include-doc-bodies-export. Als je alleen via de browser aan Chrome-sessies wilt deelnemen, sla OAuth dan volledig over.

Het vernieuwingstoken aanmaken

Configureer oauth.clientId en optioneel oauth.clientSecret (of geef ze door als omgevingsvariabelen) en voer vervolgens uit:
Dit voert een PKCE-flow 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-plakflow wanneer de browser de lokale callback niet kan bereiken:
JSON-uitvoer:
Sla het oauth-object op onder de Plugin-configuratie:
Geef de voorkeur aan omgevingsvariabelen als je het vernieuwingstoken niet in de configuratie wilt opnemen; eerst wordt de configuratie verwerkt, daarna de omgeving als terugval. Als je je hebt geauthenticeerd voordat ondersteuning voor het maken van vergaderingen, het opzoeken in de agenda of het exporteren van de documenttekst bestond, voer je openclaw googlemeet auth login --json opnieuw uit zodat het vernieuwingstoken de huidige set bereiken dekt.

OAuth controleren met doctor

Dit controleert of de OAuth-configuratie bestaat en of met de vernieuwingstoken een toegangstoken kan worden aangemaakt, zonder de Chrome-runtime te laden of een verbonden Node te vereisen. Het rapport bevat alleen statusvelden (ok, configured, tokenSource, expiresAt, controlemeldingen) en geeft nooit de toegangstoken, vernieuwingstoken of het clientgeheim weer. Toon met de aanmaakcontrole met neveneffecten aan dat de Meet-API is ingeschakeld en het bereik spaces.create beschikbaar is:
Toon leestoegang tot een bestaande ruimte aan:
Een 403 bij deze controles betekent meestal dat de Meet REST-API is uitgeschakeld, dat de vernieuwingstoken het vereiste bereik mist of dat het Google-account geen toegang tot die ruimte heeft. Een fout met de vernieuwingstoken betekent dat je openclaw googlemeet auth login --json opnieuw moet uitvoeren en het nieuwe blok oauth moet opslaan. Voor de browserfallback is geen OAuth nodig; Google-authenticatie is daar afkomstig van het aangemelde Chrome-profiel op de geselecteerde Node, niet van de OpenClaw-configuratie. Deze omgevingsvariabelen worden als fallback geaccepteerd:
  • OPENCLAW_GOOGLE_MEET_CLIENT_ID of GOOGLE_MEET_CLIENT_ID
  • OPENCLAW_GOOGLE_MEET_CLIENT_SECRET of GOOGLE_MEET_CLIENT_SECRET
  • OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN of GOOGLE_MEET_REFRESH_TOKEN
  • OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN of GOOGLE_MEET_ACCESS_TOKEN
  • OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT of GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT
  • OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING of GOOGLE_MEET_DEFAULT_MEETING
  • OPENCLAW_GOOGLE_MEET_PREVIEW_ACK of GOOGLE_MEET_PREVIEW_ACK

Artefacten vinden, vooraf controleren en lezen

Nadat Meet conferentierecords heeft gemaakt:
Met --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 vergaderings-URL eerst via Google Calendar gevonden voordat artefacten worden gelezen (hiervoor is een vernieuwingstoken vereist die het alleen-lezenbereik voor Calendar-gebeurtenissen bevat):
--today doorzoekt de agenda primary van vandaag naar een gebeurtenis met een Meet-link; --event <query> zoekt in 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 dit rechtstreeks aanspreken:
Sluit de ruimte voor een via de API gemaakte ruimte:
Roept 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, vergaderingscode of spaces/{id} en zet deze eerst om naar de ruimteresource van de API. 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:
artifacts retourneert metagegevens van het conferentierecord plus metagegevens van deelnemer-, opname-, transcript-, gestructureerde transcriptitem- en slimme-notitieresources wanneer Google deze beschikbaar stelt. --no-transcript-entries slaat het opzoeken van items over voor grote vergaderingen. attendance breidt deelnemers uit tot deelnemersessierijen met tijdstippen waarop ze voor het eerst en laatst zijn gezien, de totale sessieduur, markeringen voor te laat komen/vroeg vertrekken en dubbele deelnemersresources die op basis van de aangemelde gebruiker of weergavenaam zijn samengevoegd; --no-merge-duplicates houdt onbewerkte resources gescheiden, --late-after-minutes/--early-before-minutes stellen de drempelwaarden af. 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 over gedeeltelijk ophalen. --zip schrijft ook een overdraagbaar archief naast de map. --include-doc-bodies exporteert de tekst van gekoppelde Google Docs voor transcripties/slimme notities via Drive files.export (hiervoor is het alleen-lezenbereik van Drive Meet vereist); zonder dit bereik bevatten exports alleen Meet-metagegevens en gestructureerde transcriptitems. Bij een gedeeltelijke artefactfout (een fout bij het weergeven van slimme notities, transcriptitems of de documenttekst) blijft de waarschuwing in de samenvatting/het manifest staan in plaats van dat de volledige export mislukt. --dry-run haalt dezelfde gegevens op en geeft de JSON van het manifest weer zonder de map of het ZIP-bestand te maken. Agents gebruiken dezelfde acties via de tool google_meet (export, create met accessType, end_active_conference, test_listen); zie Tool.

Live-rooktest

Voor de basisrooktest voor artefacten/aanwezigheid zijn meetings.space.readonly en meetings.conference.media.readonly nodig. Voor opzoeken in de agenda is calendar.events.readonly nodig. Voor het exporteren van documenttekst uit Drive is drive.meet.readonly nodig.

Aanmaakvoorbeelden

Geeft de nieuwe vergaderings-URI, bron en deelnamesessie weer. Met OAuth wordt de Meet-API gebruikt; zonder OAuth het aangemelde profiel van de vastgezette Chrome-Node. JSON van de browserfallback:
Als de browserfallback eerst een Google-aanmelding of blokkering vanwege Meet-machtigingen tegenkomt, retourneert google_meet gestructureerde details in plaats van een gewone tekenreeks:
JSON voor aanmaak via de API:
Bij het maken 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, rapporteert OpenClaw manualActionRequired: true of een browserfallbackfout en vraagt het de beheerder de Google-aanmelding te voltooien voordat deze het opnieuw probeert. Stel preview.enrollmentAcknowledged: true alleen in nadat je hebt bevestigd dat je Cloud-project, OAuth-principal en deelnemers aan de vergadering zijn ingeschreven voor het Google Workspace Developer Preview Program voor Meet-media-API’s.

Configuratie

Voor het algemene pad van de Chrome-agent hoeven alleen de Plugin, BlackHole, SoX, een sleutel voor een realtimeprovider en een geconfigureerde OpenClaw-TTS-provider te zijn ingeschakeld:

Standaardinstellingen

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 op de modus waarin ze kunnen worden gebruikt. Er bestaat een openclaw doctor --fix-migratie voor de verouderde vorm realtime.provider: "google": deze verplaatst die intentie naar realtime.voiceProvider: "google" plus realtime.transcriptionProvider: "openai" wanneer die velden nog niet zijn ingesteld.

Optionele overschrijvingen

ElevenLabs voor zowel luisteren als spreken in agentmodus:
De blijvende Meet-stem is afkomstig van tts.providers.elevenlabs.speakerVoiceId. Agentantwoorden kunnen ook [[tts:speakerVoiceId=... model=eleven_v3]]-instructies 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 wordt vastgelegd als provider=elevenlabs model=eleven_v3 speakerVoiceId=<voiceId>. Configuratie uitsluitend voor Twilio:
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 kan het Twilio-gesprek niet worden geplaatst. Laat voiceCall.gatewayUrl niet ingesteld om de lokale vertrouwde Gateway-runtime te gebruiken, die de aanroepende agent gedurende de volledige aanroep behoudt. Een geconfigureerde Gateway-URL blijft een expliciet WebSocket-doel en kan de herkomst van plugins niet verifiëren; koppelingen met niet-standaardagents worden veilig geweigerd in plaats van stilzwijgend een andere agent te gebruiken. Voer Google Meet en Voice Call uit in hetzelfde Gateway-proces wanneer routering per agent vereist is.

Tool

Agents gebruiken de tool google_meet:
test_speech dwingt altijd mode: "agent" of "bidi" af en mislukt als wordt gevraagd om in mode: "transcribe" te worden uitgevoerd, omdat sessies die alleen observeren geen spraak kunnen uitsturen. speechOutputVerified vereist zowel nieuwe realtime-uitvoerbytes als nieuwe, niet-stille audio die tijdens die uitvoer terugkomt via het microfoonopnamepad van de bridge. Oudere uitvoer of een loopbacksignaal van een hergebruikte sessie telt niet mee, en alleen een toename van sink-bytes wordt niet langer als geverifieerde spraak gerapporteerd. Voor Chrome-transports houdt leave een hergebruikt tabblad van de gebruiker open nadat op de knop voor het verlaten van het Meet-gesprek is geklikt. Tabbladen die door OpenClaw zijn geopend, worden na vertrek gesloten. Gebruik transport: "chrome" wanneer Chrome op de Gateway-host wordt uitgevoerd en transport: "chrome-node" wanneer het op een gekoppelde Node wordt uitgevoerd. In beide gevallen worden de modelproviders en openclaw_agent_consult op de Gateway-host uitgevoerd, zodat modelreferenties daar blijven. Logboeken in agentmodus bevatten bij het starten van de bridge de vastgestelde transcriptieprovider en het model, en na elk gesynthetiseerd antwoord de TTS-provider, het model, de stem, de uitvoerindeling en de samplefrequentie. Onbewerkte mode: "realtime" wordt nog steeds geaccepteerd als verouderde compatibiliteitsalias voor mode: "agent", maar wordt niet meer vermeld in de mode-enum van de tool. create met een ruimte die door een API wordt ondersteund en een expliciet toegangsbeleid:
De actieve conferentie van een bekende ruimte beëindigen:
Validatie waarbij eerst wordt geluisterd, voordat wordt beweerd dat een vergadering bruikbaar is:
Op verzoek spreken:
status bevat de Chrome-status wanneer die beschikbaar is:

Agent- en bidi-modi

agent-modus: de realtime-transcriptieprovider hoort de vergaderaudio, definitieve transcripties van deelnemers worden via de geconfigureerde OpenClaw-agent gerouteerd en het antwoord wordt uitgesproken via de normale 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 zolang assistentaudio in de wachtrij nog wordt afgespeeld, en recente transcriptie-echo’s die op assistentuitvoer lijken, worden vóór de raadpleging genegeerd, zodat BlackHole-loopback de agent niet op zijn eigen spraak laat antwoorden. 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 normale 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. Hiervoor wordt hetzelfde gedeelde raadpleegmechanisme gebruikt als voor Voice Call. Standaard worden raadplegingen uitgevoerd voor de agent main; stel realtime.agentId in om een Meet-kanaal naar een specifieke agentwerkruimte, standaardmodellen, toolbeleid, geheugen en sessiegeschiedenis te verwijzen. Raadplegingen in agentmodus gebruiken per vergadering een agent:<id>:subagent:google-meet:<session>-sessiesleutel, zodat vervolgvragen de vergadercontext behouden en tegelijkertijd het normale agentbeleid overnemen. Wanneer een agent in agentmodus google_meet aanroept, vertakt de consultantsessie het huidige transcript van de aanroeper voordat op de spraak van deelnemers wordt geantwoord; de Meet-sessie blijft afzonderlijk, zodat vervolgvragen in de vergadering het transcript van de aanroeper niet rechtstreeks wijzigen. realtime.toolPolicy bepaalt de raadpleeguitvoering: De sleutel van de raadpleegsessie heeft per Meet-sessie een eigen bereik, zodat opeenvolgende raadpleegaanroepen eerdere raadpleegcontext binnen dezelfde vergadering hergebruiken. Dwing een gesproken gereedheidscontrole af nadat Chrome volledig heeft deelgenomen:
Volledige rooktest voor deelnemen en spreken:

Checklist voor livetests

Voordat je een vergadering overdraagt aan een onbeheerde agent:
Verwachte Chrome-node-status:
  • googlemeet setup is volledig groen en bevat chrome-node-connected wanneer Chrome-node het standaardtransport is of een node is vastgezet.
  • nodes status toont dat de geselecteerde node verbonden is en zowel googlemeet.chrome als browser.proxy aanbiedt.
  • Het tabblad Meet neemt deel en test-speech retourneert de Chrome-status met inCall: 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:
Daarmee wordt aangetoond dat de Gateway-plugin is geladen, de VM-node met het huidige token is verbonden en de Meet-audiobrug beschikbaar is voordat een agent een echt vergadertabblad opent. Gebruik voor een Twilio-rooktest een vergadering die telefonische inbelgegevens beschikbaar stelt:
Verwachte Twilio-status:
  • googlemeet setup bevat groene controles voor twilio-voice-call-plugin, twilio-voice-call-credentials en twilio-voice-call-webhook.
  • voicecall is na het herladen van de Gateway beschikbaar in de CLI.
  • De geretourneerde sessie heeft transport: "twilio" en een twilio.voiceCallId.
  • openclaw logs --follow toont dat DTMF-TwiML vóór realtime-TwiML is aangeboden, gevolgd door een realtimebrug met de eerste begroeting in de wachtrij.
  • 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 herlaad de Gateway; de actieve agent ziet alleen plugintools die door het huidige Gateway-proces zijn geregistreerd:
Op Gateway-hosts zonder macOS blijft google_meet zichtbaar, maar lokale Chrome-acties voor terugspreken worden geblokkeerd voordat ze de audiobrug bereiken. Gebruik mode: "transcribe", telefonisch inbellen via Twilio of een macOS-host met chrome-node in plaats van het standaardpad voor de lokale Chrome-agent.

Geen verbonden node met Google Meet-mogelijkheden

Op de nodehost:
Op de Gateway-host:
De node moet verbonden zijn en googlemeet.chrome plus browser.proxy vermelden; de Gateway-configuratie moet beide toestaan:
Als googlemeet setup niet slaagt voor chrome-node-connected, of het Gateway-logboek gateway token mismatch meldt, installeer de node dan opnieuw of start deze opnieuw met het huidige Gateway-token:
Herlaad vervolgens de nodeservice en voer dit opnieuw uit:

Browser 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 dan manualActionMessage aan de operator en probeer 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/camera wanneer de systeemeigen prompt verschijnt; sluit of herstel een vastgelopen toestemmingsdialoogvenster van Meet. Meld niet dat je „niet aangemeld” bent alleen omdat Meet vraagt „Do you want people to hear you in the meeting?”; dat is het tussenscherm van Meet voor de audiokeuze. OpenClaw klikt via browserautomatisering op Use microphone wanneer dat beschikbaar is en blijft wachten op de werkelijke vergaderstatus; voor een browserfallback die alleen een vergadering aanmaakt, kan het in plaats daarvan op Continue without microphone klikken, omdat voor het genereren van de URL het realtime-audiopad niet 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.clientId en oauth.refreshToken (of overeenkomende OPENCLAW_GOOGLE_MEET_*-omgevingsvariabelen) zijn aanwezig en het vernieuwingstoken is aangemaakt nadat ondersteuning voor aanmaken werd toegevoegd; oudere tokens beschikken mogelijk niet over meetings.space.created, dus voer openclaw googlemeet auth login --json opnieuw uit.
  • Browserfallback: defaultTransport: "chrome-node" en chromeNode.node verwijzen naar een verbonden node met browser.proxy en googlemeet.chrome; het OpenClaw Chrome-profiel op die node is aangemeld en kan https://meet.google.com/new openen.
  • Nieuwe pogingen voor browserfallback: hergebruik een bestaand tabblad met .../new of 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: true retourneert, gebruik dan browser.nodeId, browser.targetId, browserUrl en manualActionMessage om de operator te begeleiden; blijf niet in een lus opnieuw proberen.
  • Tussenscherm voor audiokeuze: als Meet „Do you want people to hear you in the meeting?” toont, laat het tabblad dan open. OpenClaw hoort op Use microphone of (alleen voor aanmaken) Continue without microphone te klikken en te blijven wachten op de gegenereerde URL; als dat niet lukt, moet de foutmelding meet-audio-choice-required vermelden en niet google-login-required.

Agent neemt deel, maar praat niet

Gebruik mode: "agent" voor het pad STT -> OpenClaw-agent -> TTS en mode: "bidi" voor de directe realtime-spraakfallback. mode: "transcribe" start opzettelijk geen brug 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 is 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 realtimepad en meldt of voor die aanroep uitvoerbytes van de brug zijn waargenomen. Als speechOutputVerified onwaar is en speechOutputTimedOut waar is, heeft de realtimeprovider de uiting mogelijk geaccepteerd, maar heeft OpenClaw geen nieuwe uitvoerbytes de Chrome-audiobrug zien bereiken. Controleer ook het volgende: er is een sleutel voor een realtimeprovider (OPENAI_API_KEY of GEMINI_API_KEY) beschikbaar op de Gateway-host; BlackHole 2ch is zichtbaar op de Chrome-host; sox bestaat daar; de Meet-microfoon en -luidspreker worden via het virtuele audiopad geleid (doctor hoort meet output routed: yes te tonen voor realtime-deelnames met lokale Chrome). googlemeet doctor [session-id] toont de sessie, node, status tijdens de oproep, reden voor handmatige actie, verbinding met de realtimeprovider, realtimeReady, audio-invoer-/uitvoeractiviteit, 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 verifiëren zonder tokens prijs te geven. Als een agent een time-out heeft gekregen en er al een Meet-tabblad is geopend, controleer dit dan zonder nog een tabblad te openen:
De equivalente toolactie is recover_current_tab: deze activeert en controleert een bestaand Meet-tabblad voor het geselecteerde transport (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, toestemmingen, status van de audiokeuze). De CLI-opdracht communiceert met de geconfigureerde Gateway, die actief moet zijn; voor chrome-node moet de node ook verbonden zijn.

Twilio-installatiecontroles mislukken

twilio-voice-call-plugin mislukt wanneer voice-call niet is toegestaan of niet is ingeschakeld: voeg het toe aan plugins.allow, schakel plugins.entries.voice-call in en herlaad de Gateway. twilio-voice-call-credentials mislukt wanneer bij de Twilio-backend de account-SID, het authenticatietoken of het nummer van de beller ontbreekt:
twilio-voice-call-webhook mislukt wanneer voice-call niet via een openbare Webhook bereikbaar is, of publicUrl naar een loopbackadres 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; callbacks van de provider kunnen die niet bereiken. Stel plugins.entries.voice-call.config.publicUrl in op een openbare URL of configureer bereikbaarheid via een tunnel/Tailscale:
Gebruik voor lokale ontwikkeling bereikbaarheid via een tunnel of Tailscale in plaats van een privé-host-URL:
Start de Gateway opnieuw of herlaad deze en voer vervolgens het volgende uit:
voicecall smoke controleert standaard alleen de gereedheid. Voer een droogtest uit voor een specifiek nummer:
Voeg --yes alleen toe om opzettelijk een echte uitgaande oproep te plaatsen:

Twilio-oproep start, maar neemt nooit deel aan de vergadering

Controleer of de Meet-gebeurtenis telefonische inbelgegevens beschikbaar stelt en geef het exacte inbelnummer plus de pincode of een aangepaste DTMF-reeks door:
Gebruik voorafgaande w of komma’s in --dtmf-sequence voor een pauze vóór de pincode. Als de oproep is aangemaakt, maar de lijst met Meet-deelnemers 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-volgorde: Google Meet delegeert het deelnemen, 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 met voicecall.speak om de inleidende spraak.
  • Voer openclaw googlemeet setup --transport twilio opnieuw uit; een groene installatiecontrole is vereist, maar bewijst niet dat de pincodevolgorde van de vergadering correct is.
  • Controleer of het inbelnummer bij dezelfde Meet-uitnodiging en regio hoort als de pincode.
  • Verhoog voiceCall.dtmfDelayMs vanaf de standaardwaarde van 12 seconden als Meet langzaam opneemt of het oproeptranscript nog steeds de pincodeprompt toont nadat DTMF vóór de verbinding is verzonden.
  • Als de deelnemer deelneemt, maar je de begroeting niet hoort, controleer dan openclaw logs --follow op het voicecall.speak-verzoek na DTMF en op TTS-weergave via de mediastream of de Twilio-fallback <Say>. Als het transcript nog steeds „enter the meeting PIN” toont, heeft de telefonische verbinding nog niet deelgenomen aan de Meet-ruimte, zodat deelnemers geen spraak zullen horen.
Als webhooks niet aankomen, debug dan eerst de Voice Call-plugin: 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 ontvangst, dus om in een gesprek te spreken is nog steeds een deelnemerspad nodig. Deze Plugin houdt die grens zichtbaar: Chrome verzorgt deelname via de browser en lokale audioroutering; Twilio verzorgt telefonische inbeldeelname. De terugspreekmodi van Chrome vereisen BlackHole 2ch plus een van de volgende opties:
  • chrome.audioInputCommand plus chrome.audioOutputCommand: OpenClaw beheert de bridge en stuurt audio in chrome.audioFormat door tussen deze opdrachten en de geselecteerde provider. De modus agent gebruikt realtime transcriptie plus reguliere TTS; de modus bidi gebruikt de realtime spraakprovider. Het standaardpad is 24 kHz PCM16 met chrome.audioBufferBytes: 4096; 8 kHz G.711 mu-law blijft beschikbaar voor verouderde opdrachtparen.
  • chrome.audioBridgeCommand: een externe bridgeopdracht beheert het volledige lokale audiopad en moet worden afgesloten nadat de daemon is gestart of gevalideerd. Alleen geldig voor bidi, omdat de modus agent directe toegang tot het opdrachtenpaar nodig heeft voor TTS.
Met de Chrome-bridge met opdrachtenpaar kan chrome.bargeInInputCommand naar een afzonderlijke lokale microfoon luisteren en het afspelen door de assistent wissen wanneer een persoon begint te praten, zodat menselijke spraak voorrang houdt op de uitvoer van de assistent, zelfs wanneer de gedeelde BlackHole-loopbackinvoer tijdens het afspelen door de assistent tijdelijk wordt onderdrukt. Net als chrome.audioInputCommand/chrome.audioOutputCommand is dit een door de beheerder geconfigureerde lokale opdracht: gebruik een expliciet vertrouwd opdrachtpad of een expliciete argumentenlijst, en nooit een script vanaf een niet-vertrouwde locatie. Routeer voor heldere duplexaudio 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 laten echoën in het gesprek. googlemeet speak activeert de actieve terugspreekaudiobridge voor een Chrome-sessie; googlemeet leave stopt deze (en beëindigt bij Twilio-sessies die via Voice Call zijn gedelegeerd ook het onderliggende gesprek). Gebruik googlemeet end-active-conference om ook de actieve Google Meet-vergadering te sluiten voor een via de API beheerde ruimte.

Gerelateerd