Аудіо / голосові повідомлення (2026-01-17)
Що працює
- Розуміння медіа (аудіо): якщо розуміння аудіо ввімкнено (або авто-визначено), OpenClaw:
- Знаходить перше аудіовкладення (локальний шлях або URL) і за потреби завантажує його.
- Застосовує
maxBytesперед надсиланням до кожного запису моделі. - Запускає перший придатний запис моделі за порядком (провайдер або CLI).
- Якщо він завершується помилкою або пропускається (розмір/тайм-аут), пробує наступний запис.
- У разі успіху замінює
Bodyблоком[Audio]і встановлює{{Transcript}}.
- Розбір команд: коли транскрибування успішне,
CommandBody/RawBodyвстановлюються в транскрипт, тож slash-команди продовжують працювати. - Докладне журналювання: у
--verboseми журналюємо, коли запускається транскрибування і коли воно замінює body.
Автовизначення (типово)
Якщо ви не налаштовуєте моделі і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; автоматично завантажує моделі)
- Gemini CLI (
gemini) з використаннямread_many_files - Автентифікація провайдера
- Спочатку пробуються налаштовані записи
models.providers.*, які підтримують аудіо - Вбудований порядок fallback: OpenAI → Groq → Deepgram → Google → Mistral
- Спочатку пробуються налаштовані записи
tools.media.audio.enabled: false.
Щоб налаштувати вручну, установіть tools.media.audio.models.
Примітка: виявлення бінарних файлів працює за принципом best-effort на macOS/Linux/Windows; переконайтеся, що CLI є в PATH (ми розгортаємо ~), або задайте явну CLI-модель із повним шляхом до команди.
Приклади конфігурації
Провайдер + fallback через CLI (OpenAI + Whisper CLI)
Лише провайдер із обмеженням за scope
Лише провайдер (Deepgram)
Лише провайдер (Mistral Voxtral)
Відлуння транскрипту в чат (opt-in)
Примітки та обмеження
- Автентифікація провайдера дотримується стандартного порядку автентифікації моделей (auth profiles, env vars,
models.providers.*.apiKey). - Докладно про налаштування Groq: Groq.
- Deepgram підхоплює
DEEPGRAM_API_KEY, коли використовуєтьсяprovider: "deepgram". - Докладно про налаштування Deepgram: Deepgram (audio transcription).
- Докладно про налаштування Mistral: Mistral.
- Провайдери аудіо можуть перевизначати
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}).- Вивід CLI через stdout має обмеження (5MB); робіть вивід CLI стислим.
Підтримка проксі через змінні середовища
Транскрибування аудіо через провайдера враховує стандартні env vars для вихідного проксі:HTTPS_PROXYHTTP_PROXYhttps_proxyhttp_proxy
Виявлення згадок у групах
Коли для групового чату встановленоrequireMention: true, OpenClaw тепер транскрибує аудіо до перевірки згадок. Це дає змогу обробляти голосові повідомлення навіть тоді, коли вони містять згадки.
Як це працює:
- Якщо голосове повідомлення не має текстового body і для групи потрібні згадки, OpenClaw виконує “preflight” транскрибування.
- Транскрипт перевіряється на шаблони згадок (наприклад,
@BotName, тригери emoji). - Якщо згадку знайдено, повідомлення проходить через повний конвеєр відповіді.
- Транскрипт використовується для виявлення згадки, щоб голосові повідомлення могли пройти перевірку згадки.
- Якщо транскрибування під час preflight завершується помилкою (тайм-аут, помилка API тощо), повідомлення обробляється на основі лише текстового виявлення згадки.
- Це гарантує, що змішані повідомлення (текст + аудіо) ніколи не буде помилково відкинуто.
- Установіть
channels.telegram.groups.<chatId>.disableAudioPreflight: true, щоб пропустити preflight-перевірку згадок за транскриптом для цієї групи. - Установіть
channels.telegram.groups.<chatId>.topics.<threadId>.disableAudioPreflight, щоб перевизначити для окремої теми (true— пропустити,false— примусово ввімкнути). - Типове значення —
false(preflight увімкнено, коли збігаються умови перевірки згадки).
requireMention: true. Голосове повідомлення транскрибується, згадка виявляється, і агент відповідає.
Типові пастки
- Правила scope використовують принцип first-match wins.
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-транскрибування обробляє лише перше аудіовкладення для виявлення згадки. Додаткове аудіо обробляється під час основної фази розуміння медіа.