---
read_when:
    - การแก้ไขไปป์ไลน์สื่อหรือไฟล์แนบ
summary: กฎการจัดการรูปภาพและสื่อสำหรับ send, Gateway และการตอบกลับของเอเจนต์
title: การรองรับรูปภาพและสื่อ
x-i18n:
    generated_at: "2026-04-23T05:42:57Z"
    model: gpt-5.4
    provider: openai
    source_hash: c3bb372b45a3bae51eae03b41cb22c4cde144675a54ddfd12e01a96132e48a8a
    source_path: nodes/images.md
    workflow: 15
---

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

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

## เป้าหมาย

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

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

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

## พฤติกรรมของช่องทาง WhatsApp Web

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

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

- `getReplyFromConfig` จะคืนค่า `{ text?, mediaUrl?, mediaUrls? }`
- เมื่อมีสื่อ ตัวส่งของ web จะ resolve พาธในเครื่องหรือ URLs โดยใช้ไปป์ไลน์เดียวกับ `openclaw message send`
- หากมีหลายรายการสื่อ ระบบจะส่งต่อเนื่องทีละรายการตามลำดับ

## สื่อขาเข้าสำหรับ Commands (Pi)

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

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

**ขีดจำกัดของการส่งขาออก (WhatsApp web send)**

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

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

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

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

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