Медиа и устройства
Поддержка изображений и медиа
Канал WhatsApp работает через Baileys Web. В этом документе описаны текущие правила обработки медиа для отправки, шлюза и ответов агента.
Цели
- Отправлять медиа с необязательными подписями через
openclaw message send --media. - Разрешить автоответам из веб-интерфейса включать медиа вместе с текстом.
- Сохранять разумные и предсказуемые ограничения для каждого типа.
Интерфейс командной строки (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 МБ), ограничение — 6 МБ. - Аудио/Голосовые сообщения/Видео: передача как есть до 16 МБ; аудио отправляется как голосовое сообщение (
ptt: true). - Документы: всё остальное, до 100 МБ, с сохранением имени файла, если оно доступно.
- Изображения: изменение размера и повторное сжатие в JPEG (максимальная сторона 2048px) с целью уложиться в
- Воспроизведение в стиле GIF для WhatsApp: отправьте MP4 с
gifPlayback: true(CLI:--gif-playback), чтобы мобильные клиенты зацикливали его встроенным образом. - Определение MIME-типа предпочитает "магические" байты, затем заголовки, затем расширение файла.
- Подпись берется из
--messageилиreply.text; пустая подпись разрешена. - Логирование: без флага verbose показывает
↩️/✅; с verbose включает размер и исходный путь/URL.
Конвейер автоответов
getReplyFromConfigвозвращает{ text?, mediaUrl?, mediaUrls? }.- При наличии медиа веб-отправитель разрешает локальные пути или URL, используя тот же конвейер, что и
openclaw message send. - Несколько медиафайлов отправляются последовательно, если они предоставлены.
Входящие медиа в команды (Pi)
- Когда входящие веб-сообщения содержат медиа, OpenClaw загружает их во временный файл и предоставляет переменные для шаблонов:
{{MediaUrl}}— псевдо-URL для входящего медиа.{{MediaPath}}— локальный временный путь, записанный перед выполнением команды.
- Когда включена песочница Docker для сессии, входящие медиа копируются в рабочее пространство песочницы, а
MediaPath/MediaUrlперезаписываются на относительный путь, напримерmedia/inbound/<имя_файла>. - Анализ медиа (если настроен через
tools.media.*или общиеtools.media.models) выполняется до подстановки шаблонов и может вставлять блоки[Image],[Audio]и[Video]вBody.- Для аудио устанавливается
{{Transcript}}, и для разбора команд используется транскрипт, чтобы слеш-команды продолжали работать. - Описания видео и изображений сохраняют любой текст подписи для разбора команд.
- Для аудио устанавливается
- По умолчанию обрабатывается только первое подходящее вложение изображения/аудио/видео; установите
tools.media.<cap>.attachments, чтобы обрабатывать несколько вложений.
Ограничения и ошибки
Ограничения на отправку (отправка через WhatsApp web)
- Изображения: ограничение ~6 МБ после повторного сжатия.
- Аудио/голосовые сообщения/видео: ограничение 16 МБ; документы: ограничение 100 МБ.
- Слишком большой размер или нечитаемое медиа → четкая ошибка в логах, и ответ пропускается.
Ограничения анализа медиа (транскрипция/описание)
- Изображения по умолчанию: 10 МБ (
tools.media.image.maxBytes). - Аудио по умолчанию: 20 МБ (
tools.media.audio.maxBytes). - Видео по умолчанию: 50 МБ (
tools.media.video.maxBytes). - Медиа, превышающие лимит, пропускают этап анализа, но ответы всё равно отправляются с исходным телом сообщения.
Примечания для тестов
- Покрыть сценарии отправки и ответа для изображений, аудио и документов.
- Проверить повторное сжатие для изображений (ограничение размера) и флаг голосового сообщения для аудио.
- Убедиться, что ответы с несколькими медиафайлами отправляются последовательно.