---
read_when:
    - การเปลี่ยนการแสดงผลผลลัพธ์ของผู้ช่วยในอินเทอร์เฟซควบคุม
    - การแก้จุดบกพร่องคำสั่งกำกับการนำเสนอสำหรับ `[embed ...]`, `MEDIA:`, การตอบกลับ หรือเสียง
summary: โปรโตคอลชอร์ตโค้ดสำหรับเอาต์พุตแบบสมบูรณ์สำหรับการฝัง สื่อ คำแนะนำด้านเสียง และการตอบกลับ
title: โปรโตคอลเอาต์พุตแบบสมบูรณ์
x-i18n:
    generated_at: "2026-05-02T22:22:59Z"
    model: gpt-5.5
    provider: openai
    source_hash: 8e0c365029c26d198090e1f181703e3979394afb0dfa1742f9c088885650de8b
    source_path: reference/rich-output-protocol.md
    workflow: 16
---

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

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

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

ไฟล์แนบ `MEDIA:` ภายในเครื่องสามารถใช้พาธแบบ absolute, พาธสัมพัทธ์กับ workspace หรือ
พาธสัมพัทธ์กับ home แบบ `~/` ได้ ไฟล์เหล่านี้ยังคงผ่านนโยบายการอ่านไฟล์ของ agent และ
การตรวจสอบประเภทสื่อก่อนส่งมอบ

ไวยากรณ์รูปภาพ Markdown แบบธรรมดาจะยังคงเป็นข้อความโดยค่าเริ่มต้น Channels ที่ตั้งใจ
แมปการตอบกลับรูปภาพ Markdown เป็นไฟล์แนบสื่อจะ opt in ที่ outbound
adapter ของตน Telegram ทำเช่นนี้เพื่อให้ `![alt](url)` ยังคงกลายเป็นการตอบกลับแบบสื่อได้

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

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

## `[embed ...]`

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

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

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

กฎ:

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

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

บล็อกเนื้อหาผู้ช่วยที่ normalized/จัดเก็บไว้คือรายการ `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 adapters](/th/reference/rpc)
- [Typebox](/th/concepts/typebox)
