Dukungan Gambar & Media (2025-12-05)
Channel WhatsApp berjalan melalui Baileys Web. Dokumen ini menjelaskan aturan penanganan media saat ini untuk send, gateway, dan balasan agen.Tujuan
- Mengirim media dengan caption opsional melalui
openclaw message send --media. - Memungkinkan balasan otomatis dari inbox web menyertakan media bersama teks.
- Menjaga batas per jenis tetap masuk akal dan dapat diprediksi.
Surface CLI
openclaw message send --media <path-or-url> [--message <caption>]--mediaopsional; caption boleh kosong untuk pengiriman hanya media.--dry-runmencetak payload yang telah di-resolve;--jsonmengeluarkan{ channel, to, messageId, mediaUrl, caption }.
Perilaku channel WhatsApp Web
- Input: jalur file lokal atau URL HTTP(S).
- Alur: muat ke Buffer, deteksi jenis media, dan bangun payload yang benar:
- Gambar: ubah ukuran & kompres ulang ke JPEG (sisi maksimum 2048px) dengan target
channels.whatsapp.mediaMaxMb(default: 50 MB). - Audio/Voice/Video: pass-through hingga 16 MB; audio dikirim sebagai voice note (
ptt: true). - Dokumen: apa pun selain itu, hingga 100 MB, dengan nama file dipertahankan jika tersedia.
- Gambar: ubah ukuran & kompres ulang ke JPEG (sisi maksimum 2048px) dengan target
- Pemutaran gaya GIF WhatsApp: kirim MP4 dengan
gifPlayback: true(CLI:--gif-playback) agar klien seluler memutar berulang secara inline. - Deteksi MIME memprioritaskan magic bytes, lalu header, lalu ekstensi file.
- Caption berasal dari
--messageataureply.text; caption kosong diperbolehkan. - Logging: mode non-verbose menampilkan
↩️/✅; mode verbose menyertakan ukuran dan jalur/URL sumber.
Pipeline Balasan Otomatis
getReplyFromConfigmengembalikan{ text?, mediaUrl?, mediaUrls? }.- Saat media ada, pengirim web me-resolve jalur lokal atau URL menggunakan pipeline yang sama seperti
openclaw message send. - Jika beberapa entri media disediakan, semuanya dikirim secara berurutan.
Media Masuk ke Perintah (Pi)
- Saat pesan web masuk menyertakan media, OpenClaw mengunduh ke file sementara dan mengekspos variabel templating:
{{MediaUrl}}pseudo-URL untuk media masuk.{{MediaPath}}jalur lokal sementara yang ditulis sebelum menjalankan perintah.
- Saat sandbox Docker per sesi diaktifkan, media masuk disalin ke workspace sandbox dan
MediaPath/MediaUrlditulis ulang menjadi jalur relatif sepertimedia/inbound/<filename>. - Media understanding (jika dikonfigurasi melalui
tools.media.*atautools.media.modelsbersama) berjalan sebelum templating dan dapat menyisipkan blok[Image],[Audio], dan[Video]ke dalamBody.- Audio menetapkan
{{Transcript}}dan menggunakan transkrip untuk parsing perintah agar slash command tetap berfungsi. - Deskripsi video dan gambar mempertahankan teks caption apa pun untuk parsing perintah.
- Jika model gambar utama aktif sudah mendukung vision secara native, OpenClaw melewati blok ringkasan
[Image]dan sebagai gantinya meneruskan gambar asli ke model.
- Audio menetapkan
- Secara default hanya lampiran gambar/audio/video pertama yang cocok yang diproses; setel
tools.media.<cap>.attachmentsuntuk memproses beberapa lampiran.
Batas & Error
Batas pengiriman keluar (pengiriman web WhatsApp)- Gambar: hingga
channels.whatsapp.mediaMaxMb(default: 50 MB) setelah kompres ulang. - Audio/voice/video: batas 16 MB; dokumen: 100 MB.
- Media terlalu besar atau tidak dapat dibaca → error yang jelas di log dan balasan dilewati.
- Default gambar: 10 MB (
tools.media.image.maxBytes). - Default audio: 20 MB (
tools.media.audio.maxBytes). - Default video: 50 MB (
tools.media.video.maxBytes). - Media yang terlalu besar melewati understanding, tetapi balasan tetap berjalan dengan body asli.
Catatan untuk Pengujian
- Cakup alur send + reply untuk kasus gambar/audio/dokumen.
- Validasi kompres ulang untuk gambar (batas ukuran) dan flag voice-note untuk audio.
- Pastikan balasan multi-media menyebar sebagai pengiriman berurutan.