Plugins
Plugin Google Meet
การรองรับผู้เข้าร่วม Google Meet สำหรับ OpenClaw ตั้งใจออกแบบให้ Plugin ทำงานแบบชัดเจน:
- จะเข้าร่วมเฉพาะ URL
https://meet.google.com/...ที่ระบุชัดเจนเท่านั้น - สามารถสร้างพื้นที่ Meet ใหม่ผ่าน Google Meet API แล้วเข้าร่วม URL ที่ส่งกลับมา
agentคือโหมดตอบกลับด้วยเสียงเริ่มต้น: การถอดเสียงแบบเรียลไทม์จะฟัง, agent ของ OpenClaw ที่กำหนดค่าจะตอบ และ OpenClaw TTS ปกติจะพูดเข้าไปใน Meetbidiยังคงพร้อมใช้เป็นโหมดโมเดลเสียงเรียลไทม์โดยตรงสำรอง- agent เลือกพฤติกรรมการเข้าร่วมด้วย
mode: ใช้agentสำหรับการฟัง/ตอบกลับสด,bidiสำหรับเสียงเรียลไทม์โดยตรงสำรอง หรือtranscribeเพื่อเข้าร่วม/ควบคุมเบราว์เซอร์โดยไม่มีบริดจ์ตอบกลับด้วยเสียง - การยืนยันตัวตนเริ่มจาก Google OAuth ส่วนบุคคลหรือโปรไฟล์ Chrome ที่ลงชื่อเข้าใช้แล้ว
- ไม่มีการประกาศขอความยินยอมอัตโนมัติ
- แบ็กเอนด์เสียงเริ่มต้นของ Chrome คือ
BlackHole 2ch - Chrome สามารถทำงานภายในเครื่องหรือบนโฮสต์ Node ที่จับคู่ไว้ได้
- Twilio รับหมายเลขโทรเข้า พร้อม PIN หรือชุด DTMF ที่เลือกใส่ได้; ไม่สามารถโทรไปยัง URL ของ Meet ได้โดยตรง
- คำสั่ง CLI คือ
googlemeet;meetสงวนไว้สำหรับเวิร์กโฟลว์การประชุมทางไกลของ agent ที่กว้างกว่า
เริ่มต้นอย่างรวดเร็ว
ติดตั้งการพึ่งพาเสียงภายในเครื่อง และกำหนดค่าผู้ให้บริการถอดเสียงแบบเรียลไทม์พร้อม OpenClaw TTS ปกติ OpenAI คือผู้ให้บริการถอดเสียงเริ่มต้น; Google Gemini Live ก็ใช้ได้เช่นกันในฐานะเสียงสำรอง bidi แยกต่างหากด้วย realtime.voiceProvider: "google":
brew install blackhole-2ch sox
export OPENAI_API_KEY=sk-...
# only needed when realtime.voiceProvider is "google" for bidi mode
export GEMINI_API_KEY=...
blackhole-2ch ติดตั้งอุปกรณ์เสียงเสมือน BlackHole 2ch ตัวติดตั้งของ Homebrew ต้องรีบูตก่อนที่ macOS จะแสดงอุปกรณ์:
sudo reboot
หลังรีบูต ให้ตรวจสอบทั้งสองส่วน:
system_profiler SPAudioDataType | grep -i BlackHole
command -v sox
เปิดใช้ Plugin:
{
plugins: {
entries: {
"google-meet": {
enabled: true,
config: {},
},
},
},
}
ตรวจสอบการตั้งค่า:
openclaw googlemeet setup
ผลลัพธ์การตั้งค่าถูกออกแบบให้อ่านได้โดย agent และรู้จักโหมด โดยจะรายงานโปรไฟล์ Chrome, การปักหมุด Node และสำหรับการเข้าร่วม Chrome แบบเรียลไทม์ จะรายงานบริดจ์เสียง BlackHole/SoX และการตรวจสอบอินโทรเรียลไทม์แบบหน่วงเวลา สำหรับการเข้าร่วมแบบสังเกตอย่างเดียว ให้ตรวจสอบทรานสปอร์ตเดียวกันด้วย --mode transcribe; โหมดนั้นข้ามข้อกำหนดเบื้องต้นของเสียงเรียลไทม์ เพราะไม่ได้ฟังผ่านหรือพูดผ่านบริดจ์:
openclaw googlemeet setup --transport chrome-node --mode transcribe
เมื่อกำหนดค่าการมอบหมายผ่าน Twilio แล้ว การตั้งค่าจะรายงานด้วยว่า Plugin voice-call, ข้อมูลรับรอง Twilio และการเปิดเผย Webhook สาธารณะพร้อมใช้งานหรือไม่ ให้ถือว่าการตรวจสอบใด ๆ ที่เป็น ok: false เป็นตัวบล็อกสำหรับทรานสปอร์ตและโหมดที่ตรวจสอบ ก่อนขอให้ agent เข้าร่วม ใช้ openclaw googlemeet setup --json สำหรับสคริปต์หรือผลลัพธ์ที่เครื่องอ่านได้ ใช้ --transport chrome, --transport chrome-node หรือ --transport twilio เพื่อตรวจล่วงหน้าทรานสปอร์ตเฉพาะก่อนที่ agent จะลองใช้
สำหรับ Twilio ให้ตรวจล่วงหน้าทรานสปอร์ตอย่างชัดเจนเสมอเมื่อทรานสปอร์ตเริ่มต้นคือ Chrome:
openclaw googlemeet setup --transport twilio
สิ่งนี้จะจับการเชื่อมต่อ voice-call ที่ขาดหาย, ข้อมูลรับรอง Twilio หรือการเปิดเผย Webhook ที่เข้าถึงไม่ได้ ก่อนที่ agent จะพยายามโทรเข้าการประชุม
เข้าร่วมการประชุม:
openclaw googlemeet join https://meet.google.com/abc-defg-hij
หรือให้ agent เข้าร่วมผ่านเครื่องมือ google_meet:
{
"action": "join",
"url": "https://meet.google.com/abc-defg-hij",
"transport": "chrome-node",
"mode": "agent"
}
เครื่องมือ google_meet สำหรับ agent ยังคงพร้อมใช้งานบนโฮสต์ที่ไม่ใช่ macOS สำหรับโฟลว์ artifact, calendar, setup, transcribe, Twilio และ chrome-node การกระทำตอบกลับด้วยเสียงของ Chrome ภายในเครื่องถูกบล็อกบนโฮสต์เหล่านั้น เพราะเส้นทางเสียง Chrome ที่รวมมาด้วยปัจจุบันพึ่งพา macOS BlackHole 2ch บน Linux ให้ใช้ mode: "transcribe", การโทรเข้าผ่าน Twilio หรือโฮสต์ macOS chrome-node สำหรับการเข้าร่วม Chrome แบบตอบกลับด้วยเสียง
สร้างการประชุมใหม่และเข้าร่วม:
openclaw googlemeet create --transport chrome-node --mode agent
สำหรับห้องที่สร้างผ่าน API ให้ใช้ Google Meet SpaceConfig.accessType เมื่อคุณต้องการให้นโยบายไม่ต้องเคาะขอเข้าห้องชัดเจน แทนที่จะสืบทอดจากค่าเริ่มต้นของบัญชี Google:
openclaw googlemeet create --access-type OPEN --transport chrome-node --mode agent
OPEN อนุญาตให้ใครก็ตามที่มี URL ของ Meet เข้าร่วมได้โดยไม่ต้องเคาะขอเข้า TRUSTED อนุญาตให้ผู้ใช้ที่เชื่อถือได้ขององค์กรโฮสต์, ผู้ใช้ภายนอกที่ได้รับเชิญ และผู้ใช้ที่โทรเข้า เข้าร่วมได้โดยไม่ต้องเคาะขอเข้า RESTRICTED จำกัดการเข้าห้องโดยไม่ต้องเคาะขอเข้าไว้เฉพาะผู้ได้รับเชิญ การตั้งค่าเหล่านี้ใช้ได้กับเส้นทางการสร้างอย่างเป็นทางการของ Google Meet API เท่านั้น ดังนั้นต้องกำหนดค่าข้อมูลรับรอง OAuth
หากคุณยืนยันตัวตน Google Meet ก่อนที่ตัวเลือกนี้จะพร้อมใช้งาน ให้เรียกใช้ openclaw googlemeet auth login --json อีกครั้งหลังเพิ่มสโคป meetings.space.settings ลงในหน้าจอขอความยินยอม Google OAuth ของคุณ
สร้างเฉพาะ URL โดยไม่เข้าร่วม:
openclaw googlemeet create --no-join
googlemeet create มีสองเส้นทาง:
- สร้างด้วย API: ใช้เมื่อกำหนดค่าข้อมูลรับรอง Google Meet OAuth แล้ว นี่คือเส้นทางที่กำหนดได้แน่นอนที่สุด และไม่ขึ้นกับสถานะ UI ของเบราว์เซอร์
- ตัวสำรองผ่านเบราว์เซอร์: ใช้เมื่อไม่มีข้อมูลรับรอง OAuth OpenClaw ใช้ Node Chrome ที่ปักหมุดไว้ เปิด
https://meet.google.com/newรอให้ Google เปลี่ยนเส้นทางไปยัง URL รหัสการประชุมจริง แล้วส่ง URL นั้นกลับมา เส้นทางนี้ต้องให้โปรไฟล์ Chrome ของ OpenClaw บน Node ลงชื่อเข้าใช้ Google อยู่แล้ว การทำงานอัตโนมัติของเบราว์เซอร์จะจัดการพรอมป์ไมโครโฟนครั้งแรกของ Meet เอง; พรอมป์นั้นไม่ถูกถือว่าเป็นความล้มเหลวในการเข้าสู่ระบบ Google โฟลว์เข้าร่วมและสร้างจะพยายามใช้แท็บ Meet ที่มีอยู่ซ้ำก่อนเปิดแท็บใหม่ด้วย การจับคู่จะไม่สนใจสตริงคิวรี URL ที่ไม่เป็นอันตราย เช่นauthuserดังนั้นการลองใหม่ของ agent ควรโฟกัสการประชุมที่เปิดอยู่แล้วแทนที่จะสร้างแท็บ Chrome ที่สอง
ผลลัพธ์ของคำสั่ง/เครื่องมือมีฟิลด์ source (api หรือ browser) เพื่อให้ agent อธิบายได้ว่าใช้เส้นทางใด create จะเข้าร่วมการประชุมใหม่ตามค่าเริ่มต้น และส่งกลับ joined: true พร้อมเซสชันการเข้าร่วม หากต้องการสร้างเฉพาะ URL ให้ใช้ create --no-join บน CLI หรือส่ง "join": false ให้เครื่องมือ
หรือบอก agent ว่า: "สร้าง Google Meet, เข้าร่วมด้วยโหมดตอบกลับด้วยเสียงของ agent และส่งลิงก์ให้ฉัน" agent ควรเรียก google_meet ด้วย action: "create" แล้วแชร์ meetingUri ที่ส่งกลับมา
{
"action": "create",
"transport": "chrome-node",
"mode": "agent"
}
สำหรับการเข้าร่วมแบบสังเกตอย่างเดียว/ควบคุมเบราว์เซอร์ ให้ตั้ง "mode": "transcribe" โหมดนี้จะไม่เริ่มบริดจ์เสียงเรียลไทม์แบบดูเพล็กซ์ ไม่ต้องใช้ BlackHole หรือ SoX และจะไม่พูดตอบกลับเข้าไปในการประชุม การเข้าร่วม Chrome ในโหมดนี้ยังหลีกเลี่ยงการอนุญาตไมโครโฟน/กล้องของ OpenClaw และหลีกเลี่ยงเส้นทาง Use microphone ของ Meet หาก 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 เดียวเพียงพอสำหรับการทดสอบ smoke ครั้งแรก แต่อาจเกิดเสียงสะท้อนได้
Gateway ภายในเครื่อง + Parallels Chrome
คุณ ไม่ จำเป็นต้องมี OpenClaw Gateway เต็มรูปแบบหรือคีย์ model API ภายใน VM macOS เพียงเพื่อให้ VM เป็นเจ้าของ Chrome ให้รัน Gateway และ agent ภายในเครื่อง แล้วรันโฮสต์ Node ใน VM เปิดใช้ Plugin ที่รวมมาด้วยบน VM หนึ่งครั้ง เพื่อให้ Node โฆษณาคำสั่ง Chrome:
สิ่งที่ทำงานอยู่ที่ไหน:
- โฮสต์ Gateway: OpenClaw Gateway, เวิร์กสเปซของ agent, คีย์ model/API, ผู้ให้บริการเรียลไทม์ และการกำหนดค่า Plugin Google Meet
- VM macOS ของ Parallels: OpenClaw CLI/โฮสต์ Node, Google Chrome, SoX, BlackHole 2ch และโปรไฟล์ Chrome ที่ลงชื่อเข้าใช้ Google
- ไม่จำเป็นใน VM: บริการ Gateway, การกำหนดค่า agent, คีย์ OpenAI/GPT หรือการตั้งค่าผู้ให้บริการโมเดล
ติดตั้งการพึ่งพาใน VM:
brew install blackhole-2ch sox
รีบูต VM หลังติดตั้ง BlackHole เพื่อให้ macOS แสดง BlackHole 2ch:
sudo reboot
หลังรีบูต ให้ตรวจสอบว่า VM เห็นอุปกรณ์เสียงและคำสั่ง SoX:
system_profiler SPAudioDataType | grep -i BlackHole
command -v sox
ติดตั้งหรืออัปเดต OpenClaw ใน VM แล้วเปิดใช้ Plugin ที่รวมมาด้วยที่นั่น:
openclaw plugins enable google-meet
เริ่มโฮสต์ Node ใน VM:
openclaw node run --host <gateway-host> --port 18789 --display-name parallels-macos
หาก <gateway-host> เป็น IP บน LAN และคุณไม่ได้ใช้ TLS, Node จะปฏิเสธ WebSocket แบบข้อความล้วน เว้นแต่คุณจะเลือกยอมรับสำหรับเครือข่ายส่วนตัวที่เชื่อถือได้นั้น:
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macos
ใช้ตัวแปรสภาพแวดล้อมเดียวกันเมื่อติดตั้ง Node เป็น LaunchAgent:
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node install --host <gateway-lan-ip> --port 18789 --display-name parallels-macos --force
openclaw node restart
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 เป็นสภาพแวดล้อมของโปรเซส ไม่ใช่การตั้งค่า openclaw.json openclaw node install จะจัดเก็บค่านี้ไว้ในสภาพแวดล้อมของ LaunchAgent เมื่อมีอยู่ในคำสั่งติดตั้ง
อนุมัติ Node จากโฮสต์ Gateway:
openclaw devices list
openclaw devices approve <requestId>
ยืนยันว่า Gateway เห็น Node และ Node โฆษณาทั้ง googlemeet.chrome และความสามารถของเบราว์เซอร์/browser.proxy:
openclaw nodes status
กำหนดเส้นทาง Meet ผ่าน Node นั้นบนโฮสต์ Gateway:
{
gateway: {
nodes: {
allowCommands: ["googlemeet.chrome", "browser.proxy"],
},
},
plugins: {
entries: {
"google-meet": {
enabled: true,
config: {
defaultTransport: "chrome-node",
chrome: {
guestName: "OpenClaw Agent",
autoJoin: true,
reuseExistingTab: true,
},
chromeNode: {
node: "parallels-macos",
},
},
},
},
},
}
ตอนนี้เข้าร่วมตามปกติจากโฮสต์ Gateway:
openclaw googlemeet join https://meet.google.com/abc-defg-hij
หรือขอให้ agent ใช้เครื่องมือ google_meet พร้อม transport: "chrome-node"
สำหรับการทดสอบ smoke ด้วยคำสั่งเดียวที่สร้างหรือใช้เซสชันซ้ำ, พูดวลีที่รู้จัก และพิมพ์สุขภาพเซสชัน:
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij
ระหว่างการเข้าร่วมแบบเรียลไทม์ ระบบอัตโนมัติของเบราว์เซอร์ OpenClaw จะกรอกชื่อผู้เข้าร่วม คลิก
เข้าร่วม/ขอเข้าร่วม และยอมรับตัวเลือก "ใช้ไมโครโฟน" ครั้งแรกของ Meet เมื่อพรอมป์นั้น
ปรากฏขึ้น ระหว่างการเข้าร่วมแบบสังเกตการณ์เท่านั้นหรือการสร้างการประชุมผ่านเบราว์เซอร์เท่านั้น ระบบจะ
ดำเนินต่อผ่านพรอมป์เดียวกันโดยไม่ใช้ไมโครโฟนเมื่อมีตัวเลือกนั้นให้ใช้
หากโปรไฟล์เบราว์เซอร์ยังไม่ได้ลงชื่อเข้าใช้ Meet กำลังรอให้โฮสต์อนุญาต
Chrome ต้องการสิทธิ์ไมโครโฟน/กล้องสำหรับการเข้าร่วมแบบเรียลไทม์ หรือ Meet ค้างอยู่
บนพรอมป์ที่ระบบอัตโนมัติไม่สามารถจัดการได้ ผลลัพธ์ join/test-speech จะรายงาน
manualActionRequired: true พร้อม manualActionReason และ
manualActionMessage Agent ควรหยุดลองเข้าร่วมซ้ำ รายงานข้อความนั้นแบบตรงตัว
พร้อม browserUrl/browserTitle ปัจจุบัน และลองอีกครั้งหลังจาก
การดำเนินการด้วยตนเองในเบราว์เซอร์เสร็จสมบูรณ์เท่านั้น
หากละ chromeNode.node ไว้ OpenClaw จะเลือกอัตโนมัติเฉพาะเมื่อมี
Node ที่เชื่อมต่ออยู่เพียงหนึ่งรายการที่ประกาศทั้ง googlemeet.chrome และการควบคุมเบราว์เซอร์ หาก
มี Node ที่รองรับหลายรายการเชื่อมต่ออยู่ ให้ตั้ง chromeNode.node เป็น id ของ Node,
ชื่อที่แสดง หรือ IP ระยะไกล
การตรวจสอบความล้มเหลวที่พบบ่อย:
Configured Google Meet node ... is not usable: offline: Node ที่ปักหมุดไว้เป็น ที่รู้จักของ Gateway แต่ไม่พร้อมใช้งาน Agent ควรมอง Node นั้นเป็น สถานะสำหรับวินิจฉัย ไม่ใช่โฮสต์ Chrome ที่ใช้งานได้ และรายงานตัวบล็อกการตั้งค่า แทนการถอยไปใช้ transport อื่น เว้นแต่ผู้ใช้ขอให้ทำเช่นนั้นNo connected Google Meet-capable node: เริ่มopenclaw node runใน VM, อนุมัติการจับคู่ และตรวจสอบให้แน่ใจว่าได้รันopenclaw plugins enable google-meetและopenclaw plugins enable browserใน VM แล้ว ยืนยันด้วยว่า โฮสต์ 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: ติดตั้งblackhole-2chใน VM แล้วรีบูต VM- Chrome เปิดขึ้นแต่เข้าร่วมไม่ได้: ลงชื่อเข้าใช้โปรไฟล์เบราว์เซอร์ภายใน VM หรือ
คงค่า
chrome.guestNameไว้สำหรับการเข้าร่วมแบบผู้เข้าร่วมภายนอก การเข้าร่วมอัตโนมัติแบบผู้เข้าร่วมภายนอกใช้ระบบอัตโนมัติเบราว์เซอร์ของ OpenClaw ผ่านพร็อกซีเบราว์เซอร์ของ Node; ตรวจสอบให้แน่ใจว่าคอนฟิกเบราว์เซอร์ของ Node ชี้ไปยังโปรไฟล์ที่คุณต้องการ ตัวอย่างเช่นbrowser.defaultProfile: "user"หรือโปรไฟล์เซสชันเดิมที่มีชื่อ - แท็บ Meet ซ้ำ: เปิดใช้งาน
chrome.reuseExistingTab: trueไว้ OpenClaw จะเปิดใช้งานแท็บเดิมสำหรับ URL Meet เดียวกันก่อนเปิดแท็บใหม่ และ การสร้างการประชุมผ่านเบราว์เซอร์จะใช้https://meet.google.com/newที่กำลังดำเนินอยู่ หรือแท็บพรอมป์บัญชี Google เดิมก่อนเปิดแท็บอื่น - ไม่มีเสียง: ใน Meet ให้กำหนดเส้นทางไมโครโฟน/ลำโพงผ่านเส้นทางอุปกรณ์เสียงเสมือน ที่ OpenClaw ใช้; ใช้อุปกรณ์เสมือนแยกกันหรือการกำหนดเส้นทางแบบ Loopback เพื่อเสียงสองทางที่สะอาด
หมายเหตุการติดตั้ง
ค่าเริ่มต้น talk-back ของ Chrome ใช้เครื่องมือภายนอกสองรายการ:
sox: ยูทิลิตีเสียงแบบบรรทัดคำสั่ง Plugin ใช้คำสั่งอุปกรณ์ CoreAudio แบบระบุชัดเจนสำหรับบริดจ์เสียง PCM16 24 kHz ค่าเริ่มต้นblackhole-2ch: ไดรเวอร์เสียงเสมือนของ macOS โดยจะสร้างอุปกรณ์เสียงBlackHole 2chที่ Chrome/Meet สามารถกำหนดเส้นทางผ่านได้
OpenClaw ไม่ได้รวมแพ็กเกจหรือแจกจ่ายแพ็กเกจใดแพ็กเกจหนึ่งนี้ซ้ำ เอกสารขอให้ผู้ใช้
ติดตั้งเป็น dependency ของโฮสต์ผ่าน Homebrew SoX ใช้สัญญาอนุญาต
LGPL-2.0-only AND GPL-2.0-only; BlackHole เป็น GPL-3.0 หากคุณสร้าง
ตัวติดตั้งหรือ appliance ที่รวม BlackHole กับ OpenClaw ให้ตรวจสอบเงื่อนไขสัญญาอนุญาต upstream
ของ BlackHole หรือขอใบอนุญาตแยกต่างหากจาก Existential Audio
Transport
Chrome
Chrome transport เปิด URL Meet ผ่านการควบคุมเบราว์เซอร์ของ OpenClaw และเข้าร่วม
ด้วยโปรไฟล์เบราว์เซอร์ OpenClaw ที่ลงชื่อเข้าใช้แล้ว บน macOS Plugin จะตรวจสอบ
BlackHole 2ch ก่อนเปิดใช้งาน หากกำหนดค่าไว้ ระบบจะรันคำสั่งตรวจสุขภาพ
บริดจ์เสียงและคำสั่งเริ่มต้นก่อนเปิด Chrome ด้วย ใช้ chrome เมื่อ
Chrome/เสียงอยู่บนโฮสต์ Gateway; ใช้ chrome-node เมื่อ Chrome/เสียงอยู่
บน Node ที่จับคู่ เช่น VM macOS ของ Parallels สำหรับ Chrome ภายในเครื่อง ให้เลือก
โปรไฟล์ด้วย browser.defaultProfile; chrome.browserProfile จะถูกส่งไปยัง
โฮสต์ chrome-node
openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome
openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome-node
กำหนดเส้นทางเสียงไมโครโฟนและลำโพงของ Chrome ผ่านบริดจ์เสียง OpenClaw ภายในเครื่อง
หากไม่ได้ติดตั้ง BlackHole 2ch การเข้าร่วมจะล้มเหลวด้วยข้อผิดพลาดการตั้งค่า
แทนที่จะเข้าร่วมแบบเงียบๆ โดยไม่มีเส้นทางเสียง
Twilio
Twilio transport เป็นแผนการโทรแบบเข้มงวดที่มอบหมายให้ Voice Call Plugin มันไม่แยกวิเคราะห์หน้า Meet เพื่อค้นหาหมายเลขโทรศัพท์
ใช้สิ่งนี้เมื่อไม่สามารถเข้าร่วมผ่าน Chrome ได้ หรือคุณต้องการทางเลือกสำรองแบบโทรเข้า Google Meet ต้องแสดงหมายเลขโทรเข้าและ PIN สำหรับ การประชุม; OpenClaw จะไม่ค้นพบข้อมูลเหล่านั้นจากหน้า Meet
เปิดใช้งาน Voice Call Plugin บนโฮสต์ Gateway ไม่ใช่บน Node Chrome:
{
plugins: {
allow: ["google-meet", "voice-call", "google"],
entries: {
"google-meet": {
enabled: true,
config: {
defaultTransport: "chrome-node",
// or set "twilio" if Twilio should be the default
},
},
"voice-call": {
enabled: true,
config: {
provider: "twilio",
inboundPolicy: "allowlist",
realtime: {
enabled: true,
provider: "google",
instructions: "Join this Google Meet as an OpenClaw agent. Be brief.",
toolPolicy: "safe-read-only",
providers: {
google: {
silenceDurationMs: 500,
startSensitivity: "high",
},
},
},
},
},
google: {
enabled: true,
},
},
},
}
ระบุข้อมูลรับรอง Twilio ผ่าน environment หรือ config Environment ช่วยกัน
ความลับออกจาก openclaw.json:
export TWILIO_ACCOUNT_SID=AC...
export TWILIO_AUTH_TOKEN=...
export TWILIO_FROM_NUMBER=+15550001234
export GEMINI_API_KEY=...
ใช้ realtime.provider: "openai" พร้อม OpenAI provider Plugin และ
OPENAI_API_KEY แทน หากนั่นคือผู้ให้บริการเสียงเรียลไทม์ของคุณ
รีสตาร์ทหรือโหลด Gateway ใหม่หลังจากเปิดใช้งาน voice-call; การเปลี่ยนแปลงคอนฟิก Plugin
จะไม่ปรากฏในโปรเซส Gateway ที่กำลังรันอยู่จนกว่าจะโหลดใหม่
จากนั้นตรวจสอบ:
openclaw config validate
openclaw plugins list | grep -E 'google-meet|voice-call'
openclaw googlemeet setup
เมื่อการมอบหมาย Twilio เชื่อมต่อเรียบร้อยแล้ว 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 และ preflight
OAuth เป็นทางเลือกสำหรับการสร้างลิงก์ Meet เพราะ googlemeet create สามารถถอยไปใช้
ระบบอัตโนมัติเบราว์เซอร์ได้ กำหนดค่า OAuth เมื่อคุณต้องการการสร้างผ่าน API ทางการ,
การแก้ข้อมูล space หรือการตรวจสอบ preflight ของ Meet Media API
การเข้าถึง Google Meet API ใช้ OAuth ของผู้ใช้: สร้างไคลเอนต์ Google Cloud OAuth,
ขอ scope ที่จำเป็น อนุญาตบัญชี Google จากนั้นจัดเก็บ
refresh token ที่ได้ในคอนฟิก Google Meet Plugin หรือระบุผ่าน
ตัวแปร environment OPENCLAW_GOOGLE_MEET_*
OAuth ไม่ได้แทนที่เส้นทางการเข้าร่วมผ่าน Chrome Chrome และ Chrome-node transport ยังคงเข้าร่วมผ่านโปรไฟล์ Chrome ที่ลงชื่อเข้าใช้แล้ว, BlackHole/SoX และ Node ที่เชื่อมต่อ เมื่อคุณใช้การเข้าร่วมผ่านเบราว์เซอร์ OAuth ใช้สำหรับเส้นทาง Google Meet API ทางการเท่านั้น: สร้างพื้นที่ประชุม แก้ข้อมูล space และรันการตรวจสอบ preflight ของ Meet Media API
สร้างข้อมูลรับรอง Google
ใน Google Cloud Console:
-
สร้างหรือเลือกโปรเจกต์ Google Cloud
-
เปิดใช้งาน Google Meet REST API สำหรับโปรเจกต์นั้น
-
กำหนดค่าหน้าจอคำยินยอม OAuth
- Internal ง่ายที่สุดสำหรับองค์กร Google Workspace
- External ใช้ได้กับการตั้งค่าส่วนตัว/ทดสอบ; ขณะที่แอปอยู่ใน Testing, ให้เพิ่มบัญชี Google แต่ละบัญชีที่จะอนุญาตแอปเป็นผู้ใช้ทดสอบ
-
เพิ่ม scope ที่ 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 client ID
-
ประเภทแอปพลิเคชัน: Web application
-
Authorized redirect URI:
http://localhost:8085/oauth2callback
-
-
คัดลอก client ID และ client secret
meetings.space.created จำเป็นสำหรับ Google Meet spaces.create
meetings.space.readonly ช่วยให้ OpenClaw แก้ URL/โค้ด Meet เป็น space ได้
meetings.space.settings ช่วยให้ OpenClaw ส่งการตั้งค่า SpaceConfig เช่น
accessType ระหว่างการสร้างห้องผ่าน API
meetings.conference.media.readonly ใช้สำหรับ preflight ของ Meet Media API และงานสื่อ
Google อาจต้องการการลงทะเบียน Developer Preview สำหรับการใช้งาน Media API จริง
หากคุณต้องการเพียงการเข้าร่วม Chrome ผ่านเบราว์เซอร์ ให้ข้าม OAuth ทั้งหมด
สร้าง refresh token
กำหนดค่า oauth.clientId และ oauth.clientSecret หากต้องการ หรือส่งเป็น
ตัวแปร environment จากนั้นรัน:
openclaw googlemeet auth login --json
คำสั่งจะพิมพ์บล็อกคอนฟิก oauth พร้อม refresh token มันใช้ PKCE,
callback localhost ที่ http://localhost:8085/oauth2callback และโฟลว์
คัดลอก/วางด้วยตนเองด้วย --manual
ตัวอย่าง:
OPENCLAW_GOOGLE_MEET_CLIENT_ID="your-client-id" \
OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \
openclaw googlemeet auth login --json
ใช้โหมด manual เมื่อเบราว์เซอร์เข้าถึง callback ภายในเครื่องไม่ได้:
OPENCLAW_GOOGLE_MEET_CLIENT_ID="your-client-id" \
OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \
openclaw googlemeet auth login --json --manual
เอาต์พุต JSON มี:
{
"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",
},
},
},
},
},
}
ควรใช้ตัวแปร environment เมื่อคุณไม่ต้องการให้ refresh token อยู่ใน config หากมีทั้งค่า config และ environment Plugin จะ resolve config ก่อน แล้วจึง fallback ไปยัง environment
คำยินยอม OAuth รวมการสร้าง Meet space, การเข้าถึงแบบอ่าน Meet space และการเข้าถึงแบบอ่าน
สื่อการประชุม Meet หากคุณยืนยันตัวตนก่อนที่การรองรับการสร้างการประชุม
จะมีอยู่ ให้รัน openclaw googlemeet auth login --json อีกครั้งเพื่อให้ refresh
token มี scope meetings.space.created
ตรวจสอบ OAuth ด้วย doctor
รัน OAuth doctor เมื่อคุณต้องการการตรวจสุขภาพที่รวดเร็วและไม่เปิดเผยความลับ:
openclaw googlemeet doctor --oauth --json
สิ่งนี้ไม่โหลด runtime ของ Chrome หรือจำเป็นต้องมี Node Chrome ที่เชื่อมต่ออยู่ มัน
ตรวจสอบว่ามีคอนฟิก OAuth และ refresh token สามารถออก access
token ได้ รายงาน JSON มีเฉพาะฟิลด์สถานะ เช่น ok, configured,
tokenSource, expiresAt และข้อความตรวจสอบ; มันไม่พิมพ์ access
token, refresh token หรือ client secret
ผลลัพธ์ที่พบบ่อย:
| การตรวจสอบ | ความหมาย |
|---|---|
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 --json
openclaw googlemeet create --no-join --json
--create-space จะสร้าง URL ของ Meet แบบใช้ชั่วคราว ใช้ตัวเลือกนี้เมื่อคุณต้องการยืนยันว่าโปรเจกต์ Google Cloud เปิดใช้ Meet API แล้ว และบัญชีที่ได้รับอนุญาตมีขอบเขต meetings.space.created
หากต้องการพิสูจน์สิทธิ์อ่านสำหรับพื้นที่ประชุมที่มีอยู่:
openclaw googlemeet doctor --oauth --meeting https://meet.google.com/abc-defg-hij --json
openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij
doctor --oauth --meeting และ resolve-space พิสูจน์สิทธิ์อ่านพื้นที่ที่มีอยู่ซึ่งบัญชี Google ที่ได้รับอนุญาตเข้าถึงได้ 403 จากการตรวจสอบเหล่านี้โดยปกติหมายถึง Google Meet REST API ถูกปิดใช้งาน โทเค็นรีเฟรชที่ยินยอมไว้ไม่มีขอบเขตที่ต้องใช้ หรือบัญชี Google ไม่สามารถเข้าถึงพื้นที่ Meet นั้นได้ ข้อผิดพลาดของโทเค็นรีเฟรชหมายถึงให้เรียกใช้ openclaw googlemeet auth login --json อีกครั้งและจัดเก็บบล็อก oauth ใหม่
ไม่จำเป็นต้องมีข้อมูลรับรอง OAuth สำหรับทางเลือกสำรองผ่านเบราว์เซอร์ ในโหมดนั้น การยืนยันตัวตนของ Google มาจากโปรไฟล์ Chrome ที่ลงชื่อเข้าใช้บน Node ที่เลือก ไม่ใช่จากการกำหนดค่า 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
ระบุ URL ของ Meet, โค้ด หรือ 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-hij
แสดงรายการสิ่งประดิษฐ์การประชุมและการเข้าร่วมหลังจาก Meet สร้างระเบียนการประชุมแล้ว:
openclaw googlemeet artifacts --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet attendance --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet export --meeting https://meet.google.com/abc-defg-hij --output ./meet-export
เมื่อใช้ --meeting คำสั่ง artifacts และ attendance จะใช้ระเบียนการประชุมล่าสุดตามค่าเริ่มต้น ส่ง --all-conference-records เมื่อคุณต้องการระเบียนทั้งหมดที่ยังเก็บไว้สำหรับการประชุมนั้น
การค้นหา Calendar สามารถระบุ URL การประชุมจาก Google Calendar ก่อนอ่านสิ่งประดิษฐ์ของ Meet ได้:
openclaw googlemeet latest --today
openclaw googlemeet calendar-events --today --json
openclaw googlemeet artifacts --event "Weekly sync"
openclaw googlemeet attendance --today --format csv --output attendance.csv
--today ค้นหา Calendar primary ของวันนี้เพื่อหาเหตุการณ์ Calendar ที่มีลิงก์ Google Meet ใช้ --event <query> เพื่อค้นหาข้อความเหตุการณ์ที่ตรงกัน และ --calendar <id> สำหรับ Calendar ที่ไม่ใช่ปฏิทินหลัก การค้นหา Calendar ต้องมีการเข้าสู่ระบบ OAuth ใหม่ที่รวมขอบเขตอ่านอย่างเดียวของเหตุการณ์ Calendar
calendar-events จะแสดงตัวอย่างเหตุการณ์ Meet ที่ตรงกันและทำเครื่องหมายเหตุการณ์ที่ latest, artifacts, attendance หรือ export จะเลือก
หากคุณทราบรหัสระเบียนการประชุมอยู่แล้ว ให้ระบุโดยตรง:
openclaw googlemeet latest --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 --json
openclaw googlemeet attendance --conference-record conferenceRecords/abc123 --json
จบการประชุมที่กำลังใช้งานสำหรับพื้นที่ที่สร้างผ่าน API เมื่อคุณต้องการปิดห้องหลังการโทร:
openclaw googlemeet end-active-conference https://meet.google.com/abc-defg-hij
คำสั่งนี้เรียก Google Meet spaces.endActiveConference และต้องใช้ OAuth ที่มีขอบเขต meetings.space.created สำหรับพื้นที่ที่บัญชีที่ได้รับอนุญาตจัดการได้ OpenClaw ยอมรับอินพุตเป็น URL ของ Meet, โค้ดการประชุม หรือ spaces/{id} และระบุให้เป็นทรัพยากรพื้นที่ของ API ก่อนจบการประชุมที่กำลังใช้งาน
คำสั่งนี้แยกจาก googlemeet leave: leave หยุดการเข้าร่วมภายในเครื่องหรือเซสชันของ OpenClaw ขณะที่ end-active-conference ขอให้ Google Meet จบการประชุมที่กำลังใช้งานสำหรับพื้นที่นั้น
เขียนรายงานที่อ่านง่าย:
openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 \
--format markdown --output meet-artifacts.md
openclaw googlemeet attendance --conference-record conferenceRecords/abc123 \
--format markdown --output meet-attendance.md
openclaw googlemeet attendance --conference-record conferenceRecords/abc123 \
--format csv --output meet-attendance.csv
openclaw googlemeet export --conference-record conferenceRecords/abc123 \
--include-doc-bodies --zip --output meet-export
openclaw googlemeet export --conference-record conferenceRecords/abc123 \
--include-doc-bodies --dry-run
artifacts ส่งคืนข้อมูลเมตาของระเบียนการประชุม พร้อมข้อมูลเมตาทรัพยากรของผู้เข้าร่วม การบันทึก ทรานสคริปต์ รายการทรานสคริปต์แบบมีโครงสร้าง และสมาร์ตโน้ต เมื่อ 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 ของทรานสคริปต์และสมาร์ตโน้ตที่ลิงก์ผ่าน Google Drive files.export; ต้องมีการเข้าสู่ระบบ OAuth ใหม่ที่รวมขอบเขตอ่านอย่างเดียวของ Drive Meet หากไม่มี --include-doc-bodies การส่งออกจะรวมเฉพาะข้อมูลเมตาของ Meet และรายการทรานสคริปต์แบบมีโครงสร้างเท่านั้น หาก Google ส่งคืนความล้มเหลวบางส่วนของสิ่งประดิษฐ์ เช่น ข้อผิดพลาดในการแสดงรายการสมาร์ตโน้ต รายการทรานสคริปต์ หรือเนื้อหาเอกสาร Drive สรุปและแมนิเฟสต์จะเก็บคำเตือนไว้แทนที่จะทำให้การส่งออกทั้งหมดล้มเหลว
ใช้ --dry-run เพื่อดึงข้อมูลสิ่งประดิษฐ์และการเข้าร่วมชุดเดียวกันและพิมพ์ JSON ของแมนิเฟสต์โดยไม่สร้างโฟลเดอร์หรือ ZIP วิธีนี้มีประโยชน์ก่อนเขียนการส่งออกขนาดใหญ่ หรือเมื่อเอเจนต์ต้องการเพียงจำนวน ระเบียนที่เลือก และคำเตือน
เอเจนต์ยังสามารถสร้างบันเดิลเดียวกันผ่านเครื่องมือ 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
}
เรียกใช้ live smoke ที่มีการป้องกันกับการประชุมจริงที่ยังเก็บไว้:
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
เรียกใช้โพรบเบราว์เซอร์แบบฟังก่อนแบบ live กับการประชุมที่มีคนจะพูดพร้อมคำบรรยายของ Meet ที่พร้อมใช้งาน:
openclaw googlemeet setup --transport chrome-node --mode transcribe
openclaw googlemeet test-listen https://meet.google.com/abc-defg-hij --transport chrome-node --timeout-ms 30000
สภาพแวดล้อม live smoke:
OPENCLAW_LIVE_TEST=1เปิดใช้การทดสอบ live ที่มีการป้องกันOPENCLAW_GOOGLE_MEET_LIVE_MEETINGชี้ไปยัง URL ของ Meet, โค้ด หรือspaces/{id}ที่ยังเก็บไว้OPENCLAW_GOOGLE_MEET_CLIENT_IDหรือGOOGLE_MEET_CLIENT_IDระบุรหัสไคลเอนต์ OAuthOPENCLAW_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_
live smoke พื้นฐานของสิ่งประดิษฐ์และการเข้าร่วมต้องใช้
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 จะใช้โปรไฟล์เบราว์เซอร์ที่ลงชื่อเข้าใช้ของ Node 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"
}
}
}
หากทางเลือกสำรองผ่านเบราว์เซอร์พบการเข้าสู่ระบบ Google หรือตัวขัดขวางสิทธิ์ Meet ก่อนที่จะสร้าง URL ได้ เมธอด 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 พร้อมบริบท Node และแท็บของเบราว์เซอร์ แล้วหยุดเปิดแท็บ Meet ใหม่จนกว่าผู้ปฏิบัติงานจะทำขั้นตอนในเบราว์เซอร์เสร็จ
ตัวอย่างเอาต์พุต JSON จากการสร้างผ่าน API:
{
"source": "api",
"meetingUri": "https://meet.google.com/abc-defg-hij",
"joined": true,
"space": {
"name": "spaces/abc-defg-hij",
"meetingCode": "abc-defg-hij",
"meetingUri": "https://meet.google.com/abc-defg-hij"
},
"join": {
"session": {
"id": "meet_...",
"url": "https://meet.google.com/abc-defg-hij"
}
}
}
การสร้าง Meet จะเข้าร่วมตามค่าเริ่มต้น ทรานสปอร์ต Chrome หรือ Chrome-node ยังคง
ต้องมีโปรไฟล์ Google Chrome ที่ลงชื่อเข้าใช้แล้วเพื่อเข้าร่วมผ่านเบราว์เซอร์ หาก
โปรไฟล์ถูกลงชื่อออก OpenClaw จะรายงาน manualActionRequired: true หรือข้อผิดพลาด
สำรองของเบราว์เซอร์ และขอให้ผู้ปฏิบัติงานดำเนินการเข้าสู่ระบบ Google ให้เสร็จ
ก่อนลองอีกครั้ง
ตั้งค่า preview.enrollmentAcknowledged: true หลังจากยืนยันแล้วเท่านั้นว่า
โปรเจกต์ Cloud, OAuth principal และผู้เข้าร่วมการประชุมของคุณได้ลงทะเบียนใน
Google Workspace Developer Preview Program สำหรับ Meet media APIs แล้ว
การกำหนดค่า
เส้นทางเอเจนต์ Chrome ทั่วไปต้องการเพียงเปิดใช้ Plugin, BlackHole, SoX, คีย์
ผู้ให้บริการถอดเสียงแบบเรียลไทม์ และผู้ให้บริการ TTS ของ OpenClaw ที่กำหนดค่าไว้
OpenAI เป็นผู้ให้บริการถอดเสียงเริ่มต้น ตั้งค่า realtime.voiceProvider เป็น
"google" และ realtime.model เพื่อใช้ Google Gemini Live สำหรับโหมด bidi
โดยไม่เปลี่ยนผู้ให้บริการถอดเสียงเริ่มต้นของโหมดเอเจนต์:
brew install blackhole-2ch sox
export OPENAI_API_KEY=sk-...
# or
export GEMINI_API_KEY=...
ตั้งค่าการกำหนดค่า Plugin ใต้ plugins.entries.google-meet.config:
{
plugins: {
entries: {
"google-meet": {
enabled: true,
config: {},
},
},
},
}
ค่าเริ่มต้น:
defaultTransport: "chrome"defaultMode: "agent"("realtime"ยอมรับได้เฉพาะในฐานะ alias ความเข้ากันได้ แบบเดิมสำหรับ"agent"; การเรียกเครื่องมือใหม่ควรระบุ"agent")chromeNode.node: id/ชื่อ/IP ของ Node ที่เป็นตัวเลือกสำหรับchrome-nodechrome.audioBackend: "blackhole-2ch"chrome.guestName: "OpenClaw Agent": ชื่อที่ใช้บนหน้าจอแขก Meet ที่ไม่ได้ลงชื่อเข้าใช้chrome.autoJoin: true: กรอกชื่อแขกและคลิก Join Now แบบ best-effort ผ่านระบบอัตโนมัติของเบราว์เซอร์ OpenClaw บนchrome-nodechrome.reuseExistingTab: true: เปิดใช้งานแท็บ Meet ที่มีอยู่แทนการเปิดซ้ำchrome.waitForInCallMs: 20000: รอให้แท็บ Meet รายงานว่าอยู่ในสาย ก่อนทริกเกอร์บทนำแบบพูดตอบกลับchrome.audioFormat: "pcm16-24khz": รูปแบบเสียงของคู่คำสั่ง ใช้"g711-ulaw-8khz"เฉพาะกับคู่คำสั่งแบบเดิม/กำหนดเองที่ยังคงปล่อยเสียง โทรศัพท์ออกมาchrome.audioBufferBytes: 4096: บัฟเฟอร์ประมวลผล SoX สำหรับคำสั่งเสียงคู่คำสั่ง Chrome ที่สร้างขึ้น นี่คือครึ่งหนึ่งของบัฟเฟอร์เริ่มต้น 8192 ไบต์ของ SoX ซึ่งลดเวลาแฝงของ pipe เริ่มต้น ขณะยังเหลือพื้นที่ให้เพิ่มได้บนโฮสต์ที่ใช้งานหนัก ค่าที่ต่ำกว่าค่าขั้นต่ำของ SoX จะถูก clamp เป็น 17 ไบต์chrome.audioInputCommand: คำสั่ง SoX ที่อ่านจาก CoreAudioBlackHole 2chและเขียนเสียงในchrome.audioFormatchrome.audioOutputCommand: คำสั่ง SoX ที่อ่านเสียงในchrome.audioFormatและเขียนไปยัง CoreAudioBlackHole 2chchrome.bargeInInputCommand: คำสั่งไมโครโฟนในเครื่องที่เป็นตัวเลือก ซึ่งเขียน PCM โมโน signed 16-bit little-endian สำหรับตรวจจับการแทรกพูดของมนุษย์ขณะที่ การเล่นเสียงของผู้ช่วยกำลังทำงานอยู่ ข้อนี้ใช้กับบริดจ์คู่คำสั่งchromeที่โฮสต์โดย Gateway ในขณะนี้chrome.bargeInRmsThreshold: 650: ระดับ RMS ที่นับเป็นการขัดจังหวะโดยมนุษย์บนchrome.bargeInInputCommandchrome.bargeInPeakThreshold: 2500: ระดับ peak ที่นับเป็นการขัดจังหวะโดยมนุษย์บนchrome.bargeInInputCommandchrome.bargeInCooldownMs: 900: หน่วงเวลาขั้นต่ำระหว่างการล้างสถานะการขัดจังหวะ โดยมนุษย์ซ้ำmode: "agent": โหมดพูดตอบกลับเริ่มต้น คำพูดของผู้เข้าร่วมจะถูกถอดเสียงโดย ผู้ให้บริการถอดเสียงแบบเรียลไทม์ที่กำหนดค่าไว้ ส่งไปยังเอเจนต์ OpenClaw ที่กำหนดค่าไว้ในเซสชันซับเอเจนต์ต่อการประชุม และพูดตอบกลับผ่านรันไทม์ TTS ปกติของ OpenClawmode: "bidi": โหมดสำรองของโมเดลเรียลไทม์แบบสองทิศทางโดยตรง ผู้ให้บริการเสียง เรียลไทม์ตอบคำพูดของผู้เข้าร่วมโดยตรง และอาจเรียกopenclaw_agent_consultเพื่อคำตอบเชิงลึก/ที่มีเครื่องมือสนับสนุนmode: "transcribe": โหมดสังเกตอย่างเดียวโดยไม่มีบริดจ์พูดตอบกลับrealtime.provider: "openai": ค่าสำรองความเข้ากันได้ที่ใช้เมื่อไม่ได้ตั้งค่า ฟิลด์ผู้ให้บริการแบบจำกัดขอบเขตด้านล่างrealtime.transcriptionProvider: "openai": id ผู้ให้บริการที่โหมดagentใช้สำหรับการถอดเสียงแบบเรียลไทม์realtime.voiceProvider: id ผู้ให้บริการที่โหมดbidiใช้สำหรับเสียงเรียลไทม์ โดยตรง ตั้งค่านี้เป็น"google"เพื่อใช้ Gemini Live ขณะคงการถอดเสียง โหมดเอเจนต์ไว้บน OpenAIrealtime.toolPolicy: "safe-read-only"realtime.instructions: คำตอบพูดแบบสั้น พร้อมopenclaw_agent_consultสำหรับคำตอบเชิงลึกrealtime.introMessage: การตรวจสอบความพร้อมแบบพูดสั้น ๆ เมื่อบริดจ์เรียลไทม์ เชื่อมต่อ ตั้งค่าเป็น""เพื่อเข้าร่วมแบบเงียบrealtime.agentId: id เอเจนต์ OpenClaw ที่เป็นตัวเลือกสำหรับopenclaw_agent_consult; ค่าเริ่มต้นคือ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: {
voice: "Kore",
},
},
},
}
ElevenLabs สำหรับทั้งการฟังและการพูดในโหมดเอเจนต์:
{
messages: {
tts: {
provider: "elevenlabs",
providers: {
elevenlabs: {
modelId: "eleven_v3",
voiceId: "pMsXgVXv3BLzUgSXRplE",
},
},
},
},
plugins: {
entries: {
"google-meet": {
config: {
realtime: {
transcriptionProvider: "elevenlabs",
providers: {
elevenlabs: {
modelId: "scribe_v2_realtime",
audioFormat: "ulaw_8000",
sampleRate: 8000,
commitStrategy: "vad",
},
},
},
},
},
},
},
}
เสียง Meet แบบคงอยู่มาจาก
messages.tts.providers.elevenlabs.voiceId คำตอบของเอเจนต์ยังสามารถใช้
directive ต่อคำตอบ [[tts:voiceId=... model=eleven_v3]] ได้เมื่อเปิดใช้การ
เขียนทับโมเดล TTS แต่การกำหนดค่าคือค่าเริ่มต้นที่กำหนดแน่นอนสำหรับการประชุม
เมื่อเข้าร่วม log ควรแสดง transcriptionProvider=elevenlabs และคำตอบที่พูด
แต่ละครั้งควร log provider=elevenlabs model=eleven_v3 voice=<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"
}
ใช้ transport: "chrome" เมื่อ Chrome ทำงานบนโฮสต์ Gateway ใช้
transport: "chrome-node" เมื่อ Chrome ทำงานบน Node ที่จับคู่ไว้ เช่น Parallels
VM ในทั้งสองกรณี ผู้ให้บริการโมเดลและ openclaw_agent_consult จะทำงานบนโฮสต์
Gateway ดังนั้นข้อมูลรับรองของโมเดลจึงอยู่ที่นั่น ด้วยค่าเริ่มต้น
mode: "agent" ผู้ให้บริการถอดเสียงแบบเรียลไทม์จะจัดการการฟัง เอเจนต์ OpenClaw
ที่กำหนดค่าไว้จะสร้างคำตอบ และ TTS ปกติของ OpenClaw จะพูดคำตอบนั้นเข้าไปใน Meet
ใช้ mode: "bidi" เมื่อคุณต้องการให้โมเดลเสียงเรียลไทม์ตอบโดยตรง
mode: "realtime" แบบดิบยังคงยอมรับในฐานะ alias ความเข้ากันได้แบบเดิมสำหรับ
mode: "agent" แต่จะไม่ถูกโฆษณาในสคีมาเครื่องมือเอเจนต์อีกต่อไป
log โหมดเอเจนต์รวมผู้ให้บริการ/โมเดลถอดเสียงที่ resolve แล้วเมื่อบริดจ์เริ่มทำงาน
และผู้ให้บริการ TTS, โมเดล, เสียง, รูปแบบเอาต์พุต และ sample rate หลังคำตอบที่สังเคราะห์แต่ละครั้ง
ใช้ action: "status" เพื่อแสดงรายการเซสชันที่ทำงานอยู่หรือตรวจสอบ session ID
ใช้ action: "speak" พร้อม sessionId และ message เพื่อให้เอเจนต์เรียลไทม์
พูดทันที ใช้ action: "test_speech" เพื่อสร้างหรือนำเซสชันกลับมาใช้ ทริกเกอร์
วลีที่ทราบ และส่งคืนสุขภาพ inCall เมื่อโฮสต์ Chrome สามารถรายงานได้
test_speech จะบังคับ mode: "agent" เสมอ และจะล้มเหลวหากถูกขอให้ทำงานใน
mode: "transcribe" เพราะเซสชันสังเกตอย่างเดียวตั้งใจให้ไม่สามารถปล่อยเสียงพูดได้
ผลลัพธ์ speechOutputVerified อิงจากจำนวนไบต์เอาต์พุตเสียงแบบเรียลไทม์ที่เพิ่มขึ้น
ระหว่างการเรียกทดสอบนี้ ดังนั้นเซสชันที่นำกลับมาใช้พร้อมเสียงเก่าจะไม่นับเป็น
การตรวจสอบเสียงพูดที่สำเร็จใหม่ ใช้ action: "leave" เพื่อทำเครื่องหมายว่า
เซสชันสิ้นสุดแล้ว
status รวมสุขภาพของ Chrome เมื่อมีให้ใช้งาน:
inCall: Chrome ดูเหมือนอยู่ภายในสาย MeetmicMuted: สถานะไมโครโฟน Meet แบบ best-effortmanualActionRequired/manualActionReason/manualActionMessage: โปรไฟล์ เบราว์เซอร์ต้องการการเข้าสู่ระบบด้วยตนเอง การอนุญาตจากโฮสต์ Meet สิทธิ์อนุญาต หรือการซ่อมแซมการควบคุมเบราว์เซอร์ก่อนที่เสียงพูดจะทำงานได้speechReady/speechBlockedReason/speechBlockedMessage: อนุญาตให้ เสียงพูด Chrome ที่จัดการแล้วทำงานตอนนี้หรือไม่speechReady: falseหมายความว่า OpenClaw ไม่ได้ส่งวลีบทนำ/ทดสอบเข้าไปในบริดจ์เสียงproviderConnected/realtimeReady: สถานะบริดจ์เสียงเรียลไทม์lastInputAt/lastOutputAt: เสียงล่าสุดที่เห็นจากบริดจ์หรือส่งไปยังบริดจ์audioOutputRouted/audioOutputDeviceLabel: เอาต์พุตสื่อของแท็บ Meet ถูกกำหนดเส้นทางอย่างใช้งานอยู่ไปยังอุปกรณ์ BlackHole ที่บริดจ์ใช้หรือไม่lastSuppressedInputAt/suppressedInputBytes: อินพุต loopback ที่ถูกละเว้น ขณะที่การเล่นเสียงของผู้ช่วยกำลังทำงานอยู่
{
"action": "speak",
"sessionId": "meet_...",
"message": "Say exactly: I'm here and listening."
}
โหมดเอเจนต์และ bidi
โหมด Chrome agent ถูกปรับให้เหมาะกับพฤติกรรม "เอเจนต์ของฉันอยู่ในการประชุม"
ผู้ให้บริการถอดเสียงแบบเรียลไทม์ได้ยินเสียงการประชุม transcript สุดท้ายของผู้เข้าร่วม
จะถูกส่งผ่านเอเจนต์ OpenClaw ที่กำหนดค่าไว้ และคำตอบจะถูกพูดผ่านรันไทม์ TTS
ปกติของ OpenClaw ตั้งค่า mode: "bidi" เมื่อคุณต้องการให้โมเดลเสียงเรียลไทม์
ตอบโดยตรง
ชิ้นส่วน transcript สุดท้ายที่อยู่ใกล้กันจะถูกผสานก่อน consult เพื่อให้หนึ่งรอบการพูด
ไม่สร้างคำตอบบางส่วนที่ค้างอยู่หลายรายการ อินพุตเรียลไทม์ยังถูกระงับขณะที่เสียง
ผู้ช่วยที่เข้าคิวไว้ยังเล่นอยู่
และ echo ของ transcript ที่คล้ายผู้ช่วยเมื่อไม่นานมานี้จะถูกละเว้นก่อน agent consult
เพื่อให้ BlackHole loopback ไม่ทำให้เอเจนต์ตอบคำพูดของตัวเอง
| โหมด | ใครตัดสินคำตอบ | เส้นทางเอาต์พุตเสียง | ใช้เมื่อ |
|---|---|---|---|
agent |
เอเจนต์ OpenClaw ที่กำหนดค่าไว้ | รันไทม์ TTS ปกติของ OpenClaw | คุณต้องการพฤติกรรม "เอเจนต์ของฉันอยู่ในการประชุม" |
bidi |
โมเดลเสียงเรียลไทม์ | การตอบกลับเสียงจากผู้ให้บริการเสียงเรียลไทม์ | คุณต้องการลูปเสียงสนทนาที่มีเวลาแฝงต่ำที่สุด |
ในโหมด bidi เมื่อโมเดลเรียลไทม์ต้องการการให้เหตุผลเชิงลึก ข้อมูลปัจจุบัน
หรือเครื่องมือ OpenClaw ปกติ โมเดลสามารถเรียก openclaw_agent_consult ได้
เครื่องมือ consult รันตัวแทน OpenClaw ปกติอยู่เบื้องหลัง โดยใช้บริบทข้อความถอดเสียงการประชุมล่าสุดและส่งคืนคำตอบแบบพูดที่กระชับ ในโหมด agent OpenClaw จะส่งคำตอบนั้นไปยังรันไทม์ TTS โดยตรง ส่วนในโหมด bidi โมเดลเสียงแบบเรียลไทม์สามารถพูดผลลัพธ์ consult กลับเข้าไปในการประชุมได้ เครื่องมือนี้ใช้กลไก consult ร่วมแบบเดียวกับ Voice Call
โดยค่าเริ่มต้น consult จะรันกับตัวแทน main ตั้งค่า realtime.agentId เมื่อช่องทาง Meet ควร consult เวิร์กสเปซตัวแทน OpenClaw เฉพาะ ค่าเริ่มต้นของโมเดล นโยบายเครื่องมือ หน่วยความจำ และประวัติเซสชันเฉพาะ
consult ในโหมดตัวแทนใช้คีย์เซสชันต่อการประชุม agent:<id>:subagent:google-meet:<session> เพื่อให้คำถามติดตามผลคงบริบทการประชุมไว้ ขณะสืบทอดนโยบายตัวแทนปกติจากตัวแทนที่กำหนดค่าไว้
realtime.toolPolicy ควบคุมการรัน consult:
safe-read-only: เปิดเผยเครื่องมือ consult และจำกัดตัวแทนปกติให้ใช้read,web_search,web_fetch,x_search,memory_searchและmemory_getowner: เปิดเผยเครื่องมือ consult และให้ตัวแทนปกติใช้นโยบายเครื่องมือตัวแทนปกติnone: ไม่เปิดเผยเครื่องมือ 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 setup
openclaw nodes status
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \
--transport chrome-node \
--message "Say exactly: Google Meet speech test complete."
สถานะ Chrome-node ที่คาดหวัง:
googlemeet setupเป็นสีเขียวทั้งหมดgooglemeet setupมีchrome-node-connectedเมื่อ Chrome-node เป็นทรานสปอร์ตเริ่มต้นหรือมีการตรึงโหนดไว้nodes statusแสดงว่าโหนดที่เลือกเชื่อมต่ออยู่- โหนดที่เลือกประกาศทั้ง
googlemeet.chromeและbrowser.proxy - แท็บ Meet เข้าร่วมสาย และ
test-speechส่งคืนสุขภาพ Chrome พร้อมinCall: true
สำหรับโฮสต์ Chrome ระยะไกล เช่น Parallels macOS VM นี่คือการตรวจสอบที่สั้นที่สุดและปลอดภัยหลังจากอัปเดต Gateway หรือ VM:
openclaw googlemeet setup
openclaw nodes status --connected
openclaw nodes invoke \
--node parallels-macos \
--command googlemeet.chrome \
--params '{"action":"setup"}'
สิ่งนี้พิสูจน์ว่า Plugin ของ Gateway ถูกโหลดแล้ว โหนด VM เชื่อมต่อด้วยโทเค็นปัจจุบัน และบริดจ์เสียง Meet พร้อมใช้งานก่อนที่ตัวแทนจะเปิดแท็บการประชุมจริง
สำหรับ smoke ของ Twilio ให้ใช้การประชุมที่เปิดเผยรายละเอียดการโทรเข้า:
openclaw googlemeet setup
openclaw 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-webhookvoicecallพร้อมใช้งานใน CLI หลังจากโหลด Gateway ใหม่- เซสชันที่ส่งคืนมี
transport: "twilio"และtwilio.voiceCallId openclaw logs --followแสดงว่า DTMF TwiML ถูกให้บริการก่อน realtime TwiML จากนั้นเป็นบริดจ์แบบเรียลไทม์พร้อมคำทักทายเริ่มต้นที่เข้าคิวไว้googlemeet leave <sessionId>วางสาย voice call ที่มอบหมาย
การแก้ปัญหา
ตัวแทนไม่เห็นเครื่องมือ Google Meet
ยืนยันว่า Plugin เปิดใช้งานอยู่ในการกำหนดค่า Gateway และโหลด Gateway ใหม่:
openclaw plugins list | grep google-meet
openclaw googlemeet setup
หากคุณเพิ่งแก้ไข plugins.entries.google-meet ให้รีสตาร์ตหรือโหลด Gateway ใหม่ ตัวแทนที่กำลังทำงานจะเห็นเฉพาะเครื่องมือ Plugin ที่ลงทะเบียนโดยกระบวนการ Gateway ปัจจุบันเท่านั้น
บนโฮสต์ Gateway ที่ไม่ใช่ macOS เครื่องมือสำหรับตัวแทน google_meet ยังคงมองเห็นได้ แต่การกระทำพูดกลับผ่าน Chrome ในเครื่องจะถูกบล็อกก่อนถึงบริดจ์เสียง เสียงพูดกลับผ่าน Chrome ในเครื่องขณะนี้ต้องพึ่งพา BlackHole 2ch ของ macOS ดังนั้นตัวแทน Linux ควรใช้ mode: "transcribe", การโทรเข้า Twilio หรือโฮสต์ chrome-node บน macOS แทนเส้นทางตัวแทน Chrome ในเครื่องเริ่มต้น
ไม่มีโหนดที่เชื่อมต่อและรองรับ Google Meet
บนโฮสต์โหนด ให้รัน:
openclaw plugins enable google-meet
openclaw plugins enable browser
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macos
บนโฮสต์ Gateway ให้อนุมัติโหนดและตรวจสอบคำสั่ง:
openclaw devices list
openclaw 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 ปัจจุบัน สำหรับ Gateway บน LAN โดยปกติหมายถึง:
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node install \
--host <gateway-lan-ip> \
--port 18789 \
--display-name parallels-macos \
--force
จากนั้นโหลดบริการโหนดใหม่และรันอีกครั้ง:
openclaw googlemeet setup
openclaw nodes status --connected
เบราว์เซอร์เปิดแต่ตัวแทนเข้าร่วมไม่ได้
รัน googlemeet test-listen สำหรับการเข้าร่วมแบบสังเกตอย่างเดียว หรือ googlemeet test-speech สำหรับการเข้าร่วมแบบเรียลไทม์ จากนั้นตรวจสอบสุขภาพ Chrome ที่ส่งคืน หากโพรบใดรายงาน manualActionRequired: true ให้แสดง manualActionMessage แก่ผู้ปฏิบัติการและหยุดลองซ้ำจนกว่าการกระทำในเบราว์เซอร์จะเสร็จสิ้น
การกระทำด้วยตนเองที่พบบ่อย:
- ลงชื่อเข้าใช้โปรไฟล์ Chrome
- รับแขกเข้าจากบัญชีโฮสต์ Meet
- อนุญาตสิทธิ์ไมโครโฟน/กล้องให้ Chrome เมื่อพรอมป์สิทธิ์แบบเนทีฟของ Chrome ปรากฏ
- ปิดหรือซ่อมแซมกล่องโต้ตอบสิทธิ์ Meet ที่ค้างอยู่
อย่ารายงานว่า "not signed in" เพียงเพราะ Meet แสดง "Do you want people to hear you in the meeting?" นั่นคืออินเตอร์สติเชียลตัวเลือกเสียงของ Meet; OpenClaw คลิก Use microphone ผ่านระบบอัตโนมัติของเบราว์เซอร์เมื่อพร้อมใช้งานและรอสถานะการประชุมจริงต่อไป สำหรับ fallback เบราว์เซอร์แบบสร้างอย่างเดียว OpenClaw อาจคลิก Continue without microphone เพราะการสร้าง URL ไม่ต้องใช้เส้นทางเสียงแบบเรียลไทม์
การสร้างการประชุมล้มเหลว
googlemeet create ใช้เอนด์พอยต์ Google Meet API spaces.create ก่อนเมื่อมีการกำหนดค่าข้อมูลรับรอง OAuth หากไม่มีข้อมูลรับรอง OAuth จะ fallback ไปยังเบราว์เซอร์โหนด Chrome ที่ตรึงไว้ ยืนยันว่า:
- สำหรับการสร้างผ่าน API: มีการกำหนดค่า
oauth.clientIdและoauth.refreshTokenหรือมีตัวแปรสภาพแวดล้อมOPENCLAW_GOOGLE_MEET_*ที่ตรงกันอยู่ - สำหรับการสร้างผ่าน API: โทเค็นรีเฟรชถูกออกหลังจากเพิ่มการรองรับการสร้างแล้ว โทเค็นเก่าอาจไม่มี scope
meetings.space.created; รันopenclaw googlemeet auth login --jsonใหม่และอัปเดตการกำหนดค่า Plugin - สำหรับ fallback ของเบราว์เซอร์:
defaultTransport: "chrome-node"และchromeNode.nodeชี้ไปยังโหนดที่เชื่อมต่อพร้อมbrowser.proxyและgooglemeet.chrome - สำหรับ fallback ของเบราว์เซอร์: โปรไฟล์ Chrome ของ OpenClaw บนโหนดนั้นลงชื่อเข้าใช้ Google แล้ว และสามารถเปิด
https://meet.google.com/newได้ - สำหรับ fallback ของเบราว์เซอร์: การลองซ้ำใช้แท็บ
https://meet.google.com/newหรือแท็บพรอมป์บัญชี Google ที่มีอยู่ซ้ำก่อนเปิดแท็บใหม่ หากตัวแทนหมดเวลา ให้ลองเรียกเครื่องมือซ้ำแทนการเปิดแท็บ Meet อีกแท็บด้วยตนเอง - สำหรับ fallback ของเบราว์เซอร์: หากเครื่องมือส่งคืน
manualActionRequired: trueให้ใช้browser.nodeId,browser.targetId,browserUrlและmanualActionMessageที่ส่งคืนมาเพื่อแนะนำผู้ปฏิบัติการ อย่าลองซ้ำเป็นลูปจนกว่าการกระทำนั้นจะเสร็จสิ้น - สำหรับ fallback ของเบราว์เซอร์: หาก Meet แสดง "Do you want people to hear you in the meeting?" ให้เปิดแท็บค้างไว้ OpenClaw ควรคลิก Use microphone หรือสำหรับ fallback แบบสร้างอย่างเดียว Continue without microphone ผ่านระบบอัตโนมัติของเบราว์เซอร์ และรอ URL Meet ที่สร้างขึ้นต่อไป หากทำไม่ได้ ข้อผิดพลาดควรกล่าวถึง
meet-audio-choice-requiredไม่ใช่google-login-required
ตัวแทนเข้าร่วมแต่ไม่พูด
ตรวจสอบเส้นทางเรียลไทม์:
openclaw googlemeet setup
openclaw googlemeet doctor
ใช้ mode: "agent" สำหรับเส้นทางพูดกลับ STT -> ตัวแทน OpenClaw -> TTS ปกติ หรือ mode: "bidi" สำหรับ fallback เสียงแบบเรียลไทม์โดยตรง mode: "transcribe" ตั้งใจไม่เริ่มบริดจ์พูดกลับ สำหรับการดีบักแบบสังเกตอย่างเดียว ให้รัน openclaw googlemeet status --json <session-id> หลังผู้เข้าร่วมพูด แล้วตรวจสอบ captioning, transcriptLines และ lastCaptionText หาก inCall เป็น true แต่ transcriptLines ค้างอยู่ที่ 0 คำบรรยาย Meet อาจถูกปิดใช้งาน ยังไม่มีใครพูดตั้งแต่ติดตั้งตัวสังเกตการณ์ UI ของ Meet เปลี่ยนแปลง หรือคำบรรยายสดไม่พร้อมใช้งานสำหรับภาษา/บัญชีการประชุมนั้น
googlemeet test-speech ตรวจสอบเส้นทางเรียลไทม์เสมอและรายงานว่าพบไบต์เอาต์พุตของบริดจ์สำหรับการเรียกนั้นหรือไม่ หาก speechOutputVerified เป็น false และ speechOutputTimedOut เป็น true ผู้ให้บริการเรียลไทม์อาจยอมรับคำพูดแล้ว แต่ OpenClaw ไม่เห็นไบต์เอาต์พุตใหม่ไปถึงบริดจ์เสียง Chrome
ตรวจสอบเพิ่มเติมว่า:
- มีคีย์ผู้ให้บริการเรียลไทม์บนโฮสต์ Gateway เช่น
OPENAI_API_KEYหรือGEMINI_API_KEY BlackHole 2chมองเห็นได้บนโฮสต์ Chrome- มี
soxอยู่บนโฮสต์ Chrome - ไมโครโฟนและลำโพง Meet ถูกกำหนดเส้นทางผ่านเส้นทางเสียงเสมือนที่ OpenClaw ใช้
doctorควรแสดงmeet output routed: yesสำหรับการเข้าร่วมเรียลไทม์ผ่าน Chrome ในเครื่อง
googlemeet doctor [session-id] พิมพ์เซสชัน โหนด สถานะอยู่ในสาย เหตุผลการกระทำด้วยตนเอง การเชื่อมต่อผู้ให้บริการเรียลไทม์ realtimeReady กิจกรรมอินพุต/เอาต์พุตเสียง เวลาประทับเสียงล่าสุด ตัวนับไบต์ และ URL เบราว์เซอร์ ใช้ googlemeet status [session-id] --json เมื่อคุณต้องการ JSON ดิบ ใช้ googlemeet doctor --oauth เมื่อคุณต้องการตรวจสอบการรีเฟรช OAuth ของ Google Meet โดยไม่เปิดเผยโทเค็น; เพิ่ม --meeting หรือ --create-space เมื่อคุณต้องการหลักฐาน Google Meet API ด้วย
หากตัวแทนหมดเวลาและคุณเห็นแท็บ Meet เปิดอยู่แล้ว ให้ตรวจสอบแท็บนั้นโดยไม่เปิดแท็บใหม่:
openclaw googlemeet recover-tab
openclaw googlemeet recover-tab https://meet.google.com/abc-defg-hij
การกระทำเครื่องมือที่เทียบเท่าคือ recover_current_tab มันโฟกัสและตรวจสอบแท็บ Meet ที่มีอยู่สำหรับทรานสปอร์ตที่เลือก ด้วย chrome มันใช้การควบคุมเบราว์เซอร์ในเครื่องผ่าน Gateway; ด้วย chrome-node มันใช้โหนด Chrome ที่กำหนดค่าไว้ มันไม่เปิดแท็บใหม่หรือสร้างเซสชันใหม่; มันรายงานตัวขวางปัจจุบัน เช่น สถานะล็อกอิน การรับเข้า สิทธิ์ หรือการเลือกเสียง คำสั่ง CLI คุยกับ Gateway ที่กำหนดค่าไว้ ดังนั้น Gateway ต้องกำลังทำงาน; chrome-node ยังต้องการให้โหนด Chrome เชื่อมต่ออยู่ด้วย
การตรวจสอบการตั้งค่า Twilio ล้มเหลว
twilio-voice-call-plugin ล้มเหลวเมื่อ voice-call ไม่ได้รับอนุญาตหรือไม่ได้เปิดใช้งาน เพิ่มลงใน plugins.allow เปิดใช้งาน plugins.entries.voice-call และโหลด Gateway ใหม่
twilio-voice-call-credentials ล้มเหลวเมื่อแบ็กเอนด์ Twilio ไม่มี SID บัญชี โทเค็นการยืนยันตัวตน หรือหมายเลขผู้โทร ตั้งค่าสิ่งเหล่านี้บนโฮสต์ Gateway:
export TWILIO_ACCOUNT_SID=AC...
export TWILIO_AUTH_TOKEN=...
export TWILIO_FROM_NUMBER=+15550001234
twilio-voice-call-webhook ล้มเหลวเมื่อ voice-call ไม่มีการเปิดเผย Webhook สาธารณะ หรือเมื่อ publicUrl ชี้ไปยัง local loopback หรือพื้นที่เครือข่ายส่วนตัว ตั้งค่า plugins.entries.voice-call.config.publicUrl เป็น URL ผู้ให้บริการสาธารณะ หรือกำหนดค่า tunnel/Tailscale exposure ของ voice-call
URL แบบ loopback และส่วนตัวไม่ถูกต้องสำหรับ callback ของผู้ให้บริการเครือข่ายโทรศัพท์ อย่าใช้ 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 สาธารณะที่เสถียร:
{
plugins: {
entries: {
"voice-call": {
enabled: true,
config: {
provider: "twilio",
fromNumber: "+15550001234",
publicUrl: "https://voice.example.com/voice/webhook",
},
},
},
},
}
สำหรับการพัฒนาในเครื่อง ให้ใช้ tunnel หรือการเปิดเผยผ่าน Tailscale แทน URL ของโฮสต์ส่วนตัว:
{
plugins: {
entries: {
"voice-call": {
config: {
tunnel: { provider: "ngrok" },
// or
tailscale: { mode: "funnel", path: "/voice/webhook" },
},
},
},
},
}
จากนั้นรีสตาร์ตหรือโหลด Gateway ใหม่ แล้วรัน:
openclaw googlemeet setup --transport twilio
openclaw voicecall setup
openclaw voicecall smoke
voicecall smoke ตรวจเฉพาะความพร้อมเป็นค่าเริ่มต้น เมื่อต้องการ dry-run เบอร์เฉพาะ:
openclaw voicecall smoke --to "+15555550123"
เพิ่ม --yes เฉพาะเมื่อคุณตั้งใจจะโทรแจ้งเตือนขาออกแบบสดจริง:
openclaw voicecall smoke --to "+15555550123" --yes
การโทร Twilio เริ่มแล้วแต่ไม่เข้าการประชุม
ยืนยันว่าเหตุการณ์ Meet แสดงรายละเอียดการโทรเข้า ส่งหมายเลขโทรเข้าและ PIN ที่ตรงกันทุกตัวอักษร หรือลำดับ DTMF แบบกำหนดเอง:
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
--transport twilio \
--dial-in-number +15551234567 \
--dtmf-sequence ww123456#
ใช้ w นำหน้าหรือเครื่องหมายจุลภาคใน --dtmf-sequence หากผู้ให้บริการต้องหยุดพักก่อนป้อน PIN
หากสร้างสายโทรศัพท์แล้ว แต่รายชื่อผู้เข้าร่วมของ Meet ไม่แสดงผู้เข้าร่วมที่โทรเข้า:
- รัน
openclaw googlemeet doctor <session-id>เพื่อยืนยัน ID สาย Twilio ที่มอบหมาย ว่า DTMF ถูกเข้าคิวไว้หรือไม่ และมีการขอคำทักทายแนะนำตัวหรือไม่ - รัน
openclaw voicecall status --call-id <id>และยืนยันว่าสายยังทำงานอยู่ - รัน
openclaw voicecall tailแล้วตรวจสอบว่า Webhook ของ Twilio มาถึง Gateway - รัน
openclaw logs --followแล้วมองหาลำดับ Twilio Meet: Google Meet มอบหมายการเข้าร่วม, Voice Call จัดเก็บและให้บริการ TwiML DTMF ก่อนเชื่อมต่อ, Voice Call ให้บริการ TwiML แบบเรียลไทม์สำหรับสาย Twilio จากนั้น Google Meet ขอเสียงพูดแนะนำตัวด้วยvoicecall.speak - รัน
openclaw googlemeet setup --transport twilioอีกครั้ง; การตรวจ setup ที่เป็นสีเขียวเป็นสิ่งจำเป็น แต่ไม่ได้พิสูจน์ว่าลำดับ PIN ของการประชุมถูกต้อง - ยืนยันว่าหมายเลขโทรเข้าเป็นของคำเชิญ Meet และภูมิภาคเดียวกับ PIN
- เพิ่ม
voiceCall.dtmfDelayMsจากค่าเริ่มต้น 12 วินาที หาก Meet รับสายช้าหรือบทถอดเสียงของสายยังแสดงพรอมป์ที่ขอ PIN หลังจากส่ง DTMF ก่อนเชื่อมต่อแล้ว - หากผู้เข้าร่วมเข้าร่วมแล้วแต่คุณไม่ได้ยินคำทักทาย ให้ตรวจสอบ
openclaw logs --followสำหรับคำขอvoicecall.speakหลัง DTMF และการเล่น TTS ผ่าน media-stream หรือ fallbackOPENCLAW_DOCS_MARKER:calloutOpen:U2F5ของ Twilio หากบทถอดเสียงของสายยังมีข้อความ "enter the meeting PIN" แสดงว่าเส้นทางโทรศัพท์ยังไม่ได้เข้าห้อง Meet ดังนั้นผู้เข้าร่วมประชุมจะไม่ได้ยินเสียงพูด
หาก Webhook ไม่มาถึง ให้ดีบัก Plugin Voice Call ก่อน: ผู้ให้บริการต้องเข้าถึง plugins.entries.voice-call.config.publicUrl หรือ tunnel ที่กำหนดค่าไว้ ดู การแก้ปัญหาการโทรด้วยเสียง
หมายเหตุ
API สื่ออย่างเป็นทางการของ Google Meet มุ่งเน้นการรับ ดังนั้นการพูดเข้าไปในสาย Meet ยังต้องมีเส้นทางผู้เข้าร่วม Plugin นี้ทำให้ขอบเขตนั้นมองเห็นได้: Chrome จัดการการเข้าร่วมผ่านเบราว์เซอร์และการกำหนดเส้นทางเสียงในเครื่อง; Twilio จัดการการเข้าร่วมผ่านการโทรเข้าทางโทรศัพท์
โหมด talk-back ของ Chrome ต้องใช้ BlackHole 2ch พร้อมกับอย่างใดอย่างหนึ่งต่อไปนี้:
chrome.audioInputCommandพร้อมchrome.audioOutputCommand: OpenClaw เป็นเจ้าของ bridge และส่งเสียงในchrome.audioFormatระหว่างคำสั่งเหล่านั้นกับผู้ให้บริการที่เลือก โหมดเอเจนต์ใช้การถอดเสียงแบบเรียลไทม์พร้อม TTS ปกติ; โหมด bidi ใช้ผู้ให้บริการเสียงแบบเรียลไทม์ เส้นทาง Chrome เริ่มต้นคือ PCM16 24 kHz พร้อมchrome.audioBufferBytes: 4096; G.711 mu-law 8 kHz ยังคงพร้อมใช้สำหรับคู่คำสั่งแบบเดิมchrome.audioBridgeCommand: คำสั่ง bridge ภายนอกเป็นเจ้าของเส้นทางเสียงในเครื่องทั้งหมด และต้องออกหลังจากเริ่มหรือยืนยัน daemon ของตัวเองแล้ว สิ่งนี้ใช้ได้เฉพาะกับbidiเพราะโหมดagentต้องเข้าถึงคู่คำสั่งโดยตรงสำหรับ TTS
เมื่อเอเจนต์เรียกเครื่องมือ google_meet ในโหมดเอเจนต์ เซสชันที่ปรึกษาการประชุมจะ fork บทถอดความปัจจุบันของผู้เรียกก่อนตอบเสียงพูดของผู้เข้าร่วม เซสชัน Meet ยังคงแยกอยู่ (agent:<agentId>:subagent:google-meet:<sessionId>) เพื่อให้การติดตามผลของการประชุมไม่แก้ไขบทถอดความของผู้เรียกโดยตรง
เพื่อให้เสียงสองทางสะอาด ให้กำหนดเส้นทางเอาต์พุต Meet และไมโครโฟน Meet ผ่านอุปกรณ์เสมือนแยกกัน หรือกราฟอุปกรณ์เสมือนแบบ Loopback อุปกรณ์ BlackHole ที่ใช้ร่วมกันเพียงตัวเดียวอาจสะท้อนเสียงผู้เข้าร่วมคนอื่นกลับเข้าไปในสาย
เมื่อใช้ bridge Chrome แบบคู่คำสั่ง chrome.bargeInInputCommand สามารถฟังไมโครโฟนในเครื่องแยกต่างหากและล้างการเล่นเสียงของผู้ช่วยเมื่อมนุษย์เริ่มพูด วิธีนี้ทำให้เสียงพูดของมนุษย์มาก่อนเอาต์พุตของผู้ช่วย แม้อินพุต loopback ของ BlackHole ที่ใช้ร่วมกันจะถูกระงับชั่วคราวระหว่างการเล่นเสียงของผู้ช่วย เช่นเดียวกับ chrome.audioInputCommand และ chrome.audioOutputCommand นี่คือคำสั่งในเครื่องที่ผู้ปฏิบัติงานกำหนดค่าไว้ ใช้พาธคำสั่งที่เชื่อถือได้อย่างชัดเจนหรือรายการอาร์กิวเมนต์ และอย่าชี้ไปยังสคริปต์จากตำแหน่งที่ไม่น่าเชื่อถือ
googlemeet speak จะทริกเกอร์ bridge เสียง talk-back ที่ใช้งานอยู่สำหรับเซสชัน Chrome googlemeet leave จะหยุด bridge นั้น สำหรับเซสชัน Twilio ที่มอบหมายผ่าน Plugin Voice Call, leave จะวางสายเสียงเบื้องหลังด้วย ใช้ googlemeet end-active-conference เมื่อคุณต้องการปิดการประชุม Google Meet ที่ใช้งานอยู่สำหรับ space ที่จัดการด้วย API ด้วย