Nodes and media
Аудіо та голосові нотатки
Що працює
- Розуміння медіа (аудіо): Якщо розуміння аудіо ввімкнено (або визначено автоматично), OpenClaw:
- Знаходить перше аудіовкладення (локальний шлях або URL) і за потреби завантажує його.
- Застосовує
maxBytesперед надсиланням до кожного запису моделі. - Запускає перший придатний запис моделі за порядком (провайдер або CLI).
- Якщо він завершується помилкою або пропускається (розмір/тайм-аут), пробує наступний запис.
- У разі успіху замінює
Bodyблоком[Audio]і встановлює{{Transcript}}.
- Розбір команд: Коли транскрибування успішне,
CommandBody/RawBodyвстановлюються в транскрипт, тож slash-команди й далі працюють. - Докладне журналювання: У
--verboseми журналюємо, коли виконується транскрибування і коли воно замінює тіло повідомлення.
Автоматичне визначення (типово)
Якщо ви не налаштовуєте моделі і tools.media.audio.enabled не встановлено в false,
OpenClaw автоматично визначає варіанти в такому порядку й зупиняється на першому робочому:
- Активна модель відповіді, якщо її провайдер підтримує розуміння аудіо.
- Локальні CLI (якщо встановлені)
sherpa-onnx-offline(потребуєSHERPA_ONNX_MODEL_DIRз encoder/decoder/joiner/tokens)whisper-cli(зwhisper-cpp; використовуєWHISPER_CPP_MODELабо вбудовану tiny-модель)whisper(Python CLI; завантажує моделі автоматично)
- Автентифікація провайдера
- Спочатку пробуються налаштовані записи
models.providers.*, які підтримують аудіо - Порядок резервних провайдерів: OpenAI → Groq → xAI → Deepgram → Google → SenseAudio → ElevenLabs → Mistral
- Спочатку пробуються налаштовані записи
Станом на 2026-05-22 автоматичне визначення Gemini CLI більше не підтримується для розуміння медіа. Google переводить користувачів Gemini CLI на Antigravity CLI; для аудіо слід використовувати локальне або провайдерське транскрибування, а резервний CLI для зображень/відео має перейти на Antigravity CLI (agy).
Щоб вимкнути автоматичне визначення, встановіть tools.media.audio.enabled: false.
Щоб налаштувати вручну, встановіть tools.media.audio.models.
Примітка: Виявлення бінарних файлів виконується за принципом best-effort у macOS/Linux/Windows; переконайтеся, що CLI є в PATH (ми розгортаємо ~), або задайте явну CLI-модель із повним шляхом до команди.
Приклади конфігурації
Провайдер + резервний CLI (OpenAI + Whisper CLI)
{ tools: { media: { audio: { enabled: true, maxBytes: 20971520, models: [ { provider: "openai", model: "gpt-4o-mini-transcribe" }, { type: "cli", command: "whisper", args: ["--model", "base", "{{MediaPath}}"], timeoutSeconds: 45, }, ], }, }, },}Лише провайдер із керуванням за областю дії
{ tools: { media: { audio: { enabled: true, scope: { default: "allow", rules: [{ action: "deny", match: { chatType: "group" } }], }, models: [{ provider: "openai", model: "gpt-4o-mini-transcribe" }], }, }, },}Лише провайдер (Deepgram)
{ tools: { media: { audio: { enabled: true, models: [{ provider: "deepgram", model: "nova-3" }], }, }, },}Лише провайдер (Mistral Voxtral)
{ tools: { media: { audio: { enabled: true, models: [{ provider: "mistral", model: "voxtral-mini-latest" }], }, }, },}Лише провайдер (SenseAudio)
{ tools: { media: { audio: { enabled: true, models: [{ provider: "senseaudio", model: "senseaudio-asr-pro-1.5-260319" }], }, }, },}Відлунювати транскрипт у чат (за явним увімкненням)
{ tools: { media: { audio: { enabled: true, echoTranscript: true, // default is false echoFormat: '📝 "{transcript}"', // optional, supports {transcript} models: [{ provider: "openai", model: "gpt-4o-mini-transcribe" }], }, }, },}Примітки й обмеження
- Автентифікація провайдера дотримується стандартного порядку автентифікації моделей (профілі автентифікації, env vars,
models.providers.*.apiKey). - Деталі налаштування Groq: Groq.
- Deepgram підхоплює
DEEPGRAM_API_KEY, коли використовуєтьсяprovider: "deepgram". - Деталі налаштування Deepgram: Deepgram (транскрибування аудіо).
- Деталі налаштування Mistral: Mistral.
- SenseAudio підхоплює
SENSEAUDIO_API_KEY, коли використовуєтьсяprovider: "senseaudio". - Деталі налаштування SenseAudio: SenseAudio.
- Аудіопровайдери можуть перевизначати
baseUrl,headersіproviderOptionsчерезtools.media.audio. - Типове обмеження розміру становить 20MB (
tools.media.audio.maxBytes). Завелике аудіо пропускається для цієї моделі, і пробується наступний запис. - Крихітні/порожні аудіофайли менші за 1024 байти пропускаються перед провайдерським/CLI-транскрибуванням.
- Типовий
maxCharsдля аудіо не задано (повний транскрипт). Встановітьtools.media.audio.maxCharsабоmaxCharsдля окремого запису, щоб обрізати вивід. - Типове автоматичне значення OpenAI —
gpt-4o-mini-transcribe; встановітьmodel: "gpt-4o-transcribe"для вищої точності. - Використовуйте
tools.media.audio.attachments, щоб обробляти кілька голосових нотаток (mode: "all"+maxAttachments). - Транскрипт доступний шаблонам як
{{Transcript}}. tools.media.audio.echoTranscriptтипово вимкнено; увімкніть його, щоб надсилати підтвердження транскрипту назад до початкового чату перед обробкою агентом.tools.media.audio.echoFormatналаштовує текст відлуння (заповнювач:{transcript}).- stdout CLI обмежено (5MB); тримайте вивід CLI стислим.
- CLI
argsмає використовувати{{MediaPath}}для локального шляху до аудіофайлу. Запустітьopenclaw doctor --fix, щоб мігрувати застарілі заповнювачі{input}зі старіших конфігураційaudio.transcription.command.
Підтримка proxy-середовища
Провайдерське транскрибування аудіо враховує стандартні env vars вихідного proxy:
HTTPS_PROXYHTTP_PROXYALL_PROXYhttps_proxyhttp_proxyall_proxy
Якщо env vars proxy не задано, використовується прямий вихід. Якщо конфігурація proxy має неправильний формат, OpenClaw журналює попередження й повертається до прямого fetch.
Виявлення згадок у групах
Коли для групового чату встановлено requireMention: true, OpenClaw тепер транскрибує аудіо перед перевіркою згадок. Це дає змогу обробляти голосові нотатки, навіть коли вони містять згадки.
Як це працює:
- Якщо голосове повідомлення не має текстового тіла, а група вимагає згадок, OpenClaw виконує «preflight»-транскрибування.
- Транскрипт перевіряється на патерни згадок (наприклад,
@BotName, emoji-тригери). - Якщо згадку знайдено, повідомлення проходить через повний pipeline відповіді.
- Транскрипт використовується для виявлення згадок, щоб голосові нотатки могли пройти mention gate.
Резервна поведінка:
- Якщо транскрибування під час preflight завершується помилкою (тайм-аут, помилка API тощо), повідомлення обробляється на основі виявлення згадок лише в тексті.
- Це гарантує, що змішані повідомлення (текст + аудіо) ніколи не буде помилково відкинуто.
Відмова для окремої групи/теми Telegram:
- Встановіть
channels.telegram.groups.<chatId>.disableAudioPreflight: true, щоб пропустити preflight-перевірки згадок у транскрипті для цієї групи. - Встановіть
channels.telegram.groups.<chatId>.topics.<threadId>.disableAudioPreflight, щоб перевизначити для окремої теми (trueдля пропуску,falseдля примусового ввімкнення). - Типове значення —
false(preflight увімкнено, коли умови mention gate збігаються).
Приклад: Користувач надсилає голосову нотатку зі словами «Hey @Claude, what's the weather?» у групі Telegram з requireMention: true. Голосова нотатка транскрибується, згадка виявляється, і агент відповідає.
Нюанси
- Правила області дії використовують принцип першого збігу.
chatTypeнормалізується доdirect,groupабоroom. - Переконайтеся, що ваш CLI завершується з кодом 0 і друкує звичайний текст; JSON потрібно обробити через
jq -r .text. - Для
parakeet-mlx, якщо ви передаєте--output-dir, OpenClaw читає<output-dir>/<media-basename>.txt, коли--output-formatдорівнюєtxt(або його пропущено); формати виводу неtxtповертаються до розбору stdout. - Тримайте тайм-аути розумними (
timeoutSeconds, типово 60s), щоб не блокувати чергу відповідей. - Preflight-транскрибування обробляє лише перше аудіовкладення для виявлення згадок. Додаткове аудіо обробляється під час основної фази розуміння медіа.