---
read_when:
    - การเปลี่ยนแปลงการแสดงผลลัพธ์ของผู้ช่วยใน UI ควบคุม
    - การดีบักคำสั่งการนำเสนอ `[embed ...]` สื่อแบบมีโครงสร้าง การตอบกลับ หรือเสียง
summary: โปรโตคอลเอาต์พุตแบบสมบูรณ์สำหรับสื่อที่มีโครงสร้าง เนื้อหาฝัง คำแนะนำด้านเสียง และการตอบกลับ
title: โปรโตคอลเอาต์พุตแบบสมบูรณ์
x-i18n:
    generated_at: "2026-07-12T16:41:39Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: cbfe68f38c871f5f6d2811eb52b18d0143606f30283023ae96db64543eed95a1
    source_path: reference/rich-output-protocol.md
    workflow: 16
---

เอาต์พุตของ Assistant ส่งคำสั่งกำกับการส่งมอบ/การแสดงผลผ่านช่องทางเฉพาะหลายช่องทาง:

- ฟิลด์ `mediaUrl` / `mediaUrls` แบบมีโครงสร้างสำหรับส่งไฟล์แนบ
- `[[audio_as_voice]]` สำหรับคำแนะนำการนำเสนอเสียง
- `[[reply_to_current]]` / `[[reply_to:<id>]]` สำหรับข้อมูลเมตาของการตอบกลับ
- `[embed ...]` สำหรับการแสดงผลแบบสมบูรณ์ใน Control UI

ฟิลด์สื่อแบบมีโครงสร้างและแท็ก `[[...]]` เป็นข้อมูลเมตาสำหรับการส่งมอบ ส่วน `[embed ...]` เป็นเส้นทางแยกสำหรับการแสดงผลแบบสมบูรณ์บนเว็บเท่านั้น ไม่ใช่นามแฝงของสื่อ

## ไฟล์แนบสื่อ

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

ไฟล์แนบในเครื่องรองรับพาธแบบสัมบูรณ์ พาธแบบสัมพัทธ์กับเวิร์กสเปซ หรือพาธ `~/` แบบสัมพัทธ์กับโฮม โดยไฟล์ยังต้องผ่านนโยบายการอ่านไฟล์ของเอเจนต์และการตรวจสอบประเภทสื่อก่อนส่งมอบ

<Warning>
อย่าส่งคำสั่งข้อความสำหรับไฟล์แนบจากเครื่องมือ, Plugin, บล็อกสตรีมมิง, เอาต์พุตของเบราว์เซอร์ หรือการดำเนินการกับข้อความ ให้ใช้ฟิลด์สื่อแบบมีโครงสร้างแทน:

```json
{ "message": "Here is your image.", "mediaUrl": "/workspace/image.png" }
```

ข้อความตอบกลับสุดท้ายแบบเดิมอาจยังได้รับการปรับให้อยู่ในรูปแบบมาตรฐานเพื่อความเข้ากันได้ แต่นี่ไม่ใช่โปรโตคอลทั่วไปสำหรับ Plugin/เครื่องมือ
</Warning>

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

เมื่อเปิดใช้การสตรีมแบบบล็อก สื่อต้องส่งผ่านฟิลด์เพย์โหลดแบบมีโครงสร้าง หาก URL สื่อเดียวกันปรากฏในบล็อกที่สตรีมและปรากฏอีกครั้งในเพย์โหลดสุดท้ายของ Assistant OpenClaw จะส่งสื่อนั้นเพียงครั้งเดียวและลบรายการซ้ำออกจากเพย์โหลดสุดท้าย

## `[embed ...]`

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

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

กฎ:

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

## รูปแบบการแสดงผลที่จัดเก็บ

บล็อกเนื้อหาของ Assistant ที่ปรับให้อยู่ในรูปแบบมาตรฐาน/จัดเก็บแล้วจะเป็นรายการ `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
  }
}
```

ระบบไม่รู้จัก `present_view` บล็อกแบบสมบูรณ์ที่จัดเก็บ/แสดงผลจะใช้รูปแบบ `canvas` นี้เสมอ

## เนื้อหาที่เกี่ยวข้อง

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