Google Meet(Plugin)
OpenClaw向けのGoogle Meet参加者サポートです。 このPluginは意図的に明示的な設計になっています。- 明示的な
https://meet.google.com/...URLにのみ参加します。 - デフォルトモードは
realtime音声です。 - より深い推論やツールが必要な場合、リアルタイム音声から完全なOpenClawエージェントにコールバックできます。
- 認証は個人のGoogle OAuth、またはすでにサインイン済みのChromeプロファイルから開始します。
- 自動の同意告知はありません。
- デフォルトのChrome音声バックエンドは
BlackHole 2chです。 - Chromeはローカルでも、ペアリングされたNodeホスト上でも実行できます。
- Twilioはダイヤルイン番号に加えて、任意のPINまたはDTMFシーケンスを受け付けます。
- CLIコマンドは
googlemeetです。meetはより広範なエージェントの電話会議ワークフロー用に予約されています。
クイックスタート
ローカルの音声依存関係をインストールし、バックエンドのリアルタイム音声プロバイダーを設定します。デフォルトはOpenAIです。Google Gemini Liveもrealtime.provider: "google"で動作します。
blackhole-2chはBlackHole 2ch仮想音声デバイスをインストールします。Homebrewのインストーラーでは、macOSがこのデバイスを認識する前に再起動が必要です。
google_meetツール経由で参加させます。
BlackHole 2chを選択してください。クリーンな双方向音声のためには、別々の仮想デバイスまたはLoopbackスタイルのグラフを使用してください。最初のスモークテストには単一のBlackHoleデバイスでも十分ですが、エコーが発生する可能性があります。
ローカルGateway + Parallels Chrome
macOS VMにChromeを所有させるだけであれば、VM内に完全なOpenClaw GatewayやモデルAPIキーは不要です。Gatewayとエージェントはローカルで実行し、VM内ではNodeホストを実行します。NodeがChromeコマンドを通知できるよう、VMでバンドルされたPluginを一度有効にしてください。 どこで何を実行するか:- Gatewayホスト: OpenClaw Gateway、エージェントワークスペース、モデル/APIキー、リアルタイムプロバイダー、Google Meet Plugin設定
- Parallels macOS VM: OpenClaw CLI/Nodeホスト、Google Chrome、SoX、BlackHole 2ch、Googleにサインイン済みのChromeプロファイル
- VMで不要なもの: Gatewayサービス、エージェント設定、OpenAI/GPTキー、またはモデルプロバイダー設定
BlackHole 2chを認識するようにVMを再起動します。
<gateway-host>がLAN IPで、TLSを使用していない場合、その信頼されたプライベートネットワーク向けにオプトインしない限り、Nodeは平文WebSocketを拒否します。
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1はプロセス環境であり、openclaw.jsonの設定ではありません。openclaw node installは、インストールコマンド実行時にこの環境変数が存在していれば、それをLaunchAgent環境に保存します。
GatewayホストからNodeを承認します。
googlemeet.chromeを通知していることを確認します。
transport: "chrome-node"を指定してエージェントにgoogle_meetツールを使わせてください。
chromeNode.nodeが省略されている場合、OpenClawが自動選択するのは、接続されたNodeのうちgooglemeet.chromeを通知しているものがちょうど1つだけのときです。対応可能なNodeが複数接続されている場合は、chromeNode.nodeにNode ID、表示名、またはリモートIPを設定してください。
一般的な障害確認:
No connected Google Meet-capable node: VMでopenclaw node runを開始し、ペアリングを承認し、VM内でopenclaw plugins enable google-meetを実行したことを確認してください。また、Gatewayホストがgateway.nodes.allowCommands: ["googlemeet.chrome"]でそのNodeコマンドを許可していることも確認してください。BlackHole 2ch audio device not found on the node: VMにblackhole-2chをインストールし、VMを再起動してください。- Chromeは開くが参加できない: VM内でChromeにサインインし、そのプロファイルでMeet URLに手動参加できることを確認してください。
- 音が出ない: Meetで、マイク/スピーカーをOpenClawが使用する仮想音声デバイス経路にルーティングしてください。クリーンな双方向音声のために、別々の仮想デバイスまたはLoopbackスタイルのルーティングを使用してください。
インストールに関する注意
Chromeのリアルタイムデフォルトでは、2つの外部ツールを使用します。sox: コマンドライン音声ユーティリティ。Pluginは、デフォルトの8 kHz G.711 mu-law音声ブリッジのためにrecおよびplayコマンドを使用します。blackhole-2ch: macOS仮想音声ドライバー。Chrome/MeetがルーティングできるBlackHole 2ch音声デバイスを作成します。
LGPL-2.0-only AND GPL-2.0-onlyで、BlackHoleはGPL-3.0です。OpenClawとともにBlackHoleを含むインストーラーまたはアプライアンスを構築する場合は、BlackHole上流のライセンス条件を確認するか、Existential Audioから別ライセンスを取得してください。
トランスポート
Chrome
Chromeトランスポートは、Google ChromeでMeet URLを開き、サインイン済みのChromeプロファイルとして参加します。macOSでは、Pluginは起動前にBlackHole 2chの存在を確認します。設定されていれば、Chromeを開く前に音声ブリッジのヘルスコマンドと起動コマンドも実行します。Chrome/音声がGatewayホスト上にある場合はchromeを使用し、Chrome/音声がParallels macOS VMのようなペアリング済みNode上にある場合はchrome-nodeを使用してください。
BlackHole 2chがインストールされていない場合、音声経路なしで黙って参加するのではなく、セットアップエラーで参加に失敗します。
Twilio
Twilioトランスポートは、Voice Call Pluginに委譲される厳格なダイヤルプランです。Meetページから電話番号を解析しません。--dtmf-sequenceを使用します。
OAuthと事前確認
Google Meet Media APIアクセスでは、まず個人用OAuthクライアントを使用します。oauth.clientIdを設定し、必要に応じてoauth.clientSecretも設定してから、次を実行します。
oauth設定ブロックを出力します。PKCE、http://localhost:8085/oauth2callbackでのlocalhostコールバック、そして--manualによる手動コピー&ペーストフローを使用します。
以下の環境変数をフォールバックとして使用できます。
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/{id}をspaces.get経由で解決します。
preview.enrollmentAcknowledged: trueを設定してください。
設定
一般的なChromeリアルタイム経路では、Pluginの有効化、BlackHole、SoX、およびバックエンドのリアルタイム音声プロバイダーキーだけが必要です。デフォルトはOpenAIです。Google Gemini Liveを使うにはrealtime.provider: "google"を設定してください。
plugins.entries.google-meet.configの下に設定します。
defaultTransport: "chrome"defaultMode: "realtime"chromeNode.node:chrome-node用の任意のNode ID/名前/IPchrome.audioBackend: "blackhole-2ch"chrome.audioInputCommand: 8 kHz G.711 mu-law音声をstdoutに書き出すSoXのrecコマンドchrome.audioOutputCommand: stdinから8 kHz G.711 mu-law音声を読み込むSoXのplayコマンドrealtime.provider: "openai"realtime.toolPolicy: "safe-read-only"realtime.instructions: より深い回答にはopenclaw_agent_consultを使う、簡潔な音声応答realtime.introMessage: リアルタイムブリッジ接続時の短い音声レディネス確認。無言で参加するには""に設定してください
ツール
エージェントはgoogle_meetツールを使用できます。
transport: "chrome"を使用します。ChromeがParallels VMのようなペアリング済みNode上で動作している場合はtransport: "chrome-node"を使用します。どちらの場合も、リアルタイムモデルとopenclaw_agent_consultはGatewayホスト上で動作するため、モデル資格情報はそこに保持されます。
action: "status"を使用すると、アクティブなセッションの一覧表示や、セッションIDの確認ができます。action: "speak"にsessionIdとmessageを指定すると、リアルタイムエージェントに即座に発話させることができます。action: "leave"を使用すると、セッションを終了済みとしてマークします。
リアルタイムエージェント相談
Chromeのリアルタイムモードは、ライブ音声ループ向けに最適化されています。リアルタイム音声プロバイダーは会議の音声を聞き取り、設定された音声ブリッジを通じて発話します。より深い推論、最新情報、または通常のOpenClawツールが必要になった場合、リアルタイムモデルはopenclaw_agent_consultを呼び出せます。
consultツールは、最近の会議トランスクリプトのコンテキストを使って、通常のOpenClawエージェントをバックグラウンドで実行し、リアルタイム音声セッションに簡潔な音声回答を返します。その後、音声モデルはその回答を会議に向けて発話できます。
realtime.toolPolicyはconsult実行を制御します。
safe-read-only: consultツールを公開し、通常のエージェントをread、web_search、web_fetch、x_search、memory_search、memory_getに制限します。owner: consultツールを公開し、通常のエージェントが通常のエージェントツールポリシーを使えるようにします。none: リアルタイム音声モデルにconsultツールを公開しません。
注意
Google Meetの公式メディアAPIは受信指向のため、Meet通話で発話するには依然として参加者経路が必要です。このPluginはその境界を明確に保ちます。Chromeはブラウザーでの参加とローカル音声ルーティングを担当し、Twilioは電話のダイヤルイン参加を担当します。 Chromeのリアルタイムモードには、次のいずれかが必要です。chrome.audioInputCommandとchrome.audioOutputCommand: OpenClawがリアルタイムモデルブリッジを所有し、それらのコマンドと選択されたリアルタイム音声プロバイダーの間で8 kHz G.711 mu-law音声をパイプします。chrome.audioBridgeCommand: 外部ブリッジコマンドがローカル音声経路全体を所有し、そのデーモンを起動または検証した後に終了する必要があります。
googlemeet speakは、Chromeセッション用のアクティブなリアルタイム音声ブリッジをトリガーします。googlemeet leaveはそのブリッジを停止します。Voice Call Plugin経由で委譲されたTwilioセッションでは、leaveは基盤となる音声通話も切断します。