OpenClaw 的 Google Meet 參與者支援是刻意設計為明確操作的 Plugin:Documentation Index
Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
- 它只會加入明確的
https://meet.google.com/...URL。 - 它可以透過 Google Meet API 建立新的 Meet 空間,然後加入傳回的 URL。
agent是預設的回話模式:即時轉錄會聆聽、已設定的 OpenClaw agent 會回答,而一般 OpenClaw TTS 會在 Meet 中發話。bidi仍可作為備援的直接即時語音模型模式。- Agents 透過
mode選擇加入行為:使用agent進行即時 聆聽/回話,使用bidi作為直接即時語音備援,或使用transcribe加入/控制瀏覽器但不啟用回話橋接。 - 驗證一開始採用個人 Google OAuth,或已登入的 Chrome 設定檔。
- 不會自動宣布徵得同意。
- 預設 Chrome 音訊後端是
BlackHole 2ch。 - Chrome 可以在本機執行,或在已配對的節點主機上執行。
- Twilio 接受撥入號碼加上選用的 PIN 或 DTMF 序列;它 無法直接撥打 Meet URL。
- CLI 指令是
googlemeet;meet保留給更廣泛的 agent 電話會議工作流程。
快速開始
安裝本機音訊相依項,並設定即時轉錄 供應商以及一般 OpenClaw TTS。OpenAI 是預設的轉錄 供應商;Google Gemini Live 也可作為獨立的bidi 語音備援,搭配
realtime.voiceProvider: "google":
blackhole-2ch 會安裝 BlackHole 2ch 虛擬音訊裝置。Homebrew 的
安裝程式需要重新啟動,macOS 才會公開該裝置:
--mode transcribe 檢查相同
傳輸;該模式會略過即時音訊先決條件,
因為它不會透過橋接聆聽或發話:
voice-call Plugin、Twilio 憑證和公開 Webhook 暴露是否就緒。
在要求 agent 加入之前,請將任何 ok: false 檢查視為所檢查傳輸和模式的阻擋項。
使用 openclaw googlemeet setup --json 取得
腳本或機器可讀輸出。使用 --transport chrome、
--transport chrome-node 或 --transport twilio,在 agent 嘗試之前預先檢查特定
傳輸。
對於 Twilio,當預設傳輸是 Chrome 時,一律明確預先檢查該傳輸:
voice-call 接線、Twilio 憑證或無法連線的
Webhook 暴露。
加入會議:
google_meet 工具加入:
google_meet 工具在非 macOS 主機上仍可用於
成品、行事曆、設定、轉錄、Twilio 和 chrome-node 流程。本機
Chrome 回話動作會在那裡被封鎖,因為內建 Chrome 音訊路徑
目前依賴 macOS BlackHole 2ch。在 Linux 上,請使用 mode: "transcribe"、
Twilio 撥入,或使用 macOS chrome-node 主機進行 Chrome 回話
參與。
建立新會議並加入:
SpaceConfig.accessType:
OPEN 允許任何持有 Meet URL 的人不敲門即可加入。TRUSTED 允許
主辦機構的受信任使用者、受邀外部使用者和撥入使用者
不敲門即可加入。RESTRICTED 將免敲門進入限制為受邀者。這些
設定只適用於官方 Google Meet API 建立路徑,因此必須
設定 OAuth 憑證。
如果你是在此選項可用之前驗證 Google Meet,請在將
meetings.space.settings 範圍新增到你的 Google OAuth 同意畫面後,重新執行
openclaw googlemeet auth login --json。
只建立 URL 而不加入:
googlemeet create 有兩條路徑:
- API 建立:當已設定 Google Meet OAuth 憑證時使用。這是 最具決定性的路徑,且不依賴瀏覽器 UI 狀態。
- 瀏覽器備援:當缺少 OAuth 憑證時使用。OpenClaw 會使用
釘選的 Chrome 節點,開啟
https://meet.google.com/new,等待 Google 重新導向到真正的會議代碼 URL,然後傳回該 URL。此路徑需要 節點上的 OpenClaw Chrome 設定檔已登入 Google。 瀏覽器自動化會處理 Meet 自己的首次執行麥克風提示;該提示 不會被視為 Google 登入失敗。 加入與建立流程也會先嘗試重用現有的 Meet 分頁,再開啟 新分頁。比對會忽略像authuser這類無害的 URL 查詢字串,因此 agent 重試應該會聚焦已開啟的會議,而不是建立第二個 Chrome 分頁。
source 欄位(api 或 browser),因此 agents
可以說明使用了哪條路徑。create 預設會加入新會議,並
傳回 joined: true 加上加入工作階段。若只要產生 URL,請在 CLI 上使用
create --no-join,或將 "join": false 傳給工具。
或告訴 agent:「建立一個 Google Meet,以 agent 回話模式加入,
並把連結傳給我。」agent 應呼叫 google_meet,並使用
action: "create",然後分享傳回的 meetingUri。
"mode": "transcribe"。這不會
啟動雙工即時語音橋接,不需要 BlackHole 或 SoX,
也不會在會議中回話。此模式下的 Chrome 加入也會避免
OpenClaw 的麥克風/攝影機權限授予,並避免 Meet Use
microphone 路徑。如果 Meet 顯示音訊選擇中介畫面,自動化會嘗試
不使用麥克風的路徑,否則會回報手動動作,而不是開啟
本機麥克風。在轉錄模式中,受管理的 Chrome 傳輸也會安裝
盡力而為的 Meet 字幕觀察器。googlemeet status --json 和
googlemeet doctor 會顯示 captioning、captionsEnabledAttempted、
transcriptLines、lastCaptionAt、lastCaptionSpeaker、lastCaptionText
以及短的 recentTranscript 尾端,讓操作員判斷瀏覽器
是否已加入通話,以及 Meet 字幕是否正在產生文字。
當你需要是/否探測時,請使用 openclaw googlemeet test-listen <meet-url> --transport chrome-node:
它會以轉錄模式加入,等待新的字幕或
轉錄移動,並傳回 listenVerified、listenTimedOut、手動
動作欄位和最新字幕健康狀態。
在即時工作階段期間,google_meet 狀態包含瀏覽器和音訊橋接
健康狀態,例如 inCall、manualActionRequired、providerConnected、
realtimeReady、audioInputActive、audioOutputActive、最後輸入/輸出
時間戳記、位元組計數器和橋接已關閉狀態。如果安全的 Meet 頁面提示
出現,瀏覽器自動化會在可行時處理它。登入、主辦者准入和
瀏覽器/OS 權限提示會回報為手動動作,並附上原因與
訊息供 agent 轉述。受管理的 Chrome 工作階段只會在瀏覽器健康狀態回報 inCall: true 後
發出簡介或
測試片語;否則狀態會回報
speechReady: false,並封鎖語音嘗試,而不是假裝
agent 已在會議中發話。
本機 Chrome 會透過已登入的 OpenClaw 瀏覽器設定檔加入。即時模式
需要 BlackHole 2ch,供 OpenClaw 使用的麥克風/喇叭路徑使用。若要
乾淨的雙工音訊,請使用分開的虛擬裝置或 Loopback 風格的圖形;單一
BlackHole 裝置足以進行首次煙霧測試,但可能會產生回音。
本機 Gateway + Parallels Chrome
若只是要讓 macOS VM 擁有 Chrome,你不需要在 VM 內執行完整 OpenClaw Gateway 或模型 API 金鑰。 在本機執行 Gateway 和 agent,然後在 VM 中執行節點主機。在 VM 上啟用一次內建 Plugin,讓節點 公告 Chrome 指令: 各處執行內容:- Gateway 主機:OpenClaw Gateway、agent 工作區、模型/API 金鑰、即時 供應商,以及 Google Meet Plugin 設定。
- Parallels macOS VM:OpenClaw CLI/節點主機、Google Chrome、SoX、BlackHole 2ch, 以及已登入 Google 的 Chrome 設定檔。
- VM 中不需要:Gateway 服務、agent 設定、OpenAI/GPT 金鑰,或模型 供應商設定。
BlackHole 2ch:
<gateway-host> 是 LAN IP,且你未使用 TLS,除非你為該受信任的私人網路明確選擇加入,否則節點會拒絕
純文字 WebSocket:
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 是程序環境,而不是
openclaw.json 設定。當它存在於安裝指令上時,openclaw node install 會將它儲存在 LaunchAgent
環境中。
從 Gateway 主機核准節點:
googlemeet.chrome
和瀏覽器能力/browser.proxy:
transport: "chrome-node" 的 google_meet 工具。
若要進行單指令煙霧測試,建立或重用工作階段、說出已知
片語,並列印工作階段健康狀態:
manualActionRequired: true,並帶有 manualActionReason 和
manualActionMessage。Agent 應停止重試加入,回報該確切訊息以及目前的 browserUrl/browserTitle,並且只在手動瀏覽器動作完成後才重試。
如果省略 chromeNode.node,OpenClaw 只有在剛好一個已連線 Node 同時宣告 googlemeet.chrome 和瀏覽器控制時才會自動選取。如果連線了多個具備能力的 Node,請將 chromeNode.node 設為 Node ID、顯示名稱或遠端 IP。
常見失敗檢查:
Configured Google Meet node ... is not usable: offline:釘選的 Node 已由 Gateway 知道但不可用。Agent 應將該 Node 視為診斷狀態,而不是可用的 Chrome 主機,並回報設定阻礙,而不是退回到另一種傳輸,除非使用者要求這麼做。No connected Google Meet-capable node:在 VM 中啟動openclaw node run,核准配對,並確認已在 VM 中執行openclaw plugins enable google-meet和openclaw plugins enable browser。也請確認 Gateway 主機允許這兩個 Node 命令:gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]。BlackHole 2ch audio device not found:在要檢查的主機上安裝blackhole-2ch,並在使用本機 Chrome 音訊前重新開機。BlackHole 2ch audio device not found on the node:在 VM 中安裝blackhole-2ch,並重新啟動 VM。- Chrome 開啟但無法加入:在 VM 內登入瀏覽器設定檔,或保持設定
chrome.guestName以便訪客加入。訪客自動加入會透過 Node 瀏覽器 Proxy 使用 OpenClaw 瀏覽器自動化;請確認 Node 瀏覽器設定指向你想要的設定檔,例如browser.defaultProfile: "user"或具名的 existing-session 設定檔。 - 重複的 Meet 分頁:保持啟用
chrome.reuseExistingTab: true。OpenClaw 會先啟用相同 Meet URL 的現有分頁,再開啟新分頁;瀏覽器會議建立也會先重用進行中的https://meet.google.com/new或 Google 帳戶提示分頁,再開啟另一個分頁。 - 沒有音訊:在 Meet 中,將麥克風/喇叭透過 OpenClaw 使用的虛擬音訊裝置路徑路由;使用獨立的虛擬裝置或 Loopback 風格路由,以取得乾淨的雙工音訊。
安裝注意事項
Chrome talk-back 預設使用兩個外部工具:sox:命令列音訊工具。Plugin 會對預設 24 kHz PCM16 音訊橋接使用明確的 CoreAudio 裝置命令。blackhole-2ch:macOS 虛擬音訊驅動程式。它會建立 Chrome/Meet 可路由通過的BlackHole 2ch音訊裝置。
LGPL-2.0-only AND GPL-2.0-only;BlackHole 為 GPL-3.0。如果你建置的安裝程式或設備會將 BlackHole 與 OpenClaw 綁定,請檢閱 BlackHole 的上游授權條款,或向 Existential Audio 取得獨立授權。
傳輸
Chrome
Chrome 傳輸會透過 OpenClaw 瀏覽器控制開啟 Meet URL,並以已登入的 OpenClaw 瀏覽器設定檔加入。在 macOS 上,Plugin 會在啟動前檢查BlackHole 2ch。如果已設定,它也會在開啟 Chrome 前執行音訊橋接健康命令和啟動命令。當 Chrome/音訊位於 Gateway 主機上時使用 chrome;當 Chrome/音訊位於已配對的 Node,例如 Parallels macOS VM 上時使用 chrome-node。對於本機 Chrome,使用 browser.defaultProfile 選擇設定檔;chrome.browserProfile 會傳遞給
chrome-node 主機。
BlackHole 2ch,加入會因設定錯誤而失敗,而不是在沒有音訊路徑的情況下靜默加入。
Twilio
Twilio 傳輸是委派給 Voice Call Plugin 的嚴格撥號方案。它不會剖析 Meet 頁面以尋找電話號碼。 當 Chrome 參與不可用,或你想要電話撥入後備方案時使用這個。Google Meet 必須公開該會議的電話撥入號碼和 PIN;OpenClaw 不會從 Meet 頁面探索這些資訊。 在 Gateway 主機上啟用 Voice Call Plugin,而不是在 Chrome Node 上:openclaw.json:
realtime.provider: "openai" 搭配 OpenAI provider Plugin 和
OPENAI_API_KEY。
啟用 voice-call 後重新啟動或重新載入 Gateway;Plugin 設定變更在 Gateway 程序重新載入前不會出現在已執行的程序中。
接著驗證:
googlemeet setup 會包含成功的
twilio-voice-call-plugin、twilio-voice-call-credentials 和
twilio-voice-call-webhook 檢查。
--dtmf-sequence:
OAuth 和預檢
OAuth 對於建立 Meet 連結是選用的,因為googlemeet create 可以退回到瀏覽器自動化。當你想要官方 API 建立、空間解析或 Meet Media API 預檢時,請設定 OAuth。
Google Meet API 存取使用使用者 OAuth:建立 Google Cloud OAuth 用戶端、要求必要範圍、授權 Google 帳戶,然後將產生的重新整理權杖儲存在 Google Meet Plugin 設定中,或提供
OPENCLAW_GOOGLE_MEET_* 環境變數。
OAuth 不會取代 Chrome 加入路徑。當你使用瀏覽器參與時,Chrome 和 Chrome-node 傳輸仍然會透過已登入的 Chrome 設定檔、BlackHole/SoX,以及已連線的 Node 加入。OAuth 僅用於官方 Google Meet API 路徑:建立會議空間、解析空間,以及執行 Meet Media API 預檢。
建立 Google 憑證
在 Google Cloud Console 中:- 建立或選取 Google Cloud 專案。
- 為該專案啟用 Google Meet REST API。
-
設定 OAuth 同意畫面。
- 對 Google Workspace 組織而言,Internal 最簡單。
- External 適用於個人/測試設定;當應用程式處於 Testing 時,將每個會授權該應用程式的 Google 帳戶加入為測試使用者。
-
加入 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
-
建立 OAuth 用戶端 ID。
- 應用程式類型:Web application。
-
已授權重新導向 URI:
- 複製用戶端 ID 和用戶端密鑰。
meetings.space.created 是 Google Meet spaces.create 所必需。
meetings.space.readonly 讓 OpenClaw 可將 Meet URL/代碼解析為空間。
meetings.space.settings 讓 OpenClaw 可在 API 房間建立期間傳遞 SpaceConfig 設定,例如
accessType。
meetings.conference.media.readonly 用於 Meet Media API 預檢和媒體工作;Google 可能會要求加入 Developer Preview,才能實際使用 Media API。
如果你只需要基於瀏覽器的 Chrome 加入,請完全略過 OAuth。
產生重新整理權杖
設定oauth.clientId 和選用的 oauth.clientSecret,或以環境變數傳入,然後執行:
oauth 設定區塊。它使用 PKCE、http://localhost:8085/oauth2callback 上的 localhost 回呼,以及搭配 --manual 的手動複製/貼上流程。
範例:
oauth 物件儲存在 Google Meet Plugin 設定下:
openclaw googlemeet auth login --json,讓重新整理權杖擁有 meetings.space.created 範圍。
使用 doctor 驗證 OAuth
當你想要快速、非密鑰的健康檢查時,執行 OAuth doctor:ok、configured、
tokenSource、expiresAt 和檢查訊息;它不會列印存取權杖、重新整理權杖或用戶端密鑰。
常見結果:
| 檢查 | 含義 |
|---|---|
oauth-config | oauth.clientId 加上 oauth.refreshToken,或快取的存取權杖已存在。 |
oauth-token | 快取的存取權杖仍然有效,或重新整理權杖已鑄造新的存取權杖。 |
meet-spaces-get | 選用的 --meeting 檢查已解析現有的 Meet 空間。 |
meet-spaces-create | 選用的 --create-space 檢查已建立新的 Meet 空間。 |
spaces.create 權限範圍可用,請執行
會產生副作用的建立檢查:
--create-space 會建立一個可丟棄的 Meet URL。當你需要確認
Google Cloud 專案已啟用 Meet API,且已授權帳戶具備
meetings.space.created 權限範圍時,請使用它。
若要證明對現有會議空間的讀取存取權:
doctor --oauth --meeting 和 resolve-space 會證明對已授權 Google 帳戶可存取之現有
空間的讀取存取權。這些檢查傳回 403,通常表示 Google Meet REST API 已停用、同意授權的重新整理權杖
缺少必要權限範圍,或 Google 帳戶無法存取該 Meet
空間。重新整理權杖錯誤表示請重新執行 openclaw googlemeet auth login --json 並儲存新的 oauth 區塊。
瀏覽器後援不需要 OAuth 認證資料。在該模式下,Google
驗證來自所選 Node 上已登入的 Chrome 設定檔,而不是
OpenClaw 設定。
這些環境變數可作為後援:
OPENCLAW_GOOGLE_MEET_CLIENT_ID或GOOGLE_MEET_CLIENT_IDOPENCLAW_GOOGLE_MEET_CLIENT_SECRET或GOOGLE_MEET_CLIENT_SECRETOPENCLAW_GOOGLE_MEET_REFRESH_TOKEN或GOOGLE_MEET_REFRESH_TOKENOPENCLAW_GOOGLE_MEET_ACCESS_TOKEN或GOOGLE_MEET_ACCESS_TOKENOPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT或GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_ATOPENCLAW_GOOGLE_MEET_DEFAULT_MEETING或GOOGLE_MEET_DEFAULT_MEETINGOPENCLAW_GOOGLE_MEET_PREVIEW_ACK或GOOGLE_MEET_PREVIEW_ACK
spaces.get 解析 Meet URL、代碼或 spaces/{id}:
--meeting 時,artifacts 和 attendance 預設會使用最新的會議記錄。
當你想取得該會議的每個保留記錄時,請傳入 --all-conference-records。
Calendar 查詢可以先從 Google Calendar 解析會議 URL,再讀取
Meet 成果:
--today 會在今天的 primary 行事曆中搜尋含有
Google Meet 連結的 Calendar 事件。使用 --event <query> 搜尋相符的事件文字,並使用
--calendar <id> 指定非主要行事曆。Calendar 查詢需要新的
OAuth 登入,且該登入必須包含 Calendar 事件唯讀權限範圍。
calendar-events 會預覽相符的 Meet 事件,並標記
latest、artifacts、attendance 或 export 將會選擇的事件。
如果你已知道會議記錄 ID,可以直接指定它:
spaces.endActiveConference,並需要 OAuth 對已授權帳戶可管理的空間具備
meetings.space.created 權限範圍。
OpenClaw 接受 Meet URL、會議代碼或 spaces/{id} 輸入,並在結束作用中會議前將其解析為
API 空間資源。
它和 googlemeet leave 是分開的:leave 會停止 OpenClaw 的本機/工作階段
參與,而 end-active-conference 會要求 Google Meet 結束該空間的作用中
會議。
寫入可讀報告:
artifacts 會傳回會議記錄中繼資料,以及參與者、錄影、
逐字稿、結構化逐字稿項目和智慧筆記資源中繼資料。使用 --no-transcript-entries 可略過
大型會議的項目查詢。attendance 會將參與者展開為
參與者工作階段列,包含首次/最後出現時間、工作階段總時長、
遲到/提前離開標記,並依已登入使用者或顯示名稱合併重複的參與者資源。
傳入 --no-merge-duplicates 可讓原始參與者
資源保持分開,傳入 --late-after-minutes 可調整遲到偵測,並傳入
--early-before-minutes 可調整提前離開偵測。
export 會寫入一個包含 summary.md、attendance.csv、
transcript.md、artifacts.json、attendance.json 和 manifest.json 的資料夾。
manifest.json 會記錄所選輸入、匯出選項、會議記錄、
輸出檔案、計數、權杖來源、使用過的 Calendar 事件,以及任何
部分擷取警告。傳入 --zip 也會在資料夾旁寫入可攜式封存檔。
傳入 --include-doc-bodies 可透過 Google Drive files.export 匯出連結的逐字稿和
智慧筆記 Google Docs 文字;這需要新的 OAuth 登入,且該登入必須包含 Drive Meet 唯讀權限範圍。若未使用
--include-doc-bodies,匯出內容只會包含 Meet 中繼資料和結構化逐字稿
項目。如果 Google 傳回部分成果失敗,例如智慧筆記
清單、逐字稿項目或 Drive 文件本文錯誤,摘要和
manifest 會保留警告,而不是讓整個匯出失敗。
使用 --dry-run 可擷取相同的成果/出席資料並列印
manifest JSON,而不建立資料夾或 ZIP。這在寫入
大型匯出前,或當 agent 只需要計數、所選記錄和
警告時很有用。
Agent 也可以透過 google_meet 工具建立相同的套件:
"dryRun": true 可只傳回匯出 manifest 並略過檔案寫入。
Agent 也可以建立具有明確存取政策的 API 支援房間:
test_listen:
OPENCLAW_LIVE_TEST=1會啟用受保護的即時測試。OPENCLAW_GOOGLE_MEET_LIVE_MEETING指向保留的 Meet URL、代碼或spaces/{id}。OPENCLAW_GOOGLE_MEET_CLIENT_ID或GOOGLE_MEET_CLIENT_ID提供 OAuth 用戶端 ID。OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN或GOOGLE_MEET_REFRESH_TOKEN提供 重新整理權杖。- 選用:
OPENCLAW_GOOGLE_MEET_CLIENT_SECRET、OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN和OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT使用相同但不含OPENCLAW_前綴的後援名稱。
https://www.googleapis.com/auth/meetings.space.readonly 和
https://www.googleapis.com/auth/meetings.conference.media.readonly。Calendar
查詢需要 https://www.googleapis.com/auth/calendar.events.readonly。Drive
文件本文匯出需要
https://www.googleapis.com/auth/drive.meet.readonly。
建立新的 Meet 空間:
meeting uri、來源和加入工作階段。使用 OAuth
認證資料時,它會使用官方 Google Meet API。沒有 OAuth 認證資料時,它會
使用已固定 Chrome Node 的已登入瀏覽器設定檔作為後援。Agent 可以
使用 google_meet 工具搭配 action: "create" 一次完成建立和加入。
若只要建立 URL,請傳入 "join": false。
瀏覽器後援的 JSON 輸出範例:
google_meet 工具會傳回結構化詳細資料,而不是純字串:
manualActionRequired: true 時,應回報
manualActionMessage 加上瀏覽器 Node/分頁脈絡,並停止開啟新的
Meet 分頁,直到操作員完成瀏覽器步驟。
API 建立的 JSON 輸出範例:
manualActionRequired: true 或瀏覽器後援錯誤,並要求操作者先完成 Google 登入再重試。
只有在確認你的 Cloud 專案、OAuth 主體與會議參與者已加入適用於 Meet 媒體 API 的 Google Workspace Developer Preview Program 之後,才設定 preview.enrollmentAcknowledged: true。
設定
通用 Chrome agent 路徑只需要啟用 Plugin、BlackHole、SoX、一個即時轉錄提供者金鑰,以及已設定的 OpenClaw TTS 提供者。OpenAI 是預設轉錄提供者;將realtime.voiceProvider 設為 "google",並設定 realtime.model,即可在 bidi 模式使用 Google Gemini Live,而不必變更預設 agent 模式的轉錄提供者:
plugins.entries.google-meet.config 下設定 Plugin 設定:
defaultTransport: "chrome"defaultMode: "agent"("realtime"只作為"agent"的舊版相容別名被接受;新的工具呼叫應使用"agent")chromeNode.node:選用的chrome-nodeNode ID/名稱/IPchrome.audioBackend: "blackhole-2ch"chrome.guestName: "OpenClaw Agent":在已登出的 Meet 訪客畫面使用的名稱chrome.autoJoin: true:透過chrome-node上的 OpenClaw 瀏覽器自動化,盡力填入訪客名稱並點擊立即加入chrome.reuseExistingTab: true:啟用現有 Meet 分頁,而不是開啟重複分頁chrome.waitForInCallMs: 20000:等待 Meet 分頁回報已在通話中,再觸發回話開場白chrome.audioFormat: "pcm16-24khz":命令配對音訊格式。只有仍輸出電話音訊的舊版/自訂命令配對才使用"g711-ulaw-8khz"。chrome.audioBufferBytes: 4096:用於產生 Chrome 命令配對音訊命令的 SoX 處理緩衝區。這是 SoX 預設 8192 位元組緩衝區的一半,可降低預設管線延遲,同時保留在繁忙主機上提高數值的空間。低於 SoX 最小值的值會被箝制為 17 位元組。chrome.audioInputCommand:從 CoreAudioBlackHole 2ch讀取,並以chrome.audioFormat寫入音訊的 SoX 命令chrome.audioOutputCommand:讀取chrome.audioFormat的音訊,並寫入 CoreAudioBlackHole 2ch的 SoX 命令chrome.bargeInInputCommand:選用的本機麥克風命令,會在助理播放處於作用中時,寫入有號 16 位元小端序單聲道 PCM,以偵測真人插話。這目前適用於 Gateway 託管的chrome命令配對橋接。chrome.bargeInRmsThreshold: 650:在chrome.bargeInInputCommand上計為真人打斷的 RMS 音量chrome.bargeInPeakThreshold: 2500:在chrome.bargeInInputCommand上計為真人打斷的峰值音量chrome.bargeInCooldownMs: 900:重複清除真人打斷之間的最小延遲mode: "agent":預設回話模式。參與者語音會由已設定的即時轉錄提供者轉錄,送至每場會議子 agent 工作階段中的已設定 OpenClaw agent,並透過一般 OpenClaw TTS 執行階段唸回。mode: "bidi":後援的直接雙向即時模型模式。即時語音提供者會直接回答參與者語音,並可呼叫openclaw_agent_consult以取得更深入/由工具支援的回答。mode: "transcribe":沒有回話橋接的僅觀察模式。realtime.provider: "openai":下方作用域提供者欄位未設定時使用的相容性後援。realtime.transcriptionProvider: "openai":agent模式用於即時轉錄的提供者 ID。realtime.voiceProvider:bidi模式用於直接即時語音的提供者 ID。將此設為"google"可使用 Gemini Live,同時讓 agent 模式轉錄保留在 OpenAI。realtime.toolPolicy: "safe-read-only"realtime.instructions:簡短口語回覆,並使用openclaw_agent_consult取得更深入回答realtime.introMessage:即時橋接連線時的簡短口語就緒檢查;將它設為""可安靜加入realtime.agentId:openclaw_agent_consult的選用 OpenClaw agent ID;預設為main
messages.tts.providers.elevenlabs.voiceId。啟用 TTS 模型覆寫時,agent 回覆也可以使用逐則回覆的 [[tts:voiceId=... model=eleven_v3]] 指令,但設定是會議的確定性預設值。加入時,記錄應顯示 transcriptionProvider=elevenlabs,且每則口語回覆都應記錄 provider=elevenlabs model=eleven_v3 voice=<voiceId>。
僅 Twilio 設定:
voiceCall.enabled 預設為 true;搭配 Twilio 傳輸時,它會將實際 PSTN 通話、DTMF 與開場問候委派給 Voice Call Plugin。Voice Call 會在開啟即時媒體串流前播放 DTMF 序列,然後使用已儲存的開場文字作為初始即時問候。如果未啟用 voice-call,Google Meet 仍可驗證並記錄撥號計畫,但無法發起 Twilio 通話。
工具
Agents 可以使用google_meet 工具:
transport: "chrome"。當 Chrome 在配對的 Node 上執行時,例如 Parallels VM,使用 transport: "chrome-node"。在這兩種情況下,模型提供者與 openclaw_agent_consult 都會在 Gateway 主機上執行,因此模型憑證會保留在那裡。使用預設 mode: "agent" 時,即時轉錄提供者負責聆聽,已設定的 OpenClaw agent 產生回答,一般 OpenClaw TTS 會將回答說進 Meet。當你希望即時語音模型直接回答時,使用 mode: "bidi"。原始 mode: "realtime" 仍作為 mode: "agent" 的舊版相容別名被接受,但已不再於 agent 工具結構描述中宣傳。agent 模式記錄會在橋接啟動時包含解析後的轉錄提供者/模型,並在每次合成回覆後包含 TTS 提供者、模型、語音、輸出格式與取樣率。
使用 action: "status" 列出作用中工作階段,或檢查工作階段 ID。使用 action: "speak" 搭配 sessionId 與 message,讓即時 agent 立即說話。使用 action: "test_speech" 建立或重用工作階段、觸發已知片語,並在 Chrome 主機可回報時傳回 inCall 健康狀態。test_speech 一律強制使用 mode: "agent",且若被要求在 mode: "transcribe" 中執行會失敗,因為僅觀察工作階段刻意不能輸出語音。其 speechOutputVerified 結果是基於此測試呼叫期間即時音訊輸出位元組增加,因此重用已有舊音訊的工作階段不會計為新的成功語音檢查。使用 action: "leave" 將工作階段標記為已結束。
status 會在可用時包含 Chrome 健康狀態:
inCall:Chrome 看起來位於 Meet 通話中micMuted:盡力判斷的 Meet 麥克風狀態manualActionRequired/manualActionReason/manualActionMessage:瀏覽器設定檔需要手動登入、Meet 主持人准入、權限,或在語音可運作前修復瀏覽器控制speechReady/speechBlockedReason/speechBlockedMessage:受管理的 Chrome 語音目前是否允許。speechReady: false表示 OpenClaw 未將開場/測試片語送入音訊橋接。providerConnected/realtimeReady:即時語音橋接狀態lastInputAt/lastOutputAt:橋接最後看見或送出的音訊audioOutputRouted/audioOutputDeviceLabel:Meet 分頁的媒體輸出是否已主動路由到橋接使用的 BlackHole 裝置lastSuppressedInputAt/suppressedInputBytes:助理播放處於作用中時被忽略的 loopback 輸入
Agent 與 bidi 模式
Chromeagent 模式針對「我的 agent 在會議中」的行為最佳化。即時轉錄提供者會聽取會議音訊,最終參與者逐字稿會被路由到已設定的 OpenClaw agent,回答則透過一般 OpenClaw TTS 執行階段說出。當你希望即時語音模型直接回答時,設定 mode: "bidi"。相近的最終逐字稿片段會在諮詢前合併,避免一個口語回合產生多個過時的部分回答。排隊的助理音訊仍在播放時,即時輸入也會被抑制,且近期類似助理的逐字稿回音會在 agent 諮詢前被忽略,避免 BlackHole loopback 讓 agent 回答自己的語音。
| 模式 | 誰決定回答 | 語音輸出路徑 | 使用時機 |
|---|---|---|---|
agent | 已設定的 OpenClaw agent | 一般 OpenClaw TTS 執行階段 | 你想要「我的 agent 在會議中」的行為 |
bidi | 即時語音模型 | 即時語音提供者音訊回應 | 你想要最低延遲的對話式語音循環 |
bidi 模式中,當即時模型需要更深入的推理、目前資訊,或一般 OpenClaw 工具時,可以呼叫 openclaw_agent_consult。
諮詢工具會在幕後執行一般的 OpenClaw 代理,並帶入近期會議轉錄脈絡,然後回傳簡潔的口語答案。在 agent 模式中,OpenClaw 會將該答案直接傳送給 TTS 執行階段;在 bidi 模式中,即時語音模型可以把諮詢結果說回會議中。它使用與語音通話相同的共用諮詢機制。
預設情況下,諮詢會針對 main 代理執行。當 Meet 通道應諮詢專用的 OpenClaw 代理工作區、模型預設值、工具政策、記憶體和工作階段歷史時,請設定 realtime.agentId。
代理模式諮詢會使用每場會議各自的 agent:<id>:subagent:google-meet:<session> 工作階段金鑰,讓後續問題保留會議脈絡,同時繼承已設定代理的一般代理政策。
realtime.toolPolicy 控制諮詢執行:
safe-read-only:公開諮詢工具,並將一般代理限制為read、web_search、web_fetch、x_search、memory_search和memory_get。owner:公開諮詢工具,並讓一般代理使用一般代理工具政策。none:不要向即時語音模型公開諮詢工具。
即時測試檢查清單
將會議交給無人值守代理之前,請使用此順序:googlemeet setup全部為綠色。- 當 Chrome-node 是預設傳輸或已釘選節點時,
googlemeet setup會包含chrome-node-connected。 nodes status顯示所選節點已連線。- 所選節點會同時公布
googlemeet.chrome和browser.proxy。 - Meet 分頁加入通話,且
test-speech回傳 Chrome 健康狀態並包含inCall: true。
googlemeet setup包含綠色的twilio-voice-call-plugin、twilio-voice-call-credentials和twilio-voice-call-webhook檢查。- Gateway 重新載入後,CLI 中可使用
voicecall。 - 回傳的工作階段包含
transport: "twilio"和twilio.voiceCallId。 openclaw logs --follow顯示 DTMF TwiML 先於即時 TwiML 提供,接著是已佇列初始問候語的即時橋接。googlemeet leave <sessionId>會掛斷委派的語音通話。
疑難排解
代理看不到 Google Meet 工具
確認 Plugin 已在 Gateway 設定中啟用,並重新載入 Gateway:plugins.entries.google-meet,請重新啟動或重新載入 Gateway。執行中的代理只會看到目前 Gateway 行程所註冊的 Plugin 工具。
在非 macOS Gateway 主機上,面向代理的 google_meet 工具仍會顯示,但本機 Chrome 回話動作會在觸及音訊橋接之前被封鎖。本機 Chrome 回話音訊目前依賴 macOS BlackHole 2ch,因此 Linux 代理應使用 mode: "transcribe"、Twilio 撥入,或 macOS chrome-node 主機,而不是預設的本機 Chrome 代理路徑。
沒有已連線且支援 Google Meet 的節點
在節點主機上執行:googlemeet.chrome 加上 browser.proxy。Gateway 設定必須允許這些節點命令:
googlemeet setup 的 chrome-node-connected 失敗,或 Gateway 記錄回報 gateway token mismatch,請使用目前的 Gateway 權杖重新安裝或重新啟動節點。對於 LAN Gateway,這通常表示:
瀏覽器開啟但代理無法加入
對僅觀察加入執行googlemeet test-listen,或對即時加入執行 googlemeet test-speech,然後檢查回傳的 Chrome 健康狀態。如果任一探測回報 manualActionRequired: true,請向操作員顯示 manualActionMessage,並停止重試,直到瀏覽器動作完成。
常見的手動動作:
- 登入 Chrome 設定檔。
- 從 Meet 主持帳戶允許訪客進入。
- 當 Chrome 原生權限提示出現時,授予 Chrome 麥克風/攝影機權限。
- 關閉或修復卡住的 Meet 權限對話方塊。
會議建立失敗
設定 OAuth 憑證時,googlemeet create 會先使用 Google Meet API spaces.create 端點。沒有 OAuth 憑證時,會退回到已釘選的 Chrome 節點瀏覽器。請確認:
- 對於 API 建立:已設定
oauth.clientId和oauth.refreshToken,或存在相符的OPENCLAW_GOOGLE_MEET_*環境變數。 - 對於 API 建立:重新整理權杖是在新增建立支援後產生。較舊的權杖可能缺少
meetings.space.created範圍;請重新執行openclaw googlemeet auth login --json並更新 Plugin 設定。 - 對於瀏覽器備援:
defaultTransport: "chrome-node",且chromeNode.node指向具備browser.proxy和googlemeet.chrome的已連線節點。 - 對於瀏覽器備援:該節點上的 OpenClaw Chrome 設定檔已登入 Google,且可以開啟
https://meet.google.com/new。 - 對於瀏覽器備援:重試會先重用現有的
https://meet.google.com/new或 Google 帳戶提示分頁,再開啟新分頁。如果代理逾時,請重試工具呼叫,而不是手動開啟另一個 Meet 分頁。 - 對於瀏覽器備援:如果工具回傳
manualActionRequired: true,請使用回傳的browser.nodeId、browser.targetId、browserUrl和manualActionMessage來引導操作員。在該動作完成前,不要迴圈重試。 - 對於瀏覽器備援:如果 Meet 顯示「Do you want people to hear you in the meeting?」,請保持分頁開啟。OpenClaw 應透過瀏覽器自動化點擊 Use microphone,或在僅建立備援時點擊 Continue without microphone,並繼續等待產生的 Meet URL。如果無法做到,錯誤應提及
meet-audio-choice-required,而不是google-login-required。
代理已加入但不說話
檢查即時路徑:mode: "agent",直接即時語音備援請使用 mode: "bidi"。mode: "transcribe" 會刻意不啟動回話橋接。對於僅觀察偵錯,請在參與者發言後執行 openclaw googlemeet status --json <session-id>,並檢查 captioning、transcriptLines 和 lastCaptionText。如果 inCall 為 true 但 transcriptLines 維持在 0,可能是 Meet 字幕已停用、觀察器安裝後沒有人發言、Meet UI 已變更,或該會議語言/帳戶無法使用即時字幕。
googlemeet test-speech 一律檢查即時路徑,並回報該次呼叫是否觀察到橋接輸出位元組。如果 speechOutputVerified 為 false 且 speechOutputTimedOut 為 true,即時提供者可能已接受語句,但 OpenClaw 沒有看到新的輸出位元組到達 Chrome 音訊橋接。
也請驗證:
- Gateway 主機上有可用的即時提供者金鑰,例如
OPENAI_API_KEY或GEMINI_API_KEY。 - Chrome 主機上可看見
BlackHole 2ch。 - Chrome 主機上存在
sox。 - Meet 麥克風和喇叭透過 OpenClaw 使用的虛擬音訊路徑路由。對於本機 Chrome 即時加入,
doctor應顯示meet output routed: yes。
googlemeet doctor [session-id] 會列印工作階段、節點、通話中狀態、手動動作原因、即時提供者連線、realtimeReady、音訊輸入/輸出活動、最後音訊時間戳記、位元組計數器和瀏覽器 URL。需要原始 JSON 時,請使用 googlemeet status [session-id] --json。需要在不暴露權杖的情況下驗證 Google Meet OAuth 重新整理時,請使用 googlemeet doctor --oauth;如果還需要 Google Meet API 證明,請加上 --meeting 或 --create-space。
如果代理逾時,而你可以看到 Meet 分頁已開啟,請檢查該分頁,不要開啟另一個分頁:
recover_current_tab。它會聚焦並檢查所選傳輸的現有 Meet 分頁。使用 chrome 時,它會透過 Gateway 使用本機瀏覽器控制;使用 chrome-node 時,它會使用已設定的 Chrome 節點。它不會開啟新分頁或建立新工作階段;它會回報目前阻礙,例如登入、准入、權限或音訊選擇狀態。CLI 命令會與已設定的 Gateway 通訊,因此 Gateway 必須正在執行;chrome-node 也需要 Chrome 節點已連線。
Twilio 設定檢查失敗
當voice-call 不被允許或未啟用時,twilio-voice-call-plugin 會失敗。請將它新增至 plugins.allow、啟用 plugins.entries.voice-call,並重新載入 Gateway。
當 Twilio 後端缺少帳戶 SID、驗證權杖或呼叫者號碼時,twilio-voice-call-credentials 會失敗。請在 Gateway 主機上設定這些項目:
voice-call 沒有公開 Webhook 暴露,或 publicUrl 指向 loopback 或私人網路空間時,twilio-voice-call-webhook 會失敗。請將 plugins.entries.voice-call.config.publicUrl 設為公開提供者 URL,或設定 voice-call 通道/Tailscale 暴露。
Loopback 和私人 URL 對電信商回呼無效。不要使用 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 或 fd00::/8 作為 publicUrl。
對於穩定的公開 URL:
voicecall smoke 預設只會檢查就緒狀態。若要試跑特定號碼:
--yes:
Twilio 通話開始,但從未進入會議
確認 Meet 事件公開了電話撥入詳細資訊。傳入確切的撥入號碼和 PIN,或自訂 DTMF 序列:--dtmf-sequence 中使用前置的 w 或逗號。
如果電話已建立,但 Meet 名冊從未顯示撥入參與者:
- 執行
openclaw googlemeet doctor <session-id>,確認委派的 Twilio 通話 ID、DTMF 是否已排入佇列,以及是否已要求介紹問候語。 - 執行
openclaw voicecall status --call-id <id>,並確認通話仍處於作用中。 - 執行
openclaw voicecall tail,並檢查 Twilio Webhook 是否抵達 Gateway。 - 執行
openclaw logs --follow,並尋找 Twilio Meet 序列:Google Meet 委派加入、語音通話儲存並提供連線前 DTMF TwiML、語音通話為 Twilio 通話提供即時 TwiML,接著 Google Meet 透過voicecall.speak要求介紹語音。 - 重新執行
openclaw googlemeet setup --transport twilio;綠色的設定檢查是必要的,但不能證明會議 PIN 序列正確。 - 確認撥入號碼與 PIN 屬於同一個 Meet 邀請和區域。
- 如果 Meet 回應緩慢,或通話轉錄在已傳送連線前 DTMF 後仍顯示要求輸入 PIN 的提示,請將
voiceCall.dtmfDelayMs從預設的 12 秒調高。 - 如果參與者已加入,但你聽不到問候語,請檢查
openclaw logs --follow是否有 DTMF 後的voicecall.speak要求,以及媒體串流 TTS 播放或 Twilio<Say>後援。如果通話轉錄仍包含「enter the meeting PIN」,代表電話端尚未加入 Meet 會議室,因此會議參與者不會聽到語音。
plugins.entries.voice-call.config.publicUrl 或已設定的通道。請參閱語音通話疑難排解。
注意事項
Google Meet 的官方媒體 API 偏向接收,因此若要在 Meet 通話中說話,仍需要參與者路徑。此 Plugin 讓該邊界保持可見:Chrome 處理瀏覽器參與和本機音訊路由;Twilio 處理電話撥入參與。 Chrome 回話模式需要BlackHole 2ch,以及以下其中一種:
chrome.audioInputCommand加上chrome.audioOutputCommand:OpenClaw 擁有橋接器,並在這些命令與所選供應商之間,以chrome.audioFormat傳送音訊。Agent 模式使用即時轉錄加上常規 TTS;雙向模式使用即時語音供應商。預設 Chrome 路徑是 24 kHz PCM16,搭配chrome.audioBufferBytes: 4096;8 kHz G.711 mu-law 仍可供舊版命令配對使用。chrome.audioBridgeCommand:外部橋接命令擁有整個本機音訊路徑,並且必須在啟動或驗證其常駐程式後結束。這只對bidi有效,因為agent模式需要直接的命令配對存取權才能使用 TTS。
google_meet 工具時,會議顧問工作階段會先分叉呼叫者目前的轉錄,再回答參與者語音。Meet 工作階段仍會保持分離(agent:<agentId>:subagent:google-meet:<sessionId>),因此會議後續追問不會直接改變呼叫者轉錄。
為了乾淨的雙工音訊,請透過不同的虛擬裝置或 Loopback 風格的虛擬裝置圖,路由 Meet 輸出和 Meet 麥克風。單一共用的 BlackHole 裝置可能會把其他參與者的聲音回音到通話中。
使用命令配對 Chrome 橋接器時,chrome.bargeInInputCommand 可以監聽另一個本機麥克風,並在人類開始說話時清除助理播放。即使共用的 BlackHole loopback 輸入在助理播放期間暫時被抑制,這也能讓人類語音優先於助理輸出。和 chrome.audioInputCommand 與 chrome.audioOutputCommand 一樣,它是由操作員設定的本機命令。請使用明確受信任的命令路徑或引數清單,且不要指向來自不受信任位置的指令碼。
googlemeet speak 會觸發 Chrome 工作階段的作用中回話音訊橋接器。googlemeet leave 會停止該橋接器。對於透過語音通話 Plugin 委派的 Twilio 工作階段,leave 也會掛斷底層語音通話。當你也想關閉 API 管理空間的作用中 Google Meet 會議時,請使用 googlemeet end-active-conference。