機能
音声理解が有効な場合(または自動検出された場合)、OpenClaw は次を行います。- 最初の音声添付ファイル(ローカルパスまたは URL)を見つけ、必要に応じてダウンロードします。
- 各モデルエントリへ送信する前に
maxBytesを適用します。 - 対象となる最初のモデルエントリを順番に実行します(プロバイダーまたは CLI)。エントリが失敗またはスキップ(サイズ/タイムアウト)された場合は、次のエントリを試します。
- 成功すると、
Bodyを[Audio]ブロックに置き換え、{{Transcript}}を設定します。
CommandBody/RawBody も文字起こし結果に設定されます。--verbose では、文字起こしが実行されたタイミングと本文を置き換えたタイミングがログに表示されます。
自動検出(デフォルト)
モデルを設定しておらず、tools.media.audio.enabled が false でない場合、OpenClaw は次の順序で自動検出し、最初に動作したオプションで停止します。
- アクティブな返信モデル。そのプロバイダーが音声理解をサポートしている場合。
- 設定済みプロバイダー認証 — 音声文字起こしをサポートするプロバイダーで認証が利用可能な任意の
models.providers.*エントリ。これはローカル CLI より前に確認されるため、設定済みの API キーは常にPATH上のローカルバイナリより優先されます。 複数設定されている場合のプロバイダー優先順位: Groq、OpenAI、xAI、Deepgram、Google、SenseAudio、ElevenLabs、Mistral。 - ローカル CLI(プロバイダー認証が解決されなかった場合のみ)。次の順序で確認されます。
sherpa-onnx-offline(tokens.txt、encoder.onnx、decoder.onnx、joiner.onnxを含むSHERPA_ONNX_MODEL_DIRが必要)whisper-cli(whisper-cpp由来。WHISPER_CPP_MODELまたはバンドルされた tiny モデルを使用)whisper(Python CLI。モデルを自動的にダウンロード)
agy)フォールバックに置き換えられました。音声では、上記のローカルバイナリ以外の CLI フォールバックは使用しません。
自動検出を無効にするには、tools.media.audio.enabled: false を設定します。カスタマイズするには、tools.media.audio.models を設定します。
バイナリ検出は macOS/Linux/Windows 全体でベストエフォートです。CLI が
PATH 上にあることを確認するか(~ は展開されます)、完全なコマンドパスを持つ明示的な CLI モデルを設定してください。設定例
プロバイダー + CLI フォールバック(OpenAI + Whisper CLI)
スコープ制御付きプロバイダーのみ
プロバイダーのみ(Deepgram)
プロバイダーのみ(Mistral Voxtral)
プロバイダーのみ(SenseAudio)
文字起こし結果をチャットへエコー(オプトイン)
注記と制限
- プロバイダー認証は標準のモデル認証順序(認証プロファイル、環境変数、
models.providers.*.apiKey)に従います。 - Groq のセットアップ詳細: Groq。
provider: "deepgram"が使用される場合、Deepgram はDEEPGRAM_API_KEYを取得します。セットアップ詳細: Deepgram。- Mistral のセットアップ詳細: Mistral。
provider: "senseaudio"が使用される場合、SenseAudio はSENSEAUDIO_API_KEYを取得します。セットアップ詳細: SenseAudio。- 音声プロバイダーは
tools.media.audio経由でbaseUrl、headers、providerOptionsを上書きできます。 - デフォルトのサイズ上限は 20MB(
tools.media.audio.maxBytes)です。上限を超える音声はそのモデルではスキップされ、次のエントリが試されます。 - 1024 バイト未満の音声ファイルは、プロバイダー/CLI 文字起こしの前にスキップされます。
- 音声のデフォルト
maxCharsは未設定(全文字起こし)です。出力を切り詰めるには、tools.media.audio.maxCharsまたはエントリごとのmaxCharsを設定します。 - OpenAI 自動検出のデフォルトは
gpt-4o-transcribeです。より安価/高速なオプションにはmodel: "gpt-4o-mini-transcribe"を設定します。 - 複数のボイスメモを処理するには
tools.media.audio.attachmentsを使用します(mode: "all"とmaxAttachments、デフォルトは 1)。 - 文字起こし結果はテンプレートで
{{Transcript}}として利用できます。 tools.media.audio.echoTranscriptはデフォルトでオフです。エージェント処理の前に、元のチャットへ文字起こし確認を送信するには有効にします。tools.media.audio.echoFormatはエコーテキストをカスタマイズします(プレースホルダー:{transcript}、デフォルト📝 "{transcript}")。- CLI 標準出力は 5MB に制限されます。CLI 出力は簡潔にしてください。
- CLI
argsでは、ローカル音声ファイルパスに{{MediaPath}}を使用してください。古いaudio.transcription.command設定から非推奨の{input}プレースホルダーを移行するには、openclaw doctor --fixを実行します(廃止されたキー:audio.transcription、tools.media.audio.modelsに置換)。
プロキシ環境のサポート
プロバイダーベースの音声文字起こしは、undici のEnvHttpProxyAgent セマンティクスに合わせて、標準の送信プロキシ環境変数に従います。
HTTPS_PROXY/https_proxyHTTP_PROXY/http_proxyALL_PROXY/all_proxy
NO_PROXY/no_proxy エントリ(ホスト名、*.suffix、または host:port)はプロキシをバイパスします。プロキシ環境変数が設定されていない場合は、直接送信が使用されます。プロキシ設定が失敗した場合(不正な URL)、OpenClaw は警告をログに記録し、直接フェッチにフォールバックします。
グループでのメンション検出
グループチャットにrequireMention: true が設定されている場合、OpenClaw はメンションを確認する前に音声を文字起こしします。これにより、メッセージにテキスト本文がない場合でも、ボイスメモがメンションゲートを通過できます。
動作:
- ボイスメッセージにテキスト本文がなく、グループがメンションを要求している場合、OpenClaw は最初の音声添付ファイルの事前文字起こしを実行します。
- 文字起こし結果でメンションパターン(例:
@BotName、絵文字トリガー)を確認します。 - メンションが見つかった場合、メッセージは完全な返信パイプラインへ進みます。
- そのグループの事前文字起こしメンション確認をスキップするには、
channels.telegram.groups.<chatId>.disableAudioPreflight: trueを設定します。 - トピックごとに上書きするには、
channels.telegram.groups.<chatId>.topics.<threadId>.disableAudioPreflightを設定します(スキップするにはtrue、強制的に有効にするにはfalse)。 - デフォルトは
false(メンションゲート条件に一致する場合、事前確認が有効)です。
requireMention: true が設定されている状態で、ユーザーが「ねえ @Claude、天気はどう?」と言うボイスメモを送信します。ボイスメモは文字起こしされ、メンションが検出され、エージェントが返信します。
注意点
- スコープルールは最初に一致したものが優先されます。
chatTypeはdirect、group、またはchannelに正規化されます。 - CLI が 0 で終了し、プレーンテキストを出力することを確認してください。JSON 出力は
jq -r .text経由で整形する必要があります。 parakeet-mlxで--output-dirを渡す場合、--output-formatがtxt(または省略)であれば、OpenClaw は<output-dir>/<media-basename>.txtを読み取ります。txt以外の出力形式では、標準出力の解析にフォールバックします。- 返信キューのブロックを避けるため、タイムアウト(
timeoutSeconds、デフォルト 60 秒)は妥当な値にしてください。 - 事前文字起こしは、メンション検出のために最初の音声添付ファイルのみを処理します。追加の音声添付ファイルは、メインのメディア理解フェーズで処理されます。