google-meet Plugin は、OpenClaw エージェントに代わって明示的な Meet URL に参加します。意図的に対象を限定しています。
https://meet.google.com/...URL にのみ参加します。自ら検出した電話番号を使って会議にダイヤルインすることはありません。googlemeet createは、Google Meet API(またはブラウザのフォールバック)を介して新しい Meet URL を発行し、デフォルトでその会議に参加できます。- Chrome での参加には、ログイン済みの Chrome プロファイルを使用します。必要に応じて、ペアリング済み Node 上で実行できます。Twilio での参加では、音声通話 Pluginを介して電話番号と PIN/DTMF をダイヤルします。Meet URL に直接ダイヤルすることはできません。
mode: "agent"(デフォルト)は、リアルタイムプロバイダーで参加者の発話を文字起こしし、設定済みの OpenClaw エージェントに転送して、通常の OpenClaw TTS で回答を読み上げます。mode: "bidi"では、リアルタイム音声モデルが直接回答します。mode: "transcribe"は、応答せず監視のみで参加します。- Plugin が通話に参加した際、同意に関するアナウンスは自動では行われません。
- CLI コマンドは
googlemeetです。meetは、より広範なエージェントの電話会議ワークフロー用に予約されています。
クイックスタート
Plugin とローカル音声依存関係をインストールし、リアルタイムプロバイダーのキーを設定します。OpenAI はagent モードのデフォルトの文字起こしプロバイダーです。Google Gemini Live は bidi モードの音声プロバイダーとして使用できます。
blackhole-2ch は、Chrome が音声を経由させる BlackHole 2ch 仮想オーディオデバイスをインストールします。Homebrew のインストーラーでは、macOS がデバイスを認識する前に再起動が必要です。
openclaw plugins disable google-meet を実行します。
セットアップを確認してから参加します。
setup の出力はエージェントが読み取れる形式で、モードとトランスポートに対応しています。Chrome プロファイル、Node の固定、およびリアルタイム Chrome 参加の場合は BlackHole/SoX オーディオブリッジと遅延イントロの確認結果を報告します。監視のみの参加では、リアルタイムの前提条件を確認しません。
setup は、voice-call、Twilio 認証情報、および公開 Webhook の外部公開が準備できているかどうかも報告します。エージェントが参加する前に、該当するトランスポート/モードの ok: false チェックをすべてブロッカーとして扱ってください。機械可読出力には --json を使用し、特定のトランスポートを事前にプリフライトするには --transport chrome|chrome-node|twilio を使用します。
google_meet ツールを介して参加させます。
google_meet はアーティファクト、カレンダー、セットアップ、文字起こし、Twilio、および chrome-node アクションで引き続き表示されます。ただし、ローカル Chrome の音声応答(mode: "agent" または "bidi" を伴う transport: "chrome")は、オーディオブリッジに到達する前にブロックされます。この経路は現在、macOS の BlackHole 2ch に依存しているためです。代わりに、mode: "transcribe"、Twilio ダイヤルイン、または macOS の chrome-node ホストを使用してください。
会議を作成する
create には 2 つの経路があり、結果の source フィールドで報告されます。
api:Google Meet OAuth 認証情報が設定されている場合に使用されます。決定的に動作し、ブラウザ UI の状態には依存しません。browser:OAuth 認証情報がない場合に使用されます。OpenClaw は固定された Chrome Node 上でhttps://meet.google.com/newを開き、Google が実際の会議コード URL にリダイレクトするまで待機します。その Node 上の OpenClaw Chrome プロファイルは、事前に Google にログインしている必要があります。参加と作成のどちらでも、新しいタブを開く前に、既存の Meet タブ(または処理中の.../new/Google アカウントのプロンプトタブ)を再利用します。タブの照合では、authuserのような無害なクエリ文字列は無視されます。
create はデフォルトで参加し、joined: true と参加セッションを返します。URL のみを発行するには、--no-join(CLI)または "join": false(ツール)を渡します。
API で作成したルームでは、Google アカウントのデフォルト設定を継承せず、明示的なアクセスポリシーを設定します。
これは API で作成したルームにのみ適用されるため、OAuth を設定する必要があります。このオプションが追加される前に認証した場合は、OAuth 同意画面に
meetings.space.settings スコープを追加した後、openclaw googlemeet auth login --json を再実行してください。
ブラウザのフォールバックで Google ログインまたは Meet の権限に関するブロッカーが発生した場合、ツールは manualActionReason、manualActionMessage、および browser.nodeId/browser.targetId/browserUrl とともに manualActionRequired: true を返します。そのメッセージを報告し、オペレーターがブラウザでの手順を完了するまで、新しい Meet タブを開かないでください。
監視のみで参加する
"mode": "transcribe" を設定すると、双方向リアルタイムブリッジをスキップします(BlackHole/SoX は不要で、音声応答もありません)。文字起こしモードの Chrome 参加では、OpenClaw によるマイク/カメラの権限付与と Meet の Use microphone 経路もスキップします。Meet に音声選択の中間画面が表示された場合、自動処理は最初に Continue without microphone を試みます。管理対象の Chrome トランスポートは、すべてのモードでベストエフォートの Meet 字幕オブザーバーをインストールします。これにより、ライブのエージェント相談経路を変更せずに、永続的なメモを利用できます。googlemeet status --json と googlemeet doctor は、captioning、captionsEnabledAttempted、transcriptLines、lastCaptionAt、lastCaptionSpeaker、lastCaptionText、および recentTranscript の末尾を報告します。
範囲が制限されたセッショントランスクリプトについては、追跡対象の正確な Meet タブを読み取ります。
nextIndex を保存しても、その後のテキスト展開が欠落することはありません。退出時には、スナップショットの前に表示中の行が確定されます。上限を超えた場合、droppedLines は先頭から失われた行を報告します。範囲が制限された googlemeet transcript の末尾では、直近に終了した 4 セッションのみを保持し、Gateway とともにリセットされます。これとは別に、OpenClaw は会議中、完了した字幕行を共有状態データベースに追記し、退出時に派生サマリーを書き込みます。永続的なメモを確認またはエクスポートするには、openclaw transcriptsを使用します。
自動メモはデフォルトで有効です。永続的なメモをグローバルに
無効にするには、transcripts.enabled: false を設定します。明示的な transcribe モードでも、
公開されるのは範囲が制限されたライブ末尾のみです。Twilio 参加にはブラウザの字幕ストリームがなく、
この経路では記録されません。
はい/いいえで判定するリスニングプローブの場合:
listenVerified、listenTimedOut、手動操作フィールド、および現在の字幕ヘルスを返します。
リアルタイムセッションのヘルス
音声応答セッション中、google_meet のステータスは Chrome/オーディオブリッジのヘルスを報告します。対象には、inCall、manualActionRequired、providerConnected、realtimeReady、audioInputActive、audioOutputActive、最後の入出力タイムスタンプ、バイトカウンター、およびブリッジが閉じている状態が含まれます。管理対象の Chrome セッションでは、ヘルスが inCall: true を報告した後にのみ、イントロ/テストフレーズを読み上げます。それ以外の場合は speechReady: false となり、何もせず暗黙に終了するのではなく、発話の試行がブロックされます。
ローカル Chrome は、ログイン済みの OpenClaw ブラウザプロファイルを介して参加し、マイク/スピーカー経路には BlackHole 2ch が必要です。最初のスモークテストには BlackHole デバイス 1 台で十分ですが、エコーが発生する場合があります。クリーンな双方向音声には、別々の仮想デバイスまたは Loopback 形式のグラフを使用してください。
ローカル Gateway + Parallels Chrome
macOS VM に Chrome を提供するだけであれば、その VM 内に完全な Gateway やモデル API キーは必要ありません。Gateway とエージェントはローカルで実行し、Node ホストを VM 内で実行します。
VM の依存関係をインストールし、再起動して確認します。
<gateway-host> が TLS を使用しない LAN IP の場合は、その信頼できるプライベートネットワークの使用を明示的に許可します。
openclaw.json の設定ではありません)。
googlemeet.chrome とブラウザ機能/browser.proxy の両方が公開されていることを確認します。
manualActionReason および manualActionMessage とともに manualActionRequired: true を報告します。再試行を停止し、そのメッセージと browserUrl/browserTitle を報告して、手動操作の完了後にのみ再試行してください。
chromeNode.node を省略した場合、接続中の Node のうち googlemeet.chrome とブラウザ制御の両方を通知するものが正確に 1 つだけである場合に限り、OpenClaw が自動選択します。対応可能な Node が複数接続されている場合は、chromeNode.node(Node ID、表示名、またはリモート IP)を固定してください。
一般的な障害チェック
インストールに関する注意事項
Chrome のトークバックのデフォルトでは、OpenClaw がバンドルも再配布もしない 2 つの外部ツールを使用します。Homebrew を介してホスト依存関係としてインストールしてください。sox: コマンドライン音声ユーティリティ。Plugin は、デフォルトの 24 kHz PCM16 オーディオブリッジ向けに明示的な CoreAudio デバイスコマンドを発行します。blackhole-2ch: Chrome/Meet が経由するBlackHole 2chデバイスを提供する macOS 仮想オーディオドライバー。
LGPL-2.0-only AND GPL-2.0-only でライセンスされています。BlackHole は GPL-3.0 です。BlackHole と OpenClaw をバンドルするインストーラーまたはアプライアンスを構築する場合は、BlackHole のアップストリームライセンスを確認するか、Existential Audio から別途ライセンスを取得してください。
トランスポート
Chrome
OpenClaw ブラウザ制御を介して Meet URL を開き、サインイン済みの OpenClaw ブラウザプロファイルとして参加します。macOS では、Plugin は起動前にBlackHole 2ch を確認し、設定されている場合は Chrome を開く前にオーディオブリッジの正常性確認/起動コマンドを実行します。ローカル Chrome の場合は browser.defaultProfile でプロファイルを選択してください。代わりに chrome.browserProfile が chrome-node ホストへ渡されます。
BlackHole 2ch がインストールされていない場合、音声パスなしで参加するのではなく、セットアップエラーで参加に失敗します。
Twilio
Voice Call Plugin に委任される厳密なダイヤルプランです。Meet ページから電話番号を解析することはありません。Google Meet が会議用の電話ダイヤルイン番号と PIN を公開している必要があります。 Voice Call は Chrome Node ではなく、Gateway ホストで有効にしてください。openclaw.json に含めないように、Twilio 認証情報は環境変数で指定してください。
OPENAI_API_KEY とともに realtime.provider: "openai" を使用してください。
voice-call を有効にした後、Gateway を再起動または再読み込みしてください。Plugin 設定の変更は再読み込みするまで反映されません。以下で確認します。
googlemeet setup には twilio-voice-call-plugin、twilio-voice-call-credentials、および twilio-voice-call-webhook のチェックが含まれます。
--dtmf-sequence を使用し、PIN の前に一時停止するには先頭に w またはコンマを付けます。
OAuth と事前確認
googlemeet create はブラウザ自動化へフォールバックできるため、Meet リンクの作成に OAuth は任意です。公式 API による作成、スペース解決、または Meet Media API の事前確認には OAuth を設定してください。Chrome/Chrome-node による参加は OAuth に依存しません。どちらの場合も、サインイン済みの Chrome プロファイル、BlackHole/SoX、および(chrome-node の場合は)接続済み Node を使用します。
Google 認証情報を作成する
Google Cloud Console で次の操作を行います。1
プロジェクトを作成または選択する
2
Google Meet REST API を有効にする
3
OAuth 同意画面を設定する
Google Workspace 組織では Internal が最も簡単です。個人用/テスト用のセットアップでは External を使用できます。アプリが Testing の間は、認可に使用する各 Google アカウントをテストユーザーとして追加してください。
4
要求されたスコープを追加する
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(カレンダー検索)https://www.googleapis.com/auth/drive.meet.readonly(文字起こし/スマートノートのドキュメント本文エクスポート)
5
OAuth クライアント ID を作成する
アプリケーションの種類は Web application。承認済みのリダイレクト URI:
6
クライアント ID とクライアントシークレットをコピーする
spaces.create には meetings.space.created が必要です。meetings.space.readonly は Meet URL/コードをスペースに解決します。meetings.space.settings により、OpenClaw は API によるルーム作成時に accessType などの SpaceConfig 設定を渡せます。meetings.conference.media.readonly は Meet Media API の事前確認とメディア処理に使用します。実際に Media API を使用するには、Google により Developer Preview への登録が必要になる場合があります。calendar.events.readonly は、--today/--event によるカレンダー検索にのみ必要です。drive.meet.readonly は、--include-doc-bodies のエクスポートにのみ必要です。ブラウザベースの Chrome 参加のみが必要な場合は、OAuth を完全に省略してください。
リフレッシュトークンを発行する
oauth.clientId と、必要に応じて oauth.clientSecret を設定(または環境変数として渡す)してから、次を実行します。
http://localhost:8085/oauth2callback 上の localhost コールバックを使用する PKCE フローが実行され、リフレッシュトークンを含む oauth 設定ブロックが出力されます。ブラウザからローカルコールバックに到達できない場合のコピー&ペーストフローには、--manual を追加します。
oauth オブジェクトを Plugin 設定の下に保存します。
openclaw googlemeet auth login --json を再実行してください。
doctor で OAuth を確認する
ok、configured、tokenSource、expiresAt、チェックメッセージ)のみが含まれ、アクセストークン、リフレッシュトークン、クライアントシークレットは決して出力されません。
副作用を伴う作成チェックで、Meet API が有効であることと
spaces.create スコープを実証します。
403 が発生した場合、通常は Meet REST API が無効になっている、リフレッシュトークンに必要なスコープがない、または Google アカウントがそのスペースにアクセスできないことを意味します。リフレッシュトークンエラーが発生した場合は、openclaw googlemeet auth login --json を再実行し、新しい oauth ブロックを保存してください。
ブラウザフォールバックに OAuth は必要ありません。この場合、Google 認証は OpenClaw の設定ではなく、選択した Node でログイン済みの Chrome プロファイルから取得されます。
次の環境変数がフォールバックとして使用できます。
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
アーティファクトの解決、事前確認、読み取り
--meeting を指定すると、artifacts と attendance はデフォルトで最新の会議レコードを使用します。保持されているすべてのレコードを対象にするには、--all-conference-records を渡します。
カレンダー検索では、アーティファクトを読み取る前に Google Calendar から会議 URL を解決します(Calendar イベントの読み取り専用スコープを含むリフレッシュトークンが必要です)。
--today は、今日の primary カレンダーから Meet リンクを含むイベントを検索します。--event <query> は一致するイベントテキストを検索し、--calendar <id> はプライマリ以外のカレンダーを対象にします。calendar-events は一致するイベントをプレビューし、latest/artifacts/attendance/export がどれを選択するかを示します。
会議レコード ID がすでに分かっている場合は、直接指定します。
spaces.endActiveConference を呼び出します。認可済みアカウントが管理できるスペースに対して、meetings.space.created スコープを持つ OAuth が必要です。Meet URL、会議コード、または spaces/{id} を受け付け、最初に API スペースリソースへ解決します。これは googlemeet leave とは別です。leave は OpenClaw のローカルまたはセッションでの参加を停止し、end-active-conference はそのスペースの進行中の会議を終了するよう Google Meet に要求します。
読みやすいレポートを書き出します。
artifacts は、Google が公開している場合、会議レコードのメタデータに加え、参加者、録画、文字起こし、構造化された文字起こしエントリ、スマートノートの各リソースメタデータを返します。--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 Docs テキストを Drive files.export 経由でエクスポートします(Drive Meet 読み取り専用スコープが必要です)。これを指定しない場合、エクスポートには Meet のメタデータと構造化された文字起こしエントリのみが含まれます。アーティファクトの一部でエラー(スマートノート一覧、文字起こしエントリ、ドキュメント本文のエラー)が発生しても、エクスポート全体を失敗させるのではなく、概要またはマニフェストに警告が保持されます。--dry-run は同じデータを取得し、フォルダーや ZIP を作成せずにマニフェストの JSON を出力します。
エージェントは、google_meet ツール(export、accessType を指定した create、end_active_conference、test_listen)を通じて同じアクションを使用します。ツールを参照してください。
ライブスモークテスト
基本的なアーティファクトまたは出席状況のスモークテストには、
meetings.space.readonly と meetings.conference.media.readonly が必要です。カレンダー検索には calendar.events.readonly が必要です。Drive のドキュメント本文のエクスポートには drive.meet.readonly が必要です。
作成例
google_meet は単純な文字列ではなく、構造化された詳細を返します。
manualActionRequired: true またはブラウザフォールバックエラーを報告し、再試行する前に Google ログインを完了するようオペレーターに求めます。
Cloud プロジェクト、OAuth プリンシパル、会議参加者が Meet メディア API の Google Workspace Developer Preview Program に登録されていることを確認した後にのみ、preview.enrollmentAcknowledged: true を設定してください。
設定
共通の Chrome エージェントパスに必要なのは、有効化された Plugin、BlackHole、SoX、リアルタイムプロバイダーキー、設定済みの OpenClaw TTS プロバイダーだけです。デフォルト
chrome.audioBridgeCommand と chrome.audioBridgeHealthCommand を使用すると、chrome.audioInputCommand/chrome.audioOutputCommand の代わりに外部ブリッジがローカル音声パス全体を管理できます。これらを使用できるモードの制約については、注記を参照してください。
レガシーの realtime.provider: "google" 形式には openclaw doctor --fix 移行が用意されています。これらのフィールドがまだ設定されていない場合、その意図を realtime.voiceProvider: "google" と realtime.transcriptionProvider: "openai" に移します。
オプションのオーバーライド
tts.providers.elevenlabs.speakerVoiceId から取得されます。TTS モデルのオーバーライドが有効な場合、エージェントの応答では応答ごとの [[tts:speakerVoiceId=... model=eleven_v3]] ディレクティブも使用できますが、ミーティングでは設定が決定的なデフォルトです。参加時にはログに transcriptionProvider=elevenlabs が表示され、音声応答ごとに provider=elevenlabs model=eleven_v3 speakerVoiceId=<voiceId> が記録されます。
Twilio 専用設定:
voiceCall.enabled: true(デフォルト)と Twilio トランスポートを使用すると、Voice Call はリアルタイムメディアストリームを開く前に DTMF シーケンスを送信し、その後、保存された導入テキストを最初のリアルタイム挨拶として使用します。voice-call が有効でない場合でも、Google Meet はダイヤルプランを検証して記録できますが、Twilio 通話を発信することはできません。
voiceCall.gatewayUrl を未設定のままにすると、ローカルの信頼済み Gateway ランタイムが使用され、呼び出し元のエージェントが呼び出し全体を通して維持されます。設定済みの Gateway URL は引き続き明示的な WebSocket ターゲットであり、Plugin の生成元を認証できません。デフォルト以外のエージェントによる参加は、別のエージェントを暗黙に使用するのではなく、安全側に倒して失敗します。エージェントごとのルーティングが必要な場合は、Google Meet と Voice Call を同じ Gateway プロセスで実行してください。
ツール
エージェントはgoogle_meet ツールを使用します。
test_speech は常に mode: "agent" または "bidi" を強制し、mode: "transcribe" での実行を要求された場合は失敗します。観察専用セッションは音声を出力できないためです。speechOutputVerified では、最新のリアルタイム出力バイトに加えて、その出力中にブリッジのマイクキャプチャパスへ戻ってくる、無音ではない最新の音声も必要です。再利用されたセッションの古い出力やループバック信号は対象にならず、シンクバイトの増加だけでは、検証済みの発話として報告されなくなりました。
Chrome トランスポートでは、leave は Meet の Leave call ボタンをクリックした後も、再利用されたユーザー所有のタブを開いたままにします。OpenClaw が開いたタブは退出後に閉じられます。
Chrome が Gateway ホスト上で動作する場合は transport: "chrome" を、ペアリング済み Node 上で動作する場合は transport: "chrome-node" を使用します。どちらの場合も、モデルプロバイダーと openclaw_agent_consult は Gateway ホスト上で実行されるため、モデル認証情報はそこに保持されます。エージェントモードのログには、ブリッジ起動時に解決された文字起こしプロバイダーとモデルが記録され、合成された各応答の後には TTS プロバイダー、モデル、音声、出力形式、サンプルレートが記録されます。未加工の mode: "realtime" は、mode: "agent" のレガシー互換エイリアスとして引き続き受け付けられますが、ツールの mode 列挙型には表示されなくなりました。
API ベースのルームと明示的なアクセスポリシーを使用する create:
status には、利用可能な場合に Chrome の稼働状態が含まれます。
エージェントモードと双方向モード
agent モード: リアルタイム文字起こしプロバイダーが会議音声を認識し、参加者の確定済み文字起こしが設定済みの OpenClaw エージェントを経由し、応答は通常の OpenClaw TTS によって発話されます。1 回の発話ターンから複数の古い部分応答が生成されないように、時間的に近い確定済み文字起こし断片は問い合わせ前にまとめられます。キュー内のアシスタント音声がまだ再生されている間はリアルタイム入力が抑制され、BlackHole ループバックによってエージェントが自身の発話に応答しないように、直近のアシスタントに似た文字起こしエコーは問い合わせ前に無視されます。
bidi モード: リアルタイム音声モデルが直接応答し、より深い推論、最新情報、または通常の OpenClaw ツールが必要な場合は openclaw_agent_consult を呼び出せます。問い合わせツールは、直近の会議文字起こしコンテキストを使用して通常の OpenClaw エージェントをバックグラウンドで実行し、簡潔な音声応答を返します。agent モードでは OpenClaw がその応答を TTS に直接送信し、bidi モードではリアルタイム音声モデルがそれを発話できます。Voice Call と同じ共有問い合わせ機構を使用します。
デフォルトでは、問い合わせは main エージェントに対して実行されます。Meet レーンを専用のエージェントワークスペース、モデルのデフォルト設定、ツールポリシー、メモリ、セッション履歴に関連付けるには、realtime.agentId を設定します。エージェントモードの問い合わせは、会議ごとの agent:<id>:subagent:google-meet:<session> セッションキーを使用するため、フォローアップの質問でも通常のエージェントポリシーを継承しながら会議コンテキストが維持されます。エージェントがエージェントモードで google_meet を呼び出すと、参加者の発話に応答する前に、コンサルタントセッションが呼び出し元の現在のトランスクリプトからフォークされます。Meet セッションは分離されたままなので、会議でのフォローアップによって呼び出し元のトランスクリプトが直接変更されることはありません。
realtime.toolPolicy は問い合わせの実行を制御します。
問い合わせセッションキーは Meet セッションごとにスコープ設定されるため、同じ会議中の後続の問い合わせ呼び出しでは以前の問い合わせコンテキストが再利用されます。
Chrome が完全に参加した後、音声による準備完了チェックを強制する場合:
ライブテストのチェックリスト
無人エージェントに会議を任せる前に、次を実行します。googlemeet setupはすべて正常で、Chrome-node がデフォルトのトランスポートである場合、または Node が固定されている場合はchrome-node-connectedが含まれます。nodes statusには、選択した Node が接続済みとして表示され、googlemeet.chromeとbrowser.proxyの両方がアドバタイズされます。- Meet タブが参加し、
test-speechはinCall: trueを含む Chrome のヘルス情報を返します。
googlemeet setupには、正常なtwilio-voice-call-plugin、twilio-voice-call-credentials、twilio-voice-call-webhookのチェックが含まれます。- Gateway の再読み込み後、CLI で
voicecallが利用できます。 - 返されたセッションには
transport: "twilio"とtwilio.voiceCallIdがあります。 openclaw logs --followには、リアルタイム TwiML より先に DTMF TwiML が配信され、その後、最初の挨拶がキューに追加されたリアルタイムブリッジが表示されます。googlemeet leave <sessionId>は委任された音声通話を切断します。
トラブルシューティング
エージェントに Google Meet ツールが表示されない
Plugin が有効になっていることを確認し、Gateway を再読み込みします。実行中のエージェントに表示されるのは、現在の Gateway プロセスによって登録された Plugin ツールのみです。google_meet は表示されますが、ローカル Chrome のトークバックアクションは、オーディオブリッジに到達する前にブロックされます。デフォルトのローカル Chrome エージェントパスではなく、mode: "transcribe"、Twilio ダイヤルイン、または macOS の chrome-node ホストを使用してください。
Google Meet 対応の接続済み Node がない
Node ホストで:googlemeet.chrome と browser.proxy が一覧に含まれている必要があります。また、Gateway 設定で両方を許可する必要があります。
googlemeet setup が chrome-node-connected で失敗する場合、または Gateway ログに gateway token mismatch が記録される場合は、現在の Gateway トークンを使用して Node を再インストールまたは再起動します。
ブラウザーは開くがエージェントが参加できない
観察専用の参加にはgooglemeet test-listen、リアルタイム参加には googlemeet test-speech を実行し、返された Chrome のヘルス情報を確認します。いずれかが manualActionRequired: true を報告した場合は、オペレーターに manualActionMessage を表示し、ブラウザー操作が完了するまで再試行を停止します。
一般的な手動操作:Chrome プロファイルにログインする、Meet ホストアカウントからゲストの参加を承認する、ネイティブプロンプトが表示されたら Chrome にマイクとカメラの権限を付与する、停止した Meet の権限ダイアログを閉じるか修復する。
Meet に「Do you want people to hear you in the meeting?」と表示されただけで「ログインしていない」と報告しないでください。これは Meet の音声選択インタースティシャルです。利用可能な場合、OpenClaw はブラウザー自動化を通じて Use microphone をクリックし、実際の会議状態になるまで待機を続けます。作成専用のブラウザーフォールバックでは、URL の生成にリアルタイム音声パスは不要なため、代わりに Continue without microphone をクリックすることがあります。
会議の作成に失敗する
OAuth が設定されている場合、googlemeet create は Meet API の spaces.create を使用し、それ以外の場合は固定された Chrome Node のブラウザーを使用します。次を確認してください。
- API による作成:
oauth.clientIdとoauth.refreshToken(または対応するOPENCLAW_GOOGLE_MEET_*環境変数)が存在し、作成サポートの追加後にリフレッシュトークンが発行されていること。古いトークンにはmeetings.space.createdが含まれていない可能性があるため、openclaw googlemeet auth login --jsonを再実行してください。 - ブラウザーフォールバック:
defaultTransport: "chrome-node"とchromeNode.nodeが、browser.proxyとgooglemeet.chromeを備えた接続済み Node を指していること。その Node の OpenClaw Chrome プロファイルがログイン済みで、https://meet.google.com/newを開けること。 - ブラウザーフォールバックの再試行:新しいタブを開く前に、既存の
.../newまたは Google アカウントのプロンプトタブを再利用します。別のタブを手動で開くのではなく、ツール呼び出しを再試行してください。 - 手動操作:ツールが
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 をクリックし、生成された URL を待ち続ける必要があります。実行できない場合、エラーには
google-login-requiredではなくmeet-audio-choice-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 オーディオブリッジに到達する新しい出力バイトを確認できなかった可能性があります。
次の点も確認してください。リアルタイムプロバイダーキー(OPENAI_API_KEY または GEMINI_API_KEY)が Gateway ホストで利用可能であること、Chrome ホストに BlackHole 2ch が表示されること、そこに sox が存在すること、Meet のマイクとスピーカーが仮想オーディオパスを経由してルーティングされていること(ローカル Chrome のリアルタイム参加では、doctor に meet output routed: yes が表示される必要があります)。
googlemeet doctor [session-id] は、セッション、Node、通話中の状態、手動操作の理由、リアルタイムプロバイダー接続、realtimeReady、音声入出力アクティビティ、最終音声タイムスタンプ、バイトカウンター、ブラウザー URL を出力します。生の JSON には googlemeet status [session-id] --json、トークンを公開せずに OAuth の更新を検証するには googlemeet doctor --oauth(--meeting または --create-space を追加)を使用します。
エージェントがタイムアウトし、Meet タブがすでに開いている場合は、新しいタブを開かずに確認します。
recover_current_tab です。新しいタブやセッションを開かず、選択したトランスポート(chrome ではローカルブラウザー制御、chrome-node では設定済み Node)にある既存の Meet タブにフォーカスして調査し、現在の障害要因(ログイン、参加承認、権限、音声選択の状態)を報告します。CLI コマンドは設定済みの Gateway と通信するため、Gateway が実行中である必要があります。chrome-node では Node も接続済みである必要があります。
Twilio のセットアップチェックに失敗する
voice-call が許可または有効化されていない場合、twilio-voice-call-plugin は失敗します。plugins.allow に追加し、plugins.entries.voice-call を有効にして、Gateway を再読み込みしてください。
Twilio バックエンドにアカウント SID、認証トークン、発信者番号がない場合、twilio-voice-call-credentials は失敗します。
voice-call に公開 Webhook がない場合、または publicUrl がループバックやプライベートネットワーク空間を指している場合、twilio-voice-call-webhook は失敗します。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 として使用しないでください。通信事業者のコールバックはこれらに到達できません。plugins.entries.voice-call.config.publicUrl を公開 URL に設定するか、トンネルまたは Tailscale による公開を設定してください。
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 が参加を委任し、Voice Call が接続前の DTMF TwiML を保存して配信し、Voice Call が Twilio 通話用のリアルタイム TwiML を配信した後、Google Meet がvoicecall.speakを使用して導入の発話を要求します。openclaw googlemeet setup --transport twilioを再実行します。正常なセットアップチェックは必須ですが、会議の PIN シーケンスが正しいことまでは証明しません。- ダイヤルイン番号が、PIN と同じ Meet の招待およびリージョンに属していることを確認します。
- Meet の応答が遅い場合、または接続前の DTMF 送信後も通話トランスクリプトに PIN プロンプトが表示されている場合は、
voiceCall.dtmfDelayMsをデフォルトの 12 秒から増やします。 - 参加者が参加しても挨拶が聞こえない場合は、DTMF 後の
voicecall.speakリクエスト、およびメディアストリームの TTS 再生または Twilio の<Say>フォールバックについてopenclaw logs --followを確認します。トランスクリプトに「enter the meeting PIN」と表示されたままの場合、電話回線側はまだ Meet ルームに参加していないため、参加者には音声が聞こえません。
plugins.entries.voice-call.config.publicUrl または設定済みのトンネルに到達できる必要があります。音声通話のトラブルシューティングを参照してください。
注意事項
Google Meet の公式メディア API は受信向けであるため、通話内で発話するには引き続き参加者経由の経路が必要です。この Plugin では、その境界を明示しています。Chrome はブラウザでの参加とローカル音声ルーティングを処理し、Twilio は電話によるダイヤルイン参加を処理します。 Chrome のトークバックモードには、BlackHole 2ch に加えて次のいずれかが必要です。
chrome.audioInputCommandとchrome.audioOutputCommand:OpenClaw がブリッジを管理し、それらのコマンドと選択したプロバイダーの間でchrome.audioFormatの音声をパイプします。agentモードではリアルタイム文字起こしと通常の TTS を使用し、bidiモードではリアルタイム音声プロバイダーを使用します。デフォルトの経路は、chrome.audioBufferBytes: 4096を使用する 24 kHz PCM16 です。従来のコマンドペア向けには、8 kHz G.711 mu-law も引き続き利用できます。chrome.audioBridgeCommand:外部ブリッジコマンドがローカル音声経路全体を管理し、デーモンを起動または検証した後に終了する必要があります。bidiでのみ有効です。agentモードでは、TTS のためにコマンドペアへ直接アクセスする必要があるためです。
chrome.bargeInInputCommand が別のローカルマイクを監視し、人が話し始めたときにアシスタントの再生をクリアできます。これにより、アシスタントの再生中に共有 BlackHole loopback 入力が一時的に抑制されている場合でも、人間の発話がアシスタントの出力より優先されます。chrome.audioInputCommand/chrome.audioOutputCommand と同様、これはオペレーターが設定するローカルコマンドです。明示的な信頼済みコマンドパスまたは引数リストを使用し、信頼できない場所にあるスクリプトは決して使用しないでください。
明瞭な双方向音声を実現するには、Meet の出力と Meet のマイクを別々の仮想デバイス、または Loopback 形式の仮想デバイスグラフを介してルーティングしてください。単一の共有 BlackHole デバイスでは、他の参加者の音声が通話へエコーバックされる可能性があります。
googlemeet speak は Chrome セッションのアクティブなトークバック音声ブリッジを開始し、googlemeet leave は停止します(Voice Call を介して委任された Twilio セッションの場合は、基盤となる通話も切断します)。API で管理されるスペースのアクティブな Google Meet 会議も終了するには、googlemeet end-active-conference を使用してください。