Nodes and media

Підтримка зображень і медіа

Канал WhatsApp працює через Baileys Web. У цьому документі зафіксовано поточні правила обробки медіа для надсилання, Gateway і відповідей агентів.

Цілі

  • Надсилати медіа з необов’язковими підписами через 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) з орієнтиром на channels.whatsapp.mediaMaxMb (типово: 50 МБ).
    • Аудіо/голос/відео: передавати без змін до 16 МБ; аудіо надсилається як голосова нотатка (ptt: true).
    • Документи: усе інше, до 100 МБ, зі збереженням імені файлу, коли воно доступне.
  • Відтворення у стилі GIF у WhatsApp: надішліть MP4 з gifPlayback: true (CLI: --gif-playback), щоб мобільні клієнти зациклювали його вбудовано.
  • Визначення MIME надає перевагу magic bytes, потім заголовкам, потім розширенню файлу.
  • Підпис береться з --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 Web)

  • Зображення: до channels.whatsapp.mediaMaxMb (типово: 50 МБ) після повторного стискання.
  • Аудіо/голос/відео: обмеження 16 МБ; документи: обмеження 100 МБ.
  • Завеликі або нечитабельні медіа → зрозуміла помилка в журналах, а відповідь пропускається.

Обмеження розуміння медіа (транскрипція/опис)

  • Типово для зображення: 10 МБ (tools.media.image.maxBytes).
  • Типово для аудіо: 20 МБ (tools.media.audio.maxBytes).
  • Типово для відео: 50 МБ (tools.media.video.maxBytes).
  • Для завеликих медіа розуміння пропускається, але відповіді все одно проходять з оригінальним тілом.

Нотатки для тестів

  • Покрийте потоки надсилання й відповіді для випадків із зображенням/аудіо/документом.
  • Перевірте повторне стискання для зображень (межу розміру) і прапорець голосової нотатки для аудіо.
  • Переконайтеся, що відповіді з кількома медіа розгортаються в послідовні надсилання.

Пов’язане

Was this useful?
On this page

On this page