google-meet dołącza do spotkań pod wyraźnie podanymi adresami URL Meet w imieniu agenta OpenClaw. Jego zakres jest celowo ograniczony:
- Dołącza wyłącznie przy użyciu adresów URL
https://meet.google.com/...; nigdy nie łączy się ze spotkaniem za pomocą samodzielnie wykrytego numeru telefonu. googlemeet createmoże utworzyć nowy adres URL Meet za pomocą interfejsu Google Meet API (lub rozwiązania zastępczego opartego na przeglądarce) i domyślnie do niego dołączyć.- Uczestnictwo przez Chrome korzysta z zalogowanego profilu Chrome, opcjonalnie na sparowanym węźle. Uczestnictwo przez Twilio polega na wybraniu numeru telefonu wraz z kodem PIN/DTMF za pośrednictwem pluginu połączeń głosowych; nie może ono bezpośrednio wybrać adresu URL Meet.
mode: "agent"(domyślnie) transkrybuje wypowiedzi uczestników za pomocą dostawcy działającego w czasie rzeczywistym, przekazuje je do skonfigurowanego agenta OpenClaw i odczytuje odpowiedź przy użyciu standardowego TTS OpenClaw.mode: "bidi"umożliwia bezpośrednie odpowiadanie przez model głosowy działający w czasie rzeczywistym.mode: "transcribe"dołącza wyłącznie w celu obserwacji, bez możliwości odpowiadania głosowego.- Plugin nie odtwarza automatycznego komunikatu o zgodzie po dołączeniu do rozmowy.
- Polecenie CLI to
googlemeet;meetjest zarezerwowane dla szerszych przepływów telekonferencyjnych agenta.
Szybki start
Zainstaluj lokalne zależności audio, a następnie ustaw klucz dostawcy działającego w czasie rzeczywistym. OpenAI jest domyślnym dostawcą transkrypcji w trybieagent; Google Gemini Live jest dostępny jako dostawca głosu w trybie bidi:
blackhole-2ch instaluje wirtualne urządzenie audio BlackHole 2ch, przez które Chrome kieruje dźwięk. Instalator Homebrew wymaga ponownego uruchomienia systemu, zanim macOS udostępni urządzenie:
setup są czytelne dla agenta i uwzględniają tryb oraz transport: raportują profil Chrome, przypięcie węzła, a w przypadku połączeń Chrome w czasie rzeczywistym także most audio BlackHole/SoX i kontrolę opóźnionego wprowadzenia. Połączenia wyłącznie obserwacyjne pomijają wymagania wstępne trybu czasu rzeczywistego:
setup informuje również, czy voice-call, dane uwierzytelniające Twilio i publiczne udostępnienie Webhooka są gotowe. Każdą kontrolę ok: false należy traktować jako blokadę danego transportu lub trybu, zanim agent dołączy. Użyj --json, aby uzyskać dane wyjściowe przeznaczone do przetwarzania maszynowego, oraz --transport chrome|chrome-node|twilio, aby wcześniej sprawdzić konkretny transport:
google_meet:
google_meet pozostaje dostępne dla artefaktów, kalendarza, konfiguracji, transkrypcji, Twilio i działań chrome-node, ale lokalne odpowiadanie głosowe przez Chrome (transport: "chrome" z mode: "agent" lub "bidi") jest blokowane przed dotarciem do mostu audio, ponieważ ta ścieżka obecnie zależy od BlackHole 2ch systemu macOS. Zamiast tego użyj mode: "transcribe", połączenia telefonicznego Twilio lub hosta chrome-node z systemem macOS.
Tworzenie spotkania
create ma dwie ścieżki, wskazywane w polu source wyniku:
api: używana, gdy skonfigurowano dane uwierzytelniające OAuth Google Meet. Jest deterministyczna i nie zależy od stanu interfejsu przeglądarki.browser: używana bez danych uwierzytelniających OAuth. OpenClaw otwierahttps://meet.google.com/newna przypiętym węźle Chrome i czeka, aż Google przekieruje do rzeczywistego adresu URL z kodem spotkania; profil Chrome OpenClaw na tym węźle musi być już zalogowany w Google. Zarówno dołączanie, jak i tworzenie ponownie wykorzystuje istniejącą kartę Meet (lub kartę z trwającym.../newalbo monitem dotyczącym konta Google) przed otwarciem nowej; dopasowywanie kart ignoruje nieistotne ciągi zapytania, takie jakauthuser.
create domyślnie dołącza i zwraca joined: true wraz z sesją dołączenia. Przekaż --no-join (CLI) lub "join": false (narzędzie), aby tylko utworzyć adres URL.
W przypadku pokojów utworzonych przez API ustaw jawną zasadę dostępu zamiast dziedziczyć ustawienie domyślne konta Google:
Dotyczy to wyłącznie pokojów utworzonych przez API, dlatego OAuth musi być skonfigurowane. Jeśli uwierzytelnienie wykonano przed wprowadzeniem tej opcji, uruchom ponownie
openclaw googlemeet auth login --json po dodaniu zakresu meetings.space.settings do ekranu zgody OAuth.
Jeśli rozwiązanie zastępcze oparte na przeglądarce napotka blokadę logowania do Google lub uprawnień Meet, narzędzie zwróci manualActionRequired: true z manualActionReason, manualActionMessage oraz browser.nodeId/browser.targetId/browserUrl. Zgłoś ten komunikat i przestań otwierać nowe karty Meet, dopóki operator nie ukończy czynności w przeglądarce.
Dołączenie wyłącznie obserwacyjne
Ustaw"mode": "transcribe", aby pominąć dwukierunkowy most czasu rzeczywistego (bez wymagania BlackHole/SoX i bez odpowiadania głosowego). Połączenia Chrome w trybie transkrypcji pomijają także przyznawanie przez OpenClaw uprawnień do mikrofonu i kamery oraz ścieżkę Meet Use microphone; jeśli Meet wyświetli ekran wyboru dźwięku, automatyzacja najpierw spróbuje użyć opcji Continue without microphone. Zarządzane transporty Chrome w tym trybie instalują obserwator napisów Meet działający w miarę możliwości. googlemeet status --json i googlemeet doctor raportują captioning, captionsEnabledAttempted, transcriptLines, lastCaptionAt, lastCaptionSpeaker, lastCaptionText oraz końcowy fragment recentTranscript.
Aby odczytać ograniczoną transkrypcję sesji, użyj dokładnie śledzonej karty Meet:
nextIndex nie może pominąć późniejszego rozszerzenia tekstu; opuszczenie spotkania finalizuje widoczne wiersze przed wykonaniem migawki. droppedLines raportuje wiersze utracone z początku po przekroczeniu limitu. Transkrypcje czterech ostatnio zakończonych sesji pozostają dostępne do odczytu aż do ponownego uruchomienia gatewaya. Starsze zakończone transkrypcje zwracają evicted: true. Jest to celowo pamięć środowiska uruchomieniowego, a nie trwały magazyn historii spotkań: ponowne uruchomienie gatewaya, zamknięcie karty przed wykonaniem migawki lub przekroczenie udokumentowanych limitów może spowodować utratę napisów.
Aby wykonać próbę nasłuchiwania z wynikiem tak/nie:
listenVerified, listenTimedOut, pola czynności ręcznych oraz bieżący stan kondycji napisów.
Stan sesji czasu rzeczywistego
Podczas sesji z odpowiadaniem głosowym stangoogle_meet raportuje kondycję Chrome i mostu audio: inCall, manualActionRequired, providerConnected, realtimeReady, audioInputActive, audioOutputActive, znaczniki czasu ostatnich danych wejściowych i wyjściowych, liczniki bajtów oraz stan zamknięcia mostu. Zarządzane sesje Chrome wypowiadają frazę wprowadzającą lub testową dopiero wtedy, gdy stan kondycji raportuje inCall: true; w przeciwnym razie speechReady: false, a próba odtworzenia mowy jest blokowana zamiast bezgłośnie niczego nie robić.
Lokalne połączenia Chrome korzystają z zalogowanego profilu przeglądarki OpenClaw i wymagają BlackHole 2ch dla ścieżki mikrofonu i głośnika. Jedno urządzenie BlackHole wystarczy do pierwszego testu podstawowego, ale może powodować echo; aby uzyskać czysty dźwięk dwukierunkowy, użyj oddzielnych urządzeń wirtualnych lub grafu w stylu Loopback.
Lokalny Gateway i Chrome w Parallels
Pełny Gateway ani klucz API modelu nie są wymagane wewnątrz maszyny wirtualnej macOS, jeśli ma ona tylko udostępniać Chrome. Uruchom Gateway i agenta lokalnie, a host węzła w maszynie wirtualnej.
Zainstaluj zależności maszyny wirtualnej, uruchom ją ponownie i zweryfikuj:
<gateway-host> jest adresem IP sieci LAN bez TLS, zezwól na użycie tej zaufanej sieci prywatnej:
openclaw.json):
googlemeet.chrome, jak i funkcję przeglądarki/browser.proxy:
manualActionRequired: true wraz z manualActionReason i manualActionMessage. Przestań ponawiać próby, zgłoś ten komunikat wraz z browserUrl/browserTitle i spróbuj ponownie dopiero po ukończeniu czynności ręcznej.
Jeśli pominięto chromeNode.node, OpenClaw dokonuje automatycznego wyboru tylko wtedy, gdy dokładnie jeden połączony Node udostępnia zarówno googlemeet.chrome, jak i sterowanie przeglądarką; gdy połączonych jest kilka odpowiednich Node’ów, przypnij chromeNode.node (identyfikator Node’a, nazwę wyświetlaną lub zdalny adres IP).
Sprawdzanie typowych błędów
Uwagi dotyczące instalacji
Domyślna funkcja zwrotnego przesyłania głosu w Chrome korzysta z dwóch zewnętrznych narzędzi, których OpenClaw nie dołącza ani nie rozpowszechnia; zainstaluj je jako zależności hosta za pomocą Homebrew:sox: narzędzie audio wiersza poleceń. Plugin wydaje jawne polecenia urządzenia CoreAudio dla domyślnego mostu audio PCM16 24 kHz.blackhole-2ch: wirtualny sterownik audio systemu macOS udostępniający urządzenieBlackHole 2ch, przez które przebiega trasa Chrome/Meet.
LGPL-2.0-only AND GPL-2.0-only; BlackHole jest objęty licencją GPL-3.0. Jeśli tworzysz instalator lub urządzenie, które dołącza BlackHole do OpenClaw, zapoznaj się z warunkami licencji projektu BlackHole albo uzyskaj oddzielną licencję od Existential Audio.
Transporty
Chrome
Otwiera adres URL Meet za pomocą sterowania przeglądarką OpenClaw i dołącza jako zalogowany profil przeglądarki OpenClaw. W systemie macOS Plugin sprawdza przed uruchomieniem obecnośćBlackHole 2ch, a jeśli jest skonfigurowane, uruchamia polecenie kontroli stanu/uruchamiania mostu audio przed otwarciem Chrome. W przypadku lokalnego Chrome wybierz profil za pomocą browser.defaultProfile; parametr chrome.browserProfile jest przekazywany zamiast tego do hostów chrome-node.
BlackHole 2ch nie jest zainstalowane, próba dołączenia kończy się błędem konfiguracji zamiast dołączeniem bez ścieżki audio.
Twilio
Ścisły plan wybierania delegowany do Pluginu Voice Call. Nie analizuje stron Meet w poszukiwaniu numerów telefonów; Google Meet musi udostępniać numer telefoniczny i kod PIN do spotkania. Włącz Voice Call na hoście Gateway, a nie na Node Chrome:openclaw.json:
realtime.provider: "openai" z OPENAI_API_KEY.
Po włączeniu voice-call uruchom ponownie lub przeładuj Gateway; zmiany konfiguracji Pluginu nie zaczną obowiązywać przed przeładowaniem. Sprawdź:
googlemeet setup obejmuje kontrole twilio-voice-call-plugin, twilio-voice-call-credentials i twilio-voice-call-webhook.
--dtmf-sequence, dodając na początku w lub przecinki, aby wprowadzić pauzę przed kodem PIN:
OAuth i kontrola wstępna
OAuth jest opcjonalny podczas tworzenia linku Meet, ponieważgooglemeet create może użyć automatyzacji przeglądarki jako rozwiązania zapasowego. Skonfiguruj OAuth na potrzeby tworzenia przez oficjalne API, rozpoznawania przestrzeni lub kontroli wstępnej Meet Media API. Dołączanie przez Chrome/Chrome-node nigdy nie zależy od OAuth; zawsze korzysta z zalogowanego profilu Chrome, BlackHole/SoX oraz — w przypadku chrome-node — połączonego Node’a.
Tworzenie danych uwierzytelniających Google
W Google Cloud Console:1
Utwórz lub wybierz projekt
2
Włącz Google Meet REST API
3
Skonfiguruj ekran zgody OAuth
Opcja Internal jest najprostsza dla organizacji Google Workspace. Opcja External działa w konfiguracjach osobistych/testowych; gdy aplikacja ma stan Testing, dodaj jako użytkownika testowego każde konto Google, które będzie ją autoryzować.
4
Dodaj wymagane zakresy
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(wyszukiwanie w Kalendarzu)https://www.googleapis.com/auth/drive.meet.readonly(eksport treści dokumentu transkrypcji/inteligentnej notatki)
5
Utwórz identyfikator klienta OAuth
Typ aplikacji Web application. Autoryzowany identyfikator URI przekierowania:
6
Skopiuj identyfikator klienta i sekret klienta
meetings.space.created jest wymagane przez spaces.create. meetings.space.readonly rozpoznaje adresy URL/kody Meet jako przestrzenie. meetings.space.settings umożliwia OpenClaw przekazywanie ustawień SpaceConfig, takich jak accessType, podczas tworzenia pokoju przez API. meetings.conference.media.readonly służy do kontroli wstępnej Meet Media API i operacji na multimediach; Google może wymagać rejestracji w programie Developer Preview w celu faktycznego korzystania z Media API. calendar.events.readonly jest potrzebne tylko do wyszukiwania w kalendarzu za pomocą --today/--event. drive.meet.readonly jest potrzebne tylko do eksportu --include-doc-bodies. Jeśli potrzebne jest wyłącznie dołączanie przez Chrome oparte na przeglądarce, całkowicie pomiń OAuth.
Generowanie tokenu odświeżania
Skonfigurujoauth.clientId i opcjonalnie oauth.clientSecret (lub przekaż je jako zmienne środowiskowe), a następnie uruchom:
http://localhost:8085/oauth2callback i wyświetla blok konfiguracji oauth z tokenem odświeżania. Dodaj --manual, aby użyć przepływu kopiowania i wklejania, gdy przeglądarka nie może uzyskać dostępu do lokalnego wywołania zwrotnego:
oauth w konfiguracji Pluginu:
openclaw googlemeet auth login --json, aby token odświeżania obejmował aktualny zestaw zakresów.
Weryfikowanie OAuth za pomocą narzędzia doctor
ok, configured, tokenSource, expiresAt, komunikaty kontroli) i nigdy nie wyświetla tokenu dostępu, tokenu odświeżania ani sekretu klienta.
Potwierdź włączenie Meet API i zakres
spaces.create za pomocą testu tworzenia powodującego efekt uboczny:
403 zwracany przez te testy zwykle oznacza, że Meet REST API jest wyłączone, token odświeżania nie ma wymaganego zakresu albo konto Google nie ma dostępu do tej przestrzeni. Błąd tokenu odświeżania oznacza, że należy ponownie uruchomić openclaw googlemeet auth login --json i zapisać nowy blok oauth.
OAuth nie jest potrzebne w przypadku mechanizmu zastępczego opartego na przeglądarce; uwierzytelnianie Google pochodzi wtedy z profilu Chrome zalogowanego na wybranym węźle, a nie z konfiguracji OpenClaw.
Następujące zmienne środowiskowe są akceptowane jako wartości zastępcze:
OPENCLAW_GOOGLE_MEET_CLIENT_IDlubGOOGLE_MEET_CLIENT_IDOPENCLAW_GOOGLE_MEET_CLIENT_SECRETlubGOOGLE_MEET_CLIENT_SECRETOPENCLAW_GOOGLE_MEET_REFRESH_TOKENlubGOOGLE_MEET_REFRESH_TOKENOPENCLAW_GOOGLE_MEET_ACCESS_TOKENlubGOOGLE_MEET_ACCESS_TOKENOPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_ATlubGOOGLE_MEET_ACCESS_TOKEN_EXPIRES_ATOPENCLAW_GOOGLE_MEET_DEFAULT_MEETINGlubGOOGLE_MEET_DEFAULT_MEETINGOPENCLAW_GOOGLE_MEET_PREVIEW_ACKlubGOOGLE_MEET_PREVIEW_ACK
Rozwiązywanie, kontrola wstępna i odczytywanie artefaktów
--meeting, artifacts i attendance domyślnie używany jest najnowszy rekord konferencji; należy przekazać --all-conference-records, aby uwzględnić każdy zachowany rekord.
Wyszukiwanie w kalendarzu rozwiązuje adres URL spotkania za pomocą Google Calendar przed odczytaniem artefaktów (wymaga tokenu odświeżania obejmującego zakres tylko do odczytu wydarzeń Kalendarza):
--today przeszukuje dzisiejszy kalendarz primary w celu znalezienia wydarzenia z linkiem Meet; --event <query> wyszukuje pasujący tekst wydarzenia; --calendar <id> wskazuje kalendarz inny niż główny. calendar-events wyświetla podgląd pasujących wydarzeń i oznacza, które z nich wybiorą latest/artifacts/attendance/export.
Jeśli identyfikator rekordu konferencji jest już znany, można odwołać się do niego bezpośrednio:
spaces.endActiveConference i wymaga OAuth z zakresem meetings.space.created dla przestrzeni, którą autoryzowane konto może zarządzać. Akceptuje adres URL Meet, kod spotkania lub spaces/{id}, a następnie najpierw rozwiązuje go do zasobu przestrzeni API. Jest to niezależne od googlemeet leave: leave kończy lokalny udział OpenClaw lub udział w sesji; end-active-conference zleca Google Meet zakończenie aktywnej konferencji w tej przestrzeni.
Zapisz czytelny raport:
artifacts zwraca metadane rekordu konferencji oraz metadane zasobów uczestników, nagrań, transkrypcji, ustrukturyzowanych wpisów transkrypcji i inteligentnych notatek, gdy Google je udostępnia. --no-transcript-entries pomija wyszukiwanie wpisów w przypadku dużych spotkań. attendance rozwija uczestników do wierszy sesji uczestników zawierających czas pierwszej i ostatniej obecności, łączny czas trwania sesji, flagi spóźnienia i wcześniejszego opuszczenia oraz scala zduplikowane zasoby uczestników według zalogowanego użytkownika lub nazwy wyświetlanej; --no-merge-duplicates zachowuje nieprzetworzone zasoby oddzielnie, a --late-after-minutes/--early-before-minutes dostosowują wartości progowe.
export zapisuje folder zawierający summary.md, attendance.csv, transcript.md, artifacts.json, attendance.json i manifest.json. manifest.json rejestruje wybrane dane wejściowe, opcje eksportu, rekordy konferencji, pliki wyjściowe, liczby, źródło tokenu, użyte wydarzenie Kalendarza oraz ostrzeżenia o częściowym pobraniu. --zip zapisuje również przenośne archiwum obok folderu. --include-doc-bodies eksportuje tekst powiązanych Dokumentów Google z transkrypcjami i inteligentnymi notatkami za pośrednictwem Drive files.export (wymaga zakresu Drive Meet tylko do odczytu); bez niego eksport obejmuje wyłącznie metadane Meet i ustrukturyzowane wpisy transkrypcji. Częściowy błąd artefaktu (błąd wyświetlania listy inteligentnych notatek, wpisu transkrypcji lub treści dokumentu) zachowuje ostrzeżenie w podsumowaniu/manifeście zamiast powodować niepowodzenie całego eksportu. --dry-run pobiera te same dane i wyświetla manifest w formacie JSON bez tworzenia folderu ani pliku ZIP.
Agenci korzystają z tych samych działań za pośrednictwem narzędzia google_meet (export, create z accessType, end_active_conference, test_listen); zobacz Narzędzie.
Test dymny na żywo
Podstawowy test dymny artefaktów/obecności wymaga
meetings.space.readonly i meetings.conference.media.readonly. Wyszukiwanie w kalendarzu wymaga calendar.events.readonly. Eksport treści dokumentów z Drive wymaga drive.meet.readonly.
Przykłady tworzenia
google_meet zwraca ustrukturyzowane szczegóły zamiast zwykłego ciągu znaków:
manualActionRequired: true lub błąd mechanizmu zastępczego przeglądarki i prosi operatora o dokończenie logowania do Google przed ponowną próbą.
Ustaw preview.enrollmentAcknowledged: true dopiero po potwierdzeniu, że projekt Cloud, podmiot OAuth i uczestnicy spotkania są zarejestrowani w programie Google Workspace Developer Preview Program dla interfejsów Meet Media API.
Konfiguracja
Typowa ścieżka agenta Chrome wymaga jedynie włączonego pluginu, BlackHole, SoX, klucza dostawcy czasu rzeczywistego oraz skonfigurowanego dostawcy TTS OpenClaw:Wartości domyślne
chrome.audioBridgeCommand i chrome.audioBridgeHealthCommand pozwalają zewnętrznemu mostowi zarządzać całą lokalną ścieżką dźwiękową zamiast chrome.audioInputCommand/chrome.audioOutputCommand; ograniczenie dotyczące trybu, w którym można ich używać, opisano w sekcji Uwagi.
Istnieje migracja openclaw doctor --fix dla starszej struktury realtime.provider: "google": przenosi ona tę intencję do realtime.voiceProvider: "google" oraz realtime.transcriptionProvider: "openai", jeśli te pola nie są jeszcze ustawione.
Opcjonalne nadpisania
messages.tts.providers.elevenlabs.speakerVoiceId. Odpowiedzi agenta mogą również używać dyrektyw [[tts:speakerVoiceId=... model=eleven_v3]] dla poszczególnych odpowiedzi, gdy włączone jest nadpisywanie modelu TTS, ale konfiguracja stanowi deterministyczną wartość domyślną dla spotkań. Podczas dołączania dzienniki pokazują transcriptionProvider=elevenlabs, a każda odpowiedź głosowa jest rejestrowana jako provider=elevenlabs model=eleven_v3 speakerVoiceId=<voiceId>.
Konfiguracja wyłącznie dla Twilio:
voiceCall.enabled: true (wartości domyślnej) i transporcie Twilio plugin Voice Call wysyła sekwencję DTMF przed otwarciem strumienia multimediów czasu rzeczywistego, a następnie używa zapisanego tekstu wprowadzenia jako początkowego powitania w czasie rzeczywistym. Jeśli voice-call nie jest włączone, Google Meet nadal może sprawdzić i zarejestrować plan wybierania, ale nie może nawiązać połączenia Twilio.
Pozostaw voiceCall.gatewayUrl bez ustawienia, aby używać lokalnego zaufanego środowiska uruchomieniowego Gateway, które zachowuje
agenta wywołującego przez cały czas trwania wywołania. Skonfigurowany adres URL Gateway pozostaje jawnym celem WebSocket i
nie może uwierzytelnić pochodzenia pluginu; dołączenie agenta innego niż domyślny kończy się bezpiecznym niepowodzeniem zamiast cichego
użycia innego agenta. Gdy wymagane jest kierowanie według agentów, uruchom Google Meet i Voice Call w tym samym procesie Gateway.
Narzędzie
Agenci używają narzędziagoogle_meet:
test_speech zawsze wymusza mode: "agent" lub "bidi" i kończy się niepowodzeniem przy próbie uruchomienia w trybie mode: "transcribe", ponieważ sesje wyłącznie obserwacyjne nie mogą emitować mowy. Wynik speechOutputVerified opiera się na wzroście liczby bajtów wyjściowego dźwięku czasu rzeczywistego podczas tego wywołania, dlatego ponownie użyta sesja ze starszym dźwiękiem nie jest uznawana za nową kontrolę.
W przypadku transportów Chrome leave pozostawia otwartą ponownie używaną kartę należącą do użytkownika po kliknięciu przycisku opuszczenia rozmowy w Meet. Karty otwarte przez OpenClaw są zamykane po opuszczeniu spotkania.
Użyj transport: "chrome", gdy Chrome działa na hoście Gateway, a transport: "chrome-node", gdy działa na sparowanym Node. W obu przypadkach dostawcy modeli i openclaw_agent_consult działają na hoście Gateway, więc dane uwierzytelniające modeli pozostają na nim. Dzienniki trybu agenta zawierają rozpoznanego dostawcę/model transkrypcji podczas uruchamiania mostka oraz dostawcę/model/głos/format wyjściowy/częstotliwość próbkowania TTS po każdej zsyntetyzowanej odpowiedzi. Surowa wartość mode: "realtime" jest nadal akceptowana jako starszy alias zgodności dla mode: "agent", ale nie jest już ogłaszana w wyliczeniu mode narzędzia.
create z pokojem obsługiwanym przez API i jawną polityką dostępu:
status zawiera stan Chrome, gdy jest dostępny:
Tryby agenta i bidi
Tryb
agent: dostawca transkrypcji czasu rzeczywistego odbiera dźwięk spotkania, końcowe transkrypcje uczestników są kierowane przez skonfigurowanego agenta OpenClaw, a odpowiedź jest wypowiadana za pomocą standardowego TTS OpenClaw. Sąsiadujące fragmenty końcowej transkrypcji są scalane przed konsultacją, aby jedna wypowiedź nie generowała kilku nieaktualnych częściowych odpowiedzi; wejście czasu rzeczywistego jest wstrzymywane, dopóki dźwięk asystenta w kolejce nadal jest odtwarzany, a niedawne echa transkrypcji przypominające wypowiedzi asystenta są ignorowane przed konsultacją, aby pętla zwrotna BlackHole nie powodowała odpowiadania agenta na własną mowę.
Tryb bidi: model głosowy czasu rzeczywistego odpowiada bezpośrednio i może wywołać openclaw_agent_consult, aby uzyskać pogłębione rozumowanie, aktualne informacje lub zwykłe narzędzia OpenClaw. Narzędzie konsultacyjne uruchamia w tle zwykłego agenta OpenClaw z kontekstem niedawnej transkrypcji spotkania i zwraca zwięzłą odpowiedź do wypowiedzenia; w trybie agent OpenClaw wysyła tę odpowiedź bezpośrednio do TTS, a w trybie bidi model głosowy czasu rzeczywistego może ją wypowiedzieć. Używa tego samego współdzielonego mechanizmu konsultacji co Voice Call.
Domyślnie konsultacje są uruchamiane względem agenta main; ustaw realtime.agentId, aby skierować kanał Meet do dedykowanego obszaru roboczego agenta, domyślnych modeli, polityki narzędzi, pamięci i historii sesji. Konsultacje w trybie agenta używają klucza sesji agent:<id>:subagent:google-meet:<session> przypisanego do spotkania, dzięki czemu pytania uzupełniające zachowują kontekst spotkania, a jednocześnie dziedziczą zwykłą politykę agenta. Gdy agent wywołuje google_meet w trybie agenta, sesja konsultanta tworzy odgałęzienie bieżącej transkrypcji wywołującego przed odpowiedzią na wypowiedź uczestnika; sesja Meet pozostaje oddzielna, więc pytania uzupełniające ze spotkania nie modyfikują bezpośrednio transkrypcji wywołującego.
realtime.toolPolicy steruje przebiegiem konsultacji:
Klucz sesji konsultacji ma zakres pojedynczej sesji Meet, dlatego kolejne wywołania konsultacji podczas tego samego spotkania ponownie wykorzystują wcześniejszy kontekst konsultacji.
Wymuszenie głosowej kontroli gotowości po pełnym dołączeniu Chrome:
Lista kontrolna testu na żywo
Przed przekazaniem spotkania agentowi działającemu bez nadzoru:googlemeet setupma wszystkie wskaźniki zielone i zawierachrome-node-connected, gdy Chrome-node jest domyślnym transportem lub przypięto Node.nodes statuspokazuje wybrany połączony Node, ogłaszający zarównogooglemeet.chrome, jak ibrowser.proxy.- Karta Meet dołącza, a
test-speechzwraca stan Chrome zinCall: true.
googlemeet setupobejmuje pomyślne testytwilio-voice-call-plugin,twilio-voice-call-credentialsitwilio-voice-call-webhook.voicecalljest dostępne w CLI po ponownym wczytaniu Gateway.- Zwrócona sesja ma
transport: "twilio"oraztwilio.voiceCallId. openclaw logs --followpokazuje, że TwiML DTMF jest udostępniany przed TwiML czasu rzeczywistego, a następnie ustanawiany jest most czasu rzeczywistego z powitaniem dodanym do kolejki.googlemeet leave <sessionId>rozłącza delegowane połączenie głosowe.
Rozwiązywanie problemów
Agent nie widzi narzędzia Google Meet
Należy potwierdzić, że plugin jest włączony, i ponownie wczytać Gateway; działający agent widzi tylko narzędzia pluginów zarejestrowane przez bieżący proces Gateway:google_meet pozostaje widoczna, ale lokalne działania zwrotnego przesyłania mowy w Chrome są blokowane, zanim dotrą do mostu audio. Zamiast domyślnej ścieżki lokalnego agenta Chrome należy użyć mode: "transcribe", połączenia telefonicznego Twilio lub hosta macOS chrome-node.
Brak połączonego węzła obsługującego Google Meet
Na hoście węzła:googlemeet.chrome oraz browser.proxy; konfiguracja Gateway musi zezwalać na oba polecenia:
googlemeet setup nie przechodzi chrome-node-connected lub dziennik Gateway zgłasza gateway token mismatch, należy ponownie zainstalować lub uruchomić węzeł z bieżącym tokenem Gateway:
Przeglądarka się otwiera, ale agent nie może dołączyć
Należy uruchomićgooglemeet test-listen w celu dołączenia wyłącznie w trybie obserwacji lub googlemeet test-speech w celu dołączenia w czasie rzeczywistym, a następnie sprawdzić zwrócony stan Chrome. Jeśli którekolwiek zgłasza manualActionRequired: true, należy pokazać operatorowi manualActionMessage i nie ponawiać prób do czasu ukończenia działania w przeglądarce.
Typowe działania ręczne: zalogowanie się w profilu Chrome; wpuszczenie gościa z konta gospodarza Meet; przyznanie Chrome uprawnień do mikrofonu i kamery po wyświetleniu natywnego monitu; zamknięcie lub naprawienie zablokowanego okna uprawnień Meet.
Nie należy zgłaszać „braku zalogowania” tylko dlatego, że Meet pyta „Do you want people to hear you in the meeting?”; jest to ekran pośredni wyboru dźwięku w Meet. OpenClaw klika Use microphone za pomocą automatyzacji przeglądarki, gdy jest to możliwe, i nadal oczekuje na właściwy stan spotkania; w przypadku awaryjnego użycia przeglądarki wyłącznie do utworzenia spotkania może zamiast tego kliknąć Continue without microphone, ponieważ wygenerowanie adresu URL nie wymaga ścieżki dźwięku w czasie rzeczywistym.
Nie można utworzyć spotkania
googlemeet create używa interfejsu Meet API spaces.create, gdy skonfigurowano OAuth, a w przeciwnym razie przypiętej przeglądarki Chrome węzła. Należy potwierdzić:
- Tworzenie przez API: dostępne są
oauth.clientIdioauth.refreshToken(lub odpowiadające im zmienne środowiskoweOPENCLAW_GOOGLE_MEET_*), a token odświeżania został wygenerowany po dodaniu obsługi tworzenia; starsze tokeny mogą nie miećmeetings.space.created, dlatego należy ponownie uruchomićopenclaw googlemeet auth login --json. - Awaryjne użycie przeglądarki:
defaultTransport: "chrome-node"ichromeNode.nodewskazują połączony węzeł zbrowser.proxyorazgooglemeet.chrome; profil OpenClaw w Chrome na tym węźle jest zalogowany i może otworzyćhttps://meet.google.com/new. - Ponawianie awaryjnego użycia przeglądarki: przed otwarciem nowej karty należy ponownie użyć istniejącej karty
.../newlub monitu konta Google; należy ponowić wywołanie narzędzia zamiast ręcznie otwierać kolejną kartę. - Działanie ręczne: jeśli narzędzie zwróci
manualActionRequired: true, należy użyćbrowser.nodeId,browser.targetId,browserUrlimanualActionMessage, aby pokierować operatorem; nie należy ponawiać prób w pętli. - Ekran pośredni wyboru dźwięku: jeśli Meet wyświetla „Do you want people to hear you in the meeting?”, należy pozostawić kartę otwartą. OpenClaw powinien kliknąć Use microphone lub — tylko podczas tworzenia — Continue without microphone i nadal oczekiwać na wygenerowany adres URL; jeśli nie może tego zrobić, błąd powinien wskazywać
meet-audio-choice-required, a niegoogle-login-required.
Agent dołącza, ale nie mówi
mode: "agent" dla ścieżki STT -> agent OpenClaw -> TTS, a mode: "bidi" dla bezpośredniego awaryjnego trybu głosowego czasu rzeczywistego. mode: "transcribe" celowo nie uruchamia mostu zwrotnego przesyłania mowy. Podczas debugowania wyłącznie w trybie obserwacji należy uruchomić openclaw googlemeet status --json <session-id>, gdy uczestnicy zaczną mówić, i sprawdzić captioning, transcriptLines, lastCaptionText. Jeśli inCall ma wartość true, ale transcriptLines pozostaje 0, napisy w Meet mogą być wyłączone, nikt nie odezwał się od czasu zainstalowania obserwatora, interfejs Meet mógł się zmienić albo napisy na żywo mogą być niedostępne dla danego języka spotkania lub konta.
googlemeet test-speech zawsze sprawdza ścieżkę czasu rzeczywistego i informuje, czy dla danego wywołania zaobserwowano bajty wyjściowe mostu. Jeśli speechOutputVerified ma wartość false, a speechOutputTimedOut ma wartość true, dostawca czasu rzeczywistego mógł zaakceptować wypowiedź, ale OpenClaw nie wykrył nowych bajtów wyjściowych docierających do mostu audio Chrome.
Należy również sprawdzić: klucz dostawcy czasu rzeczywistego (OPENAI_API_KEY lub GEMINI_API_KEY) jest dostępny na hoście Gateway; BlackHole 2ch jest widoczny na hoście Chrome; istnieje tam sox; mikrofon i głośnik Meet są kierowane przez wirtualną ścieżkę audio (doctor powinien pokazywać meet output routed: yes dla lokalnych połączeń Chrome w czasie rzeczywistym).
googlemeet doctor [session-id] wyświetla sesję, węzeł, stan połączenia, przyczynę konieczności ręcznego działania, połączenie z dostawcą czasu rzeczywistego, realtimeReady, aktywność wejścia i wyjścia audio, znaczniki czasu ostatniej aktywności audio, liczniki bajtów oraz adres URL przeglądarki. Należy użyć googlemeet status [session-id] --json dla nieprzetworzonego formatu JSON oraz googlemeet doctor --oauth (z dodatkiem --meeting lub --create-space), aby zweryfikować odświeżanie OAuth bez ujawniania tokenów.
Jeśli agent przekroczył limit czasu, a karta Meet jest już otwarta, należy ją sprawdzić bez otwierania kolejnej:
recover_current_tab: aktywuje ono i sprawdza istniejącą kartę Meet dla wybranego transportu (lokalne sterowanie przeglądarką dla chrome, skonfigurowany węzeł dla chrome-node) bez otwierania nowej karty ani sesji oraz zgłasza bieżącą przeszkodę (logowanie, wpuszczenie, uprawnienia, stan wyboru dźwięku). Polecenie CLI komunikuje się ze skonfigurowanym Gateway, który musi być uruchomiony; chrome-node wymaga również połączenia węzła.
Testy konfiguracji Twilio kończą się niepowodzeniem
twilio-voice-call-plugin kończy się niepowodzeniem, gdy voice-call nie jest dozwolone lub włączone: należy dodać je do plugins.allow, włączyć plugins.entries.voice-call i ponownie wczytać Gateway.
twilio-voice-call-credentials kończy się niepowodzeniem, gdy backend Twilio nie ma identyfikatora SID konta, tokenu uwierzytelniającego lub numeru wywołującego:
twilio-voice-call-webhook kończy się niepowodzeniem, gdy voice-call nie ma publicznie dostępnego Webhooka lub publicUrl wskazuje przestrzeń adresową pętli zwrotnej albo sieci prywatnej. Nie należy używać 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 ani fd00::/8 jako publicUrl; wywołania zwrotne operatora nie mogą dotrzeć do tych adresów. Należy ustawić plugins.entries.voice-call.config.publicUrl na publiczny adres URL lub skonfigurować udostępnienie przez tunel/Tailscale:
voicecall smoke służy wyłącznie do sprawdzania gotowości. Aby przeprowadzić próbę bez wykonywania połączenia dla określonego numeru:
--yes należy dodać tylko w celu świadomego wykonania rzeczywistego połączenia wychodzącego:
Połączenie Twilio się rozpoczyna, ale nigdy nie dołącza do spotkania
Należy potwierdzić, że wydarzenie Meet udostępnia dane telefonicznego dołączania, i przekazać dokładny numer telefoniczny oraz PIN lub niestandardową sekwencję DTMF:w lub przecinków w --dtmf-sequence.
Jeśli połączenie zostało utworzone, ale uczestnik telefoniczny nigdy nie pojawia się na liście Meet:
openclaw googlemeet doctor <session-id>: należy potwierdzić identyfikator delegowanego połączenia Twilio, sprawdzić, czy DTMF został dodany do kolejki i czy zażądano powitania.openclaw voicecall status --call-id <id>: należy potwierdzić, że połączenie jest nadal aktywne.openclaw voicecall tail: należy potwierdzić, że Webhooki Twilio docierają do Gateway.openclaw logs --follow: należy odszukać sekwencję Twilio Meet: Google Meet deleguje dołączenie, Voice Call zapisuje i udostępnia TwiML DTMF przed połączeniem, Voice Call udostępnia TwiML czasu rzeczywistego dla połączenia Twilio, a następnie Google Meet żąda odtworzenia powitania za pomocąvoicecall.speak.- Należy ponownie uruchomić
openclaw googlemeet setup --transport twilio; pomyślny wynik testu konfiguracji jest wymagany, ale nie dowodzi poprawności sekwencji PIN spotkania. - Należy potwierdzić, że numer telefoniczny należy do tego samego zaproszenia i regionu Meet co kod PIN.
- Należy zwiększyć
voiceCall.dtmfDelayMswzględem domyślnych 12 sekund, jeśli Meet odpowiada powoli lub transkrypcja połączenia nadal zawiera monit o PIN po wysłaniu DTMF przed połączeniem. - Jeśli uczestnik dołącza, ale powitanie nie jest słyszalne, należy sprawdzić
openclaw logs --followpod kątem żądaniavoicecall.speakpo DTMF oraz odtwarzania TTS przez strumień multimedialny albo awaryjnego mechanizmu Twilio<Say>. Jeśli transkrypcja nadal zawiera komunikat „enter the meeting PIN”, telefoniczna część połączenia nie dołączyła jeszcze do pokoju Meet, dlatego uczestnicy nie usłyszą mowy.
plugins.entries.voice-call.config.publicUrl lub skonfigurowanego tunelu. Zobacz Rozwiązywanie problemów z połączeniami głosowymi.
Uwagi
Oficjalny interfejs API multimediów Google Meet jest ukierunkowany na odbieranie, dlatego przesyłanie mowy do połączenia nadal wymaga ścieżki uczestnika. Ten plugin wyraźnie zachowuje tę granicę: Chrome obsługuje uczestnictwo przez przeglądarkę i lokalne kierowanie dźwięku; Twilio obsługuje uczestnictwo przez połączenie telefoniczne. Tryby zwrotnego przesyłania mowy w Chrome wymagająBlackHole 2ch oraz jednego z następujących elementów:
chrome.audioInputCommandorazchrome.audioOutputCommand: OpenClaw zarządza mostem i przesyła dźwięk wchrome.audioFormatmiędzy tymi poleceniami a wybranym dostawcą. Trybagentkorzysta z transkrypcji w czasie rzeczywistym oraz zwykłego TTS; trybbidikorzysta z dostawcy głosu działającego w czasie rzeczywistym. Domyślna ścieżka to PCM16 24 kHz zchrome.audioBufferBytes: 4096; G.711 mu-law 8 kHz pozostaje dostępny dla starszych par poleceń.chrome.audioBridgeCommand: zewnętrzne polecenie mostu zarządza całą lokalną ścieżką dźwięku i musi zakończyć działanie po uruchomieniu lub zweryfikowaniu swojego demona. Obowiązuje tylko dlabidi, ponieważ trybagentwymaga bezpośredniego dostępu do pary poleceń na potrzeby TTS.
chrome.bargeInInputCommand może nasłuchiwać z oddzielnego lokalnego mikrofonu i wyciszać odtwarzanie odpowiedzi asystenta, gdy człowiek zaczyna mówić, dzięki czemu mowa człowieka ma pierwszeństwo przed dźwiękiem asystenta, nawet gdy współdzielone wejście pętli zwrotnej BlackHole jest tymczasowo wyciszone podczas odtwarzania odpowiedzi asystenta. Podobnie jak chrome.audioInputCommand/chrome.audioOutputCommand, jest to lokalne polecenie konfigurowane przez operatora: należy używać jawnej, zaufanej ścieżki polecenia lub listy argumentów, nigdy skryptu z niezaufanej lokalizacji.
Aby uzyskać czysty dźwięk dupleksowy, należy kierować wyjście Meet i mikrofon Meet przez oddzielne urządzenia wirtualne lub graf urządzeń wirtualnych w stylu Loopback; pojedyncze współdzielone urządzenie BlackHole może powodować przesyłanie echa innych uczestników z powrotem do połączenia.
googlemeet speak uruchamia aktywny most dźwiękowy odpowiedzi głosowej dla sesji Chrome; googlemeet leave go zatrzymuje (a w przypadku sesji Twilio delegowanych przez Voice Call rozłącza połączenie bazowe). Użyj googlemeet end-active-conference, aby zamknąć również aktywną konferencję Google Meet dla przestrzeni zarządzanej przez API.