From 5a10b6c74ef2d4fb78e1714155d7e19e8dce8558 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Fri, 24 Apr 2026 22:16:36 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/plugins/google-meet.md | 360 +++++++++++++++++++-------------- docs/uk/plugins/voice-call.md | 220 ++++++++++---------- 2 files changed, 326 insertions(+), 254 deletions(-) diff --git a/docs/uk/plugins/google-meet.md b/docs/uk/plugins/google-meet.md index f33de9b45..f5e192d63 100644 --- a/docs/uk/plugins/google-meet.md +++ b/docs/uk/plugins/google-meet.md @@ -1,36 +1,36 @@ --- read_when: - - Ви хочете, щоб агент OpenClaw приєднався до дзвінка Google Meet - - Ви хочете, щоб агент OpenClaw створив новий дзвінок Google Meet + - Ви хочете, щоб агент OpenClaw приєднався до виклику Google Meet + - Ви хочете, щоб агент OpenClaw створив новий виклик Google Meet - Ви налаштовуєте Chrome, вузол Chrome або Twilio як транспорт Google Meet -summary: 'Plugin Google Meet: приєднання за явними URL-адресами Meet через Chrome або Twilio з типовими параметрами голосу в реальному часі' +summary: 'Plugin Google Meet: приєднання до явних URL-адрес Meet через Chrome або Twilio з типовими параметрами голосу в реальному часі' title: Plugin Google Meet x-i18n: - generated_at: "2026-04-24T22:10:25Z" + generated_at: "2026-04-24T22:14:45Z" model: gpt-5.4 provider: openai - source_hash: d45b56e334b27509372a4f313262697eb026416077b39fa65ce7c150397ceb4d + source_hash: 2438d52c6a3c98e9d2aa345790b72475bc26c3497580d6af15b6df221705864a source_path: plugins/google-meet.md workflow: 15 --- -Підтримка учасників Google Meet для OpenClaw — Plugin навмисно побудований як явний: +Підтримка учасника Google Meet для OpenClaw — Plugin навмисно зроблено явним: -- Він приєднується лише за явною URL-адресою `https://meet.google.com/...`. -- Він може створити новий простір Meet через API Google Meet, а потім приєднатися за поверненою URL-адресою. +- Він приєднується лише за явним URL `https://meet.google.com/...`. +- Він може створити новий простір Meet через API Google Meet, а потім приєднатися за поверненим URL. - Голос `realtime` є режимом за замовчуванням. -- Голос у режимі реального часу може повертатися до повного агента OpenClaw, коли потрібні глибше міркування або інструменти. -- Агенти обирають поведінку приєднання за допомогою `mode`: використовуйте `realtime` для живого прослуховування/відповіді голосом або `transcribe`, щоб приєднатися/керувати браузером без голосового мосту `realtime`. +- Голос realtime може викликати назад повноцінного агента OpenClaw, коли потрібні глибше міркування або інструменти. +- Агенти вибирають поведінку приєднання через `mode`: використовуйте `realtime` для живого прослуховування/відповіді голосом або `transcribe`, щоб приєднатися/керувати браузером без мосту голосу realtime. - Автентифікація починається як особистий Google OAuth або вже виконаний вхід у профіль Chrome. - Автоматичного оголошення про згоду немає. -- Типовий аудіобекенд Chrome — `BlackHole 2ch`. -- Chrome може працювати локально або на спареному хості Node. -- Twilio приймає номер для дозвону та необов’язкову послідовність PIN або DTMF. -- Команда CLI — `googlemeet`; `meet` зарезервовано для ширших робочих процесів телеконференцій агента. +- Типовим аудіобекендом Chrome є `BlackHole 2ch`. +- Chrome може працювати локально або на підключеному вузлі. +- Twilio приймає номер для дозвону плюс необов’язковий PIN або послідовність DTMF. +- Команда CLI — `googlemeet`; `meet` зарезервовано для ширших сценаріїв агентських телеконференцій. ## Швидкий старт -Установіть локальні аудіозалежності й налаштуйте постачальника голосу в режимі реального часу для бекенду. OpenAI є типовим варіантом; Google Gemini Live також працює з `realtime.provider: "google"`: +Установіть локальні аудіозалежності та налаштуйте бекенд-провайдера голосу realtime. OpenAI є типовим варіантом; Google Gemini Live також працює з `realtime.provider: "google"`: ```bash brew install blackhole-2ch sox @@ -39,13 +39,13 @@ export OPENAI_API_KEY=sk-... export GEMINI_API_KEY=... ``` -`blackhole-2ch` установлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор Homebrew вимагає перезавантаження, перш ніж macOS покаже цей пристрій: +`blackhole-2ch` установлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор Homebrew вимагає перезавантаження, перш ніж macOS зробить пристрій доступним: ```bash sudo reboot ``` -Після перезавантаження перевірте обидві складові: +Після перезавантаження перевірте обидві частини: ```bash system_profiler SPAudioDataType | grep -i BlackHole @@ -73,9 +73,8 @@ command -v rec play openclaw googlemeet setup ``` -Вивід налаштування призначено для читання агентом. Він повідомляє про профіль Chrome, аудіоміст, прив’язку до Node, відкладений вступ `realtime`, а також, коли налаштовано делегування Twilio, чи готові Plugin `voice-call` і облікові дані Twilio. -Вважайте будь-яку перевірку `ok: false` блокером, перш ніж просити агента приєднатися. -Використовуйте `openclaw googlemeet setup --json` для сценаріїв або машинозчитуваного виводу. +Вивід налаштування призначено для читання агентом. Він повідомляє про профіль Chrome, аудіоміст, прив’язку до вузла, відкладений вступ realtime, а також, коли налаштовано делегування Twilio, чи готові Plugin `voice-call` і облікові дані Twilio. Будь-яку перевірку `ok: false` слід вважати блокувальним фактором, перш ніж просити агента приєднатися. +Використовуйте `openclaw googlemeet setup --json` для скриптів або машинозчитуваного виводу. Приєднайтеся до зустрічі: @@ -104,12 +103,12 @@ openclaw googlemeet join https://meet.google.com/new-abcd-xyz --transport chrome `googlemeet create` має два шляхи: - Створення через API: використовується, коли налаштовано облікові дані Google Meet OAuth. Це найдетермінованіший шлях, який не залежить від стану інтерфейсу браузера. -- Резервний варіант через браузер: використовується, коли облікові дані OAuth відсутні. OpenClaw використовує закріплений вузол Chrome, відкриває `https://meet.google.com/new`, чекає, поки Google перенаправить на справжню URL-адресу з кодом зустрічі, а потім повертає цю URL-адресу. Цей шлях вимагає, щоб у профілі OpenClaw Chrome на вузлі вже було виконано вхід у Google. - Автоматизація браузера обробляє власний початковий запит Meet на доступ до мікрофона; цей запит не вважається збоєм входу в Google. +- Запасний варіант через браузер: використовується, коли облікові дані OAuth відсутні. OpenClaw використовує закріплений вузол Chrome, відкриває `https://meet.google.com/new`, чекає, поки Google перенаправить на справжній URL із кодом зустрічі, а потім повертає цей URL. Цей шлях вимагає, щоб у профілі OpenClaw Chrome на вузлі вже був виконаний вхід у Google. + Автоматизація браузера обробляє власний початковий запит Meet на мікрофон; цей запит не вважається помилкою входу в Google. Вивід команди містить поле `source` (`api` або `browser`), щоб агенти могли пояснити, який шлях було використано. -Або скажіть агенту: "Створи Google Meet, приєднайся до нього з голосом у режимі реального часу та надішли мені посилання." Агент має викликати `google_meet` з `action: "create"`, скопіювати повернене `meetingUri`, а потім викликати `google_meet` з `action: "join"` і цією URL-адресою. +Або скажіть агенту: "Створи Google Meet, приєднайся до нього з голосом realtime і надішли мені посилання." Агент має викликати `google_meet` з `action: "create"`, скопіювати повернений `meetingUri`, потім викликати `google_meet` з `action: "join"` і цим URL. ```json { @@ -126,19 +125,19 @@ openclaw googlemeet join https://meet.google.com/new-abcd-xyz --transport chrome } ``` -Для приєднання лише для спостереження/керування браузером установіть `"mode": "transcribe"`. Це не запускає дуплексний міст моделі `realtime`, тож він не відповідатиме голосом у зустрічі. +Для приєднання лише зі спостереженням/керуванням браузером установіть `"mode": "transcribe"`. Це не запускає двобічний міст моделі realtime, тому він не відповідатиме голосом у зустрічі. -Chrome приєднується як профіль Chrome, у якому виконано вхід. У Meet виберіть `BlackHole 2ch` для шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або граф на кшталт Loopback; одного пристрою BlackHole достатньо для першої smoke-перевірки, але він може створювати відлуння. +Chrome приєднується як профіль Chrome, у якому виконано вхід. У Meet виберіть `BlackHole 2ch` для шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого двобічного аудіо використовуйте окремі віртуальні пристрої або граф у стилі Loopback; одного пристрою BlackHole достатньо для першого smoke-тесту, але може бути відлуння. ### Локальний Gateway + Parallels Chrome -Вам **не** потрібен повний Gateway OpenClaw або ключ API моделі всередині macOS VM лише для того, щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім запустіть хост Node у VM. Один раз увімкніть вбудований Plugin на VM, щоб вузол оголосив команду Chrome: +Вам **не** потрібен повний Gateway OpenClaw або ключ API моделі всередині macOS VM лише для того, щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім запустіть вузол на хості у VM. Один раз увімкніть у VM вбудований Plugin, щоб вузол рекламував команду Chrome: -Що де запускається: +Що і де запускається: -- Хост Gateway: Gateway OpenClaw, робочий простір агента, ключі моделі/API, постачальник `realtime` і конфігурація Plugin Google Meet. -- macOS VM у Parallels: CLI/node host OpenClaw, Google Chrome, SoX, BlackHole 2ch і профіль Chrome з виконаним входом у Google. -- Не потрібно у VM: служба Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування постачальника моделі. +- Хост Gateway: Gateway OpenClaw, робочий простір агента, ключі моделі/API, провайдер realtime і конфігурація Plugin Google Meet. +- Parallels macOS VM: CLI/node host OpenClaw, Google Chrome, SoX, BlackHole 2ch і профіль Chrome із виконаним входом у Google. +- Не потрібно у VM: служба Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування провайдера моделі. Установіть залежності у VM: @@ -146,7 +145,7 @@ Chrome приєднується як профіль Chrome, у якому вик brew install blackhole-2ch sox ``` -Перезавантажте VM після встановлення BlackHole, щоб macOS показала `BlackHole 2ch`: +Перезавантажте VM після встановлення BlackHole, щоб macOS зробила `BlackHole 2ch` доступним: ```bash sudo reboot @@ -165,20 +164,20 @@ command -v rec play openclaw plugins enable google-meet ``` -Запустіть хост Node у VM: +Запустіть вузол у VM: ```bash openclaw node run --host --port 18789 --display-name parallels-macos ``` -Якщо `` є LAN IP і ви не використовуєте TLS, вузол відхиляє plaintext WebSocket, якщо ви явно не дозволите це для цієї довіреної приватної мережі: +Якщо `` — це IP-адреса LAN і ви не використовуєте TLS, вузол відхилить plaintext WebSocket, якщо ви явно не дозволите це для цієї довіреної приватної мережі: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host --port 18789 --display-name parallels-macos ``` -Використовуйте ту саму змінну середовища під час встановлення вузла як LaunchAgent: +Використовуйте ту саму змінну середовища, коли встановлюєте вузол як LaunchAgent: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ @@ -186,16 +185,16 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node restart ``` -`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` — це середовище процесу, а не налаштування `openclaw.json`. `openclaw node install` зберігає його в середовищі LaunchAgent, коли воно присутнє в команді встановлення. +`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` — це середовище процесу, а не параметр `openclaw.json`. `openclaw node install` зберігає його в середовищі LaunchAgent, коли воно присутнє в команді встановлення. -Схваліть вузол з хоста Gateway: +Схваліть вузол із хоста Gateway: ```bash openclaw devices list openclaw devices approve ``` -Підтвердьте, що Gateway бачить вузол і що він оголошує і `googlemeet.chrome`, і можливість браузера/`browser.proxy`: +Підтвердьте, що Gateway бачить вузол і що він рекламує і `googlemeet.chrome`, і можливість браузера/`browser.proxy`: ```bash openclaw nodes status @@ -239,54 +238,62 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij або попросіть агента використати інструмент `google_meet` з `transport: "chrome-node"`. -Для однокомандної smoke-перевірки, яка створює або повторно використовує сеанс, промовляє відому фразу та виводить стан здоров’я сеансу: +Для smoke-тесту однією командою, який створює або повторно використовує сесію, вимовляє відому фразу та виводить стан сесії: ```bash openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij ``` -Під час приєднання автоматизація браузера OpenClaw заповнює ім’я гостя, натискає Join/Ask to join і приймає початковий вибір Meet "Use microphone", коли з’являється цей запит. Під час створення зустрічі лише через браузер вона також може пройти далі повз той самий запит без мікрофона, якщо Meet не показує кнопку use-microphone. -Якщо у профілі браузера не виконано вхід, Meet очікує допуску від хоста, Chrome потребує дозволу на мікрофон/камеру або Meet застряг на запиті, який автоматизація не змогла обробити, результат join/test-speech повідомляє `manualActionRequired: true` з `manualActionReason` і `manualActionMessage`. Агенти мають припинити повторні спроби приєднання, повідомити це точне повідомлення разом із поточними `browserUrl`/`browserTitle` і повторити спробу лише після завершення ручної дії в браузері. +Під час приєднання автоматизація браузера OpenClaw заповнює ім’я гостя, натискає Join/Ask to join і приймає початковий вибір Meet "Use microphone", коли з’являється цей запит. Під час створення зустрічі лише через браузер вона також може продовжити після того самого запиту без мікрофона, якщо Meet не показує кнопку використання мікрофона. +Якщо в профілі браузера не виконано вхід, Meet очікує допуску від хоста, Chrome потребує дозволу на мікрофон/камеру або Meet застряг на запиті, який автоматизація не змогла вирішити, результат join/test-speech повідомляє +`manualActionRequired: true` з `manualActionReason` і +`manualActionMessage`. Агенти мають припинити повторні спроби приєднання, повідомити саме це повідомлення плюс поточні `browserUrl`/`browserTitle`, і повторити спробу лише після завершення ручної дії в браузері. -Якщо `chromeNode.node` пропущено, OpenClaw виконує автовибір лише тоді, коли рівно один підключений вузол оголошує і `googlemeet.chrome`, і керування браузером. Якщо підключено кілька придатних вузлів, установіть `chromeNode.node` на id вузла, відображуване ім’я або віддалену IP-адресу. +Якщо `chromeNode.node` пропущено, OpenClaw автоматично вибирає вузол лише тоді, коли рівно один підключений вузол рекламує і `googlemeet.chrome`, і керування браузером. Якщо підключено кілька придатних вузлів, установіть `chromeNode.node` на ідентифікатор вузла, відображуване ім’я або віддалену IP-адресу. Поширені перевірки збоїв: -- `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM, схваліть спарювання та переконайтеся, що у VM було виконано `openclaw plugins enable google-meet` і `openclaw plugins enable browser`. Також підтвердьте, що хост Gateway дозволяє обидві команди вузла через `gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]`. +- `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM, схваліть сполучення та переконайтеся, що у VM виконано `openclaw plugins enable google-meet` і `openclaw plugins enable browser`. Також підтвердьте, що хост Gateway дозволяє обидві команди вузла через + `gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]`. - `BlackHole 2ch audio device not found on the node`: установіть `blackhole-2ch` у VM і перезавантажте VM. -- Chrome відкривається, але не може приєднатися: виконайте вхід у профіль браузера всередині VM або залиште `chrome.guestName` встановленим для гостьового приєднання. Автоматичне гостьове приєднання використовує автоматизацію браузера OpenClaw через проксі браузера вузла; переконайтеся, що конфігурація браузера вузла вказує на потрібний вам профіль, наприклад `browser.defaultProfile: "user"` або іменований профіль існуючого сеансу. -- Дубльовані вкладки Meet: залиште `chrome.reuseExistingTab: true` увімкненим. OpenClaw активує наявну вкладку для тієї самої URL-адреси Meet перед відкриттям нової. -- Немає аудіо: у Meet маршрутизуйте мікрофон/динамік через шлях віртуального аудіопристрою, який використовує OpenClaw; для чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або маршрутизацію на кшталт Loopback. +- Chrome відкривається, але не може приєднатися: увійдіть у профіль браузера всередині VM або залиште ввімкненим `chrome.guestName` для гостьового приєднання. Автоматичне приєднання гостя використовує автоматизацію браузера OpenClaw через проксі браузера вузла; переконайтеся, що конфігурація браузера вузла вказує на потрібний профіль, наприклад + `browser.defaultProfile: "user"` або профіль named existing-session. +- Дубльовані вкладки Meet: залиште ввімкненим `chrome.reuseExistingTab: true`. OpenClaw активує наявну вкладку для того самого URL Meet перед відкриттям нової. +- Немає аудіо: у Meet спрямовуйте мікрофон і динамік через шлях віртуального аудіопристрою, який використовує OpenClaw; для чистого двобічного аудіо використовуйте окремі віртуальні пристрої або маршрутизацію в стилі Loopback. ## Примітки щодо встановлення -Типовий режим Chrome `realtime` використовує два зовнішні інструменти: +Типовий режим Chrome realtime використовує два зовнішні інструменти: -- `sox`: утиліта командного рядка для роботи з аудіо. Plugin використовує її команди `rec` і `play` для типового аудіомосту 8 kHz G.711 mu-law. -- `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій `BlackHole 2ch`, через який Chrome/Meet може маршрутизувати звук. +- `sox`: утиліта командного рядка для роботи з аудіо. Plugin використовує її команди `rec` і `play` для типового аудіомосту G.711 mu-law 8 кГц. +- `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій `BlackHole 2ch`, через який Chrome/Meet можуть маршрутизувати звук. -OpenClaw не включає до комплекту та не розповсюджує жоден із цих пакетів. У документації користувачам пропонується встановити їх як залежності хоста через Homebrew. SoX ліцензовано як `LGPL-2.0-only AND GPL-2.0-only`; BlackHole має ліцензію GPL-3.0. Якщо ви збираєте інсталятор або appliance, який включає BlackHole разом з OpenClaw, перегляньте умови ліцензування BlackHole у першоджерелі або отримайте окрему ліцензію від Existential Audio. +OpenClaw не постачає і не розповсюджує жоден із цих пакетів у комплекті. Документація просить користувачів установити їх як залежності хоста через Homebrew. SoX ліцензується як +`LGPL-2.0-only AND GPL-2.0-only`; BlackHole — за GPL-3.0. Якщо ви збираєте інсталятор або appliance, що постачає BlackHole разом з OpenClaw, перегляньте умови ліцензування BlackHole від першоджерела або отримайте окрему ліцензію від Existential Audio. ## Транспорти ### Chrome -Транспорт Chrome відкриває URL-адресу Meet у Google Chrome і приєднується як профіль Chrome, у якому виконано вхід. На macOS Plugin перед запуском перевіряє наявність `BlackHole 2ch`. -Якщо налаштовано, він також запускає команду перевірки стану аудіомосту та команду запуску перед відкриттям Chrome. Використовуйте `chrome`, коли Chrome/аудіо працюють на хості Gateway; використовуйте `chrome-node`, коли Chrome/аудіо працюють на спареному вузлі, наприклад у macOS VM Parallels. +Транспорт Chrome відкриває URL Meet у Google Chrome і приєднується як профіль Chrome, у якому виконано вхід. На macOS Plugin перед запуском перевіряє наявність `BlackHole 2ch`. +Якщо налаштовано, він також запускає команду перевірки стану аудіомосту та команду запуску перед відкриттям Chrome. Використовуйте `chrome`, коли Chrome/аудіо працюють на хості Gateway; +використовуйте `chrome-node`, коли Chrome/аудіо працюють на підключеному вузлі, наприклад у Parallels macOS VM. ```bash 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. +Спрямуйте аудіо мікрофона та динаміка Chrome через локальний аудіоміст OpenClaw. Якщо `BlackHole 2ch` не встановлено, приєднання завершується помилкою налаштування, а не тихим приєднанням без аудіошляху. ### Twilio -Транспорт Twilio — це строгий план набору, делегований Plugin Voice Call. Він не аналізує сторінки Meet для пошуку телефонних номерів. +Транспорт Twilio — це суворий план набору, делегований Plugin Voice Call. Він +не аналізує сторінки Meet, щоб знайти номери телефонів. -Використовуйте це, коли участь через Chrome недоступна або коли вам потрібен резервний варіант дозвону телефоном. Google Meet має показувати номер для телефонного дозвону та PIN для зустрічі; OpenClaw не виявляє їх зі сторінки Meet. +Використовуйте його, коли участь через Chrome недоступна або коли вам потрібен резервний варіант через телефонний дозвін. Google Meet має надавати номер для дозвону та PIN для зустрічі; +OpenClaw не виявляє їх зі сторінки Meet. Увімкніть Plugin Voice Call на хості Gateway, а не на вузлі Chrome: @@ -313,7 +320,8 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome } ``` -Надайте облікові дані Twilio через середовище або конфігурацію. Середовище дозволяє не зберігати секрети в `openclaw.json`: +Надайте облікові дані Twilio через середовище або конфігурацію. Середовище не дає +секретам потрапити до `openclaw.json`: ```bash export TWILIO_ACCOUNT_SID=AC... @@ -321,7 +329,8 @@ export TWILIO_AUTH_TOKEN=... export TWILIO_FROM_NUMBER=+15550001234 ``` -Перезапустіть або перезавантажте Gateway після ввімкнення `voice-call`; зміни конфігурації Plugin не з’являються в уже запущеному процесі Gateway, доки його не буде перезавантажено. +Перезапустіть або перезавантажте Gateway після ввімкнення `voice-call`; зміни +конфігурації Plugin не з’являються в уже запущеному процесі Gateway, доки він не перезавантажиться. Потім перевірте: @@ -331,7 +340,8 @@ openclaw plugins list | grep -E 'google-meet|voice-call' openclaw googlemeet setup ``` -Коли делегування Twilio налаштовано, `googlemeet setup` містить успішні перевірки `twilio-voice-call-plugin` і `twilio-voice-call-credentials`. +Коли делегування Twilio налаштоване, `googlemeet setup` містить успішні +перевірки `twilio-voice-call-plugin` і `twilio-voice-call-credentials`. ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij \ @@ -340,7 +350,7 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --pin 123456 ``` -Використовуйте `--dtmf-sequence`, коли зустріч вимагає власної послідовності: +Використовуйте `--dtmf-sequence`, коли зустріч вимагає спеціальної послідовності: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij \ @@ -351,21 +361,30 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ ## OAuth і попередня перевірка -OAuth є необов’язковим для створення посилання Meet, оскільки `googlemeet create` може використовувати резервний варіант через автоматизацію браузера. Налаштуйте OAuth, якщо вам потрібні офіційне створення через API, розв’язання простору або попередні перевірки Meet Media API. +OAuth є необов’язковим для створення посилання Meet, оскільки `googlemeet create` може +використовувати запасний варіант через автоматизацію браузера. Налаштуйте OAuth, якщо вам потрібні офіційне створення через API, +визначення простору або перевірки preflight Meet Media API. -Доступ до API Google Meet спочатку використовує персональний OAuth-клієнт. Налаштуйте `oauth.clientId` і, за бажанням, `oauth.clientSecret`, а потім виконайте: +Доступ до API Google Meet спочатку використовує особистий клієнт OAuth. Налаштуйте +`oauth.clientId` і, за потреби, `oauth.clientSecret`, а потім виконайте: ```bash openclaw googlemeet auth login --json ``` -Команда виводить блок конфігурації `oauth` з токеном оновлення. Вона використовує PKCE, callback localhost на `http://localhost:8085/oauth2callback` і ручний потік копіювання/вставлення з `--manual`. +Команда виводить блок конфігурації `oauth` з refresh token. Вона використовує PKCE, +зворотний виклик localhost на `http://localhost:8085/oauth2callback` і ручний +процес копіювання/вставлення з `--manual`. -Згода OAuth включає створення простору Meet, доступ на читання простору Meet і доступ на читання медіа конференції Meet. Якщо ви проходили автентифікацію до появи підтримки створення зустрічей, повторно виконайте `openclaw googlemeet auth login --json`, щоб токен оновлення мав область дії `meetings.space.created`. +Згода OAuth включає створення просторів Meet, доступ на читання просторів Meet і доступ +на читання медіаданих конференцій Meet. Якщо ви автентифікувалися до появи +підтримки створення зустрічей, повторно виконайте `openclaw googlemeet auth login --json`, щоб refresh token мав область `meetings.space.created`. -Для резервного варіанта через браузер облікові дані OAuth не потрібні. У цьому режимі автентифікація Google походить із профілю Chrome з виконаним входом на вибраному вузлі, а не з конфігурації OpenClaw. +Для запасного варіанта через браузер облікові дані OAuth не потрібні. У цьому режимі автентифікація Google +береться з профілю Chrome із виконаним входом на вибраному вузлі, а не з +конфігурації OpenClaw. -Як резервні варіанти приймаються такі змінні середовища: +Як запасні варіанти приймаються такі змінні середовища: - `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID` - `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` або `GOOGLE_MEET_CLIENT_SECRET` @@ -376,13 +395,13 @@ openclaw googlemeet auth login --json - `OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING` або `GOOGLE_MEET_DEFAULT_MEETING` - `OPENCLAW_GOOGLE_MEET_PREVIEW_ACK` або `GOOGLE_MEET_PREVIEW_ACK` -Розв’яжіть URL-адресу Meet, код або `spaces/{id}` через `spaces.get`: +Визначте URL Meet, код або `spaces/{id}` через `spaces.get`: ```bash openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij ``` -Запустіть попередню перевірку перед роботою з медіа: +Запустіть preflight перед роботою з медіа: ```bash openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij @@ -394,9 +413,13 @@ openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij openclaw googlemeet create ``` -Команда виводить новий `meeting uri` і джерело. За наявності облікових даних OAuth вона використовує офіційний API Google Meet. Без облікових даних OAuth вона використовує профіль браузера з виконаним входом на закріпленому вузлі Chrome як резервний варіант. Агенти можуть використовувати інструмент `google_meet` з `action: "create"` для створення зустрічі, а потім викликати `action: "join"` з поверненим `meetingUri`. +Команда виводить новий `meeting uri` і джерело. За наявності облікових даних OAuth вона +використовує офіційний API Google Meet. Без облікових даних OAuth вона використовує +профіль браузера із виконаним входом на закріпленому вузлі Chrome як запасний варіант. Агенти можуть використовувати +інструмент `google_meet` з `action: "create"` для створення зустрічі, а потім викликати +`action: "join"` з поверненим `meetingUri`. -Приклад виводу JSON для резервного варіанта через браузер: +Приклад JSON-виводу для запасного варіанта через браузер: ```json { @@ -409,7 +432,7 @@ openclaw googlemeet create } ``` -Приклад виводу JSON для створення через API: +Приклад JSON-виводу для створення через API: ```json { @@ -423,13 +446,21 @@ openclaw googlemeet create } ``` -Створення Meet лише створює або виявляє URL-адресу зустрічі. Транспорт Chrome або Chrome-node однаково потребує профілю Google Chrome з виконаним входом, щоб приєднатися через браузер. Якщо в профілі виконано вихід, OpenClaw повідомляє `manualActionRequired: true` або помилку резервного варіанта через браузер і просить оператора завершити вхід у Google перед повторною спробою. +Створення Meet лише створює або виявляє URL зустрічі. Транспорт Chrome або +Chrome-node все одно потребує профілю Google Chrome із виконаним входом, щоб приєднатися +через браузер. Якщо з профілю виконано вихід, OpenClaw повідомляє +`manualActionRequired: true` або помилку запасного варіанта через браузер і просить оператора +завершити вхід у Google перед повторною спробою. -Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud project, OAuth principal і учасники зустрічі зареєстровані в Google Workspace Developer Preview Program для медіа-API Meet. +Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud +project, OAuth principal і учасники зустрічі зареєстровані в Google +Workspace Developer Preview Program для медіа-API Meet. ## Конфігурація -Звичайний шлях Chrome `realtime` потребує лише ввімкненого Plugin, BlackHole, SoX і ключа постачальника голосу `realtime` для бекенду. OpenAI є типовим варіантом; установіть `realtime.provider: "google"` для використання Google Gemini Live: +Для типового шляху Chrome realtime достатньо ввімкненого Plugin, BlackHole, SoX +і ключа бекенд-провайдера голосу realtime. OpenAI використовується за замовчуванням; установіть +`realtime.provider: "google"`, щоб використовувати Google Gemini Live: ```bash brew install blackhole-2ch sox @@ -459,16 +490,22 @@ export GEMINI_API_KEY=... - `defaultMode: "realtime"` - `chromeNode.node`: необов’язковий id/ім’я/IP вузла для `chrome-node` - `chrome.audioBackend: "blackhole-2ch"` -- `chrome.guestName: "OpenClaw Agent"`: ім’я, що використовується на екрані гостя Meet без входу -- `chrome.autoJoin: true`: найкраща спроба заповнення імені гостя та натискання Join Now через автоматизацію браузера OpenClaw на `chrome-node` -- `chrome.reuseExistingTab: true`: активувати наявну вкладку Meet замість відкриття дублікатів -- `chrome.waitForInCallMs: 20000`: чекати, поки вкладка Meet повідомить про перебування в дзвінку, перш ніж буде запущено вступ `realtime` -- `chrome.audioInputCommand`: команда SoX `rec`, що записує аудіо 8 kHz G.711 mu-law у stdout -- `chrome.audioOutputCommand`: команда SoX `play`, що читає аудіо 8 kHz G.711 mu-law зі stdin +- `chrome.guestName: "OpenClaw Agent"`: ім’я, яке використовується на екрані гостя Meet без виконаного входу +- `chrome.autoJoin: true`: спроба заповнення імені гостя та натискання Join Now через автоматизацію браузера OpenClaw на `chrome-node` +- `chrome.reuseExistingTab: true`: активувати наявну вкладку Meet замість + відкриття дублікатів +- `chrome.waitForInCallMs: 20000`: чекати, доки вкладка Meet не повідомить, що перебуває в дзвінку, + перед запуском вступу realtime +- `chrome.audioInputCommand`: команда SoX `rec`, що записує аудіо G.711 mu-law 8 кГц + до stdout +- `chrome.audioOutputCommand`: команда SoX `play`, що читає аудіо G.711 mu-law 8 кГц + зі stdin - `realtime.provider: "openai"` - `realtime.toolPolicy: "safe-read-only"` -- `realtime.instructions`: короткі усні відповіді з `openclaw_agent_consult` для глибших відповідей -- `realtime.introMessage`: коротка усна перевірка готовності, коли міст `realtime` підключається; встановіть `""`, щоб приєднатися беззвучно +- `realtime.instructions`: короткі усні відповіді, з + `openclaw_agent_consult` для глибших відповідей +- `realtime.introMessage`: коротка усна перевірка готовності, коли підключається міст realtime; + установіть `""`, щоб приєднатися беззвучно Необов’язкові перевизначення: @@ -514,7 +551,10 @@ export GEMINI_API_KEY=... } ``` -`voiceCall.enabled` типово має значення `true`; із транспортом Twilio він делегує фактичний PSTN-дзвінок і DTMF Plugin Voice Call. Якщо `voice-call` не ввімкнено, Google Meet усе ще може перевіряти та записувати план набору, але не може виконати дзвінок Twilio. +`voiceCall.enabled` за замовчуванням має значення `true`; з транспортом Twilio він делегує +фактичний PSTN-дзвінок і DTMF Plugin Voice Call. Якщо `voice-call` не ввімкнено, +Google Meet усе одно може перевірити й записати план набору, але не може +здійснити виклик Twilio. ## Інструмент @@ -529,17 +569,24 @@ export GEMINI_API_KEY=... } ``` -Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте `transport: "chrome-node"`, коли Chrome працює на спареному вузлі, наприклад у Parallels VM. В обох випадках модель `realtime` і `openclaw_agent_consult` працюють на хості Gateway, тому облікові дані моделі залишаються там. +Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте +`transport: "chrome-node"`, коли Chrome працює на підключеному вузлі, наприклад у Parallels +VM. В обох випадках модель realtime і `openclaw_agent_consult` працюють на +хості Gateway, тому облікові дані моделі залишаються там. -Використовуйте `action: "status"`, щоб перелічити активні сеанси або перевірити id сеансу. Використовуйте `action: "speak"` із `sessionId` і `message`, щоб змусити агента `realtime` негайно говорити. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сеанс, запустити відому фразу та повернути стан `inCall`, якщо хост Chrome може про нього повідомити. Використовуйте `action: "leave"`, щоб позначити сеанс як завершений. +Використовуйте `action: "status"`, щоб перелічити активні сесії або перевірити ID сесії. Використовуйте +`action: "speak"` з `sessionId` і `message`, щоб змусити агента realtime +говорити негайно. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сесію, +запустити відому фразу та повернути стан `inCall`, коли хост Chrome може +його повідомити. Використовуйте `action: "leave"`, щоб позначити сесію завершеною. `status` включає стан Chrome, коли він доступний: -- `inCall`: схоже, що Chrome перебуває всередині дзвінка Meet -- `micMuted`: найкраща спроба визначити стан мікрофона Meet -- `manualActionRequired` / `manualActionReason` / `manualActionMessage`: профіль браузера потребує ручного входу, допуску від хоста Meet, дозволів або виправлення керування браузером, перш ніж мовлення зможе працювати -- `providerConnected` / `realtimeReady`: стан голосового мосту `realtime` -- `lastInputAt` / `lastOutputAt`: останнє аудіо, отримане мостом або надіслане ним +- `inCall`: Chrome, імовірно, перебуває всередині виклику Meet +- `micMuted`: стан мікрофона Meet за найкращою спробою +- `manualActionRequired` / `manualActionReason` / `manualActionMessage`: профілю браузера потрібен ручний вхід, допуск хостом Meet, дозволи або виправлення керування браузером, перш ніж зможе працювати мовлення +- `providerConnected` / `realtimeReady`: стан моста голосу realtime +- `lastInputAt` / `lastOutputAt`: останнє аудіо, отримане мостом або надіслане до нього ```json { @@ -549,27 +596,36 @@ export GEMINI_API_KEY=... } ``` -## Консультація агента в режимі realtime +## Консультація агента realtime -Режим Chrome `realtime` оптимізовано для живого голосового циклу. Постачальник голосу `realtime` чує аудіо зустрічі та говорить через налаштований аудіоміст. Коли моделі `realtime` потрібні глибші міркування, актуальна інформація або звичайні інструменти OpenClaw, вона може викликати `openclaw_agent_consult`. +Режим Chrome realtime оптимізовано для живого голосового циклу. Провайдер голосу realtime +чує аудіо зустрічі та говорить через налаштований аудіоміст. +Коли моделі realtime потрібні глибше міркування, актуальна інформація або звичайні +інструменти OpenClaw, вона може викликати `openclaw_agent_consult`. -Інструмент консультації запускає звичайного агента OpenClaw у фоновому режимі з контекстом нещодавньої транскрипції зустрічі та повертає стислу усну відповідь до голосового сеансу `realtime`. Потім голосова модель може озвучити цю відповідь назад у зустріч. +Інструмент консультації непомітно запускає звичайного агента OpenClaw з недавнім контекстом +транскрипту зустрічі та повертає стислу усну відповідь до голосової сесії realtime. Потім голосова модель може озвучити цю відповідь назад у зустріч. +Він використовує той самий спільний інструмент консультації realtime, що й Voice Call. `realtime.toolPolicy` керує запуском консультації: -- `safe-read-only`: показувати інструмент консультації та обмежувати звичайного агента інструментами `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і `memory_get`. -- `owner`: показувати інструмент консультації та дозволяти звичайному агенту використовувати звичайну політику інструментів агента. -- `none`: не показувати інструмент консультації голосовій моделі `realtime`. +- `safe-read-only`: відкрити інструмент консультації та обмежити звичайного агента + інструментами `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і + `memory_get`. +- `owner`: відкрити інструмент консультації та дозволити звичайному агенту використовувати звичайну + політику інструментів агента. +- `none`: не відкривати інструмент консультації для голосової моделі realtime. -Ключ сеансу консультації має область дії в межах кожного сеансу Meet, тому наступні виклики консультації можуть повторно використовувати попередній контекст консультації під час тієї самої зустрічі. +Ключ сесії консультації має область дії на кожну сесію Meet, тож наступні виклики консультації +можуть повторно використовувати попередній контекст консультації під час тієї самої зустрічі. -Щоб примусово виконати усну перевірку готовності після того, як Chrome повністю приєднався до дзвінка: +Щоб примусово виконати усну перевірку готовності після того, як Chrome повністю приєднався до виклику: ```bash openclaw googlemeet speak meet_... "Say exactly: I'm here and listening." ``` -Для повної smoke-перевірки приєднання й мовлення: +Для повного smoke-тесту приєднання та мовлення: ```bash openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ @@ -577,9 +633,9 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ --message "Say exactly: I'm here and listening." ``` -## Контрольний список live-тестування +## Контрольний список live-тесту -Використовуйте цю послідовність перед передаванням зустрічі агенту без нагляду: +Використовуйте цю послідовність перед передачею зустрічі агенту без нагляду: ```bash openclaw googlemeet setup @@ -591,12 +647,13 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ Очікуваний стан Chrome-node: -- у `googlemeet setup` усе зелене. +- `googlemeet setup` повністю зелений. - `nodes status` показує, що вибраний вузол підключено. -- Вибраний вузол оголошує і `googlemeet.chrome`, і `browser.proxy`. -- Вкладка Meet приєднується до дзвінка, а `test-speech` повертає стан Chrome з `inCall: true`. +- Вибраний вузол рекламує і `googlemeet.chrome`, і `browser.proxy`. +- Вкладка Meet приєднується до виклику, а `test-speech` повертає стан Chrome з + `inCall: true`. -Для smoke-перевірки Twilio використовуйте зустріч, яка показує деталі телефонного дозвону: +Для smoke-тесту Twilio використовуйте зустріч, яка надає дані телефонного дозвону: ```bash openclaw googlemeet setup @@ -608,10 +665,11 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ Очікуваний стан Twilio: -- `googlemeet setup` містить зелені перевірки `twilio-voice-call-plugin` і `twilio-voice-call-credentials`. +- `googlemeet setup` містить зелені перевірки `twilio-voice-call-plugin` і + `twilio-voice-call-credentials`. - `voicecall` доступний у CLI після перезавантаження Gateway. -- Повернений сеанс має `transport: "twilio"` і `twilio.voiceCallId`. -- `googlemeet leave ` кладе слухавку делегованого голосового виклику. +- Повернена сесія має `transport: "twilio"` і `twilio.voiceCallId`. +- `googlemeet leave ` завершує делегований голосовий виклик. ## Усунення несправностей @@ -624,7 +682,7 @@ openclaw plugins list | grep google-meet openclaw googlemeet setup ``` -Якщо ви щойно редагували `plugins.entries.google-meet`, перезапустіть або перезавантажте Gateway. +Якщо ви щойно змінили `plugins.entries.google-meet`, перезапустіть або перезавантажте Gateway. Запущений агент бачить лише інструменти Plugin, зареєстровані поточним процесом Gateway. ### Немає підключеного вузла з підтримкою Google Meet @@ -646,7 +704,7 @@ openclaw devices approve openclaw nodes status ``` -Вузол має бути підключений і містити `googlemeet.chrome` та `browser.proxy`. +Вузол має бути підключений і показувати `googlemeet.chrome` разом із `browser.proxy`. Конфігурація Gateway має дозволяти ці команди вузла: ```json5 @@ -667,46 +725,44 @@ openclaw nodes status Поширені ручні дії: -- Виконати вхід у профіль Chrome. +- Увійти в профіль Chrome. - Допустити гостя з облікового запису хоста Meet. -- Надати Chrome дозволи на мікрофон/камеру, коли з’являється власний запит - дозволів Chrome. -- Закрити або виправити зависле діалогове вікно дозволів Meet. +- Надати Chrome дозволи на мікрофон/камеру, коли з’являється власний + системний запит дозволу Chrome. +- Закрити або виправити завислий діалог дозволів Meet. -Не повідомляйте "not signed in" лише тому, що Meet показує "Do you want people to -hear you in the meeting?" Це проміжний екран вибору аудіо Meet; OpenClaw натискає **Use microphone** -через автоматизацію браузера, коли це доступно, і продовжує чекати на справжній -стан зустрічі. Для резервного варіанта створення лише через браузер OpenClaw може -натиснути **Continue without microphone**, оскільки для створення URL не потрібен -аудіошлях `realtime`. +Не повідомляйте "вхід не виконано" лише тому, що Meet показує "Do you want people to +hear you in the meeting?" Це проміжний екран вибору аудіо Meet; OpenClaw +натискає **Use microphone** через автоматизацію браузера, коли це доступно, і продовжує +очікувати справжнього стану зустрічі. Для запасного варіанта створення лише через браузер OpenClaw +може натиснути **Continue without microphone**, оскільки створення URL не потребує +аудіошляху realtime. ### Не вдається створити зустріч `googlemeet create` спочатку використовує endpoint `spaces.create` API Google Meet, -коли налаштовано облікові дані OAuth. Без облікових даних OAuth він переходить до -резервного варіанта через браузер закріпленого вузла Chrome. Переконайтеся, що: +коли налаштовано облікові дані OAuth. Без облікових даних OAuth він переходить +до запасного варіанта через браузер закріпленого вузла Chrome. Переконайтеся: - Для створення через API: налаштовано `oauth.clientId` і `oauth.refreshToken`, або присутні відповідні змінні середовища `OPENCLAW_GOOGLE_MEET_*`. -- Для створення через API: токен оновлення було випущено після додавання - підтримки створення. У старіших токенах може бракувати області дії - `meetings.space.created`; повторно виконайте +- Для створення через API: refresh token було створено після додавання + підтримки create. Старіші токени можуть не мати області `meetings.space.created`; повторно виконайте `openclaw googlemeet auth login --json` і оновіть конфігурацію Plugin. -- Для резервного варіанта через браузер: `defaultTransport: "chrome-node"` і +- Для запасного варіанта через браузер: `defaultTransport: "chrome-node"` і `chromeNode.node` вказують на підключений вузол із `browser.proxy` та `googlemeet.chrome`. -- Для резервного варіанта через браузер: профіль OpenClaw Chrome на цьому вузлі - має виконаний вхід у Google і може відкрити `https://meet.google.com/new`. -- Для резервного варіанта через браузер: якщо Meet показує "Do you want people to hear you in the +- Для запасного варіанта через браузер: профіль OpenClaw Chrome на цьому вузлі має виконаний вхід + у Google і може відкривати `https://meet.google.com/new`. +- Для запасного варіанта через браузер: якщо Meet показує "Do you want people to hear you in the meeting?", залиште вкладку відкритою. OpenClaw має натиснути **Use microphone** або, для - резервного варіанта лише створення, **Continue without microphone** через - автоматизацію браузера та продовжити очікування згенерованої URL-адреси Meet. Якщо він - не може цього зробити, помилка має містити `meet-audio-choice-required`, а не - `google-login-required`. + запасного варіанта лише створення, **Continue without microphone** через автоматизацію + браузера і продовжити очікування згенерованого URL Meet. Якщо це не вдається, у + помилці має згадуватися `meet-audio-choice-required`, а не `google-login-required`. ### Агент приєднується, але не говорить -Перевірте шлях `realtime`: +Перевірте шлях realtime: ```bash openclaw googlemeet setup @@ -714,15 +770,15 @@ openclaw googlemeet status ``` Використовуйте `mode: "realtime"` для прослуховування/відповіді голосом. `mode: "transcribe"` навмисно -не запускає дуплексний голосовий міст `realtime`. +не запускає двобічний міст голосу realtime. Також перевірте: -- На хості Gateway доступний ключ постачальника `realtime`, наприклад +- На хості Gateway доступний ключ провайдера realtime, наприклад `OPENAI_API_KEY` або `GEMINI_API_KEY`. -- `BlackHole 2ch` видимий на хості Chrome. +- `BlackHole 2ch` видно на хості Chrome. - `rec` і `play` існують на хості Chrome. -- Мікрофон і динамік Meet маршрутизовано через віртуальний аудіошлях, який використовує +- Мікрофон і динамік Meet спрямовано через віртуальний аудіошлях, який використовує OpenClaw. ### Не проходять перевірки налаштування Twilio @@ -731,7 +787,7 @@ openclaw googlemeet status Додайте його до `plugins.allow`, увімкніть `plugins.entries.voice-call` і перезавантажте Gateway. -`twilio-voice-call-credentials` не проходить, коли в бекенді Twilio відсутні account +`twilio-voice-call-credentials` не проходить, коли у бекенда Twilio відсутні account SID, auth token або номер абонента. Установіть це на хості Gateway: ```bash @@ -746,10 +802,10 @@ export TWILIO_FROM_NUMBER=+15550001234 openclaw googlemeet setup ``` -### Дзвінок Twilio починається, але ніколи не входить у зустріч +### Виклик Twilio починається, але ніколи не входить у зустріч -Переконайтеся, що подія Meet показує деталі телефонного дозвону. Передайте точний номер -для дозвону та PIN або власну DTMF-послідовність: +Переконайтеся, що подія Meet надає деталі телефонного дозвону. Передайте точний номер +для дозвону та PIN або спеціальну послідовність DTMF: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij \ @@ -758,31 +814,31 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --dtmf-sequence ww123456# ``` -Використовуйте початковий `w` або коми в `--dtmf-sequence`, якщо постачальнику потрібна пауза +Використовуйте початковий `w` або коми в `--dtmf-sequence`, якщо провайдеру потрібна пауза перед введенням PIN. ## Примітки -Офіційний медіа-API Google Meet орієнтований на отримання, тому для мовлення в дзвінок Meet -усе ще потрібен шлях учасника. Цей Plugin зберігає цю межу видимою: -Chrome обробляє участь через браузер і локальну маршрутизацію аудіо; Twilio обробляє +Офіційний медіа-API Google Meet орієнтований на отримання, тож для мовлення в дзвінку +Meet усе одно потрібен шлях участі. Цей Plugin зберігає цю межу видимою: +Chrome відповідає за участь через браузер і локальну маршрутизацію аудіо; Twilio — за участь через телефонний дозвін. -Режиму Chrome `realtime` потрібне одне з такого: +Режим Chrome realtime потребує одного з варіантів: - `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw керує - мостом моделі `realtime` і передає аудіо 8 kHz G.711 mu-law між цими - командами та вибраним постачальником голосу `realtime`. + мостом моделі realtime і передає аудіо G.711 mu-law 8 кГц між цими + командами та вибраним провайдером голосу realtime. - `chrome.audioBridgeCommand`: зовнішня команда моста керує всім локальним аудіошляхом і має завершитися після запуску або перевірки свого демона. -Для чистого дуплексного аудіо маршрутизуйте вихід Meet і мікрофон Meet через окремі -віртуальні пристрої або граф віртуальних пристроїв на кшталт Loopback. Один спільний +Для чистого двобічного аудіо маршрутизуйте вихід Meet і мікрофон Meet через окремі +віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. Один спільний пристрій BlackHole може повертати голоси інших учасників назад у дзвінок. -`googlemeet speak` запускає активний аудіоміст `realtime` для сеансу Chrome. -`googlemeet leave` зупиняє цей міст. Для сеансів Twilio, делегованих -через Plugin Voice Call, `leave` також завершує базовий голосовий дзвінок. +`googlemeet speak` запускає активний міст аудіо realtime для сесії Chrome. +`googlemeet leave` зупиняє цей міст. Для сесій Twilio, делегованих через Plugin +Voice Call, `leave` також завершує базовий голосовий виклик. ## Пов’язане diff --git a/docs/uk/plugins/voice-call.md b/docs/uk/plugins/voice-call.md index 00b0ba500..909a54f59 100644 --- a/docs/uk/plugins/voice-call.md +++ b/docs/uk/plugins/voice-call.md @@ -2,21 +2,21 @@ read_when: - Ви хочете здійснити вихідний голосовий дзвінок з OpenClaw - Ви налаштовуєте або розробляєте плагін voice-call -summary: 'Плагін Voice Call: вихідні + вхідні дзвінки через Twilio/Telnyx/Plivo (встановлення Plugin + конфігурація + CLI)' +summary: 'Плагін Voice Call: вихідні та вхідні дзвінки через Twilio/Telnyx/Plivo (встановлення плагіна + конфігурація + CLI)' title: Плагін Voice call x-i18n: - generated_at: "2026-04-24T21:43:34Z" + generated_at: "2026-04-24T22:14:44Z" model: gpt-5.4 provider: openai - source_hash: a6d03153cf6ba1b4cd7cf2e4c0ffcdf96595363473b172b2d4b21b4100c20e3c + source_hash: 1b033d9c46fa1af60c3ae2d22f8bad909ee179ef01926efca5b62b9f8a30375f source_path: plugins/voice-call.md workflow: 15 --- # Voice Call (плагін) -Голосові дзвінки для OpenClaw через Plugin. Підтримує вихідні сповіщення та -багатокрокові розмови з вхідними політиками. +Голосові дзвінки для OpenClaw через плагін. Підтримує вихідні сповіщення та +багатоходові розмови з політиками вхідних викликів. Поточні провайдери: @@ -34,9 +34,9 @@ x-i18n: ## Де це працює (локально чи віддалено) -Plugin Voice Call працює **всередині процесу Gateway**. +Плагін Voice Call працює **усередині процесу Gateway**. -Якщо ви використовуєте віддалений Gateway, встановіть/налаштуйте Plugin на **машині, де запущено Gateway**, а потім перезапустіть Gateway, щоб він його завантажив. +Якщо ви використовуєте віддалений Gateway, встановіть/налаштуйте плагін на **машині, де працює Gateway**, а потім перезапустіть Gateway, щоб завантажити його. ## Встановлення @@ -48,7 +48,7 @@ openclaw plugins install @openclaw/voice-call Після цього перезапустіть Gateway. -### Варіант B: встановлення з локальної папки (розробка, без копіювання) +### Варіант B: встановлення з локальної теки (розробка, без копіювання) ```bash PLUGIN_SRC=./path/to/local/voice-call-plugin @@ -81,7 +81,7 @@ cd "$PLUGIN_SRC" && pnpm install telnyx: { apiKey: "...", connectionId: "...", - // Публічний ключ webhook Telnyx з Telnyx Mission Control Portal + // Публічний ключ Webhook Telnyx з Telnyx Mission Control Portal // (рядок Base64; також можна задати через TELNYX_PUBLIC_KEY). publicKey: "...", }, @@ -103,7 +103,7 @@ cd "$PLUGIN_SRC" && pnpm install trustedProxyIPs: ["100.64.0.1"], }, - // Публічне відкриття доступу (оберіть один варіант) + // Публічна доступність (оберіть один варіант) // publicUrl: "https://example.ngrok.app/voice/webhook", // tunnel: { provider: "ngrok" }, // tailscale: { mode: "funnel", path: "/voice/webhook" } @@ -114,7 +114,7 @@ cd "$PLUGIN_SRC" && pnpm install streaming: { enabled: true, - provider: "openai", // необов’язково; якщо не задано — перший зареєстрований провайдер транскрипції в реальному часі + provider: "openai", // необов’язково; якщо не задано, використовується перший зареєстрований провайдер транскрибування в реальному часі streamPath: "/voice/stream", providers: { openai: { @@ -132,7 +132,8 @@ cd "$PLUGIN_SRC" && pnpm install realtime: { enabled: false, - provider: "google", // необов’язково; якщо не задано — перший зареєстрований голосовий провайдер у реальному часі + provider: "google", // необов’язково; якщо не задано, використовується перший зареєстрований голосовий провайдер реального часу + toolPolicy: "safe-read-only", providers: { google: { model: "gemini-2.5-flash-native-audio-preview-12-2025", @@ -149,43 +150,57 @@ cd "$PLUGIN_SRC" && pnpm install Примітки: -- Twilio/Telnyx потребують **публічно доступного** URL Webhook. -- Plivo потребує **публічно доступного** URL Webhook. +- Twilio/Telnyx потребують **публічно доступної** URL-адреси Webhook. +- Plivo потребує **публічно доступної** URL-адреси Webhook. - `mock` — це локальний провайдер для розробки (без мережевих викликів). -- Якщо в старіших конфігураціях усе ще використовується `provider: "log"`, `twilio.from` або застарілі ключі OpenAI `streaming.*`, виконайте `openclaw doctor --fix`, щоб переписати їх. -- Telnyx потребує `telnyx.publicKey` (або `TELNYX_PUBLIC_KEY`), якщо тільки `skipSignatureVerification` не має значення true. -- `skipSignatureVerification` — лише для локального тестування. -- Якщо ви використовуєте безкоштовний рівень ngrok, задайте `publicUrl` точно як URL ngrok; перевірка підпису завжди примусово увімкнена. -- `tunnel.allowNgrokFreeTierLoopbackBypass: true` дозволяє webhook-и Twilio з недійсними підписами **лише** коли `tunnel.provider="ngrok"` і `serve.bind` — це local loopback (локальний агент ngrok). Використовуйте лише для локальної розробки. -- URL-адреси ngrok на безкоштовному рівні можуть змінюватися або додавати проміжну поведінку; якщо `publicUrl` зміниться, підписи Twilio не проходитимуть перевірку. Для продакшну надавайте перевагу стабільному домену або Tailscale funnel. +- Якщо в старих конфігураціях досі використовується `provider: "log"`, `twilio.from` або застарілі ключі OpenAI `streaming.*`, виконайте `openclaw doctor --fix`, щоб переписати їх. +- Telnyx вимагає `telnyx.publicKey` (або `TELNYX_PUBLIC_KEY`), якщо тільки `skipSignatureVerification` не має значення true. +- `skipSignatureVerification` призначено лише для локального тестування. +- Якщо ви використовуєте безкоштовний тариф ngrok, задайте `publicUrl` як точну URL-адресу ngrok; перевірка підпису завжди примусово виконується. +- `tunnel.allowNgrokFreeTierLoopbackBypass: true` дозволяє Webhook Twilio з недійсними підписами **лише** коли `tunnel.provider="ngrok"` і `serve.bind` є local loopback (локальний агент ngrok). Використовуйте лише для локальної розробки. +- URL-адреси безкоштовного тарифу ngrok можуть змінюватися або додавати проміжну поведінку; якщо `publicUrl` зміниться, підписи Twilio не пройдуть перевірку. Для production надавайте перевагу стабільному домену або Tailscale funnel. - `realtime.enabled` запускає повноцінні голосові розмови voice-to-voice; не вмикайте його разом із `streaming.enabled`. -- Типові налаштування безпеки для streaming: +- Типові значення безпеки для streaming: - `streaming.preStartTimeoutMs` закриває сокети, які так і не надсилають коректний кадр `start`. - `streaming.maxPendingConnections` обмежує загальну кількість неавтентифікованих сокетів до старту. -- `streaming.maxPendingConnectionsPerIp` обмежує кількість неавтентифікованих сокетів до старту для кожної вихідної IP-адреси. -- `streaming.maxConnections` обмежує загальну кількість відкритих сокетів медіапотоку (очікування + активні). -- На рівні виконання резервна сумісність поки що все ще приймає ці старі ключі voice-call, але шлях переписування — це `openclaw doctor --fix`, а шар сумісності є тимчасовим. +- `streaming.maxPendingConnectionsPerIp` обмежує кількість неавтентифікованих сокетів до старту на одну IP-адресу джерела. +- `streaming.maxConnections` обмежує загальну кількість відкритих сокетів медіапотоку (очікувані + активні). +- Під час виконання fallback наразі все ще приймає ці старі ключі voice-call, але шлях переписування — це `openclaw doctor --fix`, а шар сумісності є тимчасовим. ## Голосові розмови в реальному часі -`realtime` вибирає повнодуплексного голосового провайдера реального часу для аудіо дзвінка вживу. -Він відокремлений від `streaming`, який лише пересилає аудіо провайдерам -транскрипції в реальному часі. +`realtime` вибирає повнодуплексного голосового провайдера реального часу для аудіо живого виклику. +Це окремо від `streaming`, який лише передає аудіо провайдерам +транскрибування в реальному часі. Поточна поведінка під час виконання: - `realtime.enabled` підтримується для Twilio Media Streams. - `realtime.enabled` не можна поєднувати з `streaming.enabled`. -- `realtime.provider` — необов’язковий. Якщо не задано, Voice Call використовує першого +- `realtime.provider` є необов’язковим. Якщо не задано, Voice Call використовує першого зареєстрованого голосового провайдера реального часу. -- Вбудовані голосові провайдери реального часу включають Google Gemini Live (`google`) і - OpenAI (`openai`), зареєстровані їхніми Plugin провайдерів. -- Власна сира конфігурація провайдера розміщується в `realtime.providers.`. +- До вбудованих голосових провайдерів реального часу належать Google Gemini Live (`google`) і + OpenAI (`openai`), зареєстровані їхніми плагінами провайдерів. +- Необроблена конфігурація, що належить провайдеру, розміщується в `realtime.providers.`. +- Voice Call типово надає спільний інструмент реального часу `openclaw_agent_consult`. + Модель реального часу може викликати його, коли абонент просить про глибше + міркування, актуальну інформацію або звичайні інструменти OpenClaw. +- `realtime.toolPolicy` керує запуском consult: + - `safe-read-only`: надає інструмент consult і обмежує звичайного агента + до `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і + `memory_get`. + - `owner`: надає інструмент consult і дозволяє звичайному агенту використовувати звичайну + політику інструментів агента. + - `none`: не надає інструмент consult. Користувацькі `realtime.tools` усе ще + передаються провайдеру реального часу. +- Ключі сесії consult повторно використовують наявну голосову сесію, коли це можливо, а потім + переходять на номер телефону абонента/адресата, щоб подальші виклики consult + зберігали контекст під час дзвінка. - Якщо `realtime.provider` вказує на незареєстрованого провайдера або взагалі не зареєстровано жодного голосового провайдера реального часу, Voice Call записує попередження в журнал і пропускає - медіа реального часу замість того, щоб зламати весь Plugin. + медіа реального часу замість того, щоб зупиняти весь плагін. -Типові значення для realtime Google Gemini Live: +Типові значення Google Gemini Live realtime: - API-ключ: `realtime.providers.google.apiKey`, `GEMINI_API_KEY` або `GOOGLE_GENERATIVE_AI_API_KEY` @@ -206,7 +221,8 @@ cd "$PLUGIN_SRC" && pnpm install realtime: { enabled: true, provider: "google", - instructions: "Говоріть коротко і питайте перед використанням інструментів.", + instructions: "Говоріть коротко. Викликайте openclaw_agent_consult перед використанням глибших інструментів.", + toolPolicy: "safe-read-only", providers: { google: { apiKey: "${GEMINI_API_KEY}", @@ -222,7 +238,7 @@ cd "$PLUGIN_SRC" && pnpm install } ``` -Натомість використайте OpenAI: +Використання OpenAI натомість: ```json5 { @@ -247,32 +263,32 @@ cd "$PLUGIN_SRC" && pnpm install ``` Див. [Google provider](/uk/providers/google) і [OpenAI provider](/uk/providers/openai) -для специфічних для провайдерів параметрів голосу в реальному часі. +для параметрів голосового realtime, специфічних для провайдера. -## Транскрипція потокового аудіо +## Транскрибування потоку -`streaming` вибирає провайдера транскрипції в реальному часі для аудіо дзвінка вживу. +`streaming` вибирає провайдера транскрибування в реальному часі для аудіо живого виклику. Поточна поведінка під час виконання: -- `streaming.provider` — необов’язковий. Якщо не задано, Voice Call використовує першого - зареєстрованого провайдера транскрипції в реальному часі. -- Вбудовані провайдери транскрипції в реальному часі включають Deepgram (`deepgram`), +- `streaming.provider` є необов’язковим. Якщо не задано, Voice Call використовує першого + зареєстрованого провайдера транскрибування в реальному часі. +- До вбудованих провайдерів транскрибування в реальному часі належать Deepgram (`deepgram`), ElevenLabs (`elevenlabs`), Mistral (`mistral`), OpenAI (`openai`) і xAI - (`xai`), зареєстровані їхніми Plugin провайдерів. -- Власна сира конфігурація провайдера розміщується в `streaming.providers.`. -- Якщо `streaming.provider` вказує на незареєстрованого провайдера або якщо взагалі не зареєстровано - жодного провайдера транскрипції в реальному часі, Voice Call записує попередження в журнал і - пропускає потокову передачу медіа замість того, щоб зламати весь Plugin. + (`xai`), зареєстровані їхніми плагінами провайдерів. +- Необроблена конфігурація, що належить провайдеру, розміщується в `streaming.providers.`. +- Якщо `streaming.provider` вказує на незареєстрованого провайдера або взагалі не зареєстровано + жодного провайдера транскрибування в реальному часі, Voice Call записує попередження в журнал і + пропускає медіапотік замість того, щоб зупиняти плагін. -Типові значення для потокової транскрипції OpenAI: +Типові значення транскрибування OpenAI для streaming: - API-ключ: `streaming.providers.openai.apiKey` або `OPENAI_API_KEY` - model: `gpt-4o-transcribe` - `silenceDurationMs`: `800` - `vadThreshold`: `0.5` -Типові значення для потокової транскрипції xAI: +Типові значення транскрибування xAI для streaming: - API-ключ: `streaming.providers.xai.apiKey` або `XAI_API_KEY` - endpoint: `wss://api.x.ai/v1/stt` @@ -309,7 +325,7 @@ cd "$PLUGIN_SRC" && pnpm install } ``` -Натомість використайте xAI: +Використання xAI натомість: ```json5 { @@ -344,17 +360,17 @@ cd "$PLUGIN_SRC" && pnpm install - `streaming.silenceDurationMs` → `streaming.providers.openai.silenceDurationMs` - `streaming.vadThreshold` → `streaming.providers.openai.vadThreshold` -## Очищення застарілих дзвінків +## Засіб очищення застарілих викликів -Використовуйте `staleCallReaperSeconds`, щоб завершувати дзвінки, які ніколи не отримують фінальний webhook -(наприклад, дзвінки в режимі notify, які так і не завершуються). Типове значення — `0` +Використовуйте `staleCallReaperSeconds`, щоб завершувати виклики, які ніколи не отримують фінальний Webhook +(наприклад, виклики в режимі notify, які ніколи не завершуються). Типове значення — `0` (вимкнено). Рекомендовані діапазони: -- **Продакшн:** `120`–`300` секунд для сценаріїв у стилі notify. -- Тримайте це значення **вищим за `maxDurationSeconds`**, щоб звичайні дзвінки могли - завершитися. Хороша стартова точка — `maxDurationSeconds + 30–60` секунд. +- **Production:** `120`–`300` секунд для потоків у стилі notify. +- Зберігайте це значення **вищим за `maxDurationSeconds`**, щоб звичайні виклики могли + завершитися. Добра стартова точка — `maxDurationSeconds + 30–60` секунд. Приклад: @@ -375,27 +391,27 @@ cd "$PLUGIN_SRC" && pnpm install ## Безпека Webhook -Коли перед Gateway знаходиться проксі або тунель, Plugin відновлює -публічний URL для перевірки підпису. Ці параметри визначають, яким переспрямованим -заголовкам довіряти. +Коли проксі або тунель розташовано перед Gateway, плагін реконструює +публічну URL-адресу для перевірки підпису. Ці параметри керують тим, яким +пересланим заголовкам довіряти. -`webhookSecurity.allowedHosts` задає список дозволених хостів із переспрямованих заголовків. +`webhookSecurity.allowedHosts` формує allowlist хостів із заголовків переспрямування. -`webhookSecurity.trustForwardingHeaders` довіряє переспрямованим заголовкам без списку дозволених. +`webhookSecurity.trustForwardingHeaders` довіряє пересланим заголовкам без allowlist. -`webhookSecurity.trustedProxyIPs` довіряє переспрямованим заголовкам лише тоді, коли +`webhookSecurity.trustedProxyIPs` довіряє пересланим заголовкам лише тоді, коли віддалена IP-адреса запиту збігається зі списком. -Захист від повторного відтворення webhook увімкнено для Twilio і Plivo. Повторно відтворені коректні webhook- -запити підтверджуються, але їхні побічні ефекти пропускаються. +Захист від повторного відтворення Webhook увімкнено для Twilio і Plivo. Повторно відтворені коректні Webhook-запити +підтверджуються, але пропускаються без побічних ефектів. -Кроки розмови Twilio включають токен для кожного кроку в зворотних викликах ``, тому -застарілі/повторно відтворені зворотні виклики мовлення не можуть задовольнити новіший очікуваний крок транскрипції. +Ходи розмови Twilio включають токен на кожен хід у зворотних викликах ``, тому +застарілі/повторно відтворені зворотні виклики мовлення не можуть задовольнити новіший очікуваний хід транскрипції. -Неавтентифіковані webhook-запити відхиляються ще до читання тіла, якщо відсутні +Неавтентифіковані Webhook-запити відхиляються ще до читання тіла, якщо відсутні обов’язкові заголовки підпису провайдера. -Webhook voice-call використовує спільний профіль тіла до автентифікації (64 КБ / 5 секунд) +Webhook voice-call використовує спільний профіль тіла pre-auth (64 KB / 5 секунд) плюс обмеження кількості одночасних запитів на IP перед перевіркою підпису. Приклад зі стабільним публічним хостом: @@ -420,8 +436,8 @@ Webhook voice-call використовує спільний профіль ті ## TTS для дзвінків Voice Call використовує основну конфігурацію `messages.tts` для -потокового мовлення в дзвінках. Ви можете перевизначити її в конфігурації Plugin з -**тією самою структурою** — вона глибоко об’єднується з `messages.tts`. +потокового мовлення в дзвінках. Ви можете перевизначити її в конфігурації плагіна з +**такою самою структурою** — вона глибоко об’єднується з `messages.tts`. ```json5 { @@ -439,11 +455,11 @@ Voice Call використовує основну конфігурацію `mes Примітки: -- Застарілі ключі `tts.` у конфігурації Plugin (`openai`, `elevenlabs`, `microsoft`, `edge`) автоматично мігруються до `tts.providers.` під час завантаження. У збереженій конфігурації надавайте перевагу структурі `providers`. -- **Microsoft speech ігнорується для голосових дзвінків** (телефонне аудіо потребує PCM; поточний транспорт Microsoft не надає телефонний вихід PCM). -- Основний TTS використовується, коли увімкнено потокову передачу медіа Twilio; інакше дзвінки повертаються до нативних голосів провайдера. -- Якщо медіапотік Twilio уже активний, Voice Call не повертається до TwiML ``. Якщо телефонний TTS недоступний у цьому стані, запит на відтворення завершується помилкою замість змішування двох шляхів відтворення. -- Коли телефонний TTS повертається до вторинного провайдера, Voice Call записує попередження в журнал із ланцюгом провайдерів (`from`, `to`, `attempts`) для налагодження. +- Застарілі ключі `tts.` у конфігурації плагіна (`openai`, `elevenlabs`, `microsoft`, `edge`) автоматично мігруються в `tts.providers.` під час завантаження. У збереженій конфігурації надавайте перевагу структурі `providers`. +- **Microsoft speech ігнорується для голосових дзвінків** (аудіо телефонії потребує PCM; поточний транспорт Microsoft не надає вихід PCM для телефонії). +- Основний TTS використовується, коли увімкнено потокову передачу медіа Twilio; інакше дзвінки повертаються до вбудованих голосів провайдера. +- Якщо медіапотік Twilio вже активний, Voice Call не повертається до TwiML ``. Якщо TTS телефонії недоступний у такому стані, запит на відтворення завершується помилкою замість змішування двох шляхів відтворення. +- Коли TTS телефонії повертається до вторинного провайдера, Voice Call записує попередження в журнал із ланцюжком провайдерів (`from`, `to`, `attempts`) для налагодження. ### Більше прикладів @@ -462,7 +478,7 @@ Voice Call використовує основну конфігурацію `mes } ``` -Перевизначити на ElevenLabs лише для дзвінків (зберегти основне значення за замовчуванням в інших місцях): +Перевизначити на ElevenLabs лише для дзвінків (залишити основне типове значення деінде): ```json5 { @@ -512,7 +528,7 @@ Voice Call використовує основну конфігурацію `mes ## Вхідні дзвінки -Політика вхідних дзвінків за замовчуванням має значення `disabled`. Щоб увімкнути вхідні дзвінки, задайте: +Типове значення політики вхідних викликів — `disabled`. Щоб увімкнути вхідні дзвінки, задайте: ```json5 { @@ -522,47 +538,47 @@ Voice Call використовує основну конфігурацію `mes } ``` -`inboundPolicy: "allowlist"` — це низькорівнева перевірка caller ID. Plugin -нормалізує надане провайдером значення `From` і порівнює його з `allowFrom`. -Перевірка Webhook автентифікує доставку провайдером і цілісність payload, але +`inboundPolicy: "allowlist"` — це фільтр caller ID з низьким рівнем довіри. Плагін +нормалізує значення `From`, надане провайдером, і порівнює його з `allowFrom`. +Перевірка Webhook автентифікує доставку провайдером і цілісність даних, але не доводить право власності на номер абонента PSTN/VoIP. Сприймайте `allowFrom` як фільтрацію caller ID, а не як сильну ідентифікацію абонента. -Автовідповіді використовують систему агентів. Налаштовуйте за допомогою: +Автовідповіді використовують систему агента. Налаштовуйте за допомогою: - `responseModel` - `responseSystemPrompt` - `responseTimeoutMs` -### Контракт голосового виводу +### Контракт озвученого виводу -Для автовідповідей Voice Call додає строгий контракт голосового виводу до системного промпту: +Для автовідповідей Voice Call додає строгий контракт озвученого виводу до системного prompt: - `{"spoken":"..."}` Потім Voice Call обережно витягує текст мовлення: -- Ігнорує payload, позначені як reasoning/error content. -- Розбирає прямий JSON, JSON у fenced-блоках або вбудовані ключі `"spoken"`. -- Повертається до звичайного тексту й прибирає ймовірні вступні абзаци з плануванням/метаданими. +- Ігнорує payload, позначені як вміст міркувань/помилок. +- Розбирає прямий JSON, fenced JSON або вбудовані ключі `"spoken"`. +- Повертається до звичайного тексту і видаляє ймовірні вступні абзаци з плануванням/метаданими. -Це допомагає зосередити голосове відтворення на тексті для абонента й уникнути потрапляння тексту планування в аудіо. +Це зберігає відтворення мовлення зосередженим на тексті для абонента та запобігає витоку тексту планування в аудіо. ### Поведінка запуску розмови -Для вихідних дзвінків у режимі `conversation` обробка першого повідомлення прив’язана до стану відтворення в реальному часі: +Для вихідних дзвінків у режимі `conversation` обробка першого повідомлення прив’язана до стану живого відтворення: -- Очищення черги barge-in і автовідповідь пригнічуються лише поки активно відтворюється початкове привітання. -- Якщо початкове відтворення не вдається, дзвінок повертається в `listening`, а початкове повідомлення залишається в черзі для повторної спроби. -- Початкове відтворення для потокової передачі Twilio починається під час підключення потоку без додаткової затримки. -- Голосові розмови в реальному часі використовують власний початковий хід realtime-потоку. Voice Call не надсилає застаріле оновлення TwiML `` для цього початкового повідомлення, тому вихідні сесії `` залишаються підключеними. +- Очищення черги barge-in і автовідповідь пригнічуються лише поки початкове привітання активно відтворюється. +- Якщо початкове відтворення не вдається, дзвінок повертається до стану `listening`, а початкове повідомлення залишається в черзі для повторної спроби. +- Початкове відтворення для потокової передачі Twilio запускається при підключенні потоку без додаткової затримки. +- Голосові розмови в реальному часі використовують власний початковий хід потоку реального часу. Voice Call не надсилає застаріле оновлення TwiML `` для цього початкового повідомлення, тому вихідні сесії `` залишаються під’єднаними. -### Пільговий інтервал при відключенні потоку Twilio +### Пільговий період після відключення потоку Twilio -Коли медіапотік Twilio відключається, Voice Call чекає `2000ms`, перш ніж автоматично завершити дзвінок: +Коли медіапотік Twilio відключається, Voice Call очікує `2000ms` перед автоматичним завершенням дзвінка: -- Якщо потік знову підключається протягом цього вікна, авто-завершення скасовується. -- Якщо після завершення пільгового інтервалу потік не буде повторно зареєстрований, дзвінок завершується, щоб запобігти зависанню активних дзвінків. +- Якщо потік перепідключається протягом цього вікна, авто-завершення скасовується. +- Якщо після завершення пільгового періоду потік не реєструється знову, дзвінок завершується, щоб запобігти зависанню активних дзвінків. ## CLI @@ -575,14 +591,14 @@ openclaw voicecall dtmf --call-id --digits "ww123456#" openclaw voicecall end --call-id openclaw voicecall status --call-id openclaw voicecall tail -openclaw voicecall latency # підсумувати затримку ходів із журналів +openclaw voicecall latency # зведення затримки ходів із журналів openclaw voicecall expose --mode funnel ``` `latency` читає `calls.jsonl` зі стандартного шляху зберігання voice-call. Використовуйте `--file `, щоб вказати інший журнал, і `--last `, щоб обмежити аналіз -останніми N записами (типово 200). Вивід включає p50/p90/p99 для -затримки ходів і часу очікування прослуховування. +останніми N записами (типово 200). Вивід містить p50/p90/p99 для затримки +ходів і часу очікування прослуховування. ## Інструмент агента @@ -597,7 +613,7 @@ openclaw voicecall expose --mode funnel - `end_call` (callId) - `get_status` (callId) -Цей репозиторій постачає відповідний документ Skills у `skills/voice-call/SKILL.md`. +У цьому репозиторії постачається відповідний документ Skills у `skills/voice-call/SKILL.md`. ## Gateway RPC @@ -610,6 +626,6 @@ openclaw voicecall expose --mode funnel ## Пов’язане -- [Text-to-speech](/uk/tools/tts) -- [Talk mode](/uk/nodes/talk) -- [Voice wake](/uk/nodes/voicewake) +- [Синтез мовлення](/uk/tools/tts) +- [Режим розмови](/uk/nodes/talk) +- [Голосова активація](/uk/nodes/voicewake)