画像とメディア対応 — 2025-12-05

WhatsApp チャンネルは Baileys Web で動作しています。このドキュメントでは、送信・Gateway・エージェント返信における現在のメディア処理ルールを説明します。

目的

  • openclaw message send --media でキャプション付きメディアを送信する。
  • Web インボックスからの自動返信で、テキストと一緒にメディアを含められるようにする。
  • メディアタイプごとの制限を分かりやすく保つ。

CLI インターフェース

  • openclaw message send --media <path-or-url> [--message <caption>]
    • --media は任意。キャプションを空にしてメディアのみの送信も可能。
    • --dry-run で解決済みペイロードを表示。--json{ channel, to, messageId, mediaUrl, caption } を出力。

WhatsApp Web チャンネルの動作

  • 入力: ローカルファイルパスまたは HTTP(S) URL。
  • フロー: Buffer に読み込み、メディア種別を検出し、適切なペイロードを構築:
    • 画像: JPEG にリサイズ・再圧縮(最大辺 2048px)、agents.defaults.mediaMaxMb(デフォルト 5 MB)を目標、上限 6 MB。
    • 音声/ボイス/動画: 16 MB まではパススルー。音声はボイスメモとして送信(ptt: true)。
    • ドキュメント: その他すべて、100 MB まで。可能な場合はファイル名を保持。
  • WhatsApp GIF 風再生: gifPlayback: true で MP4 を送信(CLI: --gif-playback)すると、モバイルクライアントでインラインループ再生されます。
  • MIME 検出はマジックバイト、次にヘッダー、次にファイル拡張子の優先順で行われます。
  • キャプションは --message または reply.text から取得。空のキャプションも許可されます。
  • ログ: 非 verbose では ↩️/ を表示。verbose ではサイズとソースパス/URL も含まれます。

自動返信パイプライン

  • getReplyFromConfig{ text?, mediaUrl?, mediaUrls? } を返します。
  • メディアが存在する場合、Web 送信側は openclaw message send と同じパイプラインでローカルパスまたは URL を解決します。
  • 複数のメディアエントリが提供された場合、順次送信されます。

受信メディアからコマンドへ(Pi)

  • 受信 Web メッセージにメディアが含まれている場合、OpenClaw は一時ファイルにダウンロードし、テンプレート変数を公開します。
    • {{MediaUrl}} 受信メディアの擬似 URL。
    • {{MediaPath}} コマンド実行前に書き込まれるローカル一時パス。
  • セッションごとの Docker サンドボックスが有効な場合、受信メディアはサンドボックスワークスペースにコピーされ、MediaPath/MediaUrlmedia/inbound/<filename> のような相対パスに書き換えられます。
  • メディア理解(tools.media.* または共有の tools.media.models で設定)はテンプレート処理前に実行され、Body[Image][Audio][Video] ブロックを挿入できます。
    • 音声は {{Transcript}} を設定し、スラッシュコマンドが動作するようコマンド解析にトランスクリプトを使用します。
    • 動画と画像の説明は、コマンド解析用にキャプションテキストを保持します。
  • デフォルトでは最初にマッチした画像/音声/動画の添付ファイルのみ処理されます。複数の添付ファイルを処理するには tools.media.<cap>.attachments を設定してください。

制限とエラー

送信上限(WhatsApp Web 送信)

  • 画像: 再圧縮後約 6 MB。
  • 音声/ボイス/動画: 16 MB。ドキュメント: 100 MB。
  • サイズ超過または読み取り不能なメディア → ログに明確なエラーが記録され、返信はスキップ。

メディア理解の上限(文字起こし/説明)

  • 画像のデフォルト: 10 MB(tools.media.image.maxBytes)。
  • 音声のデフォルト: 20 MB(tools.media.audio.maxBytes)。
  • 動画のデフォルト: 50 MB(tools.media.video.maxBytes)。
  • サイズ超過のメディアは理解をスキップしますが、元の本文で返信は続行されます。

テスト時の注意点

  • 画像/音声/ドキュメントの送信 + 返信フローをカバーすること。
  • 画像の再圧縮(サイズ制限)と音声のボイスメモフラグを検証すること。
  • 複数メディアの返信が順次送信として展開されることを確認すること。