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

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

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

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

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

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

payload ของเครื่องมือข้อความที่ถูกต้อง:

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

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

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

คำสั่งเหล่านี้แยกจากกัน ฟิลด์สื่อแบบมีโครงสร้างและแท็กตอบกลับ/เสียงเป็น
เมทาดาทาการส่งมอบ; `[embed ...]` คือเส้นทางการเรนเดอร์แบบริชสำหรับเว็บเท่านั้น

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

## `[embed ...]`

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

ตัวอย่างแบบปิดตัวเอง:

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

กฎ:

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

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

บล็อกเนื้อหาผู้ช่วยที่ผ่านการปรับรูปแบบ/จัดเก็บแล้วเป็นรายการ `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
  }
}
```

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

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

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