---
read_when:
    - การแก้ไข media pipeline หรือไฟล์แนบ
summary: กฎการจัดการรูปภาพและสื่อสำหรับการส่ง, gateway และการตอบกลับของเอเจนต์
title: การรองรับรูปภาพและสื่อ
x-i18n:
    generated_at: "2026-04-24T09:19:47Z"
    model: gpt-5.4
    provider: openai
    source_hash: 26fa460f7dcdac9f15c9d79c3c3370adbce526da5cfa9a6825a8ed20b41e0a29
    source_path: nodes/images.md
    workflow: 15
---

# การรองรับรูปภาพและสื่อ (2025-12-05)

ช่องทาง WhatsApp ทำงานผ่าน **Baileys Web** เอกสารนี้บันทึกกฎการจัดการสื่อปัจจุบันสำหรับการส่ง, gateway และการตอบกลับของเอเจนต์

## เป้าหมาย

- ส่งสื่อพร้อมคำบรรยายแบบไม่บังคับผ่าน `openclaw message send --media`
- อนุญาตให้การตอบกลับอัตโนมัติจากกล่องข้อความเว็บรวมสื่อไปพร้อมกับข้อความได้
- รักษาขีดจำกัดต่อประเภทให้สมเหตุสมผลและคาดเดาได้

## พื้นผิวของ CLI

- `openclaw message send --media <path-or-url> [--message <caption>]`
  - `--media` เป็นตัวเลือกเสริม; คำบรรยายสามารถเว้นว่างได้สำหรับการส่งแบบมีแต่สื่อ
  - `--dry-run` จะแสดง payload ที่ resolve แล้ว; `--json` จะส่งออก `{ channel, to, messageId, mediaUrl, caption }`

## ลักษณะการทำงานของช่องทาง WhatsApp Web

- อินพุต: path ของไฟล์โลคัล **หรือ** URL แบบ HTTP(S)
- Flow: โหลดเป็น Buffer, ตรวจหาชนิดของสื่อ และสร้าง payload ที่ถูกต้อง:
  - **รูปภาพ:** ปรับขนาดและบีบอัดใหม่เป็น JPEG (ด้านยาวสุด 2048px) โดยตั้งเป้าไม่เกิน `channels.whatsapp.mediaMaxMb` (ค่าเริ่มต้น: 50 MB)
  - **Audio/Voice/Video:** ส่งผ่านตรงได้จนถึง 16 MB; audio จะถูกส่งเป็น voice note (`ptt: true`)
  - **เอกสาร:** อย่างอื่นทั้งหมด จนถึง 100 MB โดยคงชื่อไฟล์ไว้เมื่อมีข้อมูล
- การเล่นแบบ GIF ของ WhatsApp: ส่ง MP4 พร้อม `gifPlayback: true` (CLI: `--gif-playback`) เพื่อให้ไคลเอนต์บนมือถือเล่นวนแบบ inline
- การตรวจหา MIME จะให้ความสำคัญกับ magic bytes ก่อน แล้วค่อย headers แล้วจึง file extension
- คำบรรยายมาจาก `--message` หรือ `reply.text`; อนุญาตให้คำบรรยายว่างได้
- การบันทึก log: โหมดไม่ verbose จะแสดง `↩️`/`✅`; โหมด verbose จะรวมขนาดและ path/URL ต้นทาง

## ไปป์ไลน์การตอบกลับอัตโนมัติ

- `getReplyFromConfig` คืนค่า `{ text?, mediaUrl?, mediaUrls? }`
- เมื่อมีสื่ออยู่ ตัวส่งบนเว็บจะ resolve paths หรือ URLs แบบโลคัลโดยใช้ pipeline เดียวกับ `openclaw message send`
- หากมีหลายรายการสื่อ จะส่งตามลำดับทีละรายการ

## สื่อขาเข้าสู่คำสั่ง (Pi)

- เมื่อข้อความเว็บขาเข้ามีสื่อ OpenClaw จะดาวน์โหลดไปยังไฟล์ชั่วคราวและเปิดเผยตัวแปรสำหรับ templating:
  - `{{MediaUrl}}` pseudo-URL สำหรับสื่อขาเข้า
  - `{{MediaPath}}` path แบบโลคัลชั่วคราวที่ถูกเขียนก่อนรันคำสั่ง
- เมื่อเปิดใช้ Docker sandbox แบบราย session สื่อขาเข้าจะถูกคัดลอกเข้าไปใน sandbox workspace และ `MediaPath`/`MediaUrl` จะถูกเขียนใหม่เป็น relative path เช่น `media/inbound/<filename>`
- ความเข้าใจสื่อ (หากกำหนดค่าผ่าน `tools.media.*` หรือ `tools.media.models` ที่ใช้ร่วมกัน) จะรันก่อน templating และสามารถแทรกบล็อก `[Image]`, `[Audio]` และ `[Video]` ลงใน `Body`
  - Audio จะตั้งค่า `{{Transcript}}` และใช้ transcript สำหรับการแยกคำสั่ง เพื่อให้ slash commands ยังทำงานได้
  - คำอธิบายของวิดีโอและรูปภาพจะเก็บข้อความคำบรรยายไว้สำหรับการแยกคำสั่ง
  - หากโมเดลภาพหลักที่ใช้งานอยู่รองรับ vision แบบเนทีฟอยู่แล้ว OpenClaw จะข้ามบล็อกสรุป `[Image]` และส่งภาพต้นฉบับไปยังโมเดลแทน
- ตามค่าเริ่มต้น จะประมวลผลเฉพาะไฟล์แนบรูปภาพ/audio/video ตัวแรกที่ตรงเงื่อนไข; ตั้ง `tools.media.<cap>.attachments` เพื่อประมวลผลไฟล์แนบหลายรายการ

## ขีดจำกัดและข้อผิดพลาด

**เพดานการส่งขาออก (การส่งผ่าน WhatsApp web)**

- รูปภาพ: สูงสุด `channels.whatsapp.mediaMaxMb` (ค่าเริ่มต้น: 50 MB) หลังบีบอัดใหม่
- Audio/voice/video: เพดาน 16 MB; เอกสาร: 100 MB
- สื่อที่ใหญ่เกินไปหรืออ่านไม่ได้ → แสดงข้อผิดพลาดชัดเจนใน logs และจะข้ามการตอบกลับนั้น

**เพดานการทำความเข้าใจสื่อ (ถอดเสียง/อธิบาย)**

- ค่าเริ่มต้นของรูปภาพ: 10 MB (`tools.media.image.maxBytes`)
- ค่าเริ่มต้นของ audio: 20 MB (`tools.media.audio.maxBytes`)
- ค่าเริ่มต้นของ video: 50 MB (`tools.media.video.maxBytes`)
- หากสื่อใหญ่เกินไป ระบบจะข้ามการทำความเข้าใจสื่อ แต่การตอบกลับจะยังคงดำเนินต่อไปโดยใช้ body เดิม

## หมายเหตุสำหรับการทดสอบ

- ครอบคลุม flow ทั้งการส่งและการตอบกลับสำหรับกรณีรูปภาพ/audio/เอกสาร
- ตรวจสอบการบีบอัดใหม่สำหรับรูปภาพ (ขนาดต้องไม่เกิน) และแฟลก voice-note สำหรับ audio
- ตรวจสอบให้แน่ใจว่าการตอบกลับที่มีหลายสื่อกระจายออกเป็นการส่งตามลำดับ

## ที่เกี่ยวข้อง

- [การจับภาพจากกล้อง](/th/nodes/camera)
- [ความเข้าใจสื่อ](/th/nodes/media-understanding)
- [Audio และ voice notes](/th/nodes/audio)
