Tujuan
- Mengirim media dengan keterangan opsional melalui
openclaw message send --media. - Memungkinkan balasan otomatis dari kotak masuk web menyertakan media bersama teks.
- Menjaga batas per jenis tetap wajar dan dapat diprediksi.
Antarmuka CLI
openclaw message send --target <dest> --media <path-or-url> [--message <caption>]
--media <path-or-url>— melampirkan media (gambar/audio/video/dokumen); menerima jalur lokal atau URL. Opsional; keterangan dapat kosong untuk pengiriman media saja.--gif-playback— memperlakukan media video sebagai pemutaran GIF (khusus WhatsApp).--force-document— mengirim media sebagai dokumen untuk menghindari kompresi kanal (Telegram, WhatsApp); berlaku untuk gambar, GIF, dan video.--reply-to <id>,--thread-id <id>,--pin,--silent— opsi pengiriman/utas yang juga digunakan untuk pengiriman teks saja.--dry-run— mencetak muatan yang telah diuraikan dan melewati pengiriman.--json— mencetak hasil sebagai JSON:{ action, channel, dryRun, handledBy, messageId?, payload }(payloadmemuat hasil pengiriman khusus kanal, termasuk referensi media jika ada).
Perilaku kanal WhatsApp Web
- Masukan: jalur berkas lokal atau URL HTTP(S).
- Alur: memuat ke dalam buffer, mendeteksi jenis media, lalu membuat muatan keluar berdasarkan jenis:
- Gambar: dioptimalkan agar berada di bawah
channels.whatsapp.mediaMaxMb(bawaan 50MB). Gambar tanpa transparansi dikompresi ulang menjadi JPEG (urutan ukuran sisi bawaan dimulai dari 2048px, lalu menurun setiap kali ukuran masih melampaui batas); gambar dengan transparansi dipertahankan sebagai PNG. Jika sumber sudah berupa JPEG/PNG/WebP yang dapat diterima dan berada dalam batas ukuran serta panjang sisi, byte asli dipertahankan tanpa perubahan alih-alih dikompresi ulang. GIF animasi tidak pernah dienkode ulang, hanya diperiksa ukurannya. - Audio/suara: kecuali sudah berupa audio suara asli (
.ogg/.opus, atauaudio/ogg/audio/opus), audio keluar ditranskode melaluiffmpegmenjadi Opus/OGG (mono 48kHz, 64kbps, dibatasi hingga 20 menit) sebelum dikirim sebagai pesan suara (ptt: true). - Video: diteruskan tanpa perubahan hingga 16MB.
- Dokumen: semua jenis lainnya, hingga 100MB, dengan nama berkas dipertahankan jika tersedia.
- Gambar: dioptimalkan agar berada di bawah
- Pemutaran bergaya GIF di WhatsApp: kirim MP4 dengan
gifPlayback: true(CLI:--gif-playback) agar klien seluler memutarnya berulang secara langsung. - Deteksi MIME mengutamakan byte ajaib yang terdeteksi, lalu ekstensi berkas, kemudian header respons; kontainer generik yang terdeteksi (
application/octet-stream,zip) tidak pernah menggantikan pemetaan ekstensi yang lebih spesifik (misalnya XLSX dibandingkan ZIP). - Keterangan berasal dari
--messageataureply.text; keterangan kosong diperbolehkan. - Pencatatan log: mode nonverbal menampilkan
↩️/✅; mode verbal menyertakan ukuran dan jalur sumber/URL.
Angka 16MB untuk audio/video dan 100MB untuk dokumen di atas adalah nilai bawaan media per jenis yang digunakan bersama ketika batas byte eksplisit tidak diberikan. Pengiriman WhatsApp menetapkan batas eksplisit dari
channels.whatsapp.mediaMaxMb (bawaan 50MB), yang berlaku secara seragam untuk semua jenis pada akun tersebut.Alur Balasan Otomatis
getReplyFromConfigmengembalikan muatan balasan (atau larik muatan) dengantext?,mediaUrl?, danmediaUrls?, beserta bidang lainnya.- Saat media tersedia, pengirim web menguraikan jalur lokal atau URL menggunakan alur yang sama seperti
openclaw message send. - Beberapa entri media dikirim secara berurutan jika disediakan.
Media Masuk ke Perintah
- Saat pesan web masuk menyertakan media, OpenClaw mengunduhnya ke berkas sementara dan menyediakan variabel templat:
{{MediaUrl}}— URL semu untuk media masuk.{{MediaPath}}— jalur lokal sementara yang ditulis sebelum menjalankan perintah.
- Saat sandbox Docker per sesi diaktifkan, media masuk disalin ke ruang kerja sandbox dan
MediaPath/MediaUrlditulis ulang menjadi jalur relatif sandbox sepertimedia/inbound/<filename>. - Pemahaman media (dikonfigurasi melalui
tools.media.*atautools.media.modelsbersama) berjalan sebelum penerapan templat dan dapat menyisipkan blok[Image],[Audio], dan[Video]ke dalamBody.- Audio menetapkan
{{Transcript}}dan menggunakan transkrip untuk penguraian perintah agar perintah garis miring tetap berfungsi. - Deskripsi video dan gambar mempertahankan teks keterangan untuk penguraian perintah.
- Jika model utama aktif sudah mendukung penglihatan secara bawaan, OpenClaw melewati blok ringkasan
[Image]dan sebagai gantinya meneruskan gambar asli ke model.
- Audio menetapkan
- Secara bawaan, hanya lampiran gambar/audio/video pertama yang cocok yang diproses; tetapkan
tools.media.<capability>.attachmentsuntuk memproses beberapa lampiran.
Batas dan kesalahan
Batas pengiriman keluar (pengiriman web WhatsApp)- Gambar: hingga
channels.whatsapp.mediaMaxMb(bawaan 50MB) setelah pengoptimalan. - Audio/video: batas 16MB (nilai bawaan bersama; digantikan oleh
mediaMaxMbsaat dikirim melalui WhatsApp). - Dokumen: batas 100MB (nilai bawaan bersama; digantikan oleh
mediaMaxMbsaat dikirim melalui WhatsApp). - Media yang terlalu besar atau tidak dapat dibaca menghasilkan kesalahan yang jelas dalam log, dan balasan dilewati.
- Bawaan gambar: 10MB (
tools.media.image.maxBytes). - Bawaan audio: 20MB (
tools.media.audio.maxBytes). - Bawaan video: 50MB (
tools.media.video.maxBytes). - Media yang terlalu besar melewati proses pemahaman, tetapi balasan tetap diteruskan dengan isi asli.
Catatan untuk Pengujian
- Cakup alur pengiriman dan balasan untuk kasus gambar/audio/dokumen.
- Validasi batas ukuran setelah pengoptimalan gambar dan tanda pesan suara untuk audio.
- Pastikan balasan dengan beberapa media dikembangkan menjadi pengiriman berurutan.