chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-05-01 06:26:51 +00:00
parent 2aceec25cc
commit 06314a2fc6
2 changed files with 164 additions and 170 deletions

View File

@ -2,21 +2,21 @@
read_when:
- Ви хочете здійснити вихідний голосовий дзвінок з OpenClaw
- Ви налаштовуєте або розробляєте Plugin для голосових викликів
- Вам потрібен голосовий зв’язок у реальному часі або потокова транскрипція для телефонії
- Вам потрібен голос у реальному часі або потокова транскрипція в телефонії
sidebarTitle: Voice call
summary: Здійснюйте вихідні та приймайте вхідні голосові виклики через Twilio, Telnyx або Plivo, з необов’язковим голосовим зв’язком у реальному часі та потоковою транскрипцією
title: Plugin для голосових викликів
summary: Здійснюйте вихідні та приймайте вхідні голосові виклики через Twilio, Telnyx або Plivo, із додатковим голосовим зв’язком у реальному часі та потоковою транскрипцією
title: Plugin голосових викликів
x-i18n:
generated_at: "2026-05-01T06:21:24Z"
generated_at: "2026-05-01T06:25:14Z"
model: gpt-5.5
provider: openai
source_hash: ea655c1fab7a92056a8469018e9719e015c6492d96419dc3a6757efd90c14508
source_hash: 60ee0997676d6bb800184197b7bbb2ccde40ec30d9487c58e7b5b95b0762a6d0
source_path: plugins/voice-call.md
workflow: 16
---
Голосові виклики для OpenClaw через Plugin. Підтримує вихідні сповіщення,
багатоходові розмови, повнодуплексний голос у реальному часі, потокову
Voice calls для OpenClaw через plugin. Підтримує вихідні сповіщення,
багатоходові розмови, повнодуплексний realtime-голос, потокову
транскрипцію та вхідні виклики з політиками allowlist.
**Поточні провайдери:** `twilio` (Programmable Voice + Media Streams),
@ -24,15 +24,15 @@ x-i18n:
speech), `mock` (розробка/без мережі).
<Note>
Plugin Voice Call працює **всередині процесу Gateway**. Якщо ви використовуєте
віддалений Gateway, установіть і налаштуйте Plugin на машині, де працює
Voice Call plugin працює **всередині процесу Gateway**. Якщо ви використовуєте
віддалений Gateway, установіть і налаштуйте plugin на машині, де запущено
Gateway, а потім перезапустіть Gateway, щоб завантажити його.
</Note>
## Швидкий старт
<Steps>
<Step title="Установіть Plugin">
<Step title="Установіть plugin">
<Tabs>
<Tab title="З npm">
```bash
@ -48,17 +48,16 @@ Gateway, а потім перезапустіть Gateway, щоб заванта
</Tab>
</Tabs>
Якщо npm повідомляє, що пакет, яким володіє OpenClaw, застарілий, ця версія
пакета походить зі старішої зовнішньої лінійки пакетів; використовуйте поточну
пакетовану збірку OpenClaw або шлях до локальної папки, доки не буде опубліковано
новіший npm-пакет.
Якщо npm повідомляє, що пакет, який належить OpenClaw, застарілий, ця версія пакета
походить зі старішої зовнішньої лінійки пакетів; використовуйте поточну пакетовану збірку OpenClaw
або шлях до локальної папки, доки не буде опубліковано новіший npm-пакет.
Після цього перезапустіть Gateway, щоб Plugin завантажився.
Після цього перезапустіть Gateway, щоб plugin завантажився.
</Step>
<Step title="Налаштуйте провайдера та webhook">
Задайте конфігурацію в `plugins.entries.voice-call.config` (повну форму див.
у розділі [Конфігурація](#configuration) нижче). Мінімально потрібні:
<Step title="Налаштуйте провайдера й webhook">
Задайте конфігурацію в `plugins.entries.voice-call.config` (повну структуру див.
нижче в розділі [Конфігурація](#configuration)). Мінімально потрібні:
`provider`, облікові дані провайдера, `fromNumber` і публічно
доступна URL-адреса webhook.
</Step>
@ -67,20 +66,20 @@ Gateway, а потім перезапустіть Gateway, щоб заванта
openclaw voicecall setup
```
Типовий вивід зручно читати в журналах чату та терміналах. Він перевіряє,
чи ввімкнено Plugin, облікові дані провайдера, доступність webhook
і те, що активний лише один аудіорежим (`streaming` або `realtime`).
Використовуйте `--json` для скриптів.
Типовий вивід зручно читати в журналах чату й терміналах. Він перевіряє,
чи ввімкнено plugin, облікові дані провайдера, доступність webhook і те,
що активний лише один аудіорежим (`streaming` або `realtime`). Для
скриптів використовуйте `--json`.
</Step>
<Step title="Smoke-тест">
<Step title="Smoke test">
```bash
openclaw voicecall smoke
openclaw voicecall smoke --to "+15555550123"
```
Обидві команди за замовчуванням виконуються як пробні запуски. Додайте `--yes`,
щоб фактично здійснити короткий вихідний виклик-сповіщення:
Обидві команди за замовчуванням виконуються як dry run. Додайте `--yes`, щоб справді здійснити короткий
вихідний виклик-сповіщення:
```bash
openclaw voicecall smoke --to "+15555550123" --yes
@ -92,20 +91,19 @@ Gateway, а потім перезапустіть Gateway, щоб заванта
<Warning>
Для Twilio, Telnyx і Plivo налаштування має визначатися як **публічна URL-адреса webhook**.
Якщо `publicUrl`, URL тунелю, URL Tailscale або резервний варіант serve
визначається як loopback чи простір приватної мережі, налаштування завершується
помилкою замість запуску провайдера, який не зможе отримувати webhook від оператора.
визначається як loopback чи простір приватної мережі, налаштування завершується помилкою замість
запуску провайдера, який не зможе отримувати webhook від оператора.
</Warning>
## Конфігурація
Якщо `enabled: true`, але для вибраного провайдера бракує облікових даних,
під час запуску Gateway записує попередження про неповне налаштування з
відсутніми ключами та пропускає запуск runtime. Команди, RPC-виклики й
інструменти агента все одно повертають точну відсутню конфігурацію провайдера
під час використання.
запуск Gateway записує попередження про неповне налаштування з відсутніми ключами й
пропускає запуск runtime. Команди, RPC-виклики та інструменти агента все одно
повертають точну відсутню конфігурацію провайдера під час використання.
<Note>
Облікові дані voice-call приймають SecretRefs. `plugins.entries.voice-call.config.twilio.authToken` і `plugins.entries.voice-call.config.tts.providers.*.apiKey` визначаються через стандартну поверхню SecretRef; див. [поверхню облікових даних SecretRef](/uk/reference/secretref-credential-surface).
Облікові дані voice-call приймають SecretRefs. `plugins.entries.voice-call.config.twilio.authToken`, `plugins.entries.voice-call.config.realtime.providers.*.apiKey`, `plugins.entries.voice-call.config.streaming.providers.*.apiKey` і `plugins.entries.voice-call.config.tts.providers.*.apiKey` розв'язуються через стандартну поверхню SecretRef; див. [поверхню облікових даних SecretRef](/uk/reference/secretref-credential-surface).
</Note>
```json5
@ -166,30 +164,31 @@ Gateway, а потім перезапустіть Gateway, щоб заванта
```
<AccordionGroup>
<Accordion title="Нотатки щодо доступності та безпеки провайдера">
- Twilio, Telnyx і Plivo потребують **публічно доступної** URL-адреси webhook.
<Accordion title="Нотатки щодо відкриття провайдера назовні та безпеки">
- Twilio, Telnyx і Plivo всі потребують **публічно доступної** URL-адреси webhook.
- `mock` — локальний провайдер для розробки (без мережевих викликів).
- Telnyx потребує `telnyx.publicKey` (або `TELNYX_PUBLIC_KEY`), якщо `skipSignatureVerification` не дорівнює true.
- `skipSignatureVerification` призначено лише для локального тестування.
- На безплатному рівні ngrok задайте `publicUrl` як точну URL-адресу ngrok; перевірка підпису завжди примусово ввімкнена.
- На безплатному тарифі ngrok задайте `publicUrl` як точну URL-адресу ngrok; перевірка підпису завжди примусова.
- `tunnel.allowNgrokFreeTierLoopbackBypass: true` дозволяє webhook Twilio з недійсними підписами **лише** коли `tunnel.provider="ngrok"` і `serve.bind` є loopback (локальний агент ngrok). Лише для локальної розробки.
- URL безплатного рівня Ngrok можуть змінюватися або додавати проміжну поведінку; якщо `publicUrl` розходиться, підписи Twilio не проходять перевірку. Production: надавайте перевагу стабільному домену або funnel Tailscale.
- URL-адреси безплатного тарифу Ngrok можуть змінюватися або додавати проміжну поведінку; якщо `publicUrl` зміщується, підписи Twilio не проходять перевірку. Продакшн: надавайте перевагу стабільному домену або funnel Tailscale.
</Accordion>
<Accordion title="Ліміти потокових підключень">
- `streaming.preStartTimeoutMs` закриває сокети, які так і не надсилають дійсний кадр `start`.
- `streaming.preStartTimeoutMs` закриває сокети, які ніколи не надсилають дійсний кадр `start`.
- `streaming.maxPendingConnections` обмежує загальну кількість неавтентифікованих pre-start сокетів.
- `streaming.maxPendingConnectionsPerIp` обмежує неавтентифіковані pre-start сокети на IP-адресу джерела.
- `streaming.maxConnections` обмежує загальну кількість відкритих сокетів медіапотоку (pending + active).
- `streaming.maxConnections` обмежує загальну кількість відкритих сокетів media stream (pending + active).
</Accordion>
<Accordion title="Міграції застарілої конфігурації">
Старіші конфігурації, що використовують `provider: "log"`, `twilio.from` або застарілі
ключі OpenAI `streaming.*`, переписуються командою `openclaw doctor --fix`.
Резервний runtime поки що приймає старі ключі voice-call, але шлях переписування —
`openclaw doctor --fix`, а сумісний shim є тимчасовим.
Runtime fallback наразі все ще приймає старі ключі voice-call, але
шлях переписування — `openclaw doctor --fix`, а compat shim є
тимчасовим.
Автоматично мігровані ключі streaming:
Автоматично мігровані streaming-ключі:
- `streaming.sttProvider``streaming.provider`
- `streaming.openaiApiKey``streaming.providers.openai.apiKey`
@ -200,11 +199,11 @@ Gateway, а потім перезапустіть Gateway, щоб заванта
</Accordion>
</AccordionGroup>
## Голосові розмови в реальному часі
## Realtime-голосові розмови
`realtime` вибирає повнодуплексного голосового провайдера в реальному часі для
аудіо живого виклику. Це окремо від `streaming`, який лише пересилає аудіо
провайдерам транскрипції в реальному часі.
`realtime` вибирає повнодуплексного realtime-голосового провайдера для live-аудіо
виклику. Це окремо від `streaming`, який лише пересилає аудіо до
провайдерів realtime-транскрипції.
<Warning>
`realtime.enabled` не можна поєднувати з `streaming.enabled`. Виберіть один
@ -214,12 +213,12 @@ Gateway, а потім перезапустіть Gateway, щоб заванта
Поточна поведінка runtime:
- `realtime.enabled` підтримується для Twilio Media Streams.
- `realtime.provider` необовязковий. Якщо його не задано, Voice Call використовує першого зареєстрованого голосового провайдера реального часу.
- Вбудовані голосові провайдери реального часу: Google Gemini Live (`google`) і OpenAI (`openai`), зареєстровані їхніми Plugin-провайдерами.
- Raw-конфігурація, якою володіє провайдер, міститься в `realtime.providers.<providerId>`.
- Voice Call за замовчуванням надає спільний realtime-інструмент `openclaw_agent_consult`. Realtime-модель може викликати його, коли абонент просить глибшого міркування, актуальної інформації або звичайних інструментів OpenClaw.
- Якщо `realtime.provider` вказує на незареєстрованого провайдера або взагалі не зареєстровано жодного голосового провайдера реального часу, Voice Call записує попередження та пропускає realtime-медіа замість того, щоб зупиняти весь Plugin з помилкою.
- Ключі consult-сеансів повторно використовують наявний голосовий сеанс, коли він доступний, а потім переходять до номера телефону абонента/одержувача, щоб подальші consult-виклики зберігали контекст під час виклику.
- `realtime.provider` необов'язковий. Якщо його не задано, Voice Call використовує першого зареєстрованого realtime-голосового провайдера.
- Вбудовані realtime-голосові провайдери: Google Gemini Live (`google`) і OpenAI (`openai`), зареєстровані їхніми провайдерськими plugins.
- Необроблена конфігурація, якою володіє провайдер, зберігається в `realtime.providers.<providerId>`.
- Voice Call за замовчуванням відкриває спільний realtime-інструмент `openclaw_agent_consult`. Realtime-модель може викликати його, коли абонент просить глибшого міркування, поточної інформації або звичайних інструментів OpenClaw.
- Якщо `realtime.provider` вказує на незареєстрованого провайдера або жоден realtime-голосовий провайдер узагалі не зареєстрований, Voice Call записує попередження й пропускає realtime media замість того, щоб зупиняти весь plugin.
- Ключі consult-сеансу повторно використовують наявний голосовий сеанс, коли він доступний, а потім відступають до номера телефону абонента/отримувача, щоб наступні consult-виклики зберігали контекст під час виклику.
### Політика інструментів
@ -227,15 +226,15 @@ Gateway, а потім перезапустіть Gateway, щоб заванта
| Політика | Поведінка |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `safe-read-only` | Надає consult-інструмент і обмежує звичайного агента до `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і `memory_get`. |
| `owner` | Надає consult-інструмент і дозволяє звичайному агенту використовувати звичайну політику інструментів агента. |
| `none` | Не надає consult-інструмент. Користувацькі `realtime.tools` все одно передаються realtime-провайдеру. |
| `safe-read-only` | Відкриває consult-інструмент і обмежує звичайного агента до `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і `memory_get`. |
| `owner` | Відкриває consult-інструмент і дозволяє звичайному агенту використовувати нормальну політику інструментів агента. |
| `none` | Не відкриває consult-інструмент. Користувацькі `realtime.tools` усе одно передаються realtime-провайдеру. |
### Приклади realtime-провайдерів
<Tabs>
<Tab title="Google Gemini Live">
Типові значення: API-ключ із `realtime.providers.google.apiKey`,
Значення за замовчуванням: API-ключ із `realtime.providers.google.apiKey`,
`GEMINI_API_KEY` або `GOOGLE_GENERATIVE_AI_API_KEY`; модель
`gemini-2.5-flash-native-audio-preview-12-2025`; голос `Kore`.
@ -292,27 +291,26 @@ Gateway, а потім перезапустіть Gateway, щоб заванта
</Tab>
</Tabs>
Див. [провайдер Google](/uk/providers/google) і
[провайдер OpenAI](/uk/providers/openai), щоб дізнатися про параметри
голосу в реальному часі для конкретних провайдерів.
Див. [провайдера Google](/uk/providers/google) і
[провайдера OpenAI](/uk/providers/openai), щоб переглянути специфічні для провайдера параметри realtime-голосу.
## Потокова транскрипція
`streaming` вибирає провайдера транскрипції в реальному часі для аудіо живого виклику.
`streaming` вибирає провайдера realtime-транскрипції для live-аудіо виклику.
Поточна поведінка runtime:
- `streaming.provider` необовязковий. Якщо його не задано, Voice Call використовує першого зареєстрованого провайдера транскрипції в реальному часі.
- Вбудовані провайдери транскрипції в реальному часі: Deepgram (`deepgram`), ElevenLabs (`elevenlabs`), Mistral (`mistral`), OpenAI (`openai`) і xAI (`xai`), зареєстровані їхніми Plugin-провайдерами.
- Raw-конфігурація, якою володіє провайдер, міститься в `streaming.providers.<providerId>`.
- Після того як Twilio надсилає прийняте повідомлення `start` потоку, Voice Call негайно реєструє потік, ставить вхідні медіа в чергу через провайдера транскрипції, поки провайдер підключається, і запускає початкове привітання лише після готовності realtime-транскрипції.
- Якщо `streaming.provider` вказує на незареєстрованого провайдера або жодного не зареєстровано, Voice Call записує попередження та пропускає потокове медіа замість того, щоб зупиняти весь Plugin з помилкою.
- `streaming.provider` необов'язковий. Якщо його не задано, Voice Call використовує першого зареєстрованого провайдера realtime-транскрипції.
- Вбудовані провайдери realtime-транскрипції: Deepgram (`deepgram`), ElevenLabs (`elevenlabs`), Mistral (`mistral`), OpenAI (`openai`) і xAI (`xai`), зареєстровані їхніми провайдерськими plugins.
- Необроблена конфігурація, якою володіє провайдер, зберігається в `streaming.providers.<providerId>`.
- Після того як Twilio надсилає прийняте stream-повідомлення `start`, Voice Call негайно реєструє stream, ставить вхідні media в чергу через провайдера транскрипції, поки провайдер підключається, і запускає початкове привітання лише після готовності realtime-транскрипції.
- Якщо `streaming.provider` вказує на незареєстрованого провайдера або жоден не зареєстрований, Voice Call записує попередження й пропускає media streaming замість того, щоб зупиняти весь plugin.
### Приклади streaming-провайдерів
<Tabs>
<Tab title="OpenAI">
Типові значення: API-ключ `streaming.providers.openai.apiKey` або
Значення за замовчуванням: API-ключ `streaming.providers.openai.apiKey` або
`OPENAI_API_KEY`; модель `gpt-4o-transcribe`; `silenceDurationMs: 800`;
`vadThreshold: 0.5`.
@ -379,8 +377,8 @@ Gateway, а потім перезапустіть Gateway, щоб заванта
## TTS для викликів
Voice Call використовує основну конфігурацію `messages.tts` для потокового
мовлення під час викликів. Її можна перевизначити в конфігурації plugin з
**такою самою структурою** — вона глибоко об'єднується з `messages.tts`.
мовлення під час викликів. Її можна перевизначити в конфігурації Plugin з
**тією самою структурою** — вона глибоко об'єднується з `messages.tts`.
```json5
{
@ -397,17 +395,17 @@ Voice Call використовує основну конфігурацію `mes
```
<Warning>
**Microsoft speech ігнорується для голосових викликів.** Телефонному аудіо потрібен PCM;
поточний транспорт Microsoft не надає вихід телефонного PCM.
**Мовлення Microsoft ігнорується для голосових викликів.** Телефонний аудіопотік потребує PCM;
поточний транспорт Microsoft не надає телефонний PCM-вивід.
</Warning>
Примітки щодо поведінки:
- Застарілі ключі `tts.<provider>` у конфігурації plugin (`openai`, `elevenlabs`, `microsoft`, `edge`) виправляються командою `openclaw doctor --fix`; закомічена конфігурація має використовувати `tts.providers.<provider>`.
- Основний TTS використовується, коли ввімкнено потокове передавання медіа Twilio; інакше виклики повертаються до власних голосів provider.
- Якщо медіапотік Twilio вже активний, Voice Call не повертається до TwiML `<Say>`. Якщо в такому стані телефонний TTS недоступний, запит відтворення завершується помилкою замість змішування двох шляхів відтворення.
- Коли телефонний TTS повертається до вторинного provider, Voice Call записує попередження з ланцюжком provider (`from`, `to`, `attempts`) для налагодження.
- Коли переривання Twilio або демонтаж потоку очищує чергу очікування TTS, запити відтворення в черзі завершуються, а не залишають абонентів чекати завершення відтворення.
- Застарілі ключі `tts.<provider>` у конфігурації Plugin (`openai`, `elevenlabs`, `microsoft`, `edge`) виправляються командою `openclaw doctor --fix`; зафіксована конфігурація має використовувати `tts.providers.<provider>`.
- Core TTS використовується, коли ввімкнено потокове передавання медіа Twilio; інакше виклики повертаються до нативних голосів провайдера.
- Якщо медіапотік Twilio уже активний, Voice Call не повертається до TwiML `<Say>`. Якщо телефонний TTS у цьому стані недоступний, запит відтворення завершується помилкою замість змішування двох шляхів відтворення.
- Коли телефонний TTS повертається до резервного провайдера, Voice Call записує попередження з ланцюжком провайдерів (`from`, `to`, `attempts`) для налагодження.
- Коли barge-in Twilio або розбирання потоку очищає чергу очікування TTS, поставлені в чергу запити відтворення завершуються, а не залишають абонентів чекати на завершення відтворення.
### Приклади TTS
@ -476,7 +474,7 @@ Voice Call використовує основну конфігурацію `mes
## Вхідні виклики
Типова вхідна політика — `disabled`. Щоб увімкнути вхідні виклики, задайте:
Вхідна політика типово має значення `disabled`. Щоб увімкнути вхідні виклики, задайте:
```json5
{
@ -487,21 +485,15 @@ Voice Call використовує основну конфігурацію `mes
```
<Warning>
`inboundPolicy: "allowlist"` — це перевірка caller ID з низьким рівнем гарантії.
Plugin нормалізує надане provider значення `From` і порівнює його з
`allowFrom`. Перевірка Webhook автентифікує доставку від provider і
цілісність payload, але вона **не** доводить право власності на номер абонента
PSTN/VoIP. Розглядайте `allowFrom` як фільтрацію caller ID, а не як надійну
ідентичність абонента.
`inboundPolicy: "allowlist"` — це перевірка ідентифікатора абонента з низьким рівнем гарантій. Plugin нормалізує надане провайдером значення `From` і порівнює його з `allowFrom`. Перевірка Webhook автентифікує доставку провайдером і цілісність payload, але вона **не** доводить право власності на номер абонента PSTN/VoIP. Розглядайте `allowFrom` як фільтрацію за ідентифікатором абонента, а не як надійну ідентичність абонента.
</Warning>
Автовідповіді використовують систему агентів. Налаштовуйте їх за допомогою
`responseModel`, `responseSystemPrompt` і `responseTimeoutMs`.
Автовідповіді використовують систему агента. Налаштуйте їх за допомогою `responseModel`,
`responseSystemPrompt` і `responseTimeoutMs`.
### Контракт усного виводу
### Контракт голосового виводу
Для автовідповідей Voice Call додає суворий контракт усного виводу до
системного prompt:
Для автовідповідей Voice Call додає до системного prompt строгий контракт голосового виводу:
```text
{"spoken":"..."}
@ -509,42 +501,42 @@ PSTN/VoIP. Розглядайте `allowFrom` як фільтрацію caller I
Voice Call захисно витягує текст мовлення:
- Ігнорує payload, позначені як reasoning/error content.
- Ігнорує payload, позначені як вміст reasoning/error.
- Розбирає прямий JSON, JSON у fenced-блоці або inline-ключі `"spoken"`.
- Повертається до звичайного тексту й видаляє ймовірні вступні абзаци планування/метаданих.
- Повертається до звичайного тексту й видаляє ймовірні вступні абзаци планування/meta.
Це тримає озвучене відтворення сфокусованим на тексті для абонента й запобігає
Це утримує голосове відтворення зосередженим на тексті для абонента й запобігає
потраплянню тексту планування в аудіо.
### Поведінка запуску розмови
Для вихідних викликів `conversation` обробка першого повідомлення прив'язана до живого
Для вихідних викликів `conversation` обробка першого повідомлення прив'язана до поточного
стану відтворення:
- Очищення черги під час переривання та автовідповідь пригнічуються лише тоді, коли початкове привітання активно озвучується.
- Очищення черги barge-in і автовідповідь пригнічуються лише тоді, коли початкове привітання активно відтворюється.
- Якщо початкове відтворення завершується помилкою, виклик повертається до `listening`, а початкове повідомлення залишається в черзі для повторної спроби.
- Початкове відтворення для потокового Twilio починається під час підключення потоку без додаткової затримки.
- Переривання скасовує активне відтворення й очищує записи Twilio TTS, що стоять у черзі, але ще не відтворюються. Очищені записи розв'язуються як пропущені, тож логіка подальшої відповіді може продовжуватися без очікування аудіо, яке ніколи не буде відтворено.
- Розмови realtime voice використовують власний початковий хід realtime-потоку. Voice Call **не** надсилає застаріле оновлення TwiML `<Say>` для цього початкового повідомлення, тому вихідні сесії `<Connect><Stream>` залишаються підключеними.
- Початкове відтворення для потокового передавання Twilio починається під час підключення потоку без додаткової затримки.
- Barge-in перериває активне відтворення й очищає поставлені в чергу, але ще не відтворювані записи Twilio TTS. Очищені записи завершуються як пропущені, тому логіка подальшої відповіді може продовжуватися без очікування аудіо, яке ніколи не відтвориться.
- Голосові розмови в реальному часі використовують власний початковий хід потоку реального часу. Voice Call **не** надсилає застаріле оновлення TwiML `<Say>` для цього початкового повідомлення, тому вихідні сесії `<Connect><Stream>` залишаються приєднаними.
### Пільговий період відключення потоку Twilio
Коли медіапотік Twilio відключається, Voice Call чекає **2000 мс** перед
Коли медіапотік Twilio відключається, Voice Call очікує **2000 мс** перед
автоматичним завершенням виклику:
- Якщо потік повторно підключається протягом цього вікна, автоматичне завершення скасовується.
- Якщо після пільгового періоду жоден потік не реєструється повторно, виклик завершується, щоб запобігти завислим активним викликам.
## Очищувач застарілих викликів
## Очищення застарілих викликів
Використовуйте `staleCallReaperSeconds`, щоб завершувати виклики, які ніколи не отримують термінальний
Webhook (наприклад, виклики в режимі notify, які ніколи не завершуються). Типове значення
Webhook (наприклад, виклики в режимі сповіщення, які ніколи не завершуються). Типове значення
`0` (вимкнено).
Рекомендовані діапазони:
- **Production:** `120``300` секунд для потоків у стилі notify.
- Тримайте це значення **вищим за `maxDurationSeconds`**, щоб звичайні виклики могли завершитися. Добра початкова точка — `maxDurationSeconds + 3060` секунд.
- **Production:** `120``300` секунд для сценаріїв у стилі сповіщень.
- Тримайте це значення **вищим за `maxDurationSeconds`**, щоб звичайні виклики могли завершитися. Хороша початкова точка — `maxDurationSeconds + 3060` секунд.
```json5
{
@ -563,26 +555,26 @@ Webhook (наприклад, виклики в режимі notify, які ні
## Безпека Webhook
Коли proxy або тунель стоїть перед Gateway, plugin
відтворює публічний URL для перевірки підпису. Ці параметри
керують тим, яким forwarded-заголовкам можна довіряти:
Коли перед Gateway розміщено проксі або тунель, Plugin відтворює
публічну URL-адресу для перевірки підпису. Ці параметри керують тим,
яким forwarded headers довіряти:
<ParamField path="webhookSecurity.allowedHosts" type="string[]">
Allowlist хостів із forwarding-заголовків.
Список дозволених хостів із forwarding headers.
</ParamField>
<ParamField path="webhookSecurity.trustForwardingHeaders" type="boolean">
Довіряти forwarded-заголовкам без allowlist.
Довіряти forwarded headers без allowlist.
</ParamField>
<ParamField path="webhookSecurity.trustedProxyIPs" type="string[]">
Довіряти forwarded-заголовкам лише тоді, коли віддалена IP-адреса запиту збігається зі списком.
Довіряти forwarded headers лише тоді, коли віддалена IP-адреса запиту відповідає списку.
</ParamField>
Додаткові засоби захисту:
- **Захист від повторного відтворення** Webhook увімкнено для Twilio і Plivo. Повторно відтворені дійсні Webhook-запити підтверджуються, але пропускаються для побічних ефектів.
- Ходи розмов Twilio містять токен на кожен хід у callbacks `<Gather>`, тому застарілі/повторно відтворені callbacks мовлення не можуть задовольнити новіший очікуваний хід transcript.
- Неавтентифіковані Webhook-запити відхиляються до читання тіла, якщо відсутні обов'язкові заголовки підпису provider.
- Webhook voice-call використовує спільний профіль тіла pre-auth (64 КБ / 5 секунд) плюс обмеження одночасних запитів на IP до перевірки підпису.
- **Захист від повторного відтворення** Webhook увімкнено для Twilio і Plivo. Повторно відтворені дійсні запити Webhook підтверджуються, але пропускаються щодо побічних ефектів.
- Ходи розмови Twilio містять токен на кожен хід у callbacks `<Gather>`, тому застарілі/повторно відтворені callbacks мовлення не можуть задовольнити новіший очікуваний хід transcript.
- Неавтентифіковані запити Webhook відхиляються до читання тіла, коли відсутні обов'язкові заголовки підпису провайдера.
- Webhook voice-call використовує спільний pre-auth профіль тіла (64 КБ / 5 секунд) плюс обмеження in-flight на IP перед перевіркою підпису.
Приклад зі стабільним публічним хостом:
@ -618,15 +610,15 @@ openclaw voicecall latency # summarize turn latency from lo
openclaw voicecall expose --mode funnel
```
Коли Gateway уже запущено, операційні команди `voicecall` делегуються
voice-call runtime, що належить Gateway, щоб CLI не прив'язував другий
Webhook-сервер. Якщо Gateway недоступний, команди повертаються до
автономного CLI runtime.
Коли Gateway уже запущено, операційні команди `voicecall` делегують
runtime voice-call, яким володіє Gateway, щоб CLI не прив'язував другий
сервер Webhook. Якщо Gateway недоступний, команди повертаються до
окремого runtime CLI.
`latency` читає `calls.jsonl` зі стандартного шляху зберігання voice-call.
`latency` читає `calls.jsonl` зі стандартного шляху сховища voice-call.
Використовуйте `--file <path>`, щоб указати інший журнал, і `--last <n>`, щоб обмежити
аналіз останніми N записами (типово 200). Вивід містить p50/p90/p99
для затримки ходу та часу очікування прослуховування.
для затримки ходу й часу очікування прослуховування.
## Інструмент агента
@ -641,7 +633,7 @@ Webhook-сервер. Якщо Gateway недоступний, команди п
| `end_call` | `callId` |
| `get_status` | `callId` |
Цей repo постачає відповідний документ skill за шляхом `skills/voice-call/SKILL.md`.
Цей репозиторій постачає відповідний документ skill за адресою `skills/voice-call/SKILL.md`.
## Gateway RPC
@ -654,13 +646,13 @@ Webhook-сервер. Якщо Gateway недоступний, команди п
| `voicecall.end` | `callId` |
| `voicecall.status` | `callId` |
`dtmfSequence` дійсний лише з `mode: "conversation"`. Виклики в режимі notify
`dtmfSequence` дійсний лише з `mode: "conversation"`. Виклики в режимі сповіщення
мають використовувати `voicecall.dtmf` після створення виклику, якщо їм потрібні
цифри після підключення.
## Усунення несправностей
### Налаштування не вдається через exposure Webhook
### Налаштування не може відкрити Webhook назовні
Запустіть налаштування з того самого середовища, у якому працює Gateway:
@ -670,12 +662,12 @@ openclaw voicecall setup --json
```
Для `twilio`, `telnyx` і `plivo` `webhook-exposure` має бути зеленим. Налаштований
`publicUrl` усе одно завершується помилкою, коли він вказує на локальний або приватний мережевий
простір, тому що оператор не може викликати ці адреси у відповідь. Не використовуйте
`publicUrl` усе одно зазнає помилки, якщо вказує на локальний або приватний мережевий
простір, оскільки оператор не може викликати ці адреси назад. Не використовуйте
`localhost`, `127.0.0.1`, `0.0.0.0`, `10.x`, `172.16.x`-`172.31.x`,
`192.168.x`, `169.254.x`, `fc00::/7` або `fd00::/8` як `publicUrl`.
Використовуйте один публічний шлях exposure:
Використовуйте один публічний шлях доступу:
```json5
{
@ -695,16 +687,16 @@ openclaw voicecall setup --json
}
```
Після зміни конфігурації перезапустіть або перезавантажте Gateway, потім виконайте:
Після зміни конфігурації перезапустіть або перезавантажте Gateway, а потім виконайте:
```bash
openclaw voicecall setup
openclaw voicecall smoke
```
`voicecall smoke` — це dry run, якщо не передати `--yes`.
`voicecall smoke` є пробним запуском, якщо не передано `--yes`.
### Не вдається перевірити облікові дані провайдера
### Облікові дані провайдера не працюють
Перевірте вибраного провайдера та обов’язкові поля облікових даних:
@ -714,11 +706,11 @@ openclaw voicecall smoke
`fromNumber`.
- Plivo: `plivo.authId`, `plivo.authToken` і `fromNumber`.
Облікові дані мають існувати на хості Gateway. Редагування локального профілю оболонки
не впливає на вже запущений Gateway, доки він не перезапуститься або не перезавантажить
своє середовище.
Облікові дані мають існувати на хості Gateway. Редагування локального профілю shell
не впливає на вже запущений Gateway, доки він не перезапуститься або не перезавантажить своє
середовище.
### Виклики запускаються, але Webhook провайдера не надходять
### Виклики запускаються, але Webhook провайдера не надходять
Переконайтеся, що консоль провайдера вказує на точну публічну URL-адресу Webhook:
@ -726,7 +718,7 @@ openclaw voicecall smoke
https://voice.example.com/voice/webhook
```
Потім перевірте стан виконання:
Потім перевірте стан середовища виконання:
```bash
openclaw voicecall status --call-id <id>
@ -737,9 +729,9 @@ openclaw voicecall tail
- `publicUrl` вказує на інший шлях, ніж `serve.path`.
- URL тунелю змінився після запуску Gateway.
- Проксі пересилає запит, але видаляє або переписує заголовки host/proto.
- Брандмауер або DNS спрямовує публічне ім’я хоста кудись іще, а не до Gateway.
- Gateway було перезапущено без увімкненого Plugin Voice Call.
- Проксі пересилає запит, але вилучає або переписує заголовки host/proto.
- Firewall або DNS спрямовує публічне ім’я хоста кудись не до Gateway.
- Gateway було перезапущено без увімкненого плагіна Voice Call.
Коли перед Gateway стоїть зворотний проксі або тунель, задайте
`webhookSecurity.allowedHosts` як публічне ім’я хоста або використайте
@ -747,21 +739,21 @@ openclaw voicecall tail
`webhookSecurity.trustForwardingHeaders` лише тоді, коли межа проксі перебуває під
вашим контролем.
### Не вдається перевірити підпис
### Перевірка підпису не проходить
Підписи провайдера перевіряються відносно публічної URL-адреси, яку OpenClaw відтворює
з вхідного запиту. Якщо перевірка підписів не вдається:
з вхідного запиту. Якщо підписи не проходять перевірку:
- Переконайтеся, що URL Webhook провайдера точно відповідає `publicUrl`, включно зі
- Переконайтеся, що URL Webhook провайдера точно збігається з `publicUrl`, включно зі
схемою, хостом і шляхом.
- Для URL-адрес безплатного рівня ngrok оновлюйте `publicUrl`, коли змінюється ім’я хоста тунелю.
- Для URL ngrok безкоштовного рівня оновлюйте `publicUrl`, коли ім’я хоста тунелю змінюється.
- Переконайтеся, що проксі зберігає початкові заголовки host і proto, або налаштуйте
`webhookSecurity.allowedHosts`.
- Не вмикайте `skipSignatureVerification` поза локальним тестуванням.
### Збої підключення Google Meet через Twilio
### Приєднання Google Meet через Twilio не працює
Google Meet використовує цей Plugin для підключень через телефонний набір Twilio. Спочатку перевірте Voice Call:
Google Meet використовує цей плагін для приєднання через дозвон Twilio. Спочатку перевірте Voice Call:
```bash
openclaw voicecall setup
@ -776,23 +768,23 @@ openclaw googlemeet setup --transport twilio
Якщо Voice Call працює, але учасник Meet так і не приєднується, перевірте номер
дозвону Meet, PIN і `--dtmf-sequence`. Телефонний виклик може бути справним, тоді як
зустріч відхиляє або ігнорує неправильну DTMF-послідовність.
зустріч відхиляє або ігнорує неправильну послідовність DTMF.
Google Meet передає DTMF-послідовність Meet і вступний текст до `voicecall.start`.
Google Meet передає послідовність DTMF Meet і вступний текст до `voicecall.start`.
Для викликів Twilio Voice Call спочатку віддає DTMF TwiML, перенаправляє назад до
Webhook, а потім відкриває медіапотік реального часу, щоб збережений вступ було
згенеровано після приєднання телефонного учасника до зустрічі.
Webhook, а потім відкриває медіапотік у реальному часі, щоб збережений вступ було згенеровано
після приєднання телефонного учасника до зустрічі.
### У виклику реального часу немає мовлення
### У виклику в реальному часі немає мовлення
Переконайтеся, що увімкнено лише один аудіорежим. `realtime.enabled` і
`streaming.enabled` не можуть одночасно мати значення true.
Для викликів Twilio у реальному часі також перевірте:
- Plugin провайдера реального часу завантажено та зареєстровано.
- Плагін провайдера реального часу завантажений і зареєстрований.
- `realtime.provider` не задано або він називає зареєстрованого провайдера.
- Ключ API провайдера доступний процесу Gateway.
- API-ключ провайдера доступний процесу Gateway.
- `openclaw voicecall tail` показує, що медіапотік прийнято, а провайдер реального часу
готовий до початкового привітання.

View File

@ -1,25 +1,25 @@
---
read_when:
- Перевірка покриття облікових даних SecretRef
- Аудит того, чи придатні облікові дані для `secrets configure` або `secrets apply`
- Перевірка, чому облікові дані виходять за межі підтримуваної поверхні
- Перевірка того, чи облікові дані придатні для `secrets configure` або `secrets apply`
- Перевірка, чому облікові дані перебувають поза підтримуваною поверхнею
summary: Канонічна підтримувана й непідтримувана поверхня облікових даних SecretRef
title: Поверхня облікових даних SecretRef
title: Інтерфейс облікових даних SecretRef
x-i18n:
generated_at: "2026-04-27T06:28:00Z"
model: gpt-5.4
generated_at: "2026-05-01T06:25:06Z"
model: gpt-5.5
provider: openai
source_hash: b04902427e9851cc36c1dfd07ed44b46b55450c251075e9955af6696f08bc334
source_hash: 41111ac82142c906005e0f585c86f2ff0b454afdaec07343c295e6b83571718e
source_path: reference/secretref-credential-surface.md
workflow: 15
workflow: 16
---
Ця сторінка визначає канонічну поверхню облікових даних SecretRef.
Намір сфери застосування:
Намір області застосування:
- У межах сфери: лише облікові дані, надані користувачем, які OpenClaw не створює і не ротує.
- Поза сферою: облікові дані, створені під час виконання або такі, що ротуються, матеріали оновлення OAuth і артефакти, подібні до сесій.
- У межах області: строго надані користувачем облікові дані, які OpenClaw не створює й не ротує.
- Поза областю: облікові дані, створені під час виконання або ротаційні, матеріали оновлення OAuth і артефакти, подібні до сесійних.
## Підтримувані облікові дані
@ -57,6 +57,8 @@ x-i18n:
- `plugins.entries.firecrawl.config.webSearch.apiKey`
- `plugins.entries.minimax.config.webSearch.apiKey`
- `plugins.entries.tavily.config.webSearch.apiKey`
- `plugins.entries.voice-call.config.realtime.providers.*.apiKey`
- `plugins.entries.voice-call.config.streaming.providers.*.apiKey`
- `plugins.entries.voice-call.config.tts.providers.*.apiKey`
- `plugins.entries.voice-call.config.twilio.authToken`
- `tools.web.search.apiKey`
@ -110,8 +112,8 @@ x-i18n:
- `channels.zalo.webhookSecret`
- `channels.zalo.accounts.*.botToken`
- `channels.zalo.accounts.*.webhookSecret`
- `channels.googlechat.serviceAccount` через сусідній `serviceAccountRef` (виняток сумісності)
- `channels.googlechat.accounts.*.serviceAccount` через сусідній `serviceAccountRef` (виняток сумісності)
- `channels.googlechat.serviceAccount` через сусіднє поле `serviceAccountRef` (виняток сумісності)
- `channels.googlechat.accounts.*.serviceAccount` через сусіднє поле `serviceAccountRef` (виняток сумісності)
### Цілі `auth-profiles.json` (`secrets configure` + `secrets apply` + `secrets audit`)
@ -123,21 +125,21 @@ x-i18n:
Примітки:
- Цілі плану auth-profile потребують `agentId`.
- Записи плану націлюються на `profiles.*.key` / `profiles.*.token` і записують сусідні ref (`keyRef` / `tokenRef`).
- Ref auth-profile включено до runtime resolution і покриття audit.
- У `openclaw.json` SecretRef мають використовувати структуровані об’єкти на кшталт `{"source":"env","provider":"default","id":"DISCORD_BOT_TOKEN"}`. Застарілі рядки-маркери `secretref-env:<ENV_VAR>` відхиляються на шляхах облікових даних SecretRef; запустіть `openclaw doctor --fix`, щоб мігрувати коректні маркери.
- Захист політики OAuth: `auth.profiles.<id>.mode = "oauth"` не можна поєднувати з входами SecretRef для цього профілю. Під час запуску/перезавантаження та розв’язання auth-profile відбувається негайна помилка, якщо цю політику порушено.
- Для провайдерів моделей, керованих SecretRef, згенеровані записи `agents/*/agent/models.json` зберігають маркери без секретів (а не розв’язані значення секретів) для поверхонь `apiKey`/header.
- Збереження маркерів є джерельно-авторитетним: OpenClaw записує маркери з активного знімка конфігурації джерела (до розв’язання), а не з розв’язаних runtime-значень секретів.
- Записи плану націлюються на `profiles.*.key` / `profiles.*.token` і записують сусідні посилання (`keyRef` / `tokenRef`).
- Посилання auth-profile включено до покриття розв’язання під час виконання та аудиту.
- В `openclaw.json` SecretRefs мають використовувати структуровані об’єкти, як-от `{"source":"env","provider":"default","id":"DISCORD_BOT_TOKEN"}`. Застарілі рядки-маркери `secretref-env:<ENV_VAR>` відхиляються на шляхах облікових даних SecretRef; виконайте `openclaw doctor --fix`, щоб мігрувати чинні маркери.
- Захист політики OAuth: `auth.profiles.<id>.mode = "oauth"` не можна поєднувати з вхідними даними SecretRef для цього профілю. Запуск/перезавантаження та розв’язання auth-profile швидко завершуються помилкою, коли цю політику порушено.
- Для постачальників моделей, керованих SecretRef, згенеровані записи `agents/*/agent/models.json` зберігають несекретні маркери (а не розв’язані значення секретів) для поверхонь `apiKey`/заголовків.
- Збереження маркерів є авторитетним щодо джерела: OpenClaw записує маркери з активного знімка конфігурації джерела (до розв’язання), а не з розв’язаних секретних значень під час виконання.
- Для вебпошуку:
- У режимі явного провайдера (задано `tools.web.search.provider`) активним є лише ключ вибраного провайдера.
- В автоматичному режимі (`tools.web.search.provider` не задано) активним є лише перший ключ провайдера, який розв’язується за пріоритетом.
- В автоматичному режимі ref провайдерів, які не вибрано, вважаються неактивними, доки їх не буде вибрано.
- Застарілі шляхи провайдера `tools.web.search.*` усе ще розв’язуються протягом вікна сумісності, але канонічна поверхня SecretRef — це `plugins.entries.<plugin>.config.webSearch.*`.
- У режимі явного постачальника (задано `tools.web.search.provider`) активним є лише ключ вибраного постачальника.
- В автоматичному режимі (`tools.web.search.provider` не задано) активним є лише перший ключ постачальника, який розв’язується за пріоритетом.
- В автоматичному режимі посилання невибраних постачальників вважаються неактивними, доки їх не буде вибрано.
- Застарілі шляхи постачальників `tools.web.search.*` усе ще розв’язуються протягом вікна сумісності, але канонічною поверхнею SecretRef є `plugins.entries.<plugin>.config.webSearch.*`.
## Непідтримувані облікові дані
Облікові дані поза сферою охоплюють:
Облікові дані поза областю включають:
[//]: # "secretref-unsupported-list-start"
@ -155,9 +157,9 @@ x-i18n:
Обґрунтування:
- Ці облікові дані є створюваними, ротованими, сесійними або належать до довготривалих класів OAuth, які не відповідають read-only зовнішньому розв’язанню SecretRef.
- Ці облікові дані належать до класів, які створюються, ротуються, містять сесійні дані або є довготривалими OAuth-даними, і не підходять для розв’язання лише для читання через зовнішній SecretRef.
## Пов’язане
- [Керування секретами](/uk/gateway/secrets)
- [Семантика облікових даних auth](/uk/auth-credential-semantics)
- [Семантика облікових даних автентифікації](/uk/auth-credential-semantics)