Nodes and media
Аудіо та голосові нотатки
Що працює
- Розуміння медіа (аудіо): Якщо розуміння аудіо увімкнено (або автоматично виявлено), OpenClaw:
- Знаходить перше аудіовкладення (локальний шлях або URL) і за потреби завантажує його.
- Застосовує обмеження
maxBytesперед надсиланням до кожного запису моделі. - Запускає перший придатний запис моделі за порядком (provider або CLI).
- Якщо він завершується помилкою або пропускається (розмір/тайм-аут), пробує наступний запис.
- У разі успіху замінює
Bodyблоком[Audio]і встановлює{{Transcript}}.
- Розбір команд: Коли транскрибування успішне,
CommandBody/RawBodyвстановлюються в текст транскрипту, тож slash-команди й далі працюють. - Докладне журналювання: У режимі
--verboseми журналюємо, коли запускається транскрибування і коли воно замінює тіло.
Автоматичне виявлення (за замовчуванням)
Якщо ви не налаштовуєте моделі, а tools.media.audio.enabled не встановлено в false,
OpenClaw виконує автоматичне виявлення в такому порядку й зупиняється на першому робочому варіанті:
- Активна модель відповіді, коли її provider підтримує розуміння аудіо.
- Локальні 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 - Автентифікація provider
- Спершу пробуються налаштовані записи
models.providers.*, що підтримують аудіо - Вбудований порядок резервних варіантів: OpenAI → Groq → xAI → Deepgram → Google → SenseAudio → ElevenLabs → Mistral
- Спершу пробуються налаштовані записи
Щоб вимкнути автоматичне виявлення, встановіть tools.media.audio.enabled: false.
Щоб налаштувати вручну, встановіть tools.media.audio.models.
Примітка: Виявлення бінарних файлів виконується за принципом найкращої спроби в macOS/Linux/Windows; переконайтеся, що CLI є в PATH (ми розгортаємо ~), або задайте явну CLI-модель із повним шляхом до команди.
Приклади конфігурації
Provider + резервний 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,
},
],
},
},
},
}
Лише provider з обмеженням за scope
{
tools: {
media: {
audio: {
enabled: true,
scope: {
default: "allow",
rules: [{ action: "deny", match: { chatType: "group" } }],
},
models: [{ provider: "openai", model: "gpt-4o-mini-transcribe" }],
},
},
},
}
Лише provider (Deepgram)
{
tools: {
media: {
audio: {
enabled: true,
models: [{ provider: "deepgram", model: "nova-3" }],
},
},
},
}
Лише provider (Mistral Voxtral)
{
tools: {
media: {
audio: {
enabled: true,
models: [{ provider: "mistral", model: "voxtral-mini-latest" }],
},
},
},
}
Лише provider (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" }],
},
},
},
}
Примітки й обмеження
- Автентифікація provider відповідає стандартному порядку автентифікації моделей (auth profiles, 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.
- Аудіо-provider можуть перевизначати
baseUrl,headersіproviderOptionsчерезtools.media.audio. - Обмеження розміру за замовчуванням — 20 МБ (
tools.media.audio.maxBytes). Завелике аудіо пропускається для цієї моделі, і пробується наступний запис. - Дуже малі/порожні аудіофайли менші за 1024 байти пропускаються до транскрибування через provider/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налаштовує текст відлуння (placeholder:{transcript}).- Вивід stdout CLI обмежено (5 МБ); тримайте вивід CLI стислим.
- CLI
argsмає використовувати{{MediaPath}}для локального шляху до аудіофайлу. Запустітьopenclaw doctor --fix, щоб перенести застарілі placeholder{input}зі старіших конфігураційaudio.transcription.command.
Підтримка proxy-середовища
Транскрибування аудіо на основі provider враховує стандартні змінні середовища вихідного proxy:
HTTPS_PROXYHTTP_PROXYALL_PROXYhttps_proxyhttp_proxyall_proxy
Якщо змінні середовища proxy не задано, використовується прямий вихід. Якщо конфігурація proxy має неправильний формат, OpenClaw записує попередження в журнал і повертається до прямого fetch.
Виявлення згадок у групах
Коли для групового чату встановлено requireMention: true, OpenClaw тепер транскрибує аудіо перед перевіркою згадок. Це дає змогу обробляти голосові нотатки навіть тоді, коли вони містять згадки.
Як це працює:
- Якщо голосове повідомлення не має текстового тіла, а група вимагає згадок, OpenClaw виконує "preflight" транскрибування.
- Транскрипт перевіряється на шаблони згадок (наприклад,
@BotName, emoji-тригери). - Якщо згадку знайдено, повідомлення проходить повний конвеєр відповіді.
- Транскрипт використовується для виявлення згадок, щоб голосові нотатки могли пройти шлюз згадок.
Резервна поведінка:
- Якщо транскрибування під час preflight завершується помилкою (тайм-аут, помилка API тощо), повідомлення обробляється на основі виявлення згадок лише в тексті.
- Це гарантує, що змішані повідомлення (текст + аудіо) ніколи не буде помилково відкинуто.
Вимкнення для окремої групи/теми Telegram:
- Встановіть
channels.telegram.groups.<chatId>.disableAudioPreflight: true, щоб пропустити перевірки згадок у preflight-транскрипті для цієї групи. - Встановіть
channels.telegram.groups.<chatId>.topics.<threadId>.disableAudioPreflight, щоб перевизначити для окремої теми (trueдля пропуску,falseдля примусового ввімкнення). - Стандартне значення —
false(preflight увімкнено, коли збігаються умови з обмеженням за згадками).
Приклад: Користувач надсилає голосову нотатку зі словами "Hey @Claude, what's the weather?" у групі Telegram з requireMention: true. Голосову нотатку транскрибовано, згадку виявлено, і агент відповідає.
Підводні камені
- Правила scope використовують перший збіг.
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, за замовчуванням 60 с), щоб не блокувати чергу відповідей. - Preflight-транскрибування обробляє лише перше аудіовкладення для виявлення згадок. Додаткові аудіо обробляються під час основної фази розуміння медіа.