Bundled plugin guides
Plugin Google Meet
Підтримка учасника Google Meet для OmeniaClaw — Plugin навмисно має явну поведінку:
- Він приєднується лише до явної URL-адреси
https://meet.google.com/.... - Він може створити новий простір Meet через Google Meet API, а потім приєднатися до поверненої URL-адреси.
agent— типовий режим зворотного мовлення: транскрибування в реальному часі слухає, налаштований агент OmeniaClaw відповідає, а звичайний OmeniaClaw TTS говорить у Meet.bidiзалишається доступним як резервний режим прямої голосової моделі в реальному часі.- Агенти вибирають поведінку приєднання за допомогою
mode: використовуйтеagentдля живого прослуховування/зворотного мовлення,bidiдля прямого резервного голосового режиму в реальному часі абоtranscribeдля приєднання/керування браузером без моста зворотного мовлення. - Автентифікація починається як особистий Google OAuth або вже виконаний вхід у профіль Chrome.
- Автоматичного оголошення згоди немає.
- Типовий аудіобекенд Chrome —
BlackHole 2ch. - Chrome може працювати локально або на спареному хості вузла.
- Twilio приймає номер для дозвону плюс необов’язковий PIN або послідовність DTMF; він не може набирати URL-адресу Meet напряму.
- Команда CLI —
googlemeet;meetзарезервовано для ширших робочих процесів агентських телеконференцій.
Швидкий старт
Встановіть локальні аудіозалежності та налаштуйте провайдера транскрибування в реальному часі
плюс звичайний OmeniaClaw TTS. OpenAI є типовим провайдером транскрибування;
Google Gemini Live також працює як окремий резервний голосовий режим bidi з
realtime.voiceProvider: "google":
brew install blackhole-2ch soxexport OPENAI_API_KEY=sk-...# only needed when realtime.voiceProvider is "google" for bidi modeexport GEMINI_API_KEY=...blackhole-2ch встановлює віртуальний аудіопристрій BlackHole 2ch. Інсталятор
Homebrew потребує перезавантаження, перш ніж macOS покаже пристрій:
sudo rebootПісля перезавантаження перевірте обидві частини:
system_profiler SPAudioDataType | grep -i BlackHolecommand -v soxУвімкніть Plugin:
{ plugins: { entries: { "google-meet": { enabled: true, config: {}, }, }, },}Перевірте налаштування:
OmeniaClaw googlemeet setupВивід налаштування призначений для читання агентом і враховує режим. Він повідомляє про профіль Chrome,
закріплення вузла, а для приєднань Chrome у реальному часі — про аудіоміст BlackHole/SoX
і відкладені перевірки вступу в реальному часі. Для приєднань лише для спостереження перевірте той самий
транспорт за допомогою --mode transcribe; цей режим пропускає аудіопередумови реального часу,
оскільки не слухає й не говорить через міст:
OmeniaClaw googlemeet setup --transport chrome-node --mode transcribeКоли налаштовано делегування Twilio, налаштування також повідомляє, чи готові
Plugin voice-call, облікові дані Twilio та публічна доступність Webhook.
Сприймайте будь-яку перевірку ok: false як блокер для перевірених транспорту й режиму,
перш ніж просити агента приєднатися. Використовуйте OmeniaClaw googlemeet setup --json для
скриптів або машинозчитуваного виводу. Використовуйте --transport chrome,
--transport chrome-node або --transport twilio, щоб попередньо перевірити конкретний
транспорт до того, як агент спробує його використати.
Для Twilio завжди явно попередньо перевіряйте транспорт, коли типовим транспортом є Chrome:
OmeniaClaw googlemeet setup --transport twilioЦе виявляє відсутню прив’язку voice-call, облікові дані Twilio або недосяжну
доступність Webhook до того, як агент спробує набрати зустріч.
Приєднайтеся до зустрічі:
OmeniaClaw 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 там заблоковано, оскільки вбудований аудіошлях Chrome
зараз залежить від macOS BlackHole 2ch. На Linux використовуйте mode: "transcribe",
дозвон Twilio або хост macOS chrome-node для участі Chrome зі зворотним мовленням.
Створіть нову зустріч і приєднайтеся до неї:
OmeniaClaw googlemeet create --transport chrome-node --mode agentДля кімнат, створених через API, використовуйте Google Meet SpaceConfig.accessType, коли хочете,
щоб політика кімнати без стуку була явною, а не успадкованою з типових параметрів облікового запису Google:
OmeniaClaw googlemeet create --access-type OPEN --transport chrome-node --mode agentOPEN дозволяє будь-кому з URL-адресою Meet приєднатися без стуку. TRUSTED дозволяє
довіреним користувачам організації хоста, запрошеним зовнішнім користувачам і користувачам дозвону
приєднуватися без стуку. RESTRICTED обмежує вхід без стуку лише запрошеними. Ці
налаштування застосовуються тільки до офіційного шляху створення Google Meet API, тому
облікові дані OAuth мають бути налаштовані.
Якщо ви автентифікували Google Meet до появи цієї опції, повторно виконайте
OmeniaClaw googlemeet auth login --json після додавання області
meetings.space.settings на екран згоди Google OAuth.
Створіть лише URL-адресу без приєднання:
OmeniaClaw googlemeet create --no-joingooglemeet create має два шляхи:
- Створення через API: використовується, коли налаштовано облікові дані Google Meet OAuth. Це найдетермінованіший шлях, який не залежить від стану інтерфейсу браузера.
- Резервний браузерний шлях: використовується, коли облікові дані OAuth відсутні. OmeniaClaw використовує
закріплений вузол Chrome, відкриває
https://meet.google.com/new, чекає, поки Google перенаправить на справжню URL-адресу з кодом зустрічі, а потім повертає цю URL-адресу. Цей шлях потребує, щоб профіль OmeniaClaw Chrome на вузлі вже був увійшов у Google. Автоматизація браузера обробляє власний запит Meet на мікрофон під час першого запуску; цей запит не вважається помилкою входу Google. Потоки приєднання та створення також намагаються повторно використати наявну вкладку Meet перед відкриттям нової. Зіставлення ігнорує нешкідливі рядки запиту URL, такі якauthuser, тому повторна спроба агента має сфокусувати вже відкриту зустріч замість створення другої вкладки Chrome.
Вивід команди/інструмента містить поле source (api або browser), щоб агенти
могли пояснити, який шлях було використано. create за замовчуванням приєднується до нової зустрічі й
повертає joined: true плюс сесію приєднання. Щоб лише створити URL-адресу, використовуйте
create --no-join у CLI або передайте "join": false інструменту.
Або скажіть агенту: "Створи Google Meet, приєднайся до нього в режимі агентського зворотного мовлення
і надішли мені посилання." Агент має викликати google_meet з
action: "create", а потім поділитися поверненим meetingUri.
{ "action": "create", "transport": "chrome-node", "mode": "agent"}Для приєднання лише для спостереження/керування браузером встановіть "mode": "transcribe". Це
не запускає дуплексний голосовий міст у реальному часі, не потребує BlackHole або SoX
і не говоритиме назад у зустріч. Приєднання Chrome у цьому режимі також уникають
надання дозволу OmeniaClaw на мікрофон/камеру й уникають шляху Meet Use
microphone. Якщо Meet показує проміжний вибір аудіо, автоматизація намагається
використати шлях без мікрофона, а інакше повідомляє про ручну дію замість відкриття
локального мікрофона. У режимі транскрибування керовані транспорти Chrome також встановлюють
caption observer Meet за принципом найкращих зусиль. googlemeet status --json і
googlemeet doctor показують captioning, captionsEnabledAttempted,
transcriptLines, lastCaptionAt, lastCaptionSpeaker, lastCaptionText
і короткий хвіст recentTranscript, щоб оператори могли зрозуміти, чи браузер
приєднався до дзвінка і чи субтитри Meet створюють текст.
Використовуйте OmeniaClaw googlemeet test-listen <meet-url> --transport chrome-node, коли
потрібна перевірка так/ні: він приєднується в режимі транскрибування, чекає на свіжий рух субтитрів або
транскрипту й повертає listenVerified, listenTimedOut, поля ручної
дії та останній стан субтитрів.
Під час сесій у реальному часі статус google_meet містить стан браузера й аудіомоста,
зокрема inCall, manualActionRequired, providerConnected,
realtimeReady, audioInputActive, audioOutputActive, останні часові мітки вводу/виводу,
лічильники байтів і стан закриття моста. Якщо з’являється безпечний запит сторінки Meet,
автоматизація браузера обробляє його, коли може. Вхід, допуск хостом і
запити дозволів браузера/ОС повідомляються як ручна дія з причиною й
повідомленням, яке агент має передати. Керовані сесії Chrome надсилають вступ або
тестову фразу лише після того, як стан браузера повідомить inCall: true; інакше статус повідомляє
speechReady: false, а спроба мовлення блокується замість удавання, що
агент говорив у зустріч.
Локальні приєднання Chrome відбуваються через профіль браузера OmeniaClaw із виконаним входом. Режим реального часу
потребує BlackHole 2ch для шляху мікрофона/динаміка, який використовує OmeniaClaw. Для
чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або граф у стилі Loopback; одного
пристрою BlackHole достатньо для першого smoke test, але він може давати відлуння.
Локальний Gateway + Parallels Chrome
Вам не потрібен повний OmeniaClaw Gateway або ключ API моделі всередині macOS VM лише для того, щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім запустіть хост вузла у VM. Увімкніть вбудований Plugin на VM один раз, щоб вузол оголошував команду Chrome:
Що де працює:
- Хост Gateway: OmeniaClaw Gateway, робоча область агента, ключі моделі/API, провайдер реального часу і конфігурація Google Meet Plugin.
- Parallels macOS VM: OmeniaClaw CLI/хост вузла, Google Chrome, SoX, BlackHole 2ch і профіль Chrome із входом у Google.
- Не потрібно у VM: сервіс Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування провайдера моделі.
Встановіть залежності VM:
brew install blackhole-2ch soxПерезавантажте VM після встановлення BlackHole, щоб macOS показала BlackHole 2ch:
sudo rebootПісля перезавантаження перевірте, що VM бачить аудіопристрій і команди SoX:
system_profiler SPAudioDataType | grep -i BlackHolecommand -v soxВстановіть або оновіть OmeniaClaw у VM, а потім увімкніть там вбудований Plugin:
OmeniaClaw plugins enable google-meetЗапустіть хост вузла у VM:
OmeniaClaw node run --host <gateway-host> --port 18789 --display-name parallels-macosЯкщо <gateway-host> — це LAN IP і ви не використовуєте TLS, вузол відхиляє
plaintext WebSocket, якщо ви явно не дозволите його для цієї довіреної приватної мережі:
OmeniaClaw_ALLOW_INSECURE_PRIVATE_WS=1 \ OmeniaClaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macosВикористовуйте ту саму змінну середовища під час встановлення вузла як LaunchAgent:
OmeniaClaw_ALLOW_INSECURE_PRIVATE_WS=1 \ OmeniaClaw node install --host <gateway-lan-ip> --port 18789 --display-name parallels-macos --forceOmeniaClaw node restartOmeniaClaw_ALLOW_INSECURE_PRIVATE_WS=1 — це середовище процесу, а не налаштування
OmeniaClaw.json. OmeniaClaw node install зберігає його в середовищі LaunchAgent,
коли воно присутнє в команді встановлення.
Схваліть вузол із хоста Gateway:
OmeniaClaw devices listOmeniaClaw devices approve <requestId>Підтвердьте, що Gateway бачить вузол і що він оголошує як googlemeet.chrome,
так і можливість браузера/browser.proxy:
OmeniaClaw nodes statusСпрямуйте Meet через цей вузол на хості Gateway:
{ gateway: { nodes: { allowCommands: ["googlemeet.chrome", "browser.proxy"], }, }, plugins: { entries: { "google-meet": { enabled: true, config: { defaultTransport: "chrome-node", chrome: { guestName: "OmeniaClaw Agent", autoJoin: true, reuseExistingTab: true, }, chromeNode: { node: "parallels-macos", }, }, }, }, },}Тепер приєднуйтеся звичайно з хоста Gateway:
OmeniaClaw googlemeet join https://meet.google.com/abc-defg-hijабо попросіть агента використати інструмент google_meet з transport: "chrome-node".
Для smoke test однією командою, який створює або повторно використовує сесію, вимовляє відому фразу й друкує стан сесії:
OmeniaClaw googlemeet test-speech https://meet.google.com/abc-defg-hijПід час приєднання в режимі реального часу автоматизація браузера OmeniaClaw заповнює ім’я гостя, натискає
Join/Ask to join і приймає перший вибір Meet "Use microphone", коли ця
підказка з’являється. Під час приєднання лише для спостереження або створення зустрічі лише в браузері вона
продовжує після тієї самої підказки без мікрофона, коли цей вибір доступний.
Якщо профіль браузера не ввійшов в обліковий запис, Meet очікує допуску від організатора,
Chrome потребує дозволу на мікрофон/камеру для приєднання в режимі реального часу або Meet застряг
на підказці, яку автоматизація не змогла розв’язати, результат join/test-speech повідомляє
manualActionRequired: true з manualActionReason і
manualActionMessage. Агенти мають припинити повторні спроби приєднання, повідомити це точне
повідомлення разом із поточними browserUrl/browserTitle і повторити спробу лише після
завершення ручної дії в браузері.
Якщо chromeNode.node пропущено, OmeniaClaw автоматично вибирає лише тоді, коли рівно один
підключений вузол оголошує і googlemeet.chrome, і керування браузером. Якщо
підключено кілька придатних вузлів, задайте chromeNode.node як id вузла,
відображуване ім’я або віддалену IP-адресу.
Поширені перевірки збоїв:
Configured Google Meet node ... is not usable: offline: закріплений вузол відомий Gateway, але недоступний. Агенти мають трактувати цей вузол як діагностичний стан, а не як придатний хост Chrome, і повідомляти блокер налаштування замість відкату на інший транспорт, якщо користувач цього не просив.No connected Google Meet-capable node: запустітьOmeniaClaw node runу VM, схваліть сполучення і переконайтеся, щоOmeniaClaw plugins enable google-meetіOmeniaClaw plugins enable browserбули виконані у VM. Також підтвердьте, що хост 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: встановітьblackhole-2chу VM і перезавантажте VM.- Chrome відкривається, але не може приєднатися: увійдіть у профіль браузера всередині VM або
залиште
chrome.guestNameзаданим для гостьового приєднання. Автоматичне гостьове приєднання використовує автоматизацію браузера OmeniaClaw через проксі браузера вузла; переконайтеся, що конфігурація браузера вузла вказує на потрібний профіль, наприкладbrowser.defaultProfile: "user"або іменований профіль наявного сеансу. - Дублікати вкладок Meet: залиште
chrome.reuseExistingTab: trueувімкненим. OmeniaClaw активує наявну вкладку для того самого URL Meet перед відкриттям нової, а створення зустрічі в браузері повторно використовує вкладкуhttps://meet.google.com/newу процесі або вкладку підказки облікового запису Google перед відкриттям іншої. - Немає аудіо: у Meet спрямуйте аудіо мікрофона/динаміка через шлях віртуального аудіопристрою, який використовує OmeniaClaw; використовуйте окремі віртуальні пристрої або маршрутизацію у стилі Loopback для чистого двостороннього аудіо.
Нотатки щодо встановлення
Стандартне зворотне мовлення Chrome використовує два зовнішні інструменти:
sox: аудіоутиліта командного рядка. Plugin використовує явні команди пристрою CoreAudio для стандартного аудіомоста PCM16 24 кГц.blackhole-2ch: віртуальний аудіодрайвер macOS. Він створює аудіопристрійBlackHole 2ch, через який Chrome/Meet може маршрутизувати аудіо.
OmeniaClaw не пакує й не розповсюджує жоден із цих пакетів. Документація просить користувачів
встановити їх як залежності хоста через Homebrew. SoX ліцензовано як
LGPL-2.0-only AND GPL-2.0-only; BlackHole має GPL-3.0. Якщо ви створюєте
інсталятор або appliance, який пакує BlackHole разом з OmeniaClaw, перегляньте
умови ліцензування upstream BlackHole або отримайте окрему ліцензію від Existential Audio.
Транспорти
Chrome
Транспорт Chrome відкриває URL Meet через керування браузером OmeniaClaw і приєднується
як профіль браузера OmeniaClaw, що ввійшов в обліковий запис. На macOS Plugin перевіряє наявність
BlackHole 2ch перед запуском. Якщо налаштовано, він також виконує команду перевірки
справності аудіомоста та команду запуску перед відкриттям Chrome. Використовуйте chrome, коли
Chrome/аудіо працюють на хості Gateway; використовуйте chrome-node, коли Chrome/аудіо працюють
на спареному вузлі, наприклад VM Parallels macOS. Для локального Chrome виберіть
профіль через browser.defaultProfile; chrome.browserProfile передається хостам
chrome-node.
OmeniaClaw googlemeet join https://meet.google.com/abc-defg-hij --transport chromeOmeniaClaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome-nodeМаршрутизуйте аудіо мікрофона та динаміка Chrome через локальний аудіоміст OmeniaClaw.
Якщо BlackHole 2ch не встановлено, приєднання завершується помилкою налаштування
замість тихого приєднання без аудіошляху.
Twilio
Транспорт Twilio — це суворий план набору, делегований Plugin Voice Call. Він не аналізує сторінки Meet для пошуку телефонних номерів.
Використовуйте це, коли участь через Chrome недоступна або вам потрібен резервний телефонний набір. Google Meet має показувати номер телефонного підключення та PIN для зустрічі; OmeniaClaw не виявляє їх зі сторінки Meet.
Увімкніть Plugin Voice Call на хості Gateway, а не на вузлі 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 OmeniaClaw agent. Be brief.", toolPolicy: "safe-read-only", providers: { google: { silenceDurationMs: 500, startSensitivity: "high", }, }, }, }, }, google: { enabled: true, }, }, },}Надайте облікові дані Twilio через середовище або конфігурацію. Середовище тримає
секрети поза OmeniaClaw.json:
export TWILIO_ACCOUNT_SID=AC...export TWILIO_AUTH_TOKEN=...export TWILIO_FROM_NUMBER=+15550001234export GEMINI_API_KEY=...Натомість використовуйте realtime.provider: "openai" з Plugin постачальника OpenAI і
OPENAI_API_KEY, якщо це ваш постачальник голосу в режимі реального часу.
Перезапустіть або перезавантажте Gateway після ввімкнення voice-call; зміни конфігурації Plugin
не з’являються у вже запущеному процесі Gateway, доки він не перезавантажиться.
Потім перевірте:
OmeniaClaw config validateOmeniaClaw plugins list | grep -E 'google-meet|voice-call'OmeniaClaw googlemeet setupКоли делегування Twilio підключено, googlemeet setup містить успішні перевірки
twilio-voice-call-plugin, twilio-voice-call-credentials і
twilio-voice-call-webhook.
OmeniaClaw googlemeet join https://meet.google.com/abc-defg-hij \ --transport twilio \ --dial-in-number +15551234567 \ --pin 123456Використовуйте --dtmf-sequence, коли зустріч потребує спеціальної послідовності:
OmeniaClaw googlemeet join https://meet.google.com/abc-defg-hij \ --transport twilio \ --dial-in-number +15551234567 \ --dtmf-sequence ww123456#OAuth і попередня перевірка
OAuth є необов’язковим для створення посилання Meet, оскільки googlemeet create може
відкотитися до автоматизації браузера. Налаштовуйте OAuth, коли потрібні офіційне створення через API,
розв’язання простору або попередні перевірки Meet Media API.
Доступ до Google Meet API використовує користувацький OAuth: створіть OAuth-клієнт Google Cloud,
запросіть потрібні scopes, авторизуйте обліковий запис Google, а потім збережіть
отриманий refresh token у конфігурації Plugin Google Meet або надайте
змінні середовища OmeniaClaw_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.
- Internal найпростіший для організації Google Workspace.
- External працює для особистих/тестових налаштувань; поки застосунок перебуває в Testing, додайте кожен обліковий запис Google, який авторизуватиме застосунок, як тестового користувача.
-
Додайте scopes, які запитує OmeniaClaw:
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.
-
Авторизований URI переспрямування:
text http://localhost:8085/oauth2callback
-
-
Скопіюйте client ID і client secret.
meetings.space.created потрібен Google Meet spaces.create.
meetings.space.readonly дає OmeniaClaw змогу розв’язувати URL/коди Meet у простори.
meetings.space.settings дає OmeniaClaw змогу передавати налаштування SpaceConfig, як-от
accessType, під час створення кімнати через API.
meetings.conference.media.readonly призначений для попередньої перевірки Meet Media API і медіа
роботи; Google може вимагати участі в Developer Preview для фактичного використання Media API.
Якщо вам потрібні лише приєднання Chrome на основі браузера, повністю пропустіть OAuth.
Створення refresh token
Налаштуйте oauth.clientId і, за потреби, oauth.clientSecret, або передайте їх як
змінні середовища, а потім виконайте:
OmeniaClaw googlemeet auth login --jsonКоманда друкує конфігураційний блок oauth із refresh token. Вона використовує PKCE,
localhost callback на http://localhost:8085/oauth2callback і ручний
потік копіювання/вставлення з --manual.
Приклади:
OmeniaClaw_GOOGLE_MEET_CLIENT_ID="your-client-id" \OmeniaClaw_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \OmeniaClaw googlemeet auth login --jsonВикористовуйте ручний режим, коли браузер не може досягти локального callback:
OmeniaClaw_GOOGLE_MEET_CLIENT_ID="your-client-id" \OmeniaClaw_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \OmeniaClaw googlemeet auth login --json --manualJSON-вивід містить:
{ "oauth": { "clientId": "your-client-id", "clientSecret": "your-client-secret", "refreshToken": "refresh-token", "accessToken": "access-token", "expiresAt": 1770000000000 }, "scope": "..."}Збережіть об’єкт oauth у конфігурації Plugin Google Meet:
{ plugins: { entries: { "google-meet": { enabled: true, config: { oauth: { clientId: "your-client-id", clientSecret: "your-client-secret", refreshToken: "refresh-token", }, }, }, }, },}Надавайте перевагу змінним середовища, коли не хочете зберігати refresh token у конфігурації. Якщо присутні і значення конфігурації, і значення середовища, Plugin спершу розв’язує конфігурацію, а потім fallback середовища.
Згода OAuth включає створення простору Meet, доступ на читання простору Meet і доступ на читання
медіа конференції Meet. Якщо ви автентифікувалися до появи підтримки створення зустрічей,
повторно виконайте OmeniaClaw googlemeet auth login --json, щоб refresh token мав
scope meetings.space.created.
Перевірка OAuth через doctor
Запустіть OAuth doctor, коли потрібна швидка перевірка справності без секретів:
OmeniaClaw googlemeet doctor --oauth --jsonЦе не завантажує runtime Chrome і не потребує підключеного вузла 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, запустіть
перевірку створення з побічним ефектом:
OmeniaClaw googlemeet doctor --oauth --create-space --jsonOmeniaClaw googlemeet create --no-join --json--create-space створює одноразовий URL Meet. Використовуйте його, коли потрібно підтвердити,
що в проєкті Google Cloud увімкнено Meet API і що авторизований
обліковий запис має область доступу meetings.space.created.
Щоб підтвердити доступ для читання до наявного простору зустрічі:
OmeniaClaw googlemeet doctor --oauth --meeting https://meet.google.com/abc-defg-hij --jsonOmeniaClaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hijdoctor --oauth --meeting і resolve-space підтверджують доступ для читання до наявного
простору, до якого авторизований обліковий запис Google має доступ. 403 у цих перевірках
зазвичай означає, що Google Meet REST API вимкнено, погоджений токен оновлення
не має потрібної області доступу, або обліковий запис Google не може отримати доступ до цього простору Meet.
Помилка токена оновлення означає, що потрібно повторно виконати OmeniaClaw googlemeet auth login --json і зберегти новий блок oauth.
Для резервного режиму браузера облікові дані OAuth не потрібні. У цьому режимі автентифікація Google надходить із профілю Chrome, у який виконано вхід на вибраному вузлі, а не з конфігурації OmeniaClaw.
Ці змінні середовища приймаються як резервні значення:
OmeniaClaw_GOOGLE_MEET_CLIENT_IDабоGOOGLE_MEET_CLIENT_IDOmeniaClaw_GOOGLE_MEET_CLIENT_SECRETабоGOOGLE_MEET_CLIENT_SECRETOmeniaClaw_GOOGLE_MEET_REFRESH_TOKENабоGOOGLE_MEET_REFRESH_TOKENOmeniaClaw_GOOGLE_MEET_ACCESS_TOKENабоGOOGLE_MEET_ACCESS_TOKENOmeniaClaw_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_ATабоGOOGLE_MEET_ACCESS_TOKEN_EXPIRES_ATOmeniaClaw_GOOGLE_MEET_DEFAULT_MEETINGабоGOOGLE_MEET_DEFAULT_MEETINGOmeniaClaw_GOOGLE_MEET_PREVIEW_ACKабоGOOGLE_MEET_PREVIEW_ACK
Розв’яжіть URL Meet, код або spaces/{id} через spaces.get:
OmeniaClaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hijЗапустіть попередню перевірку перед роботою з медіа:
OmeniaClaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hijВиведіть список артефактів зустрічі та відвідуваність після того, як Meet створить записи конференції:
OmeniaClaw googlemeet artifacts --meeting https://meet.google.com/abc-defg-hijOmeniaClaw googlemeet attendance --meeting https://meet.google.com/abc-defg-hijOmeniaClaw googlemeet export --meeting https://meet.google.com/abc-defg-hij --output ./meet-exportЗ --meeting, artifacts і attendance типово використовують найновіший запис конференції.
Передайте --all-conference-records, коли потрібні всі збережені записи
для цієї зустрічі.
Пошук у календарі може розв’язати URL зустрічі з Google Calendar перед читанням артефактів Meet:
OmeniaClaw googlemeet latest --todayOmeniaClaw googlemeet calendar-events --today --jsonOmeniaClaw googlemeet artifacts --event "Weekly sync"OmeniaClaw googlemeet attendance --today --format csv --output attendance.csv--today шукає в сьогоднішньому календарі primary подію Calendar з
посиланням Google Meet. Використовуйте --event <query> для пошуку відповідного тексту події та
--calendar <id> для неосновного календаря. Пошук у календарі потребує нового
входу OAuth, який включає область доступу лише для читання подій Calendar.
calendar-events попередньо показує відповідні події Meet і позначає подію, яку
вибере latest, artifacts, attendance або export.
Якщо ви вже знаєте ідентифікатор запису конференції, зверніться до нього напряму:
OmeniaClaw googlemeet latest --meeting https://meet.google.com/abc-defg-hijOmeniaClaw googlemeet artifacts --conference-record conferenceRecords/abc123 --jsonOmeniaClaw googlemeet attendance --conference-record conferenceRecords/abc123 --jsonЗавершіть активну конференцію для створеного через API простору, коли потрібно закрити кімнату після дзвінка:
OmeniaClaw googlemeet end-active-conference https://meet.google.com/abc-defg-hijЦе викликає Google Meet spaces.endActiveConference і потребує OAuth з областю доступу
meetings.space.created для простору, яким авторизований обліковий запис може керувати.
OmeniaClaw приймає URL Meet, код зустрічі або вхід spaces/{id} і розв’язує його
в ресурс простору API перед завершенням активної конференції.
Це окремо від googlemeet leave: leave зупиняє локальну/сеансову
участь OmeniaClaw, тоді як end-active-conference просить Google Meet завершити активну
конференцію для простору.
Запишіть читабельний звіт:
OmeniaClaw googlemeet artifacts --conference-record conferenceRecords/abc123 \ --format markdown --output meet-artifacts.mdOmeniaClaw googlemeet attendance --conference-record conferenceRecords/abc123 \ --format markdown --output meet-attendance.mdOmeniaClaw googlemeet attendance --conference-record conferenceRecords/abc123 \ --format csv --output meet-attendance.csvOmeniaClaw googlemeet export --conference-record conferenceRecords/abc123 \ --include-doc-bodies --zip --output meet-exportOmeniaClaw 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, щоб також записати переносний архів поруч
із папкою. Передайте --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}Запустіть захищений живий smoke-тест на реальній збереженій зустрічі:
OmeniaClaw_LIVE_TEST=1 \OmeniaClaw_GOOGLE_MEET_LIVE_MEETING=https://meet.google.com/abc-defg-hij \pnpm test:live -- extensions/google-meet/google-meet.live.test.tsЗапустіть живу браузерну перевірку спочатку з прослуховуванням на зустрічі, де хтось буде говорити, а субтитри Meet доступні:
OmeniaClaw googlemeet setup --transport chrome-node --mode transcribeOmeniaClaw googlemeet test-listen https://meet.google.com/abc-defg-hij --transport chrome-node --timeout-ms 30000Середовище живого smoke-тесту:
OmeniaClaw_LIVE_TEST=1вмикає захищені живі тести.OmeniaClaw_GOOGLE_MEET_LIVE_MEETINGвказує на збережений URL Meet, код абоspaces/{id}.OmeniaClaw_GOOGLE_MEET_CLIENT_IDабоGOOGLE_MEET_CLIENT_IDнадає ідентифікатор клієнта OAuth.OmeniaClaw_GOOGLE_MEET_REFRESH_TOKENабоGOOGLE_MEET_REFRESH_TOKENнадає токен оновлення.- Необов’язково:
OmeniaClaw_GOOGLE_MEET_CLIENT_SECRET,OmeniaClaw_GOOGLE_MEET_ACCESS_TOKENіOmeniaClaw_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_ATвикористовують ті самі резервні імена без префіксаOmeniaClaw_.
Базовий живий smoke-тест артефактів/відвідуваності потребує
https://www.googleapis.com/auth/meetings.space.readonly і
https://www.googleapis.com/auth/meetings.conference.media.readonly. Пошук у календарі
потребує https://www.googleapis.com/auth/calendar.events.readonly. Експорт тіла документа
Drive потребує
https://www.googleapis.com/auth/drive.meet.readonly.
Створіть новий простір Meet:
OmeniaClaw 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" } }}Якщо резервний режим браузера натрапляє на вхід Google або блокер дозволів Meet до того, як
може створити URL, метод Gateway повертає невдалу відповідь, а
інструмент google_meet повертає структуровані подробиці замість простого рядка:
{ "source": "browser", "error": "google-login-required: Sign in to Google in the OmeniaClaw browser profile, then retry meeting creation.", "manualActionRequired": true, "manualActionReason": "google-login-required", "manualActionMessage": "Sign in to Google in the OmeniaClaw 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, доки оператор не завершить крок у браузері.
Приклад 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 із виконаним входом, щоб приєднатися через браузер. Якщо з профілю виконано вихід, OmeniaClaw повідомляє manualActionRequired: true або помилку резервного браузерного варіанта й просить оператора завершити вхід у Google перед повторною спробою.
Установлюйте preview.enrollmentAcknowledged: true лише після підтвердження, що ваш Cloud-проєкт, OAuth principal і учасники зустрічі зареєстровані в Google Workspace Developer Preview Program для Meet media APIs.
Конфігурація
Спільному шляху агента Chrome потрібні лише ввімкнений Plugin, BlackHole, SoX, ключ провайдера транскрипції в реальному часі та налаштований провайдер TTS OmeniaClaw. OpenAI є типовим провайдером транскрипції; задайте realtime.voiceProvider як "google" і realtime.model, щоб використовувати Google Gemini Live для режиму bidi без зміни типового провайдера транскрипції в режимі агента:
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: необов’язковий id/ім’я/IP вузла дляchrome-nodechrome.audioBackend: "blackhole-2ch"chrome.guestName: "OmeniaClaw Agent": ім’я, що використовується на гостьовому екрані Meet без виконаного входуchrome.autoJoin: true: best-effort заповнення імені гостя та натискання Join Now через браузерну автоматизацію OmeniaClaw наchrome-nodechrome.reuseExistingTab: true: активувати наявну вкладку Meet замість відкривання дублікатівchrome.waitForInCallMs: 20000: чекати, доки вкладка Meet повідомить про перебування у виклику, перш ніж запуститься вступ talk-backchrome.audioFormat: "pcm16-24khz": аудіоформат пари команд. Використовуйте"g711-ulaw-8khz"лише для застарілих/кастомних пар команд, які досі видають телефонний аудіосигнал.chrome.audioBufferBytes: 4096: буфер обробки SoX для згенерованих аудіокоманд пари команд Chrome. Це половина типового буфера SoX у 8192 байти, що зменшує типову затримку pipe, залишаючи можливість збільшити його на завантажених хостах. Значення нижче мінімуму SoX обмежуються до 17 байтів.chrome.audioInputCommand: команда SoX, яка читає з CoreAudioBlackHole 2chі записує аудіо у форматіchrome.audioFormatchrome.audioOutputCommand: команда SoX, яка читає аудіо у форматіchrome.audioFormatі записує в CoreAudioBlackHole 2chchrome.bargeInInputCommand: необов’язкова команда локального мікрофона, яка записує signed 16-bit little-endian mono PCM для виявлення людського втручання, поки активне відтворення асистента. Наразі це застосовується до розміщеного на Gateway мосту пари командchrome.chrome.bargeInRmsThreshold: 650: рівень RMS, який рахується людським перериванням наchrome.bargeInInputCommandchrome.bargeInPeakThreshold: 2500: піковий рівень, який рахується людським перериванням наchrome.bargeInInputCommandchrome.bargeInCooldownMs: 900: мінімальна затримка між повторними очищеннями людського перериванняmode: "agent": типовий режим talk-back. Мовлення учасників транскрибується налаштованим провайдером транскрипції в реальному часі, надсилається налаштованому агенту OmeniaClaw у сесії підагента для окремої зустрічі та озвучується назад через звичайний runtime TTS OmeniaClaw.mode: "bidi": резервний прямий двонапрямний режим моделі реального часу. Провайдер голосу реального часу відповідає безпосередньо на мовлення учасників і може викликатиOmeniaClaw_agent_consultдля глибших відповідей або відповідей із підтримкою інструментів.mode: "transcribe": режим лише спостереження без мосту talk-back.realtime.provider: "openai": резервний варіант сумісності, що використовується, коли наведені нижче scoped-поля провайдера не задані.realtime.transcriptionProvider: "openai": id провайдера, який режимagentвикористовує для транскрипції в реальному часі.realtime.voiceProvider: id провайдера, який режимbidiвикористовує для прямого голосу в реальному часі. Задайте його як"google", щоб використовувати Gemini Live, зберігаючи транскрипцію режиму агента на OpenAI.realtime.toolPolicy: "safe-read-only"realtime.instructions: короткі усні відповіді зOmeniaClaw_agent_consultдля глибших відповідейrealtime.introMessage: коротка усна перевірка готовності, коли міст реального часу підключається; задайте"", щоб приєднатися беззвучноrealtime.agentId: необов’язковий id агента OmeniaClaw дляOmeniaClaw_agent_consult; типовоmain
Необов’язкові перевизначення:
{ defaults: { meeting: "https://meet.google.com/abc-defg-hij", }, browser: { defaultProfile: "OmeniaClaw", }, chrome: { guestName: "OmeniaClaw 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. Відповіді агента також можуть використовувати директиви [[tts:voiceId=... model=eleven_v3]] для окремих відповідей, коли перевизначення моделі TTS увімкнено, але конфігурація є детермінованим типовим варіантом для зустрічей. Під час приєднання журнали мають показати transcriptionProvider=elevenlabs, а кожна озвучена відповідь має журналювати 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 і вступне привітання Plugin Voice Call. 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 працює на спареному вузлі, наприклад Parallels VM. В обох випадках провайдери моделей і OmeniaClaw_agent_consult працюють на хості Gateway, тому облікові дані моделей залишаються там. Із типовим mode: "agent" провайдер транскрипції в реальному часі обробляє прослуховування, налаштований агент OmeniaClaw створює відповідь, а звичайний TTS OmeniaClaw озвучує її в Meet. Використовуйте mode: "bidi", коли хочете, щоб голосова модель реального часу відповідала безпосередньо. Сирий mode: "realtime" досі приймається як застарілий псевдонім сумісності для mode: "agent", але більше не рекламується в схемі інструмента агента. Журнали режиму агента включають визначеного провайдера/модель транскрипції під час запуску мосту, а також провайдера TTS, модель, голос, формат виводу та частоту дискретизації після кожної синтезованої відповіді.
Використовуйте action: "status", щоб перелічити активні сесії або переглянути id сесії. Використовуйте action: "speak" із sessionId і message, щоб змусити агента реального часу говорити негайно. Використовуйте action: "test_speech", щоб створити або повторно використати сесію, запустити відому фразу та повернути стан inCall, коли хост Chrome може його повідомити. test_speech завжди примусово використовує mode: "agent" і завершується помилкою, якщо його просять працювати в mode: "transcribe", оскільки сесії лише спостереження навмисно не можуть видавати мовлення. Його результат speechOutputVerified базується на збільшенні байтів аудіовиходу реального часу під час цього тестового виклику, тому повторно використана сесія зі старішим аудіо не рахується як свіжа успішна перевірка мовлення. Використовуйте action: "leave", щоб позначити сесію завершеною.
status включає стан Chrome, коли доступно:
inCall: Chrome, схоже, перебуває всередині виклику MeetmicMuted: best-effort стан мікрофона MeetmanualActionRequired/manualActionReason/manualActionMessage: профілю браузера потрібні ручний вхід, допуск від хоста Meet, дозволи або ремонт керування браузером, перш ніж мовлення зможе працюватиspeechReady/speechBlockedReason/speechBlockedMessage: чи дозволено кероване мовлення Chrome зараз.speechReady: falseозначає, що OmeniaClaw не надіслав вступну/тестову фразу в аудіоміст.providerConnected/realtimeReady: стан голосового мосту реального часуlastInputAt/lastOutputAt: останнє аудіо, побачене з мосту або надіслане до ньогоaudioOutputRouted/audioOutputDeviceLabel: чи медіавихід вкладки Meet активно маршрутизовано до пристрою BlackHole, який використовує містlastSuppressedInputAt/suppressedInputBytes: вхід local loopback, проігнорований, поки активне відтворення асистента
{ "action": "speak", "sessionId": "meet_...", "message": "Say exactly: I'm here and listening."}Режими agent і bidi
Режим Chrome agent оптимізовано для поведінки "мій агент на зустрічі". Провайдер транскрипції в реальному часі чує аудіо зустрічі, фінальні транскрипти учасників маршрутизуються через налаштованого агента OmeniaClaw, а відповідь озвучується через звичайний runtime TTS OmeniaClaw. Задайте mode: "bidi", коли хочете, щоб голосова модель реального часу відповідала безпосередньо. Близькі фінальні фрагменти транскриптів об’єднуються перед consult, щоб один усний turn не створював кілька застарілих часткових відповідей. Вхід реального часу також приглушується, поки поставлене в чергу аудіо асистента ще відтворюється, а нещодавні схожі на асистента відлуння транскриптів ігноруються перед consult агента, щоб local loopback BlackHole не змушував агента відповідати на власне мовлення.
| Режим | Хто визначає відповідь | Шлях мовленнєвого виводу | Коли використовувати |
|---|---|---|---|
agent |
Налаштований агент OmeniaClaw | Звичайний runtime TTS OmeniaClaw | Коли потрібна поведінка "мій агент на зустрічі" |
bidi |
Голосова модель реального часу | Аудіовідповідь провайдера голосу реального часу | Коли потрібен голосовий цикл розмови з найменшою затримкою |
У режимі bidi, коли моделі реального часу потрібні глибше міркування, актуальна інформація або звичайні інструменти OmeniaClaw, вона може викликати OmeniaClaw_agent_consult.
Інструмент consult запускає звичайного агента OmeniaClaw у фоновому режимі з контекстом нещодавньої
стенограми зустрічі та повертає стислу усну відповідь. У режимі agent
OmeniaClaw надсилає цю відповідь безпосередньо в середовище виконання TTS; у режимі bidi
модель голосу в реальному часі може озвучити результат consult назад у зустріч. Він використовує
той самий спільний механізм consult, що й Voice Call.
За замовчуванням consult виконується для агента main. Установіть realtime.agentId, коли
lane Meet має звертатися до окремого робочого простору агента OmeniaClaw, стандартних параметрів моделі,
політики інструментів, пам’яті та історії сесій.
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: не показувати інструмент consult голосовій моделі в реальному часі.
Ключ сесії consult обмежений окремою сесією Meet, тому подальші виклики consult можуть повторно використовувати попередній контекст consult під час тієї самої зустрічі.
Щоб примусово виконати усну перевірку готовності після того, як Chrome повністю приєднався до виклику:
OmeniaClaw googlemeet speak meet_... "Say exactly: I'm here and listening."Для повної smoke-перевірки приєднання та озвучення:
OmeniaClaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ --transport chrome-node \ --message "Say exactly: I'm here and listening."Контрольний список live-тесту
Використовуйте цю послідовність перед передаванням зустрічі агенту без нагляду:
OmeniaClaw googlemeet setupOmeniaClaw nodes statusOmeniaClaw 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:
OmeniaClaw googlemeet setupOmeniaClaw nodes status --connectedOmeniaClaw nodes invoke \ --node parallels-macos \ --command googlemeet.chrome \ --params '{"action":"setup"}'Це підтверджує, що Plugin Gateway завантажено, вузол VM підключено з поточним токеном, а аудіоміст Meet доступний до того, як агент відкриє реальну вкладку зустрічі.
Для smoke-перевірки Twilio використовуйте зустріч, яка надає дані телефонного дозвону:
OmeniaClaw googlemeet setupOmeniaClaw 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.voicecallдоступний у CLI після перезавантаження Gateway.- Повернена сесія має
transport: "twilio"іtwilio.voiceCallId. OmeniaClaw logs --followпоказує, що DTMF TwiML віддано перед realtime TwiML, а потім міст реального часу з початковим привітанням у черзі.googlemeet leave <sessionId>завершує делегований голосовий виклик.
Усунення несправностей
Агент не бачить інструмент Google Meet
Переконайтеся, що Plugin увімкнено в конфігурації Gateway, і перезавантажте Gateway:
OmeniaClaw plugins list | grep google-meetOmeniaClaw googlemeet setupЯкщо ви щойно редагували plugins.entries.google-meet, перезапустіть або перезавантажте Gateway.
Запущений агент бачить лише інструменти Plugin, зареєстровані поточним
процесом Gateway.
На хостах Gateway не з macOS інструмент google_meet, видимий агенту, залишається видимим,
але локальні дії з відповіддю голосом через Chrome блокуються до потрапляння в аудіоміст.
Локальний звук відповіді через Chrome зараз залежить від macOS BlackHole 2ch, тому
Linux-агенти мають використовувати mode: "transcribe", дозвін Twilio або хост macOS
chrome-node замість стандартного локального шляху агента Chrome.
Немає підключеного вузла з підтримкою Google Meet
На хості вузла виконайте:
OmeniaClaw plugins enable google-meetOmeniaClaw plugins enable browserOmeniaClaw_ALLOW_INSECURE_PRIVATE_WS=1 \ OmeniaClaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macosНа хості Gateway затвердьте вузол і перевірте команди:
OmeniaClaw devices listOmeniaClaw devices approve <requestId>OmeniaClaw 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 це зазвичай означає:
OmeniaClaw_ALLOW_INSECURE_PRIVATE_WS=1 \ OmeniaClaw node install \ --host <gateway-lan-ip> \ --port 18789 \ --display-name parallels-macos \ --forceПотім перезавантажте сервіс вузла та повторно виконайте:
OmeniaClaw googlemeet setupOmeniaClaw 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; OmeniaClaw натискає Use microphone через автоматизацію браузера, коли доступно, і продовжує очікувати реального стану зустрічі. Для резервного створення лише через браузер OmeniaClaw може натиснути Continue without microphone, тому що створення URL не потребує аудіошляху в реальному часі.
Не вдається створити зустріч
googlemeet create спочатку використовує endpoint Google Meet API spaces.create,
коли облікові дані OAuth налаштовано. Без облікових даних OAuth він переходить
до резервного браузера закріпленого вузла Chrome. Перевірте:
- Для створення через API: налаштовано
oauth.clientIdіoauth.refreshToken, або наявні відповідні змінні середовищаOmeniaClaw_GOOGLE_MEET_*. - Для створення через API: refresh token було видано після додавання підтримки створення.
Старіші токени можуть не мати scope
meetings.space.created; повторно виконайтеOmeniaClaw googlemeet auth login --jsonі оновіть конфігурацію Plugin. - Для резервного браузера:
defaultTransport: "chrome-node"іchromeNode.nodeвказують на підключений вузол ізbrowser.proxyіgooglemeet.chrome. - Для резервного браузера: профіль OmeniaClaw Chrome на цьому вузлі увійшов
у Google і може відкрити
https://meet.google.com/new. - Для резервного браузера: повторні спроби повторно використовують наявну вкладку
https://meet.google.com/newабо вкладку запиту облікового запису Google перед відкриттям нової вкладки. Якщо час очікування агента спливає, повторіть виклик інструмента, а не відкривайте іншу вкладку Meet вручну. - Для резервного браузера: якщо інструмент повертає
manualActionRequired: true, використовуйте поверненіbrowser.nodeId,browser.targetId,browserUrlіmanualActionMessage, щоб скерувати оператора. Не повторюйте спроби в циклі, доки ця дія не буде завершена. - Для резервного браузера: якщо Meet показує "Do you want people to hear you in the
meeting?", залиште вкладку відкритою. OmeniaClaw має натиснути Use microphone або, для
резервного створення лише через браузер, Continue without microphone через автоматизацію
браузера й продовжити очікувати згенерований URL Meet. Якщо це неможливо, у
помилці має згадуватися
meet-audio-choice-required, а неgoogle-login-required.
Агент приєднується, але не говорить
Перевірте шлях реального часу:
OmeniaClaw googlemeet setupOmeniaClaw googlemeet doctorВикористовуйте mode: "agent" для звичайного шляху відповіді голосом STT -> агент OmeniaClaw -> TTS,
або mode: "bidi" для прямого резервного голосу в реальному часі. mode: "transcribe"
навмисно не запускає міст відповіді голосом. Для налагодження лише спостереження
виконайте OmeniaClaw googlemeet status --json <session-id> після того, як учасники заговорять,
і перевірте captioning, transcriptLines і lastCaptionText. Якщо inCall дорівнює
true, але transcriptLines залишається 0, субтитри Meet можуть бути вимкнені, ніхто
не говорив після встановлення спостерігача, інтерфейс Meet змінився або live-субтитри
недоступні для мови/облікового запису зустрічі.
googlemeet test-speech завжди перевіряє шлях реального часу й повідомляє, чи
було помічено байти виходу мосту для цього виклику. Якщо speechOutputVerified дорівнює false і
speechOutputTimedOut дорівнює true, провайдер реального часу міг прийняти
висловлювання, але OmeniaClaw не побачив, щоб нові вихідні байти дійшли до аудіомосту
Chrome.
Також перевірте:
- Ключ провайдера реального часу доступний на хості Gateway, наприклад
OPENAI_API_KEYабоGEMINI_API_KEY. BlackHole 2chвидимий на хості Chrome.soxіснує на хості Chrome.- Мікрофон і динамік Meet маршрутизовано через віртуальний аудіошлях, який використовує
OmeniaClaw.
doctorмає показуватиmeet output routed: yesдля локальних приєднань Chrome у реальному часі.
googlemeet doctor [session-id] друкує сесію, вузол, стан у виклику,
причину ручної дії, підключення провайдера реального часу, realtimeReady, активність
аудіовходу/аудіовиходу, останні часові мітки аудіо, лічильники байтів і URL браузера.
Використовуйте googlemeet status [session-id] --json, коли потрібен сирий JSON. Використовуйте
googlemeet doctor --oauth, коли потрібно перевірити оновлення Google Meet OAuth
без розкриття токенів; додайте --meeting або --create-space, коли також потрібне
підтвердження Google Meet API.
Якщо час очікування агента сплив і ви бачите вже відкриту вкладку Meet, огляньте цю вкладку без відкриття іншої:
OmeniaClaw googlemeet recover-tabOmeniaClaw 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 не проходить, коли backend Twilio не має account
SID, auth token або номера абонента. Установіть їх на хості Gateway:
export TWILIO_ACCOUNT_SID=AC...export TWILIO_AUTH_TOKEN=...export TWILIO_FROM_NUMBER=+15550001234twilio-voice-call-webhook не проходить, коли voice-call не має публічного Webhook
доступу або коли publicUrl вказує на loopback чи простір приватної мережі.
Установіть plugins.entries.voice-call.config.publicUrl на URL публічного провайдера або
налаштуйте тунель/експозицію Tailscale для voice-call.
Loopback і приватні URL недійсні для 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", }, }, }, },}Для локальної розробки використовуйте тунель або доступ через Tailscale замість приватної URL-адреси хоста:
{ plugins: { entries: { "voice-call": { config: { tunnel: { provider: "ngrok" }, // or tailscale: { mode: "funnel", path: "/voice/webhook" }, }, }, }, },}Потім перезапустіть або перезавантажте Gateway і виконайте:
OmeniaClaw googlemeet setup --transport twilioOmeniaClaw voicecall setupOmeniaClaw voicecall smokevoicecall smoke за замовчуванням лише перевіряє готовність. Щоб виконати пробний запуск для конкретного номера:
OmeniaClaw voicecall smoke --to "+15555550123"Додавайте --yes лише тоді, коли ви навмисно хочете здійснити живий вихідний
сповіщувальний виклик:
OmeniaClaw voicecall smoke --to "+15555550123" --yesВиклик Twilio починається, але ніколи не входить у зустріч
Підтвердьте, що подія Meet містить дані телефонного дозвону. Передайте точний номер дозвону та PIN або власну послідовність DTMF:
OmeniaClaw googlemeet join https://meet.google.com/abc-defg-hij \ --transport twilio \ --dial-in-number +15551234567 \ --dtmf-sequence ww123456#Використовуйте початкові w або коми в --dtmf-sequence, якщо провайдеру потрібна пауза
перед введенням PIN.
Якщо телефонний виклик створено, але в списку учасників Meet так і не з’являється учасник, що приєднався телефоном:
- Виконайте
OmeniaClaw googlemeet doctor <session-id>, щоб підтвердити делегований ID виклику Twilio, чи було поставлено DTMF у чергу та чи було запитано вступне привітання. - Виконайте
OmeniaClaw voicecall status --call-id <id>і підтвердьте, що виклик усе ще активний. - Виконайте
OmeniaClaw voicecall tailі перевірте, що Webhook-и Twilio надходять до Gateway. - Виконайте
OmeniaClaw logs --followі знайдіть послідовність Twilio Meet: Google Meet делегує приєднання, Voice Call зберігає й обслуговує DTMF TwiML до з’єднання, Voice Call обслуговує realtime TwiML для виклику Twilio, а потім Google Meet запитує вступне мовлення черезvoicecall.speak. - Повторно виконайте
OmeniaClaw googlemeet setup --transport twilio; успішна перевірка налаштування потрібна, але вона не доводить, що послідовність PIN для зустрічі правильна. - Підтвердьте, що номер дозвону належить до того самого запрошення Meet і регіону, що й PIN.
- Збільште
voiceCall.dtmfDelayMsвід стандартних 12 секунд, якщо Meet відповідає повільно або транскрипт виклику все ще містить запит на введення PIN після надсилання DTMF до з’єднання. - Якщо учасник приєднується, але ви не чуєте привітання, перевірте
OmeniaClaw logs --followна наявність запитуvoicecall.speakпісля DTMF і відтворення TTS через медіапотік або резервний варіант TwilioOmeniaClaw_DOCS_MARKER:calloutOpen:U2F5. Якщо транскрипт виклику все ще містить "enter the meeting PIN", телефонна гілка ще не приєдналася до кімнати Meet, тому учасники зустрічі не почують мовлення.
Якщо Webhook-и не надходять, спочатку налагодьте Plugin Voice Call: провайдер має
досягати plugins.entries.voice-call.config.publicUrl або налаштованого тунелю.
Див. Усунення несправностей голосового виклику.
Примітки
Офіційний медіа-API Google Meet орієнтований на отримання, тому для мовлення в дзвінку Meet усе ще потрібен шлях учасника. Цей Plugin залишає цю межу видимою: Chrome обробляє участь через браузер і локальну маршрутизацію аудіо; Twilio обробляє участь через телефонний дозвін.
Режими зворотного мовлення Chrome потребують BlackHole 2ch і одного з таких варіантів:
chrome.audioInputCommandплюсchrome.audioOutputCommand: OmeniaClaw володіє мостом і передає аудіо у форматіchrome.audioFormatміж цими командами та вибраним провайдером. Режим агента використовує realtime-транскрипцію плюс звичайний TTS; bidi-режим використовує realtime голосового провайдера. Стандартний шлях Chrome - 24 кГц PCM16 ізchrome.audioBufferBytes: 4096; 8 кГц 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 може слухати окремий
локальний мікрофон і очищати відтворення асистента, коли людина починає говорити.
Це залишає людське мовлення попереду виводу асистента, навіть коли спільний вхід
local loopback BlackHole тимчасово приглушено під час відтворення асистента.
Як і chrome.audioInputCommand та chrome.audioOutputCommand, це локальна команда,
налаштована оператором. Використовуйте явний довірений шлях команди або список
аргументів і не спрямовуйте її на скрипти з недовірених розташувань.
googlemeet speak запускає активний аудіоміст зворотного мовлення для сесії Chrome.
googlemeet leave зупиняє цей міст. Для сесій Twilio, делегованих через Plugin
Voice Call, leave також завершує базовий голосовий виклик. Використовуйте
googlemeet end-active-conference, коли також хочете закрити активну конференцію
Google Meet для простору, керованого API.