Bundled plugin guides
Google Meet Plugin
OpenClaw용 Google Meet 참가자 지원 — 이 Plugin은 의도적으로 명시적으로 설계되었습니다.
- 명시적인
https://meet.google.com/...URL에만 참여합니다. - Google Meet API를 통해 새 Meet 공간을 만든 다음, 반환된 URL에 참여할 수 있습니다.
agent는 기본 응답 모드입니다. 실시간 전사가 수신하고, 구성된 OpenClaw 에이전트가 응답하며, 일반 OpenClaw TTS가 Meet에서 말합니다.bidi는 예비 직접 실시간 음성 모델 모드로 계속 사용할 수 있습니다.- 에이전트는
mode로 참여 동작을 선택합니다. 실시간 듣기/응답에는agent, 직접 실시간 음성 예비 모드에는bidi, 응답 브리지 없이 브라우저를 참여/제어하려면transcribe를 사용합니다. - 인증은 개인 Google OAuth 또는 이미 로그인된 Chrome 프로필로 시작합니다.
- 자동 동의 안내는 없습니다.
- 기본 Chrome 오디오 백엔드는
BlackHole 2ch입니다. - Chrome은 로컬에서 실행하거나 페어링된 노드 호스트에서 실행할 수 있습니다.
- Twilio는 전화 접속 번호와 선택적 PIN 또는 DTMF 시퀀스를 허용하지만, Meet URL에 직접 전화를 걸 수는 없습니다.
- CLI 명령은
googlemeet입니다.meet는 더 넓은 에이전트 원격 회의 워크플로용으로 예약되어 있습니다.
빠른 시작
로컬 오디오 의존성을 설치하고 실시간 전사 제공자와 일반 OpenClaw TTS를 구성합니다. OpenAI가 기본 전사 제공자입니다. Google Gemini Live도 realtime.voiceProvider: "google"을 사용하는 별도의 bidi 음성 예비 수단으로 작동합니다.
brew install blackhole-2ch soxexport OPENAI_API_KEY=sk-...# bidi 모드에서 realtime.voiceProvider가 "google"일 때만 필요export GEMINI_API_KEY=...blackhole-2ch는 BlackHole 2ch 가상 오디오 장치를 설치합니다. Homebrew의 설치 프로그램은 macOS가 장치를 노출하기 전에 재부팅이 필요합니다.
sudo reboot재부팅 후 두 요소를 모두 확인합니다.
system_profiler SPAudioDataType | grep -i BlackHolecommand -v soxPlugin을 활성화합니다.
{ plugins: { entries: { "google-meet": { enabled: true, config: {}, }, }, },}설정을 확인합니다.
openclaw googlemeet setup설정 출력은 에이전트가 읽을 수 있고 모드를 인식하도록 되어 있습니다. Chrome 프로필, 노드 고정, 그리고 실시간 Chrome 참여의 경우 BlackHole/SoX 오디오 브리지와 지연된 실시간 소개 확인을 보고합니다. 관찰 전용 참여의 경우 --mode transcribe로 동일한 전송을 확인합니다. 이 모드는 브리지를 통해 듣거나 말하지 않으므로 실시간 오디오 선행 조건을 건너뜁니다.
openclaw googlemeet setup --transport chrome-node --mode transcribeTwilio 위임이 구성된 경우 설정은 voice-call Plugin, Twilio 자격 증명, 공개 Webhook 노출이 준비되었는지도 보고합니다. 에이전트에게 참여를 요청하기 전에 ok: false인 모든 확인을 해당 전송 및 모드의 차단 요소로 취급합니다. 스크립트나 기계 판독 가능한 출력에는 openclaw googlemeet setup --json을 사용합니다. 에이전트가 시도하기 전에 특정 전송을 사전 점검하려면 --transport chrome, --transport chrome-node, 또는 --transport twilio를 사용합니다.
Twilio의 경우 기본 전송이 Chrome이면 항상 전송을 명시적으로 사전 점검합니다.
openclaw googlemeet setup --transport twilio이렇게 하면 에이전트가 회의에 전화를 걸기 전에 누락된 voice-call 연결, Twilio 자격 증명, 또는 도달할 수 없는 Webhook 노출을 잡아낼 수 있습니다.
회의에 참여합니다.
openclaw googlemeet join https://meet.google.com/abc-defg-hij또는 에이전트가 google_meet 도구를 통해 참여하게 합니다.
{ "action": "join", "url": "https://meet.google.com/abc-defg-hij", "transport": "chrome-node", "mode": "agent"}에이전트용 google_meet 도구는 macOS가 아닌 호스트에서도 아티팩트, 캘린더, 설정, 전사, Twilio, chrome-node 흐름에 계속 사용할 수 있습니다. 번들된 Chrome 오디오 경로가 현재 macOS BlackHole 2ch에 의존하므로 로컬 Chrome 응답 작업은 해당 호스트에서 차단됩니다. Linux에서는 Chrome 응답 참여에 mode: "transcribe", Twilio 전화 접속, 또는 macOS chrome-node 호스트를 사용합니다.
새 회의를 만들고 참여합니다.
openclaw googlemeet create --transport chrome-node --mode agentAPI로 생성한 방의 노크 없는 입장 정책을 Google 계정 기본값에서 상속하지 않고 명시하려면 Google Meet SpaceConfig.accessType을 사용합니다.
openclaw googlemeet create --access-type OPEN --transport chrome-node --mode agentOPEN은 Meet URL이 있는 누구나 노크 없이 참여할 수 있게 합니다. TRUSTED는 호스트 조직의 신뢰할 수 있는 사용자, 초대된 외부 사용자, 전화 접속 사용자가 노크 없이 참여할 수 있게 합니다. RESTRICTED는 노크 없는 입장을 초대받은 사람으로 제한합니다. 이 설정은 공식 Google Meet API 생성 경로에만 적용되므로 OAuth 자격 증명이 구성되어 있어야 합니다.
이 옵션을 사용할 수 있기 전에 Google Meet을 인증했다면 Google OAuth 동의 화면에 meetings.space.settings 범위를 추가한 후 openclaw googlemeet auth login --json을 다시 실행합니다.
참여하지 않고 URL만 만듭니다.
openclaw googlemeet create --no-joingooglemeet 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 쿼리 문자열을 무시하므로, 에이전트 재시도는 두 번째 Chrome 탭을 만들지 않고 이미 열려 있는 회의에 포커스를 맞춰야 합니다.
명령/도구 출력에는 에이전트가 어떤 경로가 사용되었는지 설명할 수 있도록 source 필드(api 또는 browser)가 포함됩니다. create는 기본적으로 새 회의에 참여하고 joined: true와 참여 세션을 반환합니다. URL만 만들려면 CLI에서 create --no-join을 사용하거나 도구에 "join": false를 전달합니다.
또는 에이전트에게 “Google Meet을 만들고, 에이전트 응답 모드로 참여한 다음, 링크를 보내 주세요.”라고 지시합니다. 에이전트는 action: "create"로 google_meet를 호출한 다음 반환된 meetingUri를 공유해야 합니다.
{ "action": "create", "transport": "chrome-node", "mode": "agent"}관찰 전용/브라우저 제어 참여의 경우 "mode": "transcribe"로 설정합니다. 이는 이중 실시간 음성 브리지를 시작하지 않고, BlackHole 또는 SoX가 필요하지 않으며, 회의에서 응답하지 않습니다. 이 모드의 Chrome 참여는 OpenClaw의 마이크/카메라 권한 부여와 Meet 마이크 사용 경로도 피합니다. Meet이 오디오 선택 중간 화면을 표시하면 자동화는 마이크 없는 경로를 시도하고, 그렇지 않으면 로컬 마이크를 여는 대신 수동 작업을 보고합니다. transcribe 모드에서는 관리형 Chrome 전송이 최선 노력 방식의 Meet 자막 관찰자도 설치합니다. googlemeet status --json 및 googlemeet doctor는 운영자가 브라우저가 통화에 참여했는지, Meet 자막이 텍스트를 생성하는지 알 수 있도록 captioning, captionsEnabledAttempted, transcriptLines, lastCaptionAt, lastCaptionSpeaker, lastCaptionText, 짧은 recentTranscript 꼬리를 표시합니다.
예/아니요 프로브가 필요할 때는 openclaw googlemeet test-listen <meet-url> --transport chrome-node를 사용합니다. 이 명령은 transcribe 모드로 참여하고, 새로운 자막 또는 전사 움직임을 기다린 뒤 listenVerified, listenTimedOut, 수동 작업 필드, 최신 자막 상태를 반환합니다.
실시간 세션 동안 google_meet 상태에는 inCall, manualActionRequired, providerConnected, realtimeReady, audioInputActive, audioOutputActive, 마지막 입력/출력 타임스탬프, 바이트 카운터, 브리지 닫힘 상태 같은 브라우저 및 오디오 브리지 상태가 포함됩니다. 안전한 Meet 페이지 프롬프트가 나타나면 브라우저 자동화가 가능한 경우 이를 처리합니다. 로그인, 호스트 승인, 브라우저/OS 권한 프롬프트는 에이전트가 전달할 이유와 메시지가 포함된 수동 작업으로 보고됩니다. 관리형 Chrome 세션은 브라우저 상태가 inCall: true를 보고한 후에만 소개 또는 테스트 문구를 내보냅니다. 그렇지 않으면 상태는 speechReady: false를 보고하고, 에이전트가 회의에서 말한 것처럼 가장하는 대신 발화 시도가 차단됩니다.
로컬 Chrome 참여는 로그인된 OpenClaw 브라우저 프로필을 통해 이루어집니다. 실시간 모드는 OpenClaw가 사용하는 마이크/스피커 경로에 BlackHole 2ch가 필요합니다. 깨끗한 이중 오디오를 위해 별도의 가상 장치나 Loopback 스타일 그래프를 사용합니다. 단일 BlackHole 장치도 첫 스모크 테스트에는 충분하지만 에코가 발생할 수 있습니다.
로컬 Gateway + Parallels Chrome
VM이 Chrome을 소유하게 만들기 위해 macOS VM 안에 전체 OpenClaw Gateway나 모델 API 키가 필요하지는 않습니다. Gateway와 에이전트를 로컬에서 실행한 다음 VM에서 노드 호스트를 실행합니다. VM에서 번들된 Plugin을 한 번 활성화해 노드가 Chrome 명령을 광고하게 합니다.
실행 위치:
- Gateway 호스트: OpenClaw Gateway, 에이전트 워크스페이스, 모델/API 키, 실시간 제공자, Google Meet Plugin 구성.
- Parallels macOS VM: OpenClaw CLI/노드 호스트, Google Chrome, SoX, BlackHole 2ch, Google에 로그인된 Chrome 프로필.
- VM에 필요하지 않은 것: Gateway 서비스, 에이전트 구성, OpenAI/GPT 키, 또는 모델 제공자 설정.
VM 의존성을 설치합니다.
brew install blackhole-2ch soxBlackHole을 설치한 후 macOS가 BlackHole 2ch를 노출하도록 VM을 재부팅합니다.
sudo reboot재부팅 후 VM이 오디오 장치와 SoX 명령을 볼 수 있는지 확인합니다.
system_profiler SPAudioDataType | grep -i BlackHolecommand -v soxVM에 OpenClaw를 설치하거나 업데이트한 다음, 그곳에서 번들된 Plugin을 활성화합니다.
openclaw plugins enable google-meetVM에서 노드 호스트를 시작합니다.
openclaw node run --host <gateway-host> --port 18789 --display-name parallels-macos<gateway-host>가 LAN IP이고 TLS를 사용하지 않는 경우, 해당 신뢰할 수 있는 사설 네트워크에 대해 명시적으로 허용하지 않으면 노드가 평문 WebSocket을 거부합니다.
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macos노드를 LaunchAgent로 설치할 때도 같은 환경 변수를 사용합니다.
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node install --host <gateway-lan-ip> --port 18789 --display-name parallels-macos --forceopenclaw node restartOPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1은 프로세스 환경이지 openclaw.json 설정이 아닙니다. openclaw node install은 설치 명령에 이 변수가 있을 때 이를 LaunchAgent 환경에 저장합니다.
Gateway 호스트에서 노드를 승인합니다.
openclaw devices listopenclaw devices approve <requestId>Gateway가 노드를 인식하고, 노드가 googlemeet.chrome과 브라우저 기능/browser.proxy를 모두 광고하는지 확인합니다.
openclaw nodes statusGateway 호스트에서 Meet을 해당 노드로 라우팅합니다.
{ 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", }, }, }, }, },}이제 Gateway 호스트에서 일반적으로 참여합니다.
openclaw googlemeet join https://meet.google.com/abc-defg-hij또는 에이전트에게 transport: "chrome-node"와 함께 google_meet 도구를 사용하도록 요청합니다.
세션을 만들거나 재사용하고, 알려진 문구를 말하며, 세션 상태를 출력하는 단일 명령 스모크 테스트는 다음과 같습니다.
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij실시간 참여 중 OpenClaw 브라우저 자동화는 게스트 이름을 입력하고,
참여/참여 요청을 클릭하며, 해당 프롬프트가 나타나면 Meet의 최초 실행
"마이크 사용" 선택을 수락합니다. 관찰 전용 참여 또는 브라우저 전용 회의
생성 중에는 해당 선택지가 있을 때 마이크 없이 같은 프롬프트를 지나갑니다.
브라우저 프로필이 로그인되어 있지 않거나, Meet이 호스트 승인을 기다리고
있거나, 실시간 참여에 Chrome 마이크/카메라 권한이 필요하거나, Meet이
자동화로 해결할 수 없는 프롬프트에 멈춰 있으면 참여/test-speech 결과는
manualActionReason 및 manualActionMessage와 함께
manualActionRequired: true를 보고합니다. 에이전트는 참여 재시도를
중단하고, 해당 정확한 메시지와 현재 browserUrl/browserTitle을
보고한 뒤, 수동 브라우저 작업이 완료된 후에만 재시도해야 합니다.
chromeNode.node가 생략되면 OpenClaw는 연결된 노드가 정확히 하나이고
그 노드가 googlemeet.chrome과 브라우저 제어를 모두 광고할 때만 자동으로
선택합니다. 여러 사용 가능한 노드가 연결되어 있으면 chromeNode.node를
노드 ID, 표시 이름 또는 원격 IP로 설정하세요.
일반적인 실패 확인 사항:
Configured Google Meet node ... is not usable: offline: 고정된 노드는 Gateway에는 알려져 있지만 사용할 수 없습니다. 에이전트는 해당 노드를 사용 가능한 Chrome 호스트가 아니라 진단 상태로 취급해야 하며, 사용자가 요청하지 않는 한 다른 전송으로 대체하지 말고 설정 차단 요인을 보고해야 합니다.No connected Google Meet-capable node: VM에서openclaw node run을 시작하고, 페어링을 승인하며, VM에서openclaw plugins enable google-meet및openclaw plugins enable browser가 실행되었는지 확인하세요. 또한 Gateway 호스트가 다음 설정으로 두 노드 명령을 모두 허용하는지 확인하세요.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을 계속 설정해 두세요. 게스트 자동 참여는 노드 브라우저 프록시를 통해 OpenClaw 브라우저 자동화를 사용합니다. 예를 들어browser.defaultProfile: "user"또는 이름이 지정된 기존 세션 프로필처럼, 노드 브라우저 설정이 원하는 프로필을 가리키는지 확인하세요. - 중복 Meet 탭:
chrome.reuseExistingTab: true를 활성화된 상태로 두세요. OpenClaw는 새 탭을 열기 전에 같은 Meet URL의 기존 탭을 활성화하며, 브라우저 회의 생성은 새 탭을 하나 더 열기 전에 진행 중인https://meet.google.com/new또는 Google 계정 프롬프트 탭을 재사용합니다. - 오디오 없음: Meet에서 마이크/스피커를 OpenClaw가 사용하는 가상 오디오 장치 경로로 라우팅하세요. 깨끗한 듀플렉스 오디오를 위해 별도의 가상 장치 또는 Loopback 스타일 라우팅을 사용하세요.
설치 참고 사항
Chrome 토크백 기본값은 두 가지 외부 도구를 사용합니다.
sox: 명령줄 오디오 유틸리티입니다. Plugin은 기본 24 kHz PCM16 오디오 브리지에 명시적 CoreAudio 장치 명령을 사용합니다.blackhole-2ch: macOS 가상 오디오 드라이버입니다. Chrome/Meet이 라우팅할 수 있는BlackHole 2ch오디오 장치를 생성합니다.
OpenClaw는 두 패키지를 번들하거나 재배포하지 않습니다. 문서는 사용자에게
Homebrew를 통해 호스트 종속성으로 설치하도록 안내합니다. SoX의 라이선스는
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을 사용하고, Parallels macOS VM 같은 페어링된
노드에 Chrome/오디오가 있으면 chrome-node를 사용하세요. 로컬 Chrome의
경우 browser.defaultProfile로 프로필을 선택하세요.
chrome.browserProfile은 chrome-node 호스트에 전달됩니다.
openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chromeopenclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome-nodeChrome 마이크와 스피커 오디오를 로컬 OpenClaw 오디오 브리지를 통해
라우팅하세요. BlackHole 2ch가 설치되어 있지 않으면 오디오 경로 없이
조용히 참여하는 대신 설정 오류와 함께 참여가 실패합니다.
Twilio
Twilio 전송은 Voice Call Plugin에 위임되는 엄격한 다이얼 플랜입니다. Meet 페이지에서 전화번호를 파싱하지 않습니다.
Chrome 참여를 사용할 수 없거나 전화 다이얼인 대체 경로가 필요할 때 사용하세요. Google Meet은 회의에 대한 전화 다이얼인 번호와 PIN을 노출해야 합니다. OpenClaw는 Meet 페이지에서 이를 발견하지 않습니다.
Chrome 노드가 아니라 Gateway 호스트에서 Voice Call Plugin을 활성화하세요.
{ 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, }, }, },}환경 또는 설정을 통해 Twilio 자격 증명을 제공하세요. 환경을 사용하면
비밀 값이 openclaw.json에 들어가지 않습니다.
export TWILIO_ACCOUNT_SID=AC...export TWILIO_AUTH_TOKEN=...export TWILIO_FROM_NUMBER=+15550001234export GEMINI_API_KEY=...실시간 음성 제공자가 OpenAI라면 대신 OpenAI 제공자 Plugin 및
OPENAI_API_KEY와 함께 realtime.provider: "openai"를 사용하세요.
voice-call을 활성화한 뒤 Gateway를 재시작하거나 다시 로드하세요.
Plugin 설정 변경은 이미 실행 중인 Gateway 프로세스가 다시 로드되기
전까지 반영되지 않습니다.
그런 다음 확인하세요.
openclaw config validateopenclaw plugins list | grep -E 'google-meet|voice-call'openclaw googlemeet setupTwilio 위임이 연결되면 googlemeet setup에는 성공한
twilio-voice-call-plugin, twilio-voice-call-credentials,
twilio-voice-call-webhook 확인이 포함됩니다.
openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --transport twilio \ --dial-in-number +15551234567 \ --pin 123456회의에 사용자 지정 시퀀스가 필요하면 --dtmf-sequence를 사용하세요.
openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --transport twilio \ --dial-in-number +15551234567 \ --dtmf-sequence ww123456#OAuth 및 사전 점검
googlemeet create는 브라우저 자동화로 대체할 수 있으므로 Meet 링크
생성에 OAuth는 선택 사항입니다. 공식 API 생성, 공간 해석 또는 Meet Media
API 사전 점검이 필요할 때 OAuth를 설정하세요.
Google Meet API 접근은 사용자 OAuth를 사용합니다. Google Cloud OAuth
클라이언트를 생성하고, 필요한 범위를 요청하고, Google 계정을 승인한 뒤,
결과 refresh token을 Google Meet Plugin 설정에 저장하거나
OPENCLAW_GOOGLE_MEET_* 환경 변수를 제공하세요.
OAuth는 Chrome 참여 경로를 대체하지 않습니다. Chrome 및 Chrome-node 전송은 브라우저 참여를 사용할 때 여전히 로그인된 Chrome 프로필, BlackHole/SoX, 연결된 노드를 통해 참여합니다. 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:
text http://localhost:8085/oauth2callback
-
-
클라이언트 ID와 클라이언트 보안 비밀을 복사합니다.
meetings.space.created는 Google Meet spaces.create에 필요합니다.
meetings.space.readonly를 사용하면 OpenClaw가 Meet URL/코드를 공간으로
해석할 수 있습니다. meetings.space.settings를 사용하면 OpenClaw가 API
회의실 생성 중 accessType 같은 SpaceConfig 설정을 전달할 수 있습니다.
meetings.conference.media.readonly는 Meet Media API 사전 점검 및 미디어
작업용입니다. Google은 실제 Media API 사용에 Developer Preview 등록을
요구할 수 있습니다. 브라우저 기반 Chrome 참여만 필요하다면 OAuth를
완전히 건너뛰세요.
refresh token 발급
oauth.clientId와 선택적으로 oauth.clientSecret을 설정하거나 환경 변수로
전달한 뒤 다음을 실행하세요.
openclaw googlemeet auth login --json이 명령은 refresh token이 포함된 oauth 설정 블록을 출력합니다. PKCE,
http://localhost:8085/oauth2callback의 localhost 콜백, 그리고
--manual을 통한 수동 복사/붙여넣기 흐름을 사용합니다.
예시:
OPENCLAW_GOOGLE_MEET_CLIENT_ID="your-client-id" \OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \openclaw googlemeet auth login --json브라우저가 로컬 콜백에 도달할 수 없으면 수동 모드를 사용하세요.
OPENCLAW_GOOGLE_MEET_CLIENT_ID="your-client-id" \OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \openclaw googlemeet auth login --json --manualJSON 출력에는 다음이 포함됩니다.
{ "oauth": { "clientId": "your-client-id", "clientSecret": "your-client-secret", "refreshToken": "refresh-token", "accessToken": "access-token", "expiresAt": 1770000000000 }, "scope": "..."}oauth 객체를 Google Meet Plugin 설정 아래에 저장하세요.
{ plugins: { entries: { "google-meet": { enabled: true, config: { oauth: { clientId: "your-client-id", clientSecret: "your-client-secret", refreshToken: "refresh-token", }, }, }, }, },}설정에 refresh token을 넣고 싶지 않다면 환경 변수를 선호하세요. 설정 값과 환경 값이 모두 있으면 Plugin은 먼저 설정을 해석한 다음 환경 대체값을 사용합니다.
OAuth 동의에는 Meet 공간 생성, Meet 공간 읽기 접근, Meet 회의 미디어 읽기
접근이 포함됩니다. 회의 생성 지원이 생기기 전에 인증했다면 refresh token이
meetings.space.created 범위를 갖도록
openclaw googlemeet auth login --json을 다시 실행하세요.
doctor로 OAuth 확인
빠르고 비밀 값을 노출하지 않는 상태 확인이 필요할 때 OAuth doctor를 실행하세요.
openclaw googlemeet doctor --oauth --json이는 Chrome 런타임을 로드하지 않으며 연결된 Chrome 노드를 요구하지
않습니다. OAuth 설정이 존재하는지와 refresh token으로 access token을
발급할 수 있는지 확인합니다. JSON 보고서에는 ok, configured,
tokenSource, expiresAt, 확인 메시지 같은 상태 필드만 포함되며, access
token, refresh token 또는 클라이언트 보안 비밀은 출력하지 않습니다.
일반적인 결과:
| 확인 | 의미 |
|---|---|
oauth-config |
oauth.clientId와 oauth.refreshToken, 또는 캐시된 액세스 토큰이 있습니다. |
oauth-token |
캐시된 액세스 토큰이 아직 유효하거나, 리프레시 토큰이 새 액세스 토큰을 발급했습니다. |
meet-spaces-get |
선택적 --meeting 확인이 기존 Meet 스페이스를 확인했습니다. |
meet-spaces-create |
선택적 --create-space 확인이 새 Meet 스페이스를 만들었습니다. |
Google Meet API 활성화와 spaces.create 범위도 증명하려면, 부작용이 있는
생성 확인을 실행하세요.
openclaw googlemeet doctor --oauth --create-space --jsonopenclaw googlemeet create --no-join --json--create-space는 일회용 Meet URL을 만듭니다. Google Cloud 프로젝트에서
Meet API가 활성화되어 있고, 승인된 계정에 meetings.space.created 범위가
있는지 확인해야 할 때 사용하세요.
기존 회의 스페이스에 대한 읽기 액세스를 증명하려면:
openclaw googlemeet doctor --oauth --meeting https://meet.google.com/abc-defg-hij --jsonopenclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hijdoctor --oauth --meeting과 resolve-space는 승인된 Google 계정이 액세스할
수 있는 기존 스페이스에 대한 읽기 액세스를 증명합니다. 이러한 확인에서
403이 나오면 대개 Google Meet REST API가 비활성화되어 있거나, 동의된
리프레시 토큰에 필요한 범위가 없거나, Google 계정이 해당 Meet 스페이스에
액세스할 수 없다는 뜻입니다. 리프레시 토큰 오류는 openclaw googlemeet auth login --json을 다시 실행하고 새 oauth 블록을 저장해야 한다는 뜻입니다.
브라우저 폴백에는 OAuth 자격 증명이 필요하지 않습니다. 이 모드에서는 Google 인증이 OpenClaw 설정이 아니라 선택된 노드의 로그인된 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
Meet URL, 코드, 또는 spaces/{id}를 spaces.get을 통해 확인하세요.
openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij미디어 작업 전에 사전 점검을 실행하세요.
openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hijMeet가 회의 기록을 만든 뒤 회의 아티팩트와 참석 정보를 나열하세요.
openclaw googlemeet artifacts --meeting https://meet.google.com/abc-defg-hijopenclaw googlemeet attendance --meeting https://meet.google.com/abc-defg-hijopenclaw googlemeet export --meeting https://meet.google.com/abc-defg-hij --output ./meet-export--meeting을 사용하면 artifacts와 attendance는 기본적으로 최신 회의
기록을 사용합니다. 해당 회의에 대해 보존된 모든 기록을 원하면
--all-conference-records를 전달하세요.
Calendar 조회는 Meet 아티팩트를 읽기 전에 Google Calendar에서 회의 URL을 확인할 수 있습니다.
openclaw googlemeet latest --todayopenclaw googlemeet calendar-events --today --jsonopenclaw googlemeet artifacts --event "Weekly sync"openclaw googlemeet attendance --today --format csv --output attendance.csv--today는 오늘의 primary 캘린더에서 Google Meet 링크가 있는 Calendar
이벤트를 검색합니다. 일치하는 이벤트 텍스트를 검색하려면 --event <query>를,
기본이 아닌 캘린더에는 --calendar <id>를 사용하세요. Calendar 조회에는
Calendar 이벤트 읽기 전용 범위를 포함하는 새 OAuth 로그인이 필요합니다.
calendar-events는 일치하는 Meet 이벤트를 미리 보여 주고, latest,
artifacts, attendance, 또는 export가 선택할 이벤트를 표시합니다.
회의 기록 ID를 이미 알고 있다면 직접 지정하세요.
openclaw googlemeet latest --meeting https://meet.google.com/abc-defg-hijopenclaw googlemeet artifacts --conference-record conferenceRecords/abc123 --jsonopenclaw googlemeet attendance --conference-record conferenceRecords/abc123 --json통화 후 방을 닫고 싶을 때 API로 생성된 스페이스의 활성 회의를 종료하세요.
openclaw googlemeet end-active-conference https://meet.google.com/abc-defg-hij이는 Google Meet spaces.endActiveConference를 호출하며, 승인된 계정이
관리할 수 있는 스페이스에 대해 meetings.space.created 범위가 있는 OAuth가
필요합니다. OpenClaw는 Meet URL, 회의 코드, 또는 spaces/{id} 입력을 받고
활성 회의를 종료하기 전에 이를 API 스페이스 리소스로 확인합니다.
이는 googlemeet leave와 별개입니다. leave는 OpenClaw의 로컬/세션
참여를 중지하지만, end-active-conference는 Google Meet에 해당 스페이스의
활성 회의를 종료하도록 요청합니다.
읽기 쉬운 보고서를 작성하세요.
openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 \ --format markdown --output meet-artifacts.mdopenclaw googlemeet attendance --conference-record conferenceRecords/abc123 \ --format markdown --output meet-attendance.mdopenclaw googlemeet attendance --conference-record conferenceRecords/abc123 \ --format csv --output meet-attendance.csvopenclaw googlemeet export --conference-record conferenceRecords/abc123 \ --include-doc-bodies --zip --output meet-exportopenclaw googlemeet export --conference-record conferenceRecords/abc123 \ --include-doc-bodies --dry-runartifacts는 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을 전달하세요. 연결된
스크립트와 스마트 노트 Google Docs 텍스트를 Google Drive files.export를 통해
내보내려면 --include-doc-bodies를 전달하세요. 이를 위해서는 Drive Meet
읽기 전용 범위를 포함하는 새 OAuth 로그인이 필요합니다. --include-doc-bodies가
없으면 내보내기에는 Meet 메타데이터와 구조화된 스크립트 항목만 포함됩니다.
Google이 스마트 노트 목록, 스크립트 항목, 또는 Drive 문서 본문 오류와 같은
부분 아티팩트 실패를 반환하면, 전체 내보내기를 실패시키는 대신 요약과
매니페스트가 경고를 유지합니다.
폴더나 ZIP을 만들지 않고 동일한 아티팩트/참석 데이터를 가져오고 매니페스트
JSON을 출력하려면 --dry-run을 사용하세요. 이는 대규모 내보내기를 작성하기
전이나 에이전트에 개수, 선택된 기록, 경고만 필요한 경우 유용합니다.
에이전트는 google_meet 도구를 통해 동일한 번들을 만들 수도 있습니다.
{ "action": "export", "conferenceRecord": "conferenceRecords/abc123", "includeDocumentBodies": true, "outputDir": "meet-export", "zip": true}내보내기 매니페스트만 반환하고 파일 쓰기를 건너뛰려면 "dryRun": true를
설정하세요.
에이전트는 명시적 액세스 정책으로 API 기반 방을 만들 수도 있습니다.
{ "action": "create", "transport": "chrome-node", "mode": "agent", "accessType": "OPEN"}그리고 알려진 방의 활성 회의를 종료할 수 있습니다.
{ "action": "end_active_conference", "meeting": "https://meet.google.com/abc-defg-hij"}먼저 듣기 검증의 경우, 에이전트는 회의가 유용하다고 주장하기 전에
test_listen을 사용해야 합니다.
{ "action": "test_listen", "url": "https://meet.google.com/abc-defg-hij", "transport": "chrome-node", "timeoutMs": 30000}실제로 보존된 회의에 대해 보호된 라이브 스모크를 실행하세요.
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누군가가 말하고 Meet 자막을 사용할 수 있는 회의에 대해 라이브 선청취 브라우저 프로브를 실행하세요.
openclaw googlemeet setup --transport chrome-node --mode transcribeopenclaw googlemeet test-listen https://meet.google.com/abc-defg-hij --transport chrome-node --timeout-ms 30000라이브 스모크 환경:
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 스페이스를 만드세요.
openclaw googlemeet create이 명령은 새 meeting uri, 소스, 참여 세션을 출력합니다. OAuth 자격 증명이
있으면 공식 Google Meet API를 사용합니다. OAuth 자격 증명이 없으면 고정된
Chrome 노드의 로그인된 브라우저 프로필을 폴백으로 사용합니다. 에이전트는
google_meet 도구에 action: "create"를 사용해 한 단계에서 생성하고 참여할
수 있습니다. URL만 생성하려면 "join": false를 전달하세요.
브라우저 폴백의 JSON 출력 예:
{ "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" } }}브라우저 폴백이 URL을 만들기 전에 Google 로그인 또는 Meet 권한 차단에
걸리면, Gateway 메서드는 실패 응답을 반환하고 google_meet 도구는 일반
문자열 대신 구조화된 세부 정보를 반환합니다.
{ "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" }}에이전트가 manualActionRequired: true를 보면, manualActionMessage와
브라우저 노드/탭 컨텍스트를 보고하고 운영자가 브라우저 단계를 완료할 때까지
새 Meet 탭 열기를 중지해야 합니다.
API 생성의 JSON 출력 예:
{ "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" } }}Meet를 만들면 기본적으로 참가합니다. Chrome 또는 Chrome-node 전송은 브라우저를 통해 참가하려면 여전히 로그인된 Google Chrome 프로필이 필요합니다. 프로필이 로그아웃된 경우 OpenClaw는 manualActionRequired: true 또는 브라우저 대체 오류를 보고하고, 다시 시도하기 전에 운영자에게 Google 로그인을 완료하라고 요청합니다.
Cloud 프로젝트, OAuth 주체, 회의 참가자가 Meet 미디어 API용 Google Workspace Developer Preview Program에 등록되어 있음을 확인한 후에만 preview.enrollmentAcknowledged: true를 설정하세요.
구성
공통 Chrome 에이전트 경로에는 Plugin 활성화, BlackHole, SoX, 실시간 전사 제공자 키, 구성된 OpenClaw TTS 제공자만 필요합니다. OpenAI가 기본 전사 제공자입니다. 기본 에이전트 모드 전사 제공자를 변경하지 않고 bidi 모드에서 Google Gemini Live를 사용하려면 realtime.voiceProvider를 "google"로 설정하고 realtime.model을 설정하세요.
brew install blackhole-2ch soxexport OPENAI_API_KEY=sk-...# orexport GEMINI_API_KEY=...Plugin 구성을 plugins.entries.google-meet.config 아래에 설정하세요.
{ plugins: { entries: { "google-meet": { enabled: true, config: {}, }, }, },}기본값:
defaultTransport: "chrome"defaultMode: "agent"("realtime"은"agent"의 레거시 호환성 별칭으로만 허용됩니다. 새 도구 호출은"agent"를 사용해야 합니다.)chromeNode.node:chrome-node의 선택적 노드 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": 기본 토크백 모드입니다. 참가자의 발화는 구성된 실시간 전사 제공자가 전사하고, 회의별 하위 에이전트 세션의 구성된 OpenClaw 에이전트로 전송되며, 일반 OpenClaw TTS 런타임을 통해 다시 발화됩니다.mode: "bidi": 대체 직접 양방향 실시간 모델 모드입니다. 실시간 음성 제공자가 참가자 발화에 직접 응답하며, 더 깊은/도구 기반 답변을 위해openclaw_agent_consult를 호출할 수 있습니다.mode: "transcribe": 토크백 브리지 없는 관찰 전용 모드입니다.realtime.provider: "openai": 아래의 범위 지정 제공자 필드가 설정되지 않았을 때 사용되는 호환성 대체값입니다.realtime.transcriptionProvider: "openai":agent모드에서 실시간 전사에 사용하는 제공자 ID입니다.realtime.voiceProvider:bidi모드에서 직접 실시간 음성에 사용하는 제공자 ID입니다. 에이전트 모드 전사는 OpenAI로 유지하면서 Gemini Live를 사용하려면 이를"google"로 설정하세요.realtime.toolPolicy: "safe-read-only"realtime.instructions: 더 깊은 답변에는openclaw_agent_consult를 사용하는 짧은 음성 응답realtime.introMessage: 실시간 브리지가 연결될 때의 짧은 음성 준비 확인 메시지입니다. 조용히 참가하려면""로 설정하세요.realtime.agentId:openclaw_agent_consult용 선택적 OpenClaw 에이전트 ID입니다. 기본값은main입니다.
선택적 재정의:
{ 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: { speakerVoice: "Kore", }, }, },}에이전트 모드 듣기와 말하기 모두에 ElevenLabs 사용:
{ messages: { tts: { provider: "elevenlabs", providers: { elevenlabs: { modelId: "eleven_v3", speakerVoiceId: "pMsXgVXv3BLzUgSXRplE", }, }, }, }, plugins: { entries: { "google-meet": { config: { realtime: { transcriptionProvider: "elevenlabs", providers: { elevenlabs: { modelId: "scribe_v2_realtime", audioFormat: "ulaw_8000", sampleRate: 8000, commitStrategy: "vad", }, }, }, }, }, }, },}지속적인 Meet 음성은 messages.tts.providers.elevenlabs.speakerVoiceId에서 가져옵니다. TTS 모델 재정의가 활성화된 경우 에이전트 응답은 응답별 [[tts:speakerVoiceId=... model=eleven_v3]] 지시문도 사용할 수 있지만, 회의의 결정적 기본값은 구성입니다. 참가 시 로그에는 transcriptionProvider=elevenlabs가 표시되어야 하며, 각 음성 응답은 provider=elevenlabs model=eleven_v3 speakerVoiceId=<voiceId>를 기록해야 합니다.
Twilio 전용 구성:
{ defaultTransport: "twilio", twilio: { defaultDialInNumber: "+15551234567", defaultPin: "123456", }, voiceCall: { gatewayUrl: "ws://127.0.0.1:18789", },}voiceCall.enabled의 기본값은 true입니다. Twilio 전송을 사용할 때는 실제 PSTN 통화, DTMF, 인트로 인사를 Voice Call Plugin에 위임합니다. Voice Call은 실시간 미디어 스트림을 열기 전에 DTMF 시퀀스를 재생한 다음, 저장된 인트로 텍스트를 초기 실시간 인사말로 사용합니다. voice-call이 활성화되지 않은 경우 Google Meet는 다이얼 계획을 검증하고 기록할 수는 있지만 Twilio 통화를 걸 수는 없습니다.
도구
에이전트는 google_meet 도구를 사용할 수 있습니다.
{ "action": "join", "url": "https://meet.google.com/abc-defg-hij", "transport": "chrome-node", "mode": "agent"}Chrome이 Gateway 호스트에서 실행될 때는 transport: "chrome"을 사용하세요. Chrome이 Parallels VM 같은 페어링된 노드에서 실행될 때는 transport: "chrome-node"를 사용하세요. 두 경우 모두 모델 제공자와 openclaw_agent_consult는 Gateway 호스트에서 실행되므로 모델 자격 증명은 그곳에 유지됩니다. 기본 mode: "agent"에서는 실시간 전사 제공자가 듣기를 처리하고, 구성된 OpenClaw 에이전트가 답변을 생성하며, 일반 OpenClaw TTS가 이를 Meet에 말합니다. 실시간 음성 모델이 직접 답변하도록 하려면 mode: "bidi"를 사용하세요. 원시 mode: "realtime"은 mode: "agent"의 레거시 호환성 별칭으로 계속 허용되지만, 더 이상 에이전트 도구 스키마에는 표시되지 않습니다. 에이전트 모드 로그에는 브리지 시작 시 확인된 전사 제공자/모델과, 각 합성 응답 후 TTS 제공자, 모델, 음성, 출력 형식, 샘플 속도가 포함됩니다.
활성 세션을 나열하거나 세션 ID를 검사하려면 action: "status"를 사용하세요. 실시간 에이전트가 즉시 말하게 하려면 sessionId 및 message와 함께 action: "speak"를 사용하세요. 세션을 만들거나 재사용하고, 알려진 문구를 트리거하며, Chrome 호스트가 보고할 수 있을 때 inCall 상태를 반환하려면 action: "test_speech"를 사용하세요. 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: 어시스턴트 재생이 활성 상태인 동안 무시된 local loopback 입력
{ "action": "speak", "sessionId": "meet_...", "message": "Say exactly: I'm here and listening."}에이전트 및 bidi 모드
Chrome agent 모드는 "내 에이전트가 회의에 있다" 동작에 최적화되어 있습니다. 실시간 전사 제공자가 회의 오디오를 듣고, 최종 참가자 전사는 구성된 OpenClaw 에이전트를 통해 라우팅되며, 답변은 일반 OpenClaw TTS 런타임을 통해 발화됩니다. 실시간 음성 모델이 직접 답변하도록 하려면 mode: "bidi"를 설정하세요. 가까운 최종 전사 조각은 상담 전에 병합되어 하나의 발화 턴이 여러 개의 오래된 부분 답변을 생성하지 않도록 합니다. 대기 중인 어시스턴트 오디오가 아직 재생 중일 때는 실시간 입력도 억제되며, 최근 어시스턴트와 유사한 전사 에코는 에이전트 상담 전에 무시되어 BlackHole local loopback으로 인해 에이전트가 자신의 발화에 답하지 않도록 합니다.
| 모드 | 답변을 결정하는 주체 | 음성 출력 경로 | 사용 시점 |
|---|---|---|---|
agent |
구성된 OpenClaw 에이전트 | 일반 OpenClaw TTS 런타임 | "내 에이전트가 회의에 있다" 동작을 원할 때 |
bidi |
실시간 음성 모델 | 실시간 음성 제공자 오디오 응답 | 가장 낮은 지연 시간의 대화형 음성 루프를 원할 때 |
bidi 모드에서 실시간 모델이 더 깊은 추론, 최신 정보 또는 일반 OpenClaw 도구가 필요할 때 openclaw_agent_consult를 호출할 수 있습니다.
consult 도구는 최근 회의 transcript 컨텍스트와 함께 일반 OpenClaw 에이전트를 백그라운드에서 실행하고, 간결한 음성 답변을 반환합니다. agent 모드에서는 OpenClaw가 그 답변을 TTS 런타임으로 직접 보냅니다. bidi 모드에서는 realtime 음성 모델이 consult 결과를 회의 안에서 다시 말할 수 있습니다. 이 기능은 Voice Call과 동일한 공유 consult 메커니즘을 사용합니다.
기본적으로 consult는 main 에이전트를 대상으로 실행됩니다. Meet lane이 전용 OpenClaw 에이전트 워크스페이스, 모델 기본값, 도구 정책, 메모리, 세션 기록을 consult해야 하는 경우 realtime.agentId를 설정하세요.
Agent 모드 consult는 회의별 agent:<id>:subagent:google-meet:<session> 세션 키를 사용하므로, 후속 질문은 구성된 에이전트의 일반 에이전트 정책을 상속하면서 회의 컨텍스트를 유지합니다.
realtime.toolPolicy는 consult 실행을 제어합니다.
safe-read-only: consult 도구를 노출하고 일반 에이전트를read,web_search,web_fetch,x_search,memory_search,memory_get으로 제한합니다.owner: consult 도구를 노출하고 일반 에이전트가 일반 에이전트 도구 정책을 사용하도록 허용합니다.none: realtime 음성 모델에 consult 도구를 노출하지 않습니다.
consult 세션 키는 Meet 세션별로 범위가 지정되므로, 후속 consult 호출은 같은 회의 중 이전 consult 컨텍스트를 재사용할 수 있습니다.
Chrome이 통화에 완전히 참가한 뒤 음성 준비 상태 확인을 강제로 실행하려면:
openclaw googlemeet speak meet_... "Say exactly: I'm here and listening."전체 참가 및 발화 smoke의 경우:
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ --transport chrome-node \ --message "Say exactly: I'm here and listening."라이브 테스트 체크리스트
무인 에이전트에 회의를 넘기기 전에 다음 순서를 사용하세요.
openclaw googlemeet setupopenclaw nodes statusopenclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ --transport chrome-node \ --message "Say exactly: Google Meet speech test complete."예상 Chrome-node 상태:
googlemeet setup이 모두 녹색입니다.- Chrome-node가 기본 transport이거나 노드가 고정된 경우
googlemeet setup에chrome-node-connected가 포함됩니다. nodes status에 선택된 노드가 연결된 것으로 표시됩니다.- 선택된 노드는
googlemeet.chrome과browser.proxy를 모두 알립니다. - Meet 탭이 통화에 참가하고
test-speech가inCall: true와 함께 Chrome 상태를 반환합니다.
Parallels macOS VM 같은 원격 Chrome 호스트의 경우, Gateway 또는 VM을 업데이트한 뒤 가장 짧고 안전한 확인 방법은 다음과 같습니다.
openclaw googlemeet setupopenclaw nodes status --connectedopenclaw nodes invoke \ --node parallels-macos \ --command googlemeet.chrome \ --params '{"action":"setup"}'이것은 에이전트가 실제 회의 탭을 열기 전에 Gateway Plugin이 로드되었고, VM 노드가 현재 토큰으로 연결되었으며, Meet 오디오 브리지가 사용 가능함을 증명합니다.
Twilio smoke의 경우 전화 dial-in 세부 정보를 노출하는 회의를 사용하세요.
openclaw googlemeet setupopenclaw googlemeet join https://meet.google.com/abc-defg-hij \ --transport twilio \ --dial-in-number +15551234567 \ --pin 123456예상 Twilio 상태:
googlemeet setup에 녹색twilio-voice-call-plugin,twilio-voice-call-credentials,twilio-voice-call-webhook확인이 포함됩니다.- Gateway reload 후 CLI에서
voicecall을 사용할 수 있습니다. - 반환된 세션에
transport: "twilio"와twilio.voiceCallId가 있습니다. openclaw logs --follow에 realtime TwiML 전에 DTMF TwiML이 제공된 뒤, 초기 인사말이 큐에 들어간 realtime 브리지가 표시됩니다.googlemeet leave <sessionId>가 위임된 음성 통화를 종료합니다.
문제 해결
에이전트가 Google Meet 도구를 볼 수 없음
Plugin이 Gateway 구성에서 활성화되어 있는지 확인하고 Gateway를 reload하세요.
openclaw plugins list | grep google-meetopenclaw googlemeet setup방금 plugins.entries.google-meet를 편집했다면 Gateway를 다시 시작하거나 reload하세요. 실행 중인 에이전트는 현재 Gateway 프로세스가 등록한 Plugin 도구만 볼 수 있습니다.
macOS가 아닌 Gateway 호스트에서는 에이전트 대상 google_meet 도구가 계속 표시되지만, 로컬 Chrome talk-back 동작은 오디오 브리지에 도달하기 전에 차단됩니다. 로컬 Chrome talk-back 오디오는 현재 macOS BlackHole 2ch에 의존하므로, Linux 에이전트는 기본 로컬 Chrome 에이전트 경로 대신 mode: "transcribe", Twilio dial-in, 또는 macOS chrome-node 호스트를 사용해야 합니다.
연결된 Google Meet 지원 노드가 없음
노드 호스트에서 실행하세요.
openclaw plugins enable google-meetopenclaw plugins enable browserOPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macosGateway 호스트에서 노드를 승인하고 명령을 확인하세요.
openclaw devices listopenclaw devices approve <requestId>openclaw nodes status노드는 연결되어 있어야 하며 googlemeet.chrome과 browser.proxy를 나열해야 합니다. Gateway 구성은 해당 노드 명령을 허용해야 합니다.
{ gateway: { nodes: { allowCommands: ["browser.proxy", "googlemeet.chrome"], }, },}googlemeet setup이 chrome-node-connected에서 실패하거나 Gateway 로그가 gateway token mismatch를 보고하면 현재 Gateway 토큰으로 노드를 다시 설치하거나 다시 시작하세요. LAN Gateway의 경우 일반적으로 다음을 의미합니다.
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node install \ --host <gateway-lan-ip> \ --port 18789 \ --display-name parallels-macos \ --force그런 다음 노드 서비스를 reload하고 다시 실행하세요.
openclaw googlemeet setupopenclaw nodes status --connected브라우저는 열리지만 에이전트가 참가할 수 없음
observe-only 참가에는 googlemeet test-listen을, realtime 참가에는 googlemeet test-speech를 실행한 뒤 반환된 Chrome 상태를 확인하세요. 두 probe 중 하나가 manualActionRequired: true를 보고하면 operator에게 manualActionMessage를 보여주고 브라우저 동작이 완료될 때까지 재시도를 중단하세요.
일반적인 수동 동작:
- Chrome 프로필에 로그인합니다.
- Meet 호스트 계정에서 게스트를 허용합니다.
- Chrome의 기본 권한 프롬프트가 나타나면 Chrome 마이크/카메라 권한을 부여합니다.
- 멈춘 Meet 권한 대화상자를 닫거나 복구합니다.
Meet에 "Do you want people to hear you in the meeting?"가 표시된다는 이유만으로 "로그인되지 않음"을 보고하지 마세요. 이것은 Meet의 오디오 선택 interstitial입니다. OpenClaw는 가능할 때 브라우저 자동화를 통해 Use microphone을 클릭하고 실제 회의 상태를 계속 기다립니다. 생성 전용 브라우저 fallback의 경우 URL 생성에는 realtime 오디오 경로가 필요하지 않으므로 OpenClaw가 Continue without microphone을 클릭할 수 있습니다.
회의 생성 실패
googlemeet create는 OAuth 자격 증명이 구성된 경우 먼저 Google Meet API spaces.create endpoint를 사용합니다. OAuth 자격 증명이 없으면 고정된 Chrome 노드 브라우저로 fallback합니다. 다음을 확인하세요.
- API 생성의 경우:
oauth.clientId와oauth.refreshToken이 구성되어 있거나 일치하는OPENCLAW_GOOGLE_MEET_*환경 변수가 있어야 합니다. - API 생성의 경우: refresh token은 생성 지원이 추가된 뒤 발급된 것이어야 합니다. 오래된 토큰에는
meetings.space.createdscope가 없을 수 있습니다.openclaw googlemeet auth login --json을 다시 실행하고 Plugin 구성을 업데이트하세요. - 브라우저 fallback의 경우:
defaultTransport: "chrome-node"이고chromeNode.node가browser.proxy와googlemeet.chrome이 있는 연결된 노드를 가리켜야 합니다. - 브라우저 fallback의 경우: 해당 노드의 OpenClaw Chrome 프로필이 Google에 로그인되어 있고
https://meet.google.com/new를 열 수 있어야 합니다. - 브라우저 fallback의 경우: 재시도는 새 탭을 열기 전에 기존
https://meet.google.com/new또는 Google 계정 프롬프트 탭을 재사용합니다. 에이전트가 시간 초과되면 다른 Meet 탭을 수동으로 열지 말고 도구 호출을 재시도하세요. - 브라우저 fallback의 경우: 도구가
manualActionRequired: true를 반환하면 반환된browser.nodeId,browser.targetId,browserUrl,manualActionMessage를 사용해 operator를 안내하세요. 해당 동작이 완료될 때까지 루프로 재시도하지 마세요. - 브라우저 fallback의 경우: Meet에 "Do you want people to hear you in the meeting?"가 표시되면 탭을 열린 상태로 두세요. OpenClaw는 브라우저 자동화를 통해 Use microphone 또는 생성 전용 fallback의 경우 Continue without microphone을 클릭하고 생성된 Meet URL을 계속 기다려야 합니다. 그렇게 할 수 없다면 오류는
google-login-required가 아니라meet-audio-choice-required를 언급해야 합니다.
에이전트가 참가하지만 말하지 않음
realtime 경로를 확인하세요.
openclaw googlemeet setupopenclaw googlemeet doctor일반 STT -> OpenClaw 에이전트 -> TTS talk-back 경로에는 mode: "agent"를 사용하고, 직접 realtime 음성 fallback에는 mode: "bidi"를 사용하세요. mode: "transcribe"는 의도적으로 talk-back 브리지를 시작하지 않습니다. observe-only 디버깅의 경우 참가자가 말한 뒤 openclaw googlemeet status --json <session-id>를 실행하고 captioning, transcriptLines, lastCaptionText를 확인하세요. inCall이 true이지만 transcriptLines가 0으로 유지되면 Meet 캡션이 비활성화되었거나, 관찰자가 설치된 뒤 아무도 말하지 않았거나, Meet UI가 변경되었거나, 회의 언어/계정에서 라이브 캡션을 사용할 수 없을 수 있습니다.
googlemeet test-speech는 항상 realtime 경로를 확인하고 해당 호출에서 브리지 출력 바이트가 관찰되었는지 보고합니다. speechOutputVerified가 false이고 speechOutputTimedOut이 true이면 realtime provider가 utterance를 수락했을 수 있지만 OpenClaw가 Chrome 오디오 브리지에 도달한 새 출력 바이트를 보지 못한 것입니다.
다음도 확인하세요.
- Gateway 호스트에서
OPENAI_API_KEY또는GEMINI_API_KEY같은 realtime provider 키를 사용할 수 있습니다. - Chrome 호스트에
BlackHole 2ch가 표시됩니다. - Chrome 호스트에
sox가 있습니다. - Meet 마이크와 스피커가 OpenClaw가 사용하는 가상 오디오 경로를 통해 라우팅됩니다. 로컬 Chrome realtime 참가의 경우
doctor에meet output routed: yes가 표시되어야 합니다.
googlemeet doctor [session-id]는 세션, 노드, 통화 중 상태, 수동 동작 이유, realtime provider 연결, realtimeReady, 오디오 input/output 활동, 마지막 오디오 timestamp, 바이트 카운터, 브라우저 URL을 출력합니다. 원시 JSON이 필요할 때는 googlemeet status [session-id] --json을 사용하세요. 토큰을 노출하지 않고 Google Meet OAuth refresh를 확인해야 할 때는 googlemeet doctor --oauth를 사용하세요. Google Meet API proof도 필요하면 --meeting 또는 --create-space를 추가하세요.
에이전트가 시간 초과되었고 이미 열린 Meet 탭이 보이면 다른 탭을 열지 말고 해당 탭을 검사하세요.
openclaw googlemeet recover-tabopenclaw googlemeet recover-tab https://meet.google.com/abc-defg-hij동등한 도구 동작은 recover_current_tab입니다. 선택된 transport에 대해 기존 Meet 탭에 focus하고 검사합니다. chrome에서는 Gateway를 통한 로컬 브라우저 제어를 사용하고, chrome-node에서는 구성된 Chrome 노드를 사용합니다. 새 탭을 열거나 새 세션을 만들지 않습니다. 대신 login, admission, permissions, audio-choice 상태 같은 현재 blocker를 보고합니다. CLI 명령은 구성된 Gateway와 통신하므로 Gateway가 실행 중이어야 합니다. chrome-node에는 Chrome 노드도 연결되어 있어야 합니다.
Twilio 설정 확인 실패
voice-call이 허용되지 않았거나 활성화되지 않은 경우 twilio-voice-call-plugin이 실패합니다. plugins.allow에 추가하고 plugins.entries.voice-call을 활성화한 뒤 Gateway를 reload하세요.
Twilio backend에 account SID, auth token, 또는 caller number가 없으면 twilio-voice-call-credentials가 실패합니다. Gateway 호스트에서 다음을 설정하세요.
export TWILIO_ACCOUNT_SID=AC...export TWILIO_AUTH_TOKEN=...export TWILIO_FROM_NUMBER=+15550001234voice-call에 public webhook 노출이 없거나 publicUrl이 loopback 또는 private network 공간을 가리키면 twilio-voice-call-webhook이 실패합니다. plugins.entries.voice-call.config.publicUrl을 공개 provider URL로 설정하거나 voice-call tunnel/Tailscale 노출을 구성하세요.
Loopback 및 private URL은 carrier callback에 유효하지 않습니다. publicUrl로 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을 사용하지 마세요.
안정적인 public URL의 경우:
{ plugins: { entries: { "voice-call": { enabled: true, config: { provider: "twilio", fromNumber: "+15550001234", publicUrl: "https://voice.example.com/voice/webhook", }, }, }, },}로컬 개발에서는 비공개 호스트 URL 대신 터널이나 Tailscale 노출을 사용하세요.
{ plugins: { entries: { "voice-call": { config: { tunnel: { provider: "ngrok" }, // or tailscale: { mode: "funnel", path: "/voice/webhook" }, }, }, }, },}그런 다음 Gateway를 다시 시작하거나 다시 로드하고 다음을 실행하세요.
openclaw googlemeet setup --transport twilioopenclaw voicecall setupopenclaw voicecall smokevoicecall smoke는 기본적으로 준비 상태 확인 전용입니다. 특정 번호로 드라이런하려면 다음을 사용하세요.
openclaw voicecall smoke --to "+15555550123"실제 발신 알림 통화를 의도적으로 걸려는 경우에만 --yes를 추가하세요.
openclaw voicecall smoke --to "+15555550123" --yesTwilio 통화가 시작되지만 회의에 들어가지 않음
Meet 이벤트가 전화 접속 세부 정보를 노출하는지 확인하세요. 정확한 전화 접속 번호와 PIN 또는 사용자 지정 DTMF 시퀀스를 전달하세요.
openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --transport twilio \ --dial-in-number +15551234567 \ --dtmf-sequence ww123456#PIN을 입력하기 전에 제공자가 일시 중지를 필요로 하는 경우 --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초에서 늘리세요. - 참가자가 들어왔지만 인사말이 들리지 않는 경우,
openclaw logs --follow에서 DTMF 이후voicecall.speak요청과 media-stream TTS 재생 또는 TwilioOPENCLAW_DOCS_MARKER:calloutOpen:U2F5폴백을 확인하세요. 통화 트랜스크립트에 여전히 "enter the meeting PIN"이 포함되어 있다면 전화 구간이 아직 Meet 방에 들어오지 않은 것이므로 회의 참가자는 음성을 들을 수 없습니다.
Webhook이 도착하지 않는다면 먼저 Voice Call Plugin을 디버그하세요. 제공자가
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를 사용하고, bidi 모드는 실시간 음성 제공자를 사용합니다. 기본 Chrome 경로는chrome.audioBufferBytes: 4096을 사용하는 24 kHz PCM16입니다. 8 kHz G.711 mu-law는 레거시 명령 쌍에서 계속 사용할 수 있습니다.chrome.audioBridgeCommand: 외부 브리지 명령이 전체 로컬 오디오 경로를 소유하며, 데몬을 시작하거나 검증한 뒤 종료해야 합니다. 이는bidi에만 유효합니다.agent모드는 TTS를 위해 명령 쌍에 직접 접근해야 하기 때문입니다.
에이전트 모드에서 에이전트가 google_meet 도구를 호출하면, 회의 컨설턴트
세션은 참가자 발화에 응답하기 전에 호출자의 현재 트랜스크립트를 포크합니다.
Meet 세션은 여전히 별도로 유지되므로
(agent:<agentId>:subagent:google-meet:<sessionId>) 회의 후속 작업이 호출자
트랜스크립트를 직접 변경하지 않습니다.
깨끗한 양방향 오디오를 위해 Meet 출력과 Meet 마이크를 별도의 가상 장치 또는 Loopback 스타일 가상 장치 그래프로 라우팅하세요. 단일 공유 BlackHole 장치는 다른 참가자의 소리를 다시 통화로 반향시킬 수 있습니다.
명령 쌍 Chrome 브리지를 사용할 때 chrome.bargeInInputCommand는 별도의 로컬
마이크를 수신하고 사람이 말하기 시작하면 어시스턴트 재생을 지울 수 있습니다.
이렇게 하면 어시스턴트 재생 중 공유 BlackHole loopback 입력이 일시적으로
억제되더라도 사람의 발화가 어시스턴트 출력보다 앞서 유지됩니다.
chrome.audioInputCommand 및 chrome.audioOutputCommand와 마찬가지로 이는
운영자가 구성하는 로컬 명령입니다. 명시적으로 신뢰할 수 있는 명령 경로나 인수
목록을 사용하고, 신뢰할 수 없는 위치의 스크립트를 가리키지 마세요.
googlemeet speak는 Chrome 세션의 활성 말하기 응답 오디오 브리지를 트리거합니다.
googlemeet leave는 해당 브리지를 중지합니다. Voice Call Plugin을 통해 위임된
Twilio 세션의 경우 leave는 기본 음성 통화도 종료합니다. API로 관리되는 공간의
활성 Google Meet 회의도 닫으려면 googlemeet end-active-conference를 사용하세요.