Plugins
Plugin Google Meet
Obsługa uczestnika Google Meet dla OpenClaw — Plugin jest z założenia jawny:
- Dołącza tylko do jawnego adresu URL
https://meet.google.com/.... - Może utworzyć nową przestrzeń Meet przez Google Meet API, a następnie dołączyć do zwróconego adresu URL.
agentto domyślny tryb odpowiedzi głosowej: transkrypcja w czasie rzeczywistym nasłuchuje, skonfigurowany agent OpenClaw odpowiada, a standardowe OpenClaw TTS mówi w Meet.bidipozostaje dostępny jako zapasowy tryb bezpośredniego modelu głosowego czasu rzeczywistego.- Agenci wybierają sposób dołączenia za pomocą
mode: użyjagentdo nasłuchiwania i odpowiedzi głosowej na żywo,bidijako bezpośredniej zapasowej obsługi głosu w czasie rzeczywistym albotranscribedo dołączenia/sterowania przeglądarką bez mostka odpowiedzi głosowej. - Uwierzytelnianie zaczyna się jako osobisty Google OAuth albo już zalogowany profil Chrome.
- Nie ma automatycznego komunikatu o zgodzie.
- Domyślnym backendem audio Chrome jest
BlackHole 2ch. - Chrome może działać lokalnie albo na sparowanym hoście Node.
- Twilio przyjmuje numer do wdzwonienia oraz opcjonalny PIN lub sekwencję DTMF; nie może bezpośrednio wybrać adresu URL Meet.
- Polecenie CLI to
googlemeet;meetjest zarezerwowane dla szerszych przepływów telekonferencji agentów.
Szybki start
Zainstaluj lokalne zależności audio i skonfiguruj dostawcę transkrypcji w czasie rzeczywistym
oraz standardowe OpenClaw TTS. OpenAI jest domyślnym dostawcą transkrypcji;
Google Gemini Live działa też jako oddzielny zapasowy tryb głosowy bidi z
realtime.voiceProvider: "google":
brew install blackhole-2ch sox
export OPENAI_API_KEY=sk-...
# only needed when realtime.voiceProvider is "google" for bidi mode
export GEMINI_API_KEY=...
blackhole-2ch instaluje wirtualne urządzenie audio BlackHole 2ch. Instalator
Homebrew wymaga ponownego uruchomienia, zanim macOS udostępni urządzenie:
sudo reboot
Po ponownym uruchomieniu zweryfikuj oba elementy:
system_profiler SPAudioDataType | grep -i BlackHole
command -v sox
Włącz Plugin:
{
plugins: {
entries: {
"google-meet": {
enabled: true,
config: {},
},
},
},
}
Sprawdź konfigurację:
openclaw googlemeet setup
Dane wyjściowe konfiguracji są przeznaczone do odczytu przez agenta i uwzględniają tryb. Raportują profil Chrome,
przypięcie Node oraz, dla dołączeń Chrome w czasie rzeczywistym, mostek audio
BlackHole/SoX i opóźnione kontrole wprowadzenia czasu rzeczywistego. Dla dołączeń tylko obserwacyjnych sprawdź ten sam
transport za pomocą --mode transcribe; ten tryb pomija wymagania wstępne audio czasu rzeczywistego,
ponieważ nie nasłuchuje ani nie mówi przez mostek:
openclaw googlemeet setup --transport chrome-node --mode transcribe
Gdy delegowanie Twilio jest skonfigurowane, konfiguracja raportuje też, czy
Plugin voice-call, poświadczenia Twilio i publiczna ekspozycja Webhook są gotowe.
Traktuj każdą kontrolę ok: false jako blokadę dla sprawdzanego transportu i trybu
przed poproszeniem agenta o dołączenie. Użyj openclaw googlemeet setup --json dla
skryptów lub danych wyjściowych czytelnych maszynowo. Użyj --transport chrome,
--transport chrome-node albo --transport twilio, aby wstępnie sprawdzić konkretny
transport, zanim agent go spróbuje.
Dla Twilio zawsze sprawdzaj transport jawnie, gdy domyślnym transportem jest Chrome:
openclaw googlemeet setup --transport twilio
To wykrywa brakujące połączenia voice-call, poświadczenia Twilio lub nieosiągalną
ekspozycję Webhook, zanim agent spróbuje wybrać numer spotkania.
Dołącz do spotkania:
openclaw googlemeet join https://meet.google.com/abc-defg-hij
Albo pozwól agentowi dołączyć przez narzędzie google_meet:
{
"action": "join",
"url": "https://meet.google.com/abc-defg-hij",
"transport": "chrome-node",
"mode": "agent"
}
Narzędzie google_meet dostępne dla agentów pozostaje dostępne na hostach innych niż macOS dla
artefaktów, kalendarza, konfiguracji, transkrypcji, Twilio i przepływów chrome-node. Lokalne
akcje odpowiedzi głosowej Chrome są tam blokowane, ponieważ dołączona ścieżka audio Chrome
obecnie zależy od macOS BlackHole 2ch. W systemie Linux użyj mode: "transcribe",
wdzwonienia Twilio albo hosta macOS chrome-node do uczestnictwa Chrome z odpowiedzią głosową.
Utwórz nowe spotkanie i dołącz do niego:
openclaw googlemeet create --transport chrome-node --mode agent
Dla pokoi utworzonych przez API użyj Google Meet SpaceConfig.accessType, gdy chcesz,
aby polityka wejścia bez pukania była jawna zamiast dziedziczona z domyślnych ustawień konta Google:
openclaw googlemeet create --access-type OPEN --transport chrome-node --mode agent
OPEN pozwala każdemu z adresem URL Meet dołączyć bez pukania. TRUSTED pozwala
zaufanym użytkownikom organizacji gospodarza, zaproszonym użytkownikom zewnętrznym i użytkownikom
wdzwaniającym się dołączyć bez pukania. RESTRICTED ogranicza wejście bez pukania do zaproszonych. Te
ustawienia dotyczą tylko oficjalnej ścieżki tworzenia Google Meet API, więc poświadczenia
OAuth muszą być skonfigurowane.
Jeśli uwierzytelniłeś Google Meet, zanim ta opcja była dostępna, uruchom ponownie
openclaw googlemeet auth login --json po dodaniu zakresu
meetings.space.settings do ekranu zgody Google OAuth.
Utwórz tylko adres URL bez dołączania:
openclaw googlemeet create --no-join
googlemeet create ma dwie ścieżki:
- Tworzenie API: używane, gdy skonfigurowane są poświadczenia Google Meet OAuth. To najbardziej deterministyczna ścieżka i nie zależy od stanu interfejsu przeglądarki.
- Zapasowa ścieżka przeglądarki: używana, gdy brakuje poświadczeń OAuth. OpenClaw używa
przypiętego Node Chrome, otwiera
https://meet.google.com/new, czeka, aż Google przekieruje do rzeczywistego adresu URL z kodem spotkania, a następnie zwraca ten adres URL. Ta ścieżka wymaga, aby profil OpenClaw Chrome na Node był już zalogowany w Google. Automatyzacja przeglądarki obsługuje własny monit Meet o mikrofon przy pierwszym uruchomieniu; ten monit nie jest traktowany jako błąd logowania Google. Przepływy dołączania i tworzenia próbują też ponownie użyć istniejącej karty Meet przed otwarciem nowej. Dopasowanie ignoruje nieszkodliwe ciągi zapytania URL, takie jakauthuser, więc ponowienie przez agenta powinno ustawić fokus na już otwartym spotkaniu zamiast tworzyć drugą kartę Chrome.
Dane wyjściowe polecenia/narzędzia zawierają pole source (api albo browser), aby agenci
mogli wyjaśnić, która ścieżka została użyta. create domyślnie dołącza do nowego spotkania i
zwraca joined: true oraz sesję dołączenia. Aby tylko utworzyć adres URL, użyj
create --no-join w CLI albo przekaż "join": false do narzędzia.
Albo powiedz agentowi: „Utwórz Google Meet, dołącz do niego w trybie odpowiedzi głosowej agenta
i wyślij mi link”. Agent powinien wywołać google_meet z
action: "create", a następnie udostępnić zwrócone meetingUri.
{
"action": "create",
"transport": "chrome-node",
"mode": "agent"
}
Dla dołączenia tylko obserwacyjnego/sterowania przeglądarką ustaw "mode": "transcribe". To nie
uruchamia dupleksowego mostka głosowego czasu rzeczywistego, nie wymaga BlackHole ani SoX
i nie będzie odpowiadać głosowo w spotkaniu. Dołączenia Chrome w tym trybie także unikają
przyznawania uprawnień OpenClaw do mikrofonu/kamery i unikają ścieżki Meet Użyj
mikrofonu. Jeśli Meet wyświetli ekran wyboru audio, automatyzacja próbuje
ścieżki bez mikrofonu, a w przeciwnym razie raportuje ręczne działanie zamiast otwierać
lokalny mikrofon. W trybie transkrypcji zarządzane transporty Chrome instalują też
obserwator napisów Meet na zasadzie najlepszej próby. googlemeet status --json i
googlemeet doctor pokazują captioning, captionsEnabledAttempted,
transcriptLines, lastCaptionAt, lastCaptionSpeaker, lastCaptionText
oraz krótki ogon recentTranscript, aby operatorzy mogli stwierdzić, czy przeglądarka
dołączyła do rozmowy i czy napisy Meet produkują tekst.
Użyj openclaw googlemeet test-listen <meet-url> --transport chrome-node, gdy
potrzebujesz sondy tak/nie: dołącza w trybie transkrypcji, czeka na świeże napisy lub
ruch transkryptu i zwraca listenVerified, listenTimedOut, pola działań ręcznych
oraz najnowszy stan napisów.
Podczas sesji czasu rzeczywistego status google_meet zawiera stan przeglądarki i mostka audio,
taki jak inCall, manualActionRequired, providerConnected,
realtimeReady, audioInputActive, audioOutputActive, ostatnie znaczniki czasu wejścia/wyjścia,
liczniki bajtów i stan zamknięcia mostka. Jeśli pojawi się bezpieczny monit strony Meet,
automatyzacja przeglądarki obsługuje go, gdy może. Logowanie, dopuszczenie przez gospodarza i
monity uprawnień przeglądarki/systemu OS są raportowane jako działanie ręczne z powodem i
komunikatem do przekazania przez agenta. Zarządzane sesje Chrome emitują wprowadzenie lub
frazę testową dopiero po tym, jak stan przeglądarki zgłosi inCall: true; w przeciwnym razie status raportuje
speechReady: false, a próba mówienia jest blokowana zamiast udawać, że
agent mówił do spotkania.
Lokalne dołączenia Chrome używają zalogowanego profilu przeglądarki OpenClaw. Tryb czasu rzeczywistego
wymaga BlackHole 2ch dla ścieżki mikrofonu/głośnika używanej przez OpenClaw. Aby uzyskać
czyste audio dupleksowe, użyj oddzielnych urządzeń wirtualnych albo grafu w stylu Loopback; pojedyncze
urządzenie BlackHole wystarczy do pierwszego testu dymnego, ale może powodować echo.
Lokalny Gateway + Parallels Chrome
Nie potrzebujesz pełnego OpenClaw Gateway ani klucza API modelu wewnątrz maszyny wirtualnej macOS tylko po to, aby VM zarządzała Chrome. Uruchom Gateway i agenta lokalnie, a następnie uruchom host Node w VM. Włącz dołączony Plugin na VM jeden raz, aby Node ogłaszał polecenie Chrome:
Co działa gdzie:
- Host Gateway: OpenClaw Gateway, przestrzeń robocza agenta, klucze modelu/API, dostawca czasu rzeczywistego i konfiguracja Plugin Google Meet.
- Maszyna wirtualna Parallels macOS: OpenClaw CLI/host Node, Google Chrome, SoX, BlackHole 2ch oraz profil Chrome zalogowany w Google.
- Niepotrzebne w VM: usługa Gateway, konfiguracja agenta, klucz OpenAI/GPT ani konfiguracja dostawcy modelu.
Zainstaluj zależności VM:
brew install blackhole-2ch sox
Uruchom ponownie VM po instalacji BlackHole, aby macOS udostępnił BlackHole 2ch:
sudo reboot
Po ponownym uruchomieniu zweryfikuj, czy VM widzi urządzenie audio i polecenia SoX:
system_profiler SPAudioDataType | grep -i BlackHole
command -v sox
Zainstaluj lub zaktualizuj OpenClaw w VM, a następnie włącz tam dołączony Plugin:
openclaw plugins enable google-meet
Uruchom host Node w VM:
openclaw node run --host <gateway-host> --port 18789 --display-name parallels-macos
Jeśli <gateway-host> jest adresem IP LAN i nie używasz TLS, Node odmówi
połączenia WebSocket zwykłym tekstem, chyba że jawnie zgodzisz się na tę zaufaną sieć prywatną:
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macos
Użyj tej samej zmiennej środowiskowej podczas instalowania Node jako LaunchAgent:
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node install --host <gateway-lan-ip> --port 18789 --display-name parallels-macos --force
openclaw node restart
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 jest środowiskiem procesu, a nie ustawieniem
openclaw.json. openclaw node install zapisuje je w środowisku LaunchAgent,
gdy jest obecne w poleceniu instalacji.
Zatwierdź Node z hosta Gateway:
openclaw devices list
openclaw devices approve <requestId>
Potwierdź, że Gateway widzi Node i że ogłasza zarówno googlemeet.chrome,
jak i możliwość przeglądarki/browser.proxy:
openclaw nodes status
Skieruj Meet przez ten Node na hoście Gateway:
{
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",
},
},
},
},
},
}
Teraz dołącz normalnie z hosta Gateway:
openclaw googlemeet join https://meet.google.com/abc-defg-hij
albo poproś agenta, aby użył narzędzia google_meet z transport: "chrome-node".
Dla jedno-poleceniowego testu dymnego, który tworzy lub ponownie używa sesji, wypowiada znaną frazę i drukuje stan sesji:
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij
Podczas dołączania w czasie rzeczywistym automatyzacja przeglądarki OpenClaw wypełnia nazwę gościa, klika Join/Ask to join i akceptuje pierwszy wybór Meet „Use microphone”, gdy pojawi się ten monit. Podczas dołączania tylko w trybie obserwacji albo tworzenia spotkania wyłącznie w przeglądarce przechodzi przez ten sam monit bez mikrofonu, gdy taka opcja jest dostępna. Jeśli profil przeglądarki nie jest zalogowany, Meet czeka na dopuszczenie przez hosta, Chrome potrzebuje uprawnień do mikrofonu/kamery dla dołączenia w czasie rzeczywistym albo Meet utknął na monicie, którego automatyzacja nie mogła rozwiązać, wynik join/test-speech zgłasza manualActionRequired: true z manualActionReason i manualActionMessage. Agenci powinni przestać ponawiać dołączenie, zgłosić dokładnie ten komunikat wraz z bieżącymi browserUrl/browserTitle i ponowić próbę dopiero po wykonaniu ręcznej akcji w przeglądarce.
Jeśli chromeNode.node jest pominięte, OpenClaw wybiera automatycznie tylko wtedy, gdy dokładnie jeden połączony Node ogłasza zarówno googlemeet.chrome, jak i sterowanie przeglądarką. Jeśli połączonych jest kilka zdolnych Node, ustaw chromeNode.node na identyfikator Node, nazwę wyświetlaną albo zdalny adres IP.
Typowe kontrole awarii:
Configured Google Meet node ... is not usable: offline: przypięty Node jest znany Gateway, ale niedostępny. Agenci powinni traktować ten Node jako stan diagnostyczny, a nie jako użyteczny host Chrome, i zgłosić blokadę konfiguracji zamiast przechodzić awaryjnie na inny transport, chyba że użytkownik o to poprosił.No connected Google Meet-capable node: uruchomopenclaw node runw VM, zatwierdź parowanie i upewnij się, żeopenclaw plugins enable google-meetorazopenclaw plugins enable browserzostały uruchomione w VM. Potwierdź też, że host Gateway zezwala na oba polecenia Node przezgateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"].BlackHole 2ch audio device not found: zainstalujblackhole-2chna sprawdzanym hoście i uruchom ponownie przed użyciem lokalnego dźwięku Chrome.BlackHole 2ch audio device not found on the node: zainstalujblackhole-2chw VM i uruchom VM ponownie.- Chrome otwiera się, ale nie może dołączyć: zaloguj się w profilu przeglądarki wewnątrz VM albo pozostaw ustawione
chrome.guestNamedla dołączania jako gość. Automatyczne dołączanie jako gość używa automatyzacji przeglądarki OpenClaw przez proxy przeglądarki Node; upewnij się, że konfiguracja przeglądarki Node wskazuje profil, którego chcesz użyć, na przykładbrowser.defaultProfile: "user"albo nazwany profil istniejącej sesji. - Zduplikowane karty Meet: pozostaw włączone
chrome.reuseExistingTab: true. OpenClaw aktywuje istniejącą kartę dla tego samego URL Meet przed otwarciem nowej, a tworzenie spotkania w przeglądarce ponownie używa trwającej kartyhttps://meet.google.com/newalbo karty monitu konta Google przed otwarciem kolejnej. - Brak dźwięku: w Meet skieruj mikrofon/głośnik przez ścieżkę wirtualnego urządzenia audio używaną przez OpenClaw; użyj oddzielnych urządzeń wirtualnych albo routingu w stylu Loopback dla czystego dźwięku dwukierunkowego.
Uwagi instalacyjne
Domyślne odtwarzanie zwrotne Chrome używa dwóch zewnętrznych narzędzi:
sox: narzędzie audio wiersza poleceń. Plugin używa jawnych poleceń urządzeń CoreAudio dla domyślnego mostka audio PCM16 24 kHz.blackhole-2ch: wirtualny sterownik audio macOS. Tworzy urządzenie audioBlackHole 2ch, przez które Chrome/Meet mogą routować dźwięk.
OpenClaw nie dołącza ani nie redystrybuuje żadnego z tych pakietów. Dokumentacja prosi użytkowników o instalowanie ich jako zależności hosta przez Homebrew. SoX jest licencjonowany jako LGPL-2.0-only AND GPL-2.0-only; BlackHole jest objęty GPL-3.0. Jeśli budujesz instalator albo appliance, który dołącza BlackHole z OpenClaw, przejrzyj warunki licencyjne upstream BlackHole albo uzyskaj osobną licencję od Existential Audio.
Transporty
Chrome
Transport Chrome otwiera URL Meet przez sterowanie przeglądarką OpenClaw i dołącza jako zalogowany profil przeglądarki OpenClaw. Na macOS Plugin sprawdza obecność BlackHole 2ch przed uruchomieniem. Jeśli skonfigurowano, uruchamia też polecenie stanu mostka audio i polecenie startowe przed otwarciem Chrome. Użyj chrome, gdy Chrome/audio działają na hoście Gateway; użyj chrome-node, gdy Chrome/audio działają na sparowanym Node, takim jak VM macOS w Parallels. Dla lokalnego Chrome wybierz profil przez browser.defaultProfile; chrome.browserProfile jest przekazywane hostom chrome-node.
openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome
openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome-node
Przekieruj dźwięk mikrofonu i głośnika Chrome przez lokalny mostek audio OpenClaw. Jeśli BlackHole 2ch nie jest zainstalowany, dołączenie kończy się błędem konfiguracji zamiast cichego dołączenia bez ścieżki audio.
Twilio
Transport Twilio to ścisły plan wybierania delegowany do Plugin Voice Call. Nie parsuje stron Meet w poszukiwaniu numerów telefonów.
Użyj tego, gdy udział przez Chrome jest niedostępny albo chcesz mieć awaryjne telefoniczne połączenie wdzwaniane. Google Meet musi udostępniać numer telefonu do wdzwaniania i PIN dla spotkania; OpenClaw nie odkrywa ich ze strony Meet.
Włącz Plugin Voice Call na hoście Gateway, nie na Node Chrome:
{
plugins: {
allow: ["google-meet", "voice-call", "google"],
entries: {
"google-meet": {
enabled: true,
config: {
defaultTransport: "chrome-node",
// or set "twilio" if Twilio should be the default
},
},
"voice-call": {
enabled: true,
config: {
provider: "twilio",
inboundPolicy: "allowlist",
realtime: {
enabled: true,
provider: "google",
instructions: "Join this Google Meet as an OpenClaw agent. Be brief.",
toolPolicy: "safe-read-only",
providers: {
google: {
silenceDurationMs: 500,
startSensitivity: "high",
},
},
},
},
},
google: {
enabled: true,
},
},
},
}
Podaj dane uwierzytelniające Twilio przez środowisko albo konfigurację. Środowisko utrzymuje sekrety poza openclaw.json:
export TWILIO_ACCOUNT_SID=AC...
export TWILIO_AUTH_TOKEN=...
export TWILIO_FROM_NUMBER=+15550001234
export GEMINI_API_KEY=...
Zamiast tego użyj realtime.provider: "openai" z Plugin dostawcy OpenAI i OPENAI_API_KEY, jeśli to jest Twój dostawca głosu w czasie rzeczywistym.
Uruchom ponownie albo przeładuj Gateway po włączeniu voice-call; zmiany konfiguracji Plugin nie pojawiają się w już działającym procesie Gateway, dopóki nie zostanie przeładowany.
Następnie zweryfikuj:
openclaw config validate
openclaw plugins list | grep -E 'google-meet|voice-call'
openclaw googlemeet setup
Gdy delegacja Twilio jest podłączona, googlemeet setup zawiera udane kontrole twilio-voice-call-plugin, twilio-voice-call-credentials i twilio-voice-call-webhook.
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
--transport twilio \
--dial-in-number +15551234567 \
--pin 123456
Użyj --dtmf-sequence, gdy spotkanie wymaga niestandardowej sekwencji:
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
--transport twilio \
--dial-in-number +15551234567 \
--dtmf-sequence ww123456#
OAuth i preflight
OAuth jest opcjonalny do tworzenia linku Meet, ponieważ googlemeet create może przejść awaryjnie na automatyzację przeglądarki. Skonfiguruj OAuth, gdy chcesz oficjalnego tworzenia przez API, rozwiązywania przestrzeni albo kontroli preflight Meet Media API.
Dostęp do Google Meet API używa OAuth użytkownika: utwórz klienta OAuth Google Cloud, zażądaj wymaganych zakresów, autoryzuj konto Google, a następnie zapisz wynikowy token odświeżania w konfiguracji Plugin Google Meet albo podaj zmienne środowiskowe OPENCLAW_GOOGLE_MEET_*.
OAuth nie zastępuje ścieżki dołączania Chrome. Transporty Chrome i Chrome-node nadal dołączają przez zalogowany profil Chrome, BlackHole/SoX oraz połączony Node, gdy używasz udziału przez przeglądarkę. OAuth służy tylko do oficjalnej ścieżki Google Meet API: tworzenia przestrzeni spotkań, rozwiązywania przestrzeni i uruchamiania kontroli preflight Meet Media API.
Utwórz dane uwierzytelniające Google
W Google Cloud Console:
-
Utwórz albo wybierz projekt Google Cloud.
-
Włącz Google Meet REST API dla tego projektu.
-
Skonfiguruj ekran zgody OAuth.
- Internal jest najprostsze dla organizacji Google Workspace.
- External działa dla konfiguracji osobistych/testowych; gdy aplikacja jest w fazie Testing, dodaj każde konto Google, które będzie autoryzować aplikację, jako użytkownika testowego.
-
Dodaj zakresy wymagane przez OpenClaw:
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.readonly
-
Utwórz identyfikator klienta OAuth.
-
Typ aplikacji: Web application.
-
Autoryzowany URI przekierowania:
http://localhost:8085/oauth2callback
-
-
Skopiuj identyfikator klienta i sekret klienta.
meetings.space.created jest wymagane przez Google Meet spaces.create. meetings.space.readonly pozwala OpenClaw rozwiązywać URL/kody Meet do przestrzeni. meetings.space.settings pozwala OpenClaw przekazywać ustawienia SpaceConfig, takie jak accessType, podczas tworzenia pokoju przez API. meetings.conference.media.readonly służy do preflight Meet Media API i pracy z mediami; Google może wymagać rejestracji w Developer Preview do rzeczywistego użycia Media API. Jeśli potrzebujesz tylko dołączeń Chrome opartych na przeglądarce, całkowicie pomiń OAuth.
Wygeneruj token odświeżania
Skonfiguruj oauth.clientId i opcjonalnie oauth.clientSecret albo przekaż je jako zmienne środowiskowe, a następnie uruchom:
openclaw googlemeet auth login --json
Polecenie wypisuje blok konfiguracji oauth z tokenem odświeżania. Używa PKCE, wywołania zwrotnego localhost pod http://localhost:8085/oauth2callback oraz ręcznego przepływu kopiuj/wklej z --manual.
Przykłady:
OPENCLAW_GOOGLE_MEET_CLIENT_ID="your-client-id" \
OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \
openclaw googlemeet auth login --json
Użyj trybu ręcznego, gdy przeglądarka nie może dotrzeć do lokalnego wywołania zwrotnego:
OPENCLAW_GOOGLE_MEET_CLIENT_ID="your-client-id" \
OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \
openclaw googlemeet auth login --json --manual
Wyjście JSON zawiera:
{
"oauth": {
"clientId": "your-client-id",
"clientSecret": "your-client-secret",
"refreshToken": "refresh-token",
"accessToken": "access-token",
"expiresAt": 1770000000000
},
"scope": "..."
}
Zapisz obiekt oauth w konfiguracji Plugin Google Meet:
{
plugins: {
entries: {
"google-meet": {
enabled: true,
config: {
oauth: {
clientId: "your-client-id",
clientSecret: "your-client-secret",
refreshToken: "refresh-token",
},
},
},
},
},
}
Preferuj zmienne środowiskowe, gdy nie chcesz tokena odświeżania w konfiguracji. Jeśli obecne są zarówno wartości konfiguracji, jak i środowiska, Plugin najpierw rozwiązuje konfigurację, a potem awaryjnie używa środowiska.
Zgoda OAuth obejmuje tworzenie przestrzeni Meet, dostęp odczytu do przestrzeni Meet oraz dostęp odczytu do multimediów konferencji Meet. Jeśli uwierzytelnienie wykonano przed istnieniem obsługi tworzenia spotkań, uruchom ponownie openclaw googlemeet auth login --json, aby token odświeżania miał zakres meetings.space.created.
Zweryfikuj OAuth za pomocą doctor
Uruchom doctor OAuth, gdy chcesz szybkiej, bezsekretowej kontroli stanu:
openclaw googlemeet doctor --oauth --json
Nie ładuje to runtime Chrome ani nie wymaga połączonego Node Chrome. Sprawdza, czy istnieje konfiguracja OAuth oraz czy token odświeżania może wygenerować token dostępu. Raport JSON zawiera tylko pola statusu, takie jak ok, configured, tokenSource, expiresAt i komunikaty kontroli; nie wypisuje tokena dostępu, tokena odświeżania ani sekretu klienta.
Typowe wyniki:
| Sprawdzenie | Znaczenie |
|---|---|
oauth-config |
Obecne jest oauth.clientId oraz oauth.refreshToken albo token dostępu z pamięci podręcznej. |
oauth-token |
Token dostępu z pamięci podręcznej jest nadal ważny albo token odświeżania wystawił nowy token dostępu. |
meet-spaces-get |
Opcjonalne sprawdzenie --meeting rozwiązało istniejącą przestrzeń Meet. |
meet-spaces-create |
Opcjonalne sprawdzenie --create-space utworzyło nową przestrzeń Meet. |
Aby potwierdzić także włączenie interfejsu Google Meet API i zakres spaces.create, uruchom
sprawdzenie tworzenia wywołujące skutek uboczny:
openclaw googlemeet doctor --oauth --create-space --json
openclaw googlemeet create --no-join --json
--create-space tworzy jednorazowy adres URL Meet. Użyj go, gdy musisz potwierdzić,
że projekt Google Cloud ma włączone Meet API oraz że autoryzowane konto ma zakres
meetings.space.created.
Aby potwierdzić dostęp do odczytu dla istniejącej przestrzeni spotkania:
openclaw googlemeet doctor --oauth --meeting https://meet.google.com/abc-defg-hij --json
openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij
doctor --oauth --meeting i resolve-space potwierdzają dostęp do odczytu istniejącej
przestrzeni, do której autoryzowane konto Google ma dostęp. 403 z tych sprawdzeń
zwykle oznacza, że interfejs Google Meet REST API jest wyłączony, zaakceptowanemu tokenowi odświeżania
brakuje wymaganego zakresu albo konto Google nie ma dostępu do tej przestrzeni Meet.
Błąd tokenu odświeżania oznacza, że należy ponownie uruchomić openclaw googlemeet auth login --json i zapisać nowy blok oauth.
Dla awaryjnego trybu przeglądarkowego nie są potrzebne żadne poświadczenia OAuth. W tym trybie uwierzytelnianie Google pochodzi z zalogowanego profilu Chrome na wybranym węźle, a nie z konfiguracji OpenClaw.
Te zmienne środowiskowe są akceptowane jako wartości awaryjne:
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ąż adres URL Meet, kod albo spaces/{id} przez spaces.get:
openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij
Uruchom sprawdzenie wstępne przed pracą z multimediami:
openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij
Wyświetl artefakty spotkania i obecność po utworzeniu rekordów konferencji przez Meet:
openclaw googlemeet artifacts --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet attendance --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet export --meeting https://meet.google.com/abc-defg-hij --output ./meet-export
Z --meeting polecenia artifacts i attendance domyślnie używają najnowszego rekordu konferencji.
Przekaż --all-conference-records, gdy chcesz uzyskać każdy zachowany rekord
dla tego spotkania.
Wyszukiwanie w kalendarzu może rozwiązać adres URL spotkania z Google Calendar przed odczytem artefaktów Meet:
openclaw googlemeet latest --today
openclaw googlemeet calendar-events --today --json
openclaw googlemeet artifacts --event "Weekly sync"
openclaw googlemeet attendance --today --format csv --output attendance.csv
--today przeszukuje dzisiejszy kalendarz primary pod kątem wydarzenia Calendar z linkiem
Google Meet. Użyj --event <query>, aby wyszukać pasujący tekst wydarzenia, oraz
--calendar <id> dla kalendarza innego niż podstawowy. Wyszukiwanie w kalendarzu wymaga świeżego
logowania OAuth obejmującego zakres tylko do odczytu wydarzeń Calendar.
calendar-events pokazuje podgląd pasujących wydarzeń Meet i oznacza wydarzenie, które
wybierze latest, artifacts, attendance albo export.
Jeśli znasz już identyfikator rekordu konferencji, odwołaj się do niego bezpośrednio:
openclaw googlemeet latest --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 --json
openclaw googlemeet attendance --conference-record conferenceRecords/abc123 --json
Zakończ aktywną konferencję dla przestrzeni utworzonej przez API, gdy chcesz zamknąć pokój po rozmowie:
openclaw googlemeet end-active-conference https://meet.google.com/abc-defg-hij
Wywołuje to spaces.endActiveConference w Google Meet i wymaga OAuth z zakresem
meetings.space.created dla przestrzeni, którą autoryzowane konto może zarządzać.
OpenClaw akceptuje adres URL Meet, kod spotkania albo dane wejściowe spaces/{id} i rozwiązuje je
do zasobu przestrzeni API przed zakończeniem aktywnej konferencji.
Jest to osobne od googlemeet leave: leave zatrzymuje lokalny/sesyjny udział
OpenClaw, natomiast end-active-conference prosi Google Meet o zakończenie aktywnej
konferencji dla tej przestrzeni.
Zapisz czytelny raport:
openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 \
--format markdown --output meet-artifacts.md
openclaw googlemeet attendance --conference-record conferenceRecords/abc123 \
--format markdown --output meet-attendance.md
openclaw googlemeet attendance --conference-record conferenceRecords/abc123 \
--format csv --output meet-attendance.csv
openclaw googlemeet export --conference-record conferenceRecords/abc123 \
--include-doc-bodies --zip --output meet-export
openclaw googlemeet export --conference-record conferenceRecords/abc123 \
--include-doc-bodies --dry-run
artifacts zwraca metadane rekordu konferencji oraz metadane zasobów uczestników, nagrań,
transkrypcji, ustrukturyzowanych wpisów transkrypcji i inteligentnych notatek, gdy
Google udostępnia je dla spotkania. Użyj --no-transcript-entries, aby pominąć
wyszukiwanie wpisów dla dużych spotkań. attendance rozwija uczestników do
wierszy sesji uczestników z czasami pierwszego/ostatniego zauważenia, całkowitym czasem trwania sesji,
flagami spóźnienia/wcześniejszego wyjścia oraz zduplikowanymi zasobami uczestników scalonymi według zalogowanego
użytkownika albo wyświetlanej nazwy. Przekaż --no-merge-duplicates, aby pozostawić surowe zasoby uczestników
oddzielnie, --late-after-minutes, aby dostroić wykrywanie spóźnień, oraz
--early-before-minutes, aby dostroić wykrywanie wcześniejszego wyjścia.
export zapisuje folder zawierający summary.md, attendance.csv,
transcript.md, artifacts.json, attendance.json i manifest.json.
manifest.json zapisuje wybrane dane wejściowe, opcje eksportu, rekordy konferencji,
pliki wyjściowe, liczby, źródło tokenu, wydarzenie Calendar, gdy zostało użyte, oraz wszelkie
ostrzeżenia o częściowym pobraniu. Przekaż --zip, aby zapisać także przenośne archiwum obok
folderu. Przekaż --include-doc-bodies, aby wyeksportować połączony tekst transkrypcji i
inteligentnych notatek Google Docs przez Google Drive files.export; wymaga to
świeżego logowania OAuth obejmującego zakres tylko do odczytu Drive Meet. Bez
--include-doc-bodies eksport obejmuje tylko metadane Meet i ustrukturyzowane wpisy transkrypcji.
Jeśli Google zwróci częściowy błąd artefaktu, taki jak błąd listy inteligentnych notatek,
wpisu transkrypcji albo treści dokumentu Drive, podsumowanie i
manifest zachowują ostrzeżenie zamiast przerywać cały eksport.
Użyj --dry-run, aby pobrać te same dane artefaktów/obecności i wypisać
JSON manifestu bez tworzenia folderu ani pliku ZIP. Jest to przydatne przed zapisaniem
dużego eksportu albo gdy agent potrzebuje tylko liczników, wybranych rekordów i
ostrzeżeń.
Agenci mogą także utworzyć ten sam pakiet przez narzędzie google_meet:
{
"action": "export",
"conferenceRecord": "conferenceRecords/abc123",
"includeDocumentBodies": true,
"outputDir": "meet-export",
"zip": true
}
Ustaw "dryRun": true, aby zwrócić tylko manifest eksportu i pominąć zapisywanie plików.
Agenci mogą także utworzyć pokój oparty na API z jawną polityką dostępu:
{
"action": "create",
"transport": "chrome-node",
"mode": "agent",
"accessType": "OPEN"
}
Mogą też zakończyć aktywną konferencję dla znanego pokoju:
{
"action": "end_active_conference",
"meeting": "https://meet.google.com/abc-defg-hij"
}
Do walidacji najpierw nasłuchującej agenci powinni użyć test_listen, zanim stwierdzą, że
spotkanie jest użyteczne:
{
"action": "test_listen",
"url": "https://meet.google.com/abc-defg-hij",
"transport": "chrome-node",
"timeoutMs": 30000
}
Uruchom strzeżony test smoke na żywo na rzeczywistym zachowanym spotkaniu:
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.ts
Uruchom przeglądarkową sondę na żywo najpierw nasłuchującą na spotkaniu, na którym ktoś będzie mówić z dostępnymi napisami Meet:
openclaw googlemeet setup --transport chrome-node --mode transcribe
openclaw googlemeet test-listen https://meet.google.com/abc-defg-hij --transport chrome-node --timeout-ms 30000
Środowisko testu smoke na żywo:
OPENCLAW_LIVE_TEST=1włącza strzeżone testy na żywo.OPENCLAW_GOOGLE_MEET_LIVE_MEETINGwskazuje zachowany adres URL Meet, kod albospaces/{id}.OPENCLAW_GOOGLE_MEET_CLIENT_IDlubGOOGLE_MEET_CLIENT_IDzapewnia identyfikator klienta OAuth.OPENCLAW_GOOGLE_MEET_REFRESH_TOKENlubGOOGLE_MEET_REFRESH_TOKENzapewnia token odświeżania.- Opcjonalnie:
OPENCLAW_GOOGLE_MEET_CLIENT_SECRET,OPENCLAW_GOOGLE_MEET_ACCESS_TOKENiOPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_ATużywają tych samych nazw awaryjnych bez prefiksuOPENCLAW_.
Podstawowy test smoke artefaktów/obecności na żywo wymaga
https://www.googleapis.com/auth/meetings.space.readonly i
https://www.googleapis.com/auth/meetings.conference.media.readonly. Wyszukiwanie w kalendarzu
wymaga https://www.googleapis.com/auth/calendar.events.readonly. Eksport treści dokumentów
Drive wymaga
https://www.googleapis.com/auth/drive.meet.readonly.
Utwórz świeżą przestrzeń Meet:
openclaw googlemeet create
Polecenie wypisuje nowe meeting uri, źródło i sesję dołączania. Z poświadczeniami OAuth
używa oficjalnego interfejsu Google Meet API. Bez poświadczeń OAuth
używa zalogowanego profilu przeglądarki przypiętego węzła Chrome jako trybu awaryjnego. Agenci mogą
użyć narzędzia google_meet z action: "create", aby utworzyć i dołączyć w jednym
kroku. Aby utworzyć tylko adres URL, przekaż "join": false.
Przykładowe wyjście JSON z awaryjnego trybu przeglądarkowego:
{
"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"
}
}
}
Jeśli awaryjny tryb przeglądarkowy trafi na logowanie Google albo blokadę uprawnień Meet, zanim
zdoła utworzyć adres URL, metoda Gateway zwraca nieudaną odpowiedź, a narzędzie
google_meet zwraca ustrukturyzowane szczegóły zamiast zwykłego ciągu tekstowego:
{
"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"
}
}
Gdy agent widzi manualActionRequired: true, powinien zgłosić
manualActionMessage oraz kontekst węzła/karty przeglądarki i przestać otwierać nowe
karty Meet, dopóki operator nie wykona kroku w przeglądarce.
Przykładowe wyjście JSON z tworzenia przez 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"
}
}
}
Utworzenie Meet domyślnie do niego dołącza. Transport Chrome lub Chrome-node nadal
wymaga zalogowanego profilu Google Chrome, aby dołączyć przez przeglądarkę. Jeśli
profil jest wylogowany, OpenClaw zgłasza manualActionRequired: true albo błąd
mechanizmu zapasowego przeglądarki i prosi operatora o dokończenie logowania do Google przed
ponowieniem próby.
Ustaw preview.enrollmentAcknowledged: true dopiero po potwierdzeniu, że Twój projekt Cloud,
podmiot OAuth i uczestnicy spotkania są zapisani do Google
Workspace Developer Preview Program dla Meet media APIs.
Konfiguracja
Wspólna ścieżka agenta Chrome wymaga tylko włączonego Plugin, BlackHole, SoX, klucza
dostawcy transkrypcji w czasie rzeczywistym oraz skonfigurowanego dostawcy TTS OpenClaw.
OpenAI jest domyślnym dostawcą transkrypcji; ustaw realtime.voiceProvider na
"google" i realtime.model, aby używać Google Gemini Live w trybie bidi
bez zmiany domyślnego dostawcy transkrypcji w trybie agenta:
brew install blackhole-2ch sox
export OPENAI_API_KEY=sk-...
# or
export GEMINI_API_KEY=...
Ustaw konfigurację Plugin w plugins.entries.google-meet.config:
{
plugins: {
entries: {
"google-meet": {
enabled: true,
config: {},
},
},
},
}
Wartości domyślne:
defaultTransport: "chrome"defaultMode: "agent"("realtime"jest akceptowane tylko jako starszy alias zgodności dla"agent"; nowe wywołania narzędzi powinny używać"agent")chromeNode.node: opcjonalny identyfikator/nazwa/IP węzła dlachrome-nodechrome.audioBackend: "blackhole-2ch"chrome.guestName: "OpenClaw Agent": nazwa używana na ekranie gościa Meet bez zalogowaniachrome.autoJoin: true: wypełnienie nazwy gościa i kliknięcie Dołącz teraz na zasadzie najlepszej próby przez automatyzację przeglądarki OpenClaw nachrome-nodechrome.reuseExistingTab: true: aktywuje istniejącą kartę Meet zamiast otwierać duplikatychrome.waitForInCallMs: 20000: czeka, aż karta Meet zgłosi obecność w połączeniu, zanim zostanie uruchomione wprowadzenie odpowiedzi głosowejchrome.audioFormat: "pcm16-24khz": format dźwięku pary poleceń. Używaj"g711-ulaw-8khz"tylko dla starszych/niestandardowych par poleceń, które nadal emitują dźwięk telefoniczny.chrome.audioBufferBytes: 4096: bufor przetwarzania SoX dla wygenerowanych poleceń dźwięku pary poleceń Chrome. To połowa domyślnego bufora SoX o rozmiarze 8192 bajtów, co zmniejsza domyślne opóźnienie potoku, zostawiając miejsce na zwiększenie go na obciążonych hostach. Wartości poniżej minimum SoX są ograniczane do 17 bajtów.chrome.audioInputCommand: polecenie SoX odczytujące z CoreAudioBlackHole 2chi zapisujące dźwięk wchrome.audioFormatchrome.audioOutputCommand: polecenie SoX odczytujące dźwięk wchrome.audioFormati zapisujące do CoreAudioBlackHole 2chchrome.bargeInInputCommand: opcjonalne polecenie lokalnego mikrofonu, które zapisuje podpisany 16-bitowy little-endian mono PCM do wykrywania przerwania przez człowieka, gdy odtwarzanie asystenta jest aktywne. Obecnie dotyczy to hostowanego przez Gateway mostka pary poleceńchrome.chrome.bargeInRmsThreshold: 650: poziom RMS liczony jako przerwanie przez człowieka wchrome.bargeInInputCommandchrome.bargeInPeakThreshold: 2500: poziom szczytowy liczony jako przerwanie przez człowieka wchrome.bargeInInputCommandchrome.bargeInCooldownMs: 900: minimalne opóźnienie między kolejnymi wyczyszczeniami przerwania przez człowiekamode: "agent": domyślny tryb odpowiedzi głosowej. Mowa uczestników jest transkrybowana przez skonfigurowanego dostawcę transkrypcji w czasie rzeczywistym, wysyłana do skonfigurowanego agenta OpenClaw w sesji podagenta dla danego spotkania i odtwarzana głosowo przez standardowe środowisko wykonawcze TTS OpenClaw.mode: "bidi": zapasowy, bezpośredni, dwukierunkowy tryb modelu czasu rzeczywistego. Dostawca głosu w czasie rzeczywistym odpowiada bezpośrednio na mowę uczestników i może wywoływaćopenclaw_agent_consultw celu uzyskania głębszych odpowiedzi opartych na narzędziach.mode: "transcribe": tryb tylko obserwacji bez mostka odpowiedzi głosowej.realtime.provider: "openai": zapas zgodności używany, gdy poniższe pola dostawcy o węższym zakresie nie są ustawione.realtime.transcriptionProvider: "openai": identyfikator dostawcy używany przez trybagentdo transkrypcji w czasie rzeczywistym.realtime.voiceProvider: identyfikator dostawcy używany przez trybbidido bezpośredniego głosu w czasie rzeczywistym. Ustaw go na"google", aby używać Gemini Live, pozostawiając transkrypcję trybu agenta w OpenAI.realtime.toolPolicy: "safe-read-only"realtime.instructions: krótkie odpowiedzi mówione, zopenclaw_agent_consultdla głębszych odpowiedzirealtime.introMessage: krótki mówiony test gotowości, gdy mostek czasu rzeczywistego się połączy; ustaw na"", aby dołączyć po cichurealtime.agentId: opcjonalny identyfikator agenta OpenClaw dlaopenclaw_agent_consult; domyślniemain
Opcjonalne nadpisania:
{
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-2.5-flash-native-audio-preview-12-2025",
agentId: "jay",
toolPolicy: "owner",
introMessage: "Say exactly: I'm here.",
providers: {
google: {
voice: "Kore",
},
},
},
}
ElevenLabs zarówno do słuchania, jak i mówienia w trybie agenta:
{
messages: {
tts: {
provider: "elevenlabs",
providers: {
elevenlabs: {
modelId: "eleven_v3",
voiceId: "pMsXgVXv3BLzUgSXRplE",
},
},
},
},
plugins: {
entries: {
"google-meet": {
config: {
realtime: {
transcriptionProvider: "elevenlabs",
providers: {
elevenlabs: {
modelId: "scribe_v2_realtime",
audioFormat: "ulaw_8000",
sampleRate: 8000,
commitStrategy: "vad",
},
},
},
},
},
},
},
}
Trwały głos Meet pochodzi z
messages.tts.providers.elevenlabs.voiceId. Odpowiedzi agenta mogą też używać
dyrektyw dla pojedynczej odpowiedzi [[tts:voiceId=... model=eleven_v3]], gdy nadpisania modelu TTS
są włączone, ale konfiguracja jest deterministyczną wartością domyślną dla spotkań.
Po dołączeniu logi powinny pokazywać transcriptionProvider=elevenlabs, a każda
mówiona odpowiedź powinna logować provider=elevenlabs model=eleven_v3 voice=<voiceId>.
Konfiguracja tylko dla Twilio:
{
defaultTransport: "twilio",
twilio: {
defaultDialInNumber: "+15551234567",
defaultPin: "123456",
},
voiceCall: {
gatewayUrl: "ws://127.0.0.1:18789",
},
}
voiceCall.enabled domyślnie ma wartość true; z transportem Twilio deleguje
rzeczywiste połączenie PSTN, DTMF i powitanie wstępne do Plugin Voice Call. Voice Call
odtwarza sekwencję DTMF przed otwarciem strumienia multimediów w czasie rzeczywistym, a następnie używa
zapisanego tekstu wstępnego jako początkowego powitania w czasie rzeczywistym. Jeśli voice-call nie jest
włączony, Google Meet nadal może zweryfikować i zapisać plan wybierania, ale nie może
nawiązać połączenia Twilio.
Narzędzie
Agenci mogą używać narzędzia google_meet:
{
"action": "join",
"url": "https://meet.google.com/abc-defg-hij",
"transport": "chrome-node",
"mode": "agent"
}
Użyj transport: "chrome", gdy Chrome działa na hoście Gateway. Użyj
transport: "chrome-node", gdy Chrome działa na sparowanym węźle, takim jak maszyna wirtualna Parallels.
W obu przypadkach dostawcy modeli i openclaw_agent_consult działają na hoście
Gateway, więc poświadczenia modeli pozostają tam. Przy domyślnym mode: "agent"
dostawca transkrypcji w czasie rzeczywistym obsługuje słuchanie, skonfigurowany agent OpenClaw
tworzy odpowiedź, a zwykłe TTS OpenClaw wypowiada ją w Meet. Użyj
mode: "bidi", gdy chcesz, aby model głosu w czasie rzeczywistym odpowiadał bezpośrednio.
Surowe mode: "realtime" pozostaje akceptowane jako starszy alias zgodności dla
mode: "agent", ale nie jest już reklamowane w schemacie narzędzi agenta.
Logi trybu agenta obejmują rozwiązany dostawca/model transkrypcji podczas uruchamiania mostka
oraz dostawcę TTS, model, głos, format wyjściowy i częstotliwość próbkowania po
każdej zsyntetyzowanej odpowiedzi.
Użyj action: "status", aby wyświetlić aktywne sesje lub sprawdzić identyfikator sesji. Użyj
action: "speak" z sessionId i message, aby agent czasu rzeczywistego
zaczął mówić natychmiast. Użyj action: "test_speech", aby utworzyć lub ponownie użyć sesji,
wywołać znaną frazę i zwrócić kondycję inCall, gdy host Chrome może
ją zgłosić. test_speech zawsze wymusza mode: "agent" i kończy się niepowodzeniem, jeśli zażądano
uruchomienia w mode: "transcribe", ponieważ sesje tylko obserwacji celowo nie mogą
emitować mowy. Jego wynik speechOutputVerified opiera się na wzroście liczby bajtów wyjścia audio
w czasie rzeczywistym podczas tego wywołania testowego, więc ponownie użyta sesja ze starszym dźwiękiem
nie liczy się jako świeży, udany test mowy. Użyj action: "leave", aby oznaczyć
sesję jako zakończoną.
status obejmuje kondycję Chrome, gdy jest dostępna:
inCall: Chrome wydaje się być w połączeniu MeetmicMuted: stan mikrofonu Meet na zasadzie najlepszej próbymanualActionRequired/manualActionReason/manualActionMessage: profil przeglądarki wymaga ręcznego logowania, wpuszczenia przez hosta Meet, uprawnień lub naprawy sterowania przeglądarką, zanim mowa będzie działaćspeechReady/speechBlockedReason/speechBlockedMessage: czy zarządzana mowa Chrome jest teraz dozwolona.speechReady: falseoznacza, że OpenClaw nie wysłał frazy wstępnej/testowej do mostka audio.providerConnected/realtimeReady: stan mostka głosu w czasie rzeczywistymlastInputAt/lastOutputAt: ostatni dźwięk odebrany z mostka lub wysłany do mostkaaudioOutputRouted/audioOutputDeviceLabel: czy wyjście multimediów karty Meet zostało aktywnie skierowane do urządzenia BlackHole używanego przez mosteklastSuppressedInputAt/suppressedInputBytes: wejście local loopback ignorowane, gdy odtwarzanie asystenta jest aktywne
{
"action": "speak",
"sessionId": "meet_...",
"message": "Say exactly: I'm here and listening."
}
Tryby agent i bidi
Tryb Chrome agent jest zoptymalizowany pod zachowanie „mój agent jest na spotkaniu”.
Dostawca transkrypcji w czasie rzeczywistym słyszy dźwięk spotkania, końcowe transkrypty
uczestników są kierowane przez skonfigurowanego agenta OpenClaw, a odpowiedź jest
wypowiadana przez standardowe środowisko wykonawcze TTS OpenClaw. Ustaw mode: "bidi", gdy chcesz,
aby model głosu w czasie rzeczywistym odpowiadał bezpośrednio.
Pobliskie końcowe fragmenty transkryptu są scalane przed konsultacją, aby jedna wypowiedź
nie generowała kilku nieaktualnych częściowych odpowiedzi. Wejście w czasie rzeczywistym jest także
wyciszane, gdy zakolejkowany dźwięk asystenta nadal jest odtwarzany,
a niedawne echa transkryptu przypominające asystenta są ignorowane przed konsultacją z agentem,
aby local loopback BlackHole nie sprawił, że agent odpowie na własną mowę.
| Tryb | Kto decyduje o odpowiedzi | Ścieżka wyjścia mowy | Użyj, gdy |
|---|---|---|---|
agent |
Skonfigurowany agent OpenClaw | Standardowe środowisko wykonawcze TTS OpenClaw | Chcesz zachowania „mój agent jest na spotkaniu” |
bidi |
Model głosu w czasie rzeczywistym | Odpowiedź audio dostawcy głosu w czasie rzeczywistym | Chcesz pętli konwersacyjnego głosu o najniższym opóźnieniu |
W trybie bidi, gdy model czasu rzeczywistego potrzebuje głębszego rozumowania, aktualnych
informacji lub zwykłych narzędzi OpenClaw, może wywołać openclaw_agent_consult.
Narzędzie konsultacji uruchamia w tle zwykłego agenta OpenClaw z kontekstem ostatniej
transkrypcji spotkania i zwraca zwięzłą odpowiedź mówioną. W trybie agent
OpenClaw wysyła tę odpowiedź bezpośrednio do środowiska wykonawczego TTS; w trybie bidi
model głosu w czasie rzeczywistym może wypowiedzieć wynik konsultacji z powrotem na spotkaniu. Używa
tego samego wspólnego mechanizmu konsultacji co Voice Call.
Domyślnie konsultacje działają z agentem main. Ustaw realtime.agentId, gdy tor
Meet powinien konsultować się z dedykowanym obszarem roboczym agenta OpenClaw, domyślnymi ustawieniami modelu,
polityką narzędzi, pamięcią i historią sesji.
Konsultacje w trybie agenta używają klucza sesji na spotkanie agent:<id>:subagent:google-meet:<session>,
dzięki czemu pytania uzupełniające zachowują kontekst spotkania, jednocześnie dziedzicząc normalną
politykę agenta ze skonfigurowanego agenta.
realtime.toolPolicy kontroluje przebieg konsultacji:
safe-read-only: udostępnij narzędzie konsultacji i ogranicz zwykłego agenta doread,web_search,web_fetch,x_search,memory_searchorazmemory_get.owner: udostępnij narzędzie konsultacji i pozwól zwykłemu agentowi używać normalnej polityki narzędzi agenta.none: nie udostępniaj narzędzia konsultacji modelowi głosu w czasie rzeczywistym.
Klucz sesji konsultacji jest ograniczony do sesji Meet, więc kolejne wywołania konsultacji mogą ponownie używać wcześniejszego kontekstu konsultacji podczas tego samego spotkania.
Aby wymusić mówione sprawdzenie gotowości po pełnym dołączeniu Chrome do rozmowy:
openclaw googlemeet speak meet_... "Say exactly: I'm here and listening."
Pełny smoke test dołączenia i wypowiedzi:
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \
--transport chrome-node \
--message "Say exactly: I'm here and listening."
Lista kontrolna testu live
Użyj tej sekwencji przed przekazaniem spotkania nienadzorowanemu agentowi:
openclaw googlemeet setup
openclaw nodes status
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \
--transport chrome-node \
--message "Say exactly: Google Meet speech test complete."
Oczekiwany stan Chrome-node:
googlemeet setupjest w całości zielony.googlemeet setupzawierachrome-node-connected, gdy Chrome-node jest domyślnym transportem albo przypięto węzeł.nodes statuspokazuje, że wybrany węzeł jest połączony.- Wybrany węzeł ogłasza zarówno
googlemeet.chrome, jak ibrowser.proxy. - Karta Meet dołącza do rozmowy, a
test-speechzwraca stan zdrowia Chrome zinCall: true.
Dla zdalnego hosta Chrome, takiego jak maszyna wirtualna Parallels macOS, to najkrótsze bezpieczne sprawdzenie po zaktualizowaniu Gateway lub maszyny wirtualnej:
openclaw googlemeet setup
openclaw nodes status --connected
openclaw nodes invoke \
--node parallels-macos \
--command googlemeet.chrome \
--params '{"action":"setup"}'
To potwierdza, że Plugin Gateway jest załadowany, węzeł maszyny wirtualnej jest połączony z bieżącym tokenem, a most audio Meet jest dostępny, zanim agent otworzy prawdziwą kartę spotkania.
Dla smoke testu Twilio użyj spotkania, które udostępnia dane telefonicznego wdzwaniania:
openclaw googlemeet setup
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
--transport twilio \
--dial-in-number +15551234567 \
--pin 123456
Oczekiwany stan Twilio:
googlemeet setupzawiera zielone kontroletwilio-voice-call-plugin,twilio-voice-call-credentialsitwilio-voice-call-webhook.voicecalljest dostępne w CLI po przeładowaniu Gateway.- Zwrócona sesja ma
transport: "twilio"oraztwilio.voiceCallId. openclaw logs --followpokazuje TwiML DTMF obsłużony przed TwiML w czasie rzeczywistym, a następnie most w czasie rzeczywistym z początkowym powitaniem w kolejce.googlemeet leave <sessionId>rozłącza delegowane połączenie głosowe.
Rozwiązywanie problemów
Agent nie widzi narzędzia Google Meet
Potwierdź, że Plugin jest włączony w konfiguracji Gateway, i przeładuj Gateway:
openclaw plugins list | grep google-meet
openclaw googlemeet setup
Jeśli przed chwilą edytowano plugins.entries.google-meet, uruchom ponownie lub przeładuj Gateway.
Działający agent widzi tylko narzędzia Plugin zarejestrowane przez bieżący proces
Gateway.
Na hostach Gateway innych niż macOS narzędzie google_meet widoczne dla agenta pozostaje widoczne,
ale lokalne akcje odpowiedzi głosowej Chrome są blokowane, zanim trafią do mostu audio.
Lokalne audio odpowiedzi głosowej Chrome obecnie zależy od macOS BlackHole 2ch, więc
agenci Linux powinni używać mode: "transcribe", wdzwaniania Twilio albo hosta
chrome-node na macOS zamiast domyślnej lokalnej ścieżki agenta Chrome.
Brak połączonego węzła obsługującego Google Meet
Na hoście węzła uruchom:
openclaw plugins enable google-meet
openclaw plugins enable browser
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macos
Na hoście Gateway zatwierdź węzeł i zweryfikuj polecenia:
openclaw devices list
openclaw devices approve <requestId>
openclaw nodes status
Węzeł musi być połączony i zawierać googlemeet.chrome oraz browser.proxy.
Konfiguracja Gateway musi zezwalać na te polecenia węzła:
{
gateway: {
nodes: {
allowCommands: ["browser.proxy", "googlemeet.chrome"],
},
},
}
Jeśli googlemeet setup nie przechodzi chrome-node-connected albo log Gateway zgłasza
gateway token mismatch, zainstaluj ponownie lub uruchom ponownie węzeł z bieżącym tokenem Gateway.
Dla Gateway w sieci LAN zwykle oznacza to:
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node install \
--host <gateway-lan-ip> \
--port 18789 \
--display-name parallels-macos \
--force
Następnie przeładuj usługę węzła i uruchom ponownie:
openclaw googlemeet setup
openclaw nodes status --connected
Przeglądarka się otwiera, ale agent nie może dołączyć
Uruchom googlemeet test-listen dla dołączeń tylko obserwacyjnych albo googlemeet test-speech
dla dołączeń w czasie rzeczywistym, a następnie sprawdź zwrócony stan zdrowia Chrome. Jeśli którykolwiek test
zgłasza manualActionRequired: true, pokaż operatorowi manualActionMessage
i przestań ponawiać próby, dopóki akcja w przeglądarce nie zostanie ukończona.
Typowe akcje ręczne:
- Zaloguj się do profilu Chrome.
- Wpuść gościa z konta hosta Meet.
- Przyznaj Chrome uprawnienia do mikrofonu/kamery, gdy pojawi się natywny monit uprawnień Chrome.
- Zamknij lub napraw zablokowane okno dialogowe uprawnień Meet.
Nie zgłaszaj „nie zalogowano” tylko dlatego, że Meet pokazuje „Do you want people to hear you in the meeting?” To ekran pośredni wyboru audio w Meet; OpenClaw klika Use microphone przez automatyzację przeglądarki, gdy jest dostępne, i nadal czeka na rzeczywisty stan spotkania. W przypadku awaryjnej ścieżki przeglądarkowej tylko do tworzenia OpenClaw może kliknąć Continue without microphone, ponieważ utworzenie URL-a nie wymaga ścieżki audio w czasie rzeczywistym.
Tworzenie spotkania kończy się niepowodzeniem
googlemeet create najpierw używa punktu końcowego Google Meet API spaces.create,
gdy skonfigurowano poświadczenia OAuth. Bez poświadczeń OAuth przechodzi awaryjnie
na przeglądarkę przypiętego węzła Chrome. Potwierdź:
- Dla tworzenia przez API: skonfigurowano
oauth.clientIdioauth.refreshTokenalbo istnieją odpowiadające im zmienne środowiskoweOPENCLAW_GOOGLE_MEET_*. - Dla tworzenia przez API: token odświeżania został wygenerowany po dodaniu
obsługi tworzenia. Starszym tokenom może brakować zakresu
meetings.space.created; uruchom ponownieopenclaw googlemeet auth login --jsoni zaktualizuj konfigurację Plugin. - Dla awaryjnej ścieżki przeglądarkowej:
defaultTransport: "chrome-node"orazchromeNode.nodewskazują połączony węzeł zbrowser.proxyigooglemeet.chrome. - Dla awaryjnej ścieżki przeglądarkowej: profil Chrome OpenClaw na tym węźle jest zalogowany
do Google i może otworzyć
https://meet.google.com/new. - Dla awaryjnej ścieżki przeglądarkowej: ponowienia używają istniejącej karty
https://meet.google.com/newalbo monitu konta Google przed otwarciem nowej karty. Jeśli agent przekroczy limit czasu, ponów wywołanie narzędzia zamiast ręcznie otwierać kolejną kartę Meet. - Dla awaryjnej ścieżki przeglądarkowej: jeśli narzędzie zwraca
manualActionRequired: true, użyj zwróconychbrowser.nodeId,browser.targetId,browserUrlorazmanualActionMessage, aby pokierować operatorem. Nie ponawiaj prób w pętli, dopóki ta akcja nie zostanie ukończona. - Dla awaryjnej ścieżki przeglądarkowej: jeśli Meet pokazuje „Do you want people to hear you in the
meeting?”, pozostaw kartę otwartą. OpenClaw powinien kliknąć Use microphone albo, dla
awaryjnej ścieżki tylko do tworzenia, Continue without microphone przez automatyzację
przeglądarki i dalej czekać na wygenerowany URL Meet. Jeśli nie może, błąd
powinien wspominać
meet-audio-choice-required, a niegoogle-login-required.
Agent dołącza, ale nie mówi
Sprawdź ścieżkę czasu rzeczywistego:
openclaw googlemeet setup
openclaw googlemeet doctor
Użyj mode: "agent" dla normalnej ścieżki STT -> agent OpenClaw -> odpowiedź głosowa TTS,
albo mode: "bidi" dla bezpośredniej awaryjnej ścieżki głosu w czasie rzeczywistym. mode: "transcribe"
celowo nie uruchamia mostu odpowiedzi głosowej. Do debugowania tylko obserwacyjnego
uruchom openclaw googlemeet status --json <session-id> po tym, jak uczestnicy zaczną mówić,
i sprawdź captioning, transcriptLines oraz lastCaptionText. Jeśli inCall ma
wartość true, ale transcriptLines pozostaje na 0, napisy Meet mogą być wyłączone, nikt
nie mówił od zainstalowania obserwatora, interfejs Meet się zmienił albo napisy na żywo
są niedostępne dla języka/konta spotkania.
googlemeet test-speech zawsze sprawdza ścieżkę czasu rzeczywistego i raportuje, czy
dla tego 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 zobaczył, by nowe bajty wyjściowe dotarły do mostu audio Chrome.
Sprawdź także:
- Klucz dostawcy czasu rzeczywistego jest dostępny na hoście Gateway, na przykład
OPENAI_API_KEYalboGEMINI_API_KEY. BlackHole 2chjest widoczny na hoście Chrome.soxistnieje na hoście Chrome.- Mikrofon i głośnik Meet są kierowane przez wirtualną ścieżkę audio używaną przez
OpenClaw.
doctorpowinien pokazywaćmeet output routed: yesdla lokalnych dołączeń Chrome w czasie rzeczywistym.
googlemeet doctor [session-id] wypisuje sesję, węzeł, stan w rozmowie,
powód akcji ręcznej, połączenie z dostawcą czasu rzeczywistego, realtimeReady, aktywność
wejścia/wyjścia audio, ostatnie znaczniki czasu audio, liczniki bajtów i URL przeglądarki.
Użyj googlemeet status [session-id] --json, gdy potrzebujesz surowego JSON. Użyj
googlemeet doctor --oauth, gdy musisz zweryfikować odświeżenie OAuth Google Meet
bez ujawniania tokenów; dodaj --meeting albo --create-space, gdy potrzebujesz także
dowodu z Google Meet API.
Jeśli agent przekroczył limit czasu i widzisz już otwartą kartę Meet, sprawdź tę kartę bez otwierania kolejnej:
openclaw googlemeet recover-tab
openclaw googlemeet recover-tab https://meet.google.com/abc-defg-hij
Odpowiadająca akcja narzędzia to recover_current_tab. Ustawia fokus na
istniejącej karcie Meet dla wybranego transportu i ją sprawdza. Przy chrome używa lokalnego
sterowania przeglądarką przez Gateway; przy chrome-node używa skonfigurowanego
węzła Chrome. Nie otwiera nowej karty ani nie tworzy nowej sesji; raportuje
bieżącą blokadę, taką jak logowanie, wpuszczenie, uprawnienia albo stan wyboru audio.
Polecenie CLI komunikuje się ze skonfigurowanym Gateway, więc Gateway musi działać;
chrome-node wymaga także połączenia węzła Chrome.
Kontrole konfiguracji Twilio kończą się niepowodzeniem
twilio-voice-call-plugin kończy się niepowodzeniem, gdy voice-call nie jest dozwolone albo włączone.
Dodaj je do plugins.allow, włącz plugins.entries.voice-call i przeładuj
Gateway.
twilio-voice-call-credentials kończy się niepowodzeniem, gdy backend Twilio nie ma identyfikatora SID konta,
tokenu uwierzytelniania albo numeru dzwoniącego. Ustaw je na hoście Gateway:
export TWILIO_ACCOUNT_SID=AC...
export TWILIO_AUTH_TOKEN=...
export TWILIO_FROM_NUMBER=+15550001234
twilio-voice-call-webhook kończy się niepowodzeniem, gdy voice-call nie ma publicznej
ekspozycji Webhook albo gdy publicUrl wskazuje na local loopback lub przestrzeń sieci prywatnej.
Ustaw plugins.entries.voice-call.config.publicUrl na publiczny URL dostawcy albo
skonfiguruj tunel/ekspozycję Tailscale dla voice-call.
Adresy local loopback i prywatne URL-e nie są poprawne dla wywołań zwrotnych operatora. Nie używaj
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.
Dla stabilnego publicznego URL-a:
{
plugins: {
entries: {
"voice-call": {
enabled: true,
config: {
provider: "twilio",
fromNumber: "+15550001234",
publicUrl: "https://voice.example.com/voice/webhook",
},
},
},
},
}
Do lokalnego programowania użyj tunelu lub ekspozycji Tailscale zamiast prywatnego adresu URL hosta:
{
plugins: {
entries: {
"voice-call": {
config: {
tunnel: { provider: "ngrok" },
// or
tailscale: { mode: "funnel", path: "/voice/webhook" },
},
},
},
},
}
Następnie uruchom ponownie lub przeładuj Gateway i uruchom:
openclaw googlemeet setup --transport twilio
openclaw voicecall setup
openclaw voicecall smoke
voicecall smoke domyślnie sprawdza tylko gotowość. Aby wykonać próbę dla konkretnego numeru:
openclaw voicecall smoke --to "+15555550123"
Dodaj --yes tylko wtedy, gdy celowo chcesz wykonać rzeczywiste wychodzące połączenie
powiadamiające:
openclaw voicecall smoke --to "+15555550123" --yes
Połączenie Twilio rozpoczyna się, ale nigdy nie dołącza do spotkania
Potwierdź, że wydarzenie Meet udostępnia szczegóły wdzwonienia telefonicznego. Przekaż dokładny numer wdzwonienia oraz PIN albo niestandardową sekwencję DTMF:
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
--transport twilio \
--dial-in-number +15551234567 \
--dtmf-sequence ww123456#
Użyj początkowego w lub przecinków w --dtmf-sequence, jeśli dostawca potrzebuje pauzy
przed wprowadzeniem PIN-u.
Jeśli połączenie telefoniczne zostanie utworzone, ale lista uczestników Meet nigdy nie pokazuje uczestnika wdzwonionego telefonicznie:
- Uruchom
openclaw googlemeet doctor <session-id>, aby potwierdzić delegowany identyfikator połączenia Twilio, czy DTMF zostało zakolejkowane oraz czy zażądano powitania wprowadzającego. - Uruchom
openclaw voicecall status --call-id <id>i potwierdź, że połączenie nadal jest aktywne. - Uruchom
openclaw voicecall taili sprawdź, czy webhooki Twilio docierają do Gateway. - Uruchom
openclaw logs --followi poszukaj sekwencji Twilio Meet: Google Meet deleguje dołączenie, Voice Call zapisuje i serwuje TwiML DTMF przed połączeniem, Voice Call serwuje TwiML czasu rzeczywistego dla połączenia Twilio, a następnie Google Meet żąda mowy wprowadzającej przezvoicecall.speak. - Uruchom ponownie
openclaw googlemeet setup --transport twilio; zielony wynik sprawdzenia konfiguracji jest wymagany, ale nie dowodzi, że sekwencja PIN-u spotkania jest poprawna. - Potwierdź, że numer wdzwonienia należy do tego samego zaproszenia Meet i regionu co PIN.
- Zwiększ
voiceCall.dtmfDelayMsz domyślnych 12 sekund, jeśli Meet odpowiada wolno albo transkrypcja połączenia nadal pokazuje komunikat proszący o PIN po wysłaniu DTMF przed połączeniem. - Jeśli uczestnik dołącza, ale nie słyszysz powitania, sprawdź
openclaw logs --followpod kątem żądaniavoicecall.speakpo DTMF oraz odtwarzania TTS strumienia multimediów albo awaryjnego TwilioOPENCLAW_DOCS_MARKER:calloutOpen:U2F5. Jeśli transkrypcja połączenia nadal zawiera „enter the meeting PIN”, odnoga telefoniczna nie dołączyła jeszcze do pokoju Meet, więc uczestnicy spotkania nie usłyszą mowy.
Jeśli webhooki nie docierają, najpierw debuguj Plugin Voice Call: dostawca musi
osiągać plugins.entries.voice-call.config.publicUrl albo skonfigurowany tunel.
Zobacz Rozwiązywanie problemów z połączeniami głosowymi.
Uwagi
Oficjalne API multimediów Google Meet jest zorientowane na odbiór, więc mówienie w połączeniu Meet nadal wymaga ścieżki uczestnika. Ten Plugin zachowuje tę granicę jako widoczną: Chrome obsługuje udział przez przeglądarkę i lokalne trasowanie audio; Twilio obsługuje udział przez wdzwonienie telefoniczne.
Tryby odpowiedzi głosowej Chrome wymagają BlackHole 2ch oraz jednego z poniższych:
chrome.audioInputCommandpluschrome.audioOutputCommand: OpenClaw kontroluje most i przesyła audio wchrome.audioFormatmiędzy tymi poleceniami a wybranym dostawcą. Tryb agenta używa transkrypcji w czasie rzeczywistym oraz zwykłego TTS; tryb bidi używa dostawcy głosu czasu rzeczywistego. Domyślna ścieżka Chrome to 24 kHz PCM16 zchrome.audioBufferBytes: 4096; 8 kHz G.711 mu-law pozostaje dostępne dla starszych par poleceń.chrome.audioBridgeCommand: zewnętrzne polecenie mostu kontroluje całą lokalną ścieżkę audio i musi zakończyć działanie po uruchomieniu lub zweryfikowaniu swojego demona. Jest to prawidłowe tylko dlabidi, ponieważ trybagentwymaga bezpośredniego dostępu do pary poleceń dla TTS.
Gdy agent wywołuje narzędzie google_meet w trybie agenta, sesja konsultanta spotkania
forkuje bieżącą transkrypcję wywołującego przed odpowiedzią na mowę uczestników.
Sesja Meet nadal pozostaje oddzielna (agent:<agentId>:subagent:google-meet:<sessionId>),
więc dalsze działania spotkania nie mutują bezpośrednio transkrypcji wywołującego.
Aby uzyskać czysty dźwięk dupleksowy, trasuj wyjście Meet i mikrofon Meet przez oddzielne urządzenia wirtualne albo graf urządzeń wirtualnych w stylu Loopback. Jedno współdzielone urządzenie BlackHole może odbijać innych uczestników z powrotem do połączenia.
W moście Chrome opartym na parze poleceń chrome.bargeInInputCommand może nasłuchiwać
oddzielnego lokalnego mikrofonu i czyścić odtwarzanie asystenta, gdy człowiek zacznie
mówić. Dzięki temu mowa człowieka ma pierwszeństwo przed wyjściem asystenta nawet wtedy, gdy współdzielone
wejście local loopback BlackHole jest tymczasowo wyciszone podczas odtwarzania asystenta.
Podobnie jak chrome.audioInputCommand i chrome.audioOutputCommand, jest to
lokalne polecenie skonfigurowane przez operatora. Użyj jawnej zaufanej ścieżki polecenia lub
listy argumentów i nie wskazuj skryptów z niezaufanych lokalizacji.
googlemeet speak uruchamia aktywny most audio odpowiedzi głosowej dla sesji Chrome.
googlemeet leave zatrzymuje ten most. W przypadku sesji Twilio delegowanych
przez Plugin Voice Call leave także rozłącza bazowe połączenie głosowe.
Użyj googlemeet end-active-conference, gdy chcesz również zamknąć aktywną
konferencję Google Meet dla przestrzeni zarządzanej przez API.