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