Поддержка изображений и медиа — 2025-12-05
Канал WhatsApp работает через Baileys Web. В этом документе зафиксированы текущие правила обработки медиа для отправки, Gateway (шлюз) и ответов агентов.Цели
- Отправлять медиа с необязательными подписями через
openclaw message send --media. - Разрешить автоответам из веб‑входящих включать медиа вместе с текстом.
- Сохранять разумные и предсказуемые лимиты для каждого типа.
Поверхность CLI
openclaw message send --media <path-or-url> [--message <caption>]--media— необязательно; подпись может быть пустой для отправок «только медиа».--dry-runвыводит разрешённый payload;--jsonэмитирует{ channel, to, messageId, mediaUrl, caption }.
Поведение канала WhatsApp Web
- Вход: локальный путь к файлу или HTTP(S) URL.
- Поток: загрузка в Buffer, определение типа медиа и сборка корректного payload:
- Изображения: изменение размера и перекодирование в JPEG (макс. сторона 2048px) с целью
agents.defaults.mediaMaxMb(по умолчанию 5 MB), с жёстким пределом 6 MB. - Аудио/голос/видео: сквозная передача до 16 MB; аудио отправляется как голосовое сообщение (
ptt: true). - Документы: всё остальное, до 100 MB, с сохранением имени файла при наличии.
- Изображения: изменение размера и перекодирование в JPEG (макс. сторона 2048px) с целью
- GIF‑подобное воспроизведение в WhatsApp: отправляйте MP4 с
gifPlayback: true(CLI:--gif-playback), чтобы мобильные клиенты зацикливали воспроизведение inline. - Определение MIME сначала по сигнатурам (magic bytes), затем по заголовкам, затем по расширению файла.
- Подпись берётся из
--messageилиreply.text; пустая подпись допускается. - Логирование: без подробного режима показывает
↩️/✅; подробный режим включает размер и путь/URL источника.
Контейнер автоответа
getReplyFromConfigвозвращает{ text?, mediaUrl?, mediaUrls? }.- При наличии медиа веб‑отправитель разрешает локальные пути или URL, используя тот же конвейер, что и
openclaw message send. - Если передано несколько медиа‑элементов, они отправляются последовательно.
Входящие медиа для команд (Pi)
- Когда входящие веб‑сообщения содержат медиа, OpenClaw загружает их во временный файл и предоставляет переменные шаблонизации:
{{MediaUrl}}— псевдо‑URL для входящего медиа.{{MediaPath}}— локальный временный путь, записанный перед запуском команды.
- При включённой per‑session Docker sandbox входящее медиа копируется в рабочее пространство sandbox, а
MediaPath/MediaUrlпереписываются в относительный путь видаmedia/inbound/<filename>. - Понимание медиа (если настроено через
tools.media.*или общийtools.media.models) выполняется до шаблонизации и может вставлять блоки[Image],[Audio]и[Video]вBody.- Аудио устанавливает
{{Transcript}}и использует транскрипт для парсинга команд, чтобы слэш‑команды продолжали работать. - Описания видео и изображений сохраняют любой текст подписи для парсинга команд.
- Аудио устанавливает
- По умолчанию обрабатывается только первое совпадающее вложение изображения/аудио/видео; установите
tools.media.<cap>.attachments, чтобы обрабатывать несколько вложений.
Ограничения и ошибки
Лимиты исходящей отправки (WhatsApp web send)- Изображения: предел ~6 MB после перекодирования.
- Аудио/голос/видео: предел 16 MB; документы: предел 100 MB.
- Слишком большой или нечитаемый медиафайл → понятная ошибка в логах, ответ пропускается.
- Изображения по умолчанию: 10 MB (
tools.media.image.maxBytes). - Аудио по умолчанию: 20 MB (
tools.media.audio.maxBytes). - Видео по умолчанию: 50 MB (
tools.media.video.maxBytes). - При превышении размера понимание пропускается, но ответы всё равно отправляются с исходным телом.
Примечания для тестов
- Покрыть сценарии отправки и ответов для изображений/аудио/документов.
- Проверить перекодирование изображений (ограничение размера) и флаг голосового сообщения для аудио.
- Убедиться, что ответы с несколькими медиа разворачиваются в последовательные отправки.