Nodes and media
پشتیبانی از تصویر و رسانه
کانال WhatsApp روی Baileys Web اجرا میشود. این صفحه قواعد مدیریت رسانه برای ارسالها، Gateway و پاسخهای عامل را پوشش میدهد.
اهداف
- ارسال رسانه با زیرنویس اختیاری از طریق
openclaw message send --media. - امکان گنجاندن رسانه در کنار متن در پاسخهای خودکار صندوق ورودی وب.
- حفظ محدودیتهای معقول و قابل پیشبینی برای هر نوع.
سطح CLI
openclaw message send --target <dest> --media <path-or-url> [--message <caption>]
--media <path-or-url>— پیوستکردن رسانه (تصویر/صدا/ویدئو/سند)؛ مسیرهای محلی یا URLها را میپذیرد. اختیاری است؛ برای ارسال فقط رسانه، زیرنویس میتواند خالی باشد.--gif-playback— با رسانه ویدئویی مانند پخش GIF رفتار میکند (فقط WhatsApp).--force-document— رسانه را بهصورت سند ارسال میکند تا از فشردهسازی کانال جلوگیری شود (Telegram، WhatsApp)؛ برای تصاویر، GIFها و ویدئوها اعمال میشود.--reply-to <id>،--thread-id <id>،--pin،--silent— گزینههای تحویل/رشتهبندی مشترک با ارسالهای فقط متنی.--dry-run— محموله نهایی را چاپ میکند و ارسال را انجام نمیدهد.--json— نتیجه را بهصورت JSON چاپ میکند:{ action, channel, dryRun, handledBy, messageId?, payload }(payloadنتیجه ارسال مختص کانال، شامل هرگونه ارجاع رسانه، را در بر دارد).
رفتار کانال وب WhatsApp
- ورودی: مسیر فایل محلی یا URL از نوع HTTP(S).
- روند: بارگذاری در یک بافر، تشخیص نوع رسانه و سپس ساخت محموله خروجی متناسب با نوع:
- تصاویر: برای قرارگرفتن زیر
channels.whatsapp.mediaMaxMb(پیشفرض 50MB) بهینه میشوند. تصاویر مات مجدداً به JPEG فشرده میشوند (نردبان پیشفرض اندازه ضلع از 2048px آغاز میشود و با هر بار عبور از محدودیت حجم کاهش مییابد)؛ تصاویر دارای شفافیت بهصورت PNG نگه داشته میشوند. اگر منبع از قبل JPEG/PNG/WebP قابلقبولی در محدوده حجم و طول ضلع باشد، بایتهای اصلی بدون تغییر حفظ میشوند و فشردهسازی مجدد انجام نمیشود. GIFهای متحرک هرگز دوباره کدگذاری نمیشوند و فقط حجمشان بررسی میشود. - صدا/پیام صوتی: مگر اینکه صدا از قبل در قالب بومی پیام صوتی باشد (
.ogg/.opusیاaudio/ogg/audio/opus)؛ صدای خروجی پیش از ارسال بهصورت پیام صوتی (ptt: true) با استفاده ازffmpegبه Opus/OGG (تککاناله با 48kHz، نرخ 64kbps و حداکثر مدت 20 دقیقه) تبدیل میشود. - ویدئو: عبور بدون تغییر تا سقف 16MB.
- اسناد: هر مورد دیگر تا سقف 100MB، با حفظ نام فایل در صورت موجودبودن.
- تصاویر: برای قرارگرفتن زیر
- پخش بهسبک GIF در WhatsApp: یک MP4 با
gifPlayback: true(CLI:--gif-playback) ارسال میشود تا کلاینتهای موبایل آن را بهصورت درونخطی تکرار کنند. - تشخیص MIME ابتدا بایتهای جادویی شناساییشده، سپس پسوند فایل و بعد هدرهای پاسخ را ترجیح میدهد؛ یک قالب محفظه عمومی شناساییشده (
application/octet-stream،zip) هرگز نگاشت مشخصتر پسوند را نادیده نمیگیرد (برای مثال XLSX در برابر ZIP). - زیرنویس از
--messageیاreply.textدریافت میشود؛ زیرنویس خالی مجاز است. - گزارشگیری: حالت غیرمفصل
↩️/✅را نشان میدهد؛ حالت مفصل شامل حجم و مسیر/URL منبع است.
پایپلاین پاسخ خودکار
getReplyFromConfigیک محموله پاسخ (یا آرایهای از محمولهها) را برمیگرداند که در کنار سایر فیلدها شاملtext?،mediaUrl?وmediaUrls?است.- وقتی رسانه وجود داشته باشد، فرستنده وب مسیرهای محلی یا URLها را با همان پایپلاین
openclaw message sendنهایی میکند. - اگر چند ورودی رسانه ارائه شود، بهترتیب ارسال میشوند.
رسانه ورودی برای فرمانها
- وقتی پیامهای ورودی وب شامل رسانه باشند، OpenClaw آن را در یک فایل موقت بارگیری میکند و متغیرهای قالبسازی زیر را ارائه میدهد:
{{AttachmentUrl}}— URL اصلی یا ارجاع ارائهدهنده برای پیوست فعلی.{{AttachmentPath}}— مسیر موقت محلی که پیش از اجرای فرمان نوشته میشود.{{AttachmentContentType}}— نوع محتوای MIME.{{AttachmentDir}}— دایرکتوری حاوی مسیر محلی.{{AttachmentIndex}}— نمایه واقعیت منبع با مبدأ صفر.
- وقتی محیط ایزوله Docker برای هر نشست فعال باشد، رسانه ورودی به فضای کاری محیط ایزوله کپی میشود و مسیر/ارجاع پیوست به مسیری نسبی نسبت به محیط ایزوله مانند
media/inbound/<filename>بازنویسی میشود. {{MediaPath}}،{{MediaUrl}}،{{MediaType}}و{{MediaDir}}در طول بازه مهاجرت SDK افزونه، بهعنوان نامهای مستعار سازگاری منسوخ باقی میمانند.- درک رسانه (پیکربندیشده از طریق
tools.media.*یاtools.media.modelsمشترک) پیش از قالبسازی اجرا میشود و میتواند بلوکهای[Image]،[Audio]و[Video]را درBodyدرج کند.- صدا
{{Transcript}}را تنظیم میکند و از رونوشت برای تجزیه فرمان استفاده میکند تا فرمانهای اسلش همچنان کار کنند. - توضیحات ویدئو و تصویر هرگونه متن زیرنویس را برای تجزیه فرمان حفظ میکنند.
- اگر مدل اصلی فعال از قبل بهصورت بومی از بینایی پشتیبانی کند، OpenClaw از بلوک خلاصه
[Image]صرفنظر میکند و در عوض تصویر اصلی را به مدل میفرستد.
- صدا
- بهطور پیشفرض فقط نخستین پیوست منطبق تصویر/صدا/ویدئو پردازش میشود؛ برای انتخاب چند پیوست از
tools.media.<capability>.attachmentsاستفاده کنید.
محدودیتها و خطاها
سقفهای ارسال خروجی (ارسال وب WhatsApp)
- تصاویر: پس از بهینهسازی تا سقف
channels.whatsapp.mediaMaxMb(پیشفرض 50MB). - صدا/ویدئو: سقف 16MB (پیشفرض مشترک؛ هنگام ارسال از طریق WhatsApp با
mediaMaxMbجایگزین میشود). - اسناد: سقف 100MB (پیشفرض مشترک؛ هنگام ارسال از طریق WhatsApp با
mediaMaxMbجایگزین میشود). - رسانه بیشازحد بزرگ یا خواندهنشدنی، خطایی واضح در گزارشها ایجاد میکند و پاسخ ارسال نمیشود.
سقفهای درک رسانه (رونویسی/توصیف)
- پیشفرض تصویر: 10MB (با
tools.media.image.maxBytesیا در هر ورودیtools.media.models[]باmaxBytesبازنویسی میشود). - پیشفرض صدا: 20MB (با
tools.media.audio.maxBytesیا بهازای هر ورودی بازنویسی میشود). - پیشفرض ویدئو: 50MB (با
tools.media.video.maxBytesیا بهازای هر ورودی بازنویسی میشود). - برای رسانه بیشازحد بزرگ، درک رسانه انجام نمیشود، اما پاسخ همچنان با بدنه اصلی ارسال میشود.
نکات مربوط به آزمونها
- روندهای ارسال و پاسخ را برای موارد تصویر/صدا/سند پوشش دهید.
- محدوده حجم پس از بهینهسازی تصویر و پرچم پیام صوتی برای صدا را اعتبارسنجی کنید.
- اطمینان حاصل کنید که پاسخهای چندرسانهای به ارسالهای متوالی تقسیم میشوند.
مرتبط
Was this useful?