音声 / ボイスメモ — 2026-01-17
対応状況
- メディア理解(音声): 音声理解が有効(または自動検出)の場合、OpenClaw は以下の処理を行います。
- 最初の音声添付ファイル(ローカルパスまたは URL)を検出し、必要に応じてダウンロード。
- 各モデルエントリへ送信する前に
maxBytesを適用。 - 対象のモデルエントリを順番に実行(プロバイダまたは CLI)。
- 失敗またはスキップ(サイズ超過・タイムアウト)した場合、次のエントリを試行。
- 成功時、
Bodyを[Audio]ブロックに置換し、{{Transcript}}を設定。
- コマンド解析: 文字起こし成功時、
CommandBody/RawBodyにトランスクリプトが設定されるため、スラッシュコマンドも引き続き動作します。 - 詳細ログ:
--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。モデルは自動ダウンロード)
- Gemini CLI(
gemini)read_many_filesを使用 - プロバイダキー(OpenAI → Groq → Deepgram → Google)
自動検出を無効にするには、tools.media.audio.enabled: false を設定してください。
カスタマイズするには、tools.media.audio.models を設定してください。
注意: バイナリの検出は 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" }],
},
},
},
}
トランスクリプトをチャットにエコー(オプトイン)
{
tools: {
media: {
audio: {
enabled: true,
echoTranscript: true, // デフォルトは false
echoFormat: '📝 "{transcript}"', // 任意。{transcript} プレースホルダー対応
models: [{ provider: "openai", model: "gpt-4o-mini-transcribe" }],
},
},
},
}
補足事項と制限
- プロバイダ認証は標準のモデル認証順序に従います(認証プロファイル、環境変数、
models.providers.*.apiKey)。 provider: "deepgram"使用時、Deepgram はDEEPGRAM_API_KEYを参照します。- Deepgram のセットアップ詳細: Deepgram(音声文字起こし)。
- Mistral のセットアップ詳細: Mistral。
- 音声プロバイダは
tools.media.audio経由でbaseUrl、headers、providerOptionsをオーバーライドできます。 - デフォルトのサイズ上限は 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 の標準出力は上限 5MB。CLI の出力は簡潔に保ってください。
プロキシ環境のサポート
プロバイダベースの音声文字起こしは、標準のアウトバウンドプロキシ環境変数に対応しています。
HTTPS_PROXYHTTP_PROXYhttps_proxyhttp_proxy
プロキシ環境変数が設定されていない場合、直接通信が使用されます。プロキシ設定が不正な場合、OpenClaw は警告をログに記録し、直接フェッチにフォールバックします。
グループでのメンション検出
グループチャットで requireMention: true が設定されている場合、OpenClaw はメンションチェックの前に音声を文字起こしします。これにより、メンションを含むボイスメモも処理可能になります。
仕組み:
- ボイスメッセージにテキスト本文がなく、グループがメンションを要求している場合、OpenClaw は「プリフライト」文字起こしを実行します。
- トランスクリプトでメンションパターン(
@BotName、絵文字トリガーなど)をチェックします。 - メンションが検出されると、メッセージは通常の返信パイプラインに進みます。
- トランスクリプトがメンション検出に使用されるため、ボイスメモもメンションゲートを通過できます。
フォールバック動作:
- プリフライト中に文字起こしが失敗した場合(タイムアウト、API エラーなど)、テキストのみのメンション検出に基づいてメッセージが処理されます。
- これにより、混合メッセージ(テキスト + 音声)が誤ってドロップされることを防ぎます。
Telegram グループ/トピックごとのオプトアウト:
channels.telegram.groups.<chatId>.disableAudioPreflight: trueを設定すると、そのグループでプリフライトのトランスクリプトメンションチェックをスキップします。channels.telegram.groups.<chatId>.topics.<threadId>.disableAudioPreflightでトピックごとにオーバーライドできます(trueでスキップ、falseで強制有効化)。- デフォルトは
false(メンションゲート条件に一致する場合はプリフライト有効)。
例: ユーザーが requireMention: true の Telegram グループで「ねえ @Claude、天気は?」というボイスメモを送信した場合、ボイスメモが文字起こしされ、メンションが検出され、エージェントが返信します。
注意点
- スコープルールは先着優先です。
chatTypeはdirect、group、roomに正規化されます。 - CLI が終了コード 0 でプレーンテキストを出力することを確認してください。JSON の場合は
jq -r .textで整形が必要です。 parakeet-mlxの場合、--output-dirを指定すると、--output-formatがtxt(または省略時)のとき、OpenClaw は<output-dir>/<media-basename>.txtを読み取ります。txt以外の出力形式では標準出力のパースにフォールバックします。- タイムアウトは適切に設定してください(
timeoutSeconds、デフォルト 60 秒)。返信キューのブロックを避けるためです。 - プリフライト文字起こしはメンション検出のために最初の音声添付ファイルのみを処理します。追加の音声はメインのメディア理解フェーズで処理されます。