---
read_when:
    - การเปลี่ยนการเรนเดอร์เอาต์พุตของผู้ช่วยใน Control UI
    - การดีบักคำสั่งการแสดงผล `[embed ...]`, `MEDIA:`, การตอบกลับ หรือเสียง
summary: โปรโตคอลชอร์ตโค้ดเอาต์พุตแบบ rich สำหรับการฝังสื่อ, สื่อ, คำใบ้เสียง, และการตอบกลับ
title: โปรโตคอลเอาต์พุตแบบ rich
x-i18n:
    generated_at: "2026-04-26T11:41:02Z"
    model: gpt-5.4
    provider: openai
    source_hash: 3c62e41073196c2ff4867230af55469786fcfb29414f5cc5b7d38f6b1ffc3718
    source_path: reference/rich-output-protocol.md
    workflow: 15
---

เอาต์พุตของผู้ช่วยสามารถมีคำสั่งสำหรับการส่งมอบ/การเรนเดอร์ได้ชุดเล็ก ๆ ดังนี้:

- `MEDIA:` สำหรับการส่งไฟล์แนบ
- `[[audio_as_voice]]` สำหรับคำใบ้การแสดงผลเสียง
- `[[reply_to_current]]` / `[[reply_to:<id>]]` สำหรับเมทาดาทาการตอบกลับ
- `[embed ...]` สำหรับการเรนเดอร์แบบ rich ใน Control UI

ไฟล์แนบ `MEDIA:` ระยะไกลต้องเป็น URL `https:` แบบสาธารณะ URL แบบ `http:` ปกติ,
loopback, link-local, private และชื่อโฮสต์ภายในจะถูกละเว้นจากการเป็นคำสั่งไฟล์แนบ
โดยตัวดึงสื่อฝั่งเซิร์ฟเวอร์ยังคงบังคับใช้การป้องกันเครือข่ายของตัวเอง

คำสั่งเหล่านี้แยกจากกัน `MEDIA:` และแท็ก reply/voice ยังคงเป็นเมทาดาทาการส่งมอบ; `[embed ...]` คือเส้นทางการเรนเดอร์แบบ rich สำหรับเว็บเท่านั้น
สื่อจากผลลัพธ์ของเครื่องมือที่เชื่อถือได้จะใช้ parser เดียวกันกับ `MEDIA:` / `[[audio_as_voice]]` ก่อนการส่งมอบ ดังนั้นเอาต์พุตข้อความจากเครื่องมือยังคงสามารถระบุไฟล์แนบเสียงให้เป็นข้อความเสียงได้

เมื่อเปิดใช้ block streaming, `MEDIA:` จะยังคงเป็นเมทาดาทาการส่งครั้งเดียวสำหรับหนึ่ง
เทิร์น หาก URL สื่อเดียวกันถูกส่งมาในบล็อกที่สตรีมและถูกส่งซ้ำอีกครั้งในเพย์โหลดสุดท้าย
ของผู้ช่วย OpenClaw จะส่งไฟล์แนบเพียงครั้งเดียวและลบรายการซ้ำออกจากเพย์โหลดสุดท้าย

## `[embed ...]`

`[embed ...]` คือไวยากรณ์การเรนเดอร์แบบ rich เพียงแบบเดียวที่ agent ใช้งานได้สำหรับ Control UI

ตัวอย่างแบบ self-closing:

```text
[embed ref="cv_123" title="Status" /]
```

กฎ:

- `[view ...]` ใช้ไม่ได้อีกต่อไปสำหรับเอาต์พุตใหม่
- ชอร์ตโค้ด embed จะแสดงผลเฉพาะในพื้นผิวข้อความของผู้ช่วยเท่านั้น
- จะแสดงผลเฉพาะ embed ที่อิงกับ URL เท่านั้น ใช้ `ref="..."` หรือ `url="..."`
- ชอร์ตโค้ด embed แบบ inline HTML ในรูปแบบบล็อกจะไม่ถูกเรนเดอร์
- เว็บ UI จะลบชอร์ตโค้ดออกจากข้อความที่มองเห็นได้และเรนเดอร์ embed แบบ inline
- `MEDIA:` ไม่ใช่นามแฝงของ embed และไม่ควรใช้สำหรับการเรนเดอร์ embed แบบ rich

## รูปร่างการเรนเดอร์ที่จัดเก็บไว้

บล็อกเนื้อหาผู้ช่วยที่ถูกทำให้เป็นมาตรฐาน/จัดเก็บไว้เป็นรายการ `canvas` แบบมีโครงสร้าง:

```json
{
  "type": "canvas",
  "preview": {
    "kind": "canvas",
    "surface": "assistant_message",
    "render": "url",
    "viewId": "cv_123",
    "url": "/__openclaw__/canvas/documents/cv_123/index.html",
    "title": "Status",
    "preferredHeight": 320
  }
}
```

บล็อกแบบ rich ที่จัดเก็บไว้/เรนเดอร์แล้วจะใช้รูปแบบ `canvas` นี้โดยตรง `present_view` จะไม่ถูกรู้จัก

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

- [อะแดปเตอร์ RPC](/th/reference/rpc)
- [Typebox](/th/concepts/typebox)
