---
read_when:
    - การกำหนดค่าการอัปเดตความคืบหน้าที่มองเห็นได้สำหรับรอบการสนทนาที่ใช้เวลานาน
    - การเลือกระหว่างโหมดสตรีมแบบบางส่วน แบบบล็อก และแบบแสดงความคืบหน้า
    - อธิบายวิธีที่ OpenClaw อัปเดตข้อความหนึ่งรายการในช่องทางระหว่างที่งานกำลังดำเนินการ
    - ฉบับร่างความคืบหน้าในการแก้ไขปัญหา ข้อความความคืบหน้าแบบแยกเดี่ยว หรือทางเลือกสำรองเมื่อสรุปงานขั้นสุดท้าย
summary: 'ฉบับร่างแสดงความคืบหน้า: ข้อความระหว่างดำเนินการที่มองเห็นได้หนึ่งข้อความ ซึ่งจะอัปเดตขณะที่เอเจนต์ทำงาน'
title: ฉบับร่างความคืบหน้า
x-i18n:
    generated_at: "2026-07-16T19:02:33Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: 4ef66dd4d7a31c753f5faa0b88b83ec3760beecf3118cf8aae84f5e57652e809
    source_path: concepts/progress-drafts.md
    workflow: 16
---

ร่างความคืบหน้าเปลี่ยนข้อความหนึ่งข้อความในช่องทางให้เป็นบรรทัดสถานะแบบสดขณะที่
เอเจนต์กำลังทำงาน แทนที่จะเป็นชุดข้อความตอบกลับชั่วคราวว่า "ยังทำงานอยู่" ตั้งค่า
`channels.<channel>.streaming.mode: "progress"` แล้ว OpenClaw จะสร้าง
ข้อความเมื่อเริ่มงานจริง แก้ไขข้อความเมื่อเอเจนต์อ่าน วางแผน เรียกใช้
เครื่องมือ หรือรอการอนุมัติ จากนั้นเปลี่ยนข้อความนั้นเป็นคำตอบสุดท้าย

```text
กำลังทำงาน...
📖 จาก docs/concepts/progress-drafts.md
🔎 Web Search: สำหรับ "discord edit message"
🛠️ Bash: เรียกใช้การทดสอบ
```

<Note>
  Discord มีค่าเริ่มต้นเป็น `streaming.mode: "progress"` อยู่แล้วเมื่อ
  ไม่ได้ตั้งค่า `channels.discord.streaming` ดังนั้นร่างความคืบหน้า
  จึงแสดงที่นั่นโดยไม่ต้องกำหนดค่า ช่องทางอื่นทั้งหมดมีค่าเริ่มต้นเป็น `partial`
  หรือ `off`; ดูตารางค่าเริ่มต้นของแต่ละช่องทางฉบับเต็มได้ที่ [การสตรีมและการแบ่งส่วน](/th/concepts/streaming#channel-mapping)
</Note>

## เริ่มต้นอย่างรวดเร็ว

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
      },
    },
  },
}
```

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

หน้านี้อธิบายประสบการณ์การใช้งานร่างความคืบหน้าและตัวเลือกการกำหนดค่า สำหรับ
เมทริกซ์โหมดการสตรีมฉบับเต็ม หมายเหตุรันไทม์ของแต่ละช่องทาง และการย้ายคีย์
แบบเดิม โปรดดู [การสตรีมและการแบ่งส่วน](/th/concepts/streaming)

## สิ่งที่ผู้ใช้เห็น

| ส่วน            | วัตถุประสงค์                                                                           |
| --------------- | --------------------------------------------------------------------------------- |
| ส่วนหัวสถานะ | บน Discord และ Telegram จะแสดงคำนำของโมเดล ส่วน Discord จะเพิ่มข้อความเสริมจากโมเดลอรรถประโยชน์       |
| ป้ายชื่อ           | บรรทัดเริ่มต้น/สถานะที่เลือกใช้ได้ เช่น `Working`                                   |
| บรรทัดความคืบหน้า  | การอัปเดตการทำงานแบบกระชับโดยใช้ไอคอนเครื่องมือและตัวจัดรูปแบบรายละเอียดเดียวกับ `/verbose` |

สำหรับความคืบหน้าของเครื่องมือแบบดิบ ป้ายชื่อจะปรากฏเมื่อเอเจนต์เริ่มทำงานที่มีความหมาย
และยังคงทำงานอยู่ตลอดช่วงหน่วงเวลาเริ่มต้น
ป้ายชื่อจะอยู่ด้านบนของรายการบรรทัดความคืบหน้าที่เลื่อนต่อเนื่อง จึงเลื่อนหายไปเมื่อ
มีบรรทัดงานที่เป็นรูปธรรมปรากฏมากพอ ส่วนหัวสถานะจะแสดงเฉพาะสถานะของ
เอเจนต์ในภาษาธรรมดา เว้นแต่จะกำหนดป้ายชื่อไว้อย่างชัดเจน การตอบกลับที่มีแต่
ข้อความธรรมดาจะไม่แสดงร่างความคืบหน้า บรรทัดจะปรากฏเฉพาะเมื่อมีการอัปเดตงานจริง
เช่น `🛠️ Bash: run tests`, `🔎 Web Search: for "discord edit message"`
หรือ `✍️ Write: to /tmp/file`

คำตอบสุดท้ายจะแทนที่ร่างในตำแหน่งเดิมเมื่อช่องทางสามารถทำเช่นนั้นได้
อย่างปลอดภัย มิฉะนั้น OpenClaw จะส่งคำตอบสุดท้ายผ่านการนำส่งตามปกติ และ
ล้างหรือหยุดอัปเดตร่าง (ดู [การดำเนินการขั้นสุดท้าย](#finalization))

## เลือกโหมด

`channels.<channel>.streaming.mode` ควบคุมลักษณะการทำงานระหว่างดำเนินการที่มองเห็นได้:

| โหมด       | เหมาะที่สุดสำหรับ                         | สิ่งที่ปรากฏในแชต                              |
| ---------- | -------------------------------- | ------------------------------------------------- |
| `off`      | ช่องทางที่ต้องการความเงียบ                   | เฉพาะคำตอบสุดท้าย                            |
| `partial`  | การดูข้อความคำตอบค่อย ๆ ปรากฏ      | ร่างหนึ่งรายการที่แก้ไขด้วยข้อความคำตอบล่าสุด     |
| `block`    | ส่วนตัวอย่างคำตอบขนาดใหญ่ขึ้น     | ตัวอย่างหนึ่งรายการที่อัปเดตหรือต่อท้ายเป็นส่วนขนาดใหญ่ขึ้น |
| `progress` | รอบที่ใช้เครื่องมือมากหรือใช้เวลานาน | ร่างสถานะหนึ่งรายการ ตามด้วยคำตอบสุดท้าย          |

เลือก `progress` เมื่อผู้ใช้ให้ความสำคัญกับ "กำลังเกิดอะไรขึ้น" มากกว่าการดู
ข้อความคำตอบสตรีมทีละโทเค็น เลือก `partial` เมื่อข้อความคำตอบเองเป็น
สัญญาณความคืบหน้า และเลือก `block` สำหรับส่วนตัวอย่างขนาดใหญ่ขึ้น บน Discord และ
Telegram นั้น `streaming.mode: "block"` ยังคงเป็นการสตรีมตัวอย่าง ไม่ใช่การนำส่ง
การตอบกลับแบบบล็อกตามปกติ — ให้ใช้ `streaming.block.enabled` สำหรับกรณีนั้น

## กำหนดค่าป้ายชื่อ

ป้ายชื่อความคืบหน้าอยู่ภายใต้ `channels.<channel>.streaming.progress` ป้ายชื่อ
บรรทัดเครื่องมือแบบดิบเริ่มต้นคือ `"auto"` ซึ่งใช้ป้ายชื่อ `Working`
แบบธรรมดาที่มีมาในตัว ส่วนหัวสถานะจะซ่อนป้ายชื่อโดยนัยนั้น ให้ตั้งค่า
`label: "auto"` อย่างชัดเจนหากต้องการให้มีป้ายชื่ออยู่เหนือส่วนหัวด้วย:

```text
กำลังทำงาน
```

ใช้ป้ายชื่อแบบคงที่:

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          label: "Investigating",
        },
      },
    },
  },
}
```

ใช้กลุ่มป้ายชื่อของคุณเอง (ยังคงเลือกแบบสุ่ม/ตาม seed เมื่อเป็น `label: "auto"`):

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          label: "auto",
          labels: ["Checking", "Reading", "Testing", "Finishing"],
        },
      },
    },
  },
}
```

ซ่อนป้ายชื่อและแสดงเฉพาะบรรทัดความคืบหน้า:

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          label: false,
        },
      },
    },
  },
}
```

## ควบคุมบรรทัดความคืบหน้า

บรรทัดความคืบหน้ามาจากเหตุการณ์การทำงานจริง ได้แก่ การเริ่มเครื่องมือ การอัปเดตรายการ แผนงาน
การอนุมัติ เอาต์พุตคำสั่ง สรุปแพตช์ และกิจกรรมอื่นที่คล้ายกันของเอเจนต์
โดยเปิดใช้งานเป็นค่าเริ่มต้น (`progress.toolProgress`, ค่าเริ่มต้น `true`)

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

```json
{
  "content": [],
  "progress": {
    "text": "Fetching page content...",
    "visibility": "channel",
    "privacy": "public",
    "id": "web_fetch:fetching"
  }
}
```

OpenClaw แสดงเฉพาะ `progress.text` ใน UI ความคืบหน้าของช่องทาง ผลลัพธ์
เครื่องมือตามปกติจะมาถึงภายหลังในรูปแบบ `content`/`details` และเป็นเพียงส่วนเดียว
ที่ส่งคืนให้โมเดล

เมื่อเพิ่มความคืบหน้าให้เครื่องมือ ให้ส่งข้อความสั้น ๆ แบบทั่วไป และหน่วงไว้
จนกว่าการดำเนินการจะค้างอยู่นานพอที่จะมีประโยชน์ `web_fetch`
ทำเช่นนี้โดยใช้เวลาหน่วง 5 วินาที:

```typescript
const clearProgressTimer = scheduleToolProgress(
  onUpdate,
  { text: "Fetching page content...", id: "web_fetch:fetching" },
  5_000,
  { signal },
);

try {
  return await runToolWork();
} finally {
  clearProgressTimer();
}
```

การเรียกที่รวดเร็วจะไม่แสดงบรรทัดความคืบหน้า การเรียกที่ใช้เวลานานจะแสดงหนึ่งบรรทัดขณะที่ยังค้างอยู่
ส่วนการเรียกที่ถูกยกเลิกจะล้างตัวจับเวลาก่อนที่ความคืบหน้าที่ล้าสมัยจะปรากฏ ข้อความความคืบหน้า
เป็นช่องทางเสริมของ UI สาธารณะ ดังนั้นต้องไม่มีข้อมูลลับ อาร์กิวเมนต์ดิบ
เนื้อหาที่ดึงมา เอาต์พุตคำสั่ง หรือข้อความจากหน้าเว็บโดยเด็ดขาด

### โหมดรายละเอียด

OpenClaw ใช้ตัวจัดรูปแบบเดียวกันสำหรับร่างความคืบหน้าและ `/verbose`:

```json5
{
  agents: {
    defaults: {
      toolProgressDetail: "explain", // explain | raw
    },
  },
}
```

`"explain"` เป็นค่าเริ่มต้นและช่วยให้ร่างคงที่ด้วยป้ายชื่อที่กระชับ
`"raw"` จะต่อท้ายคำสั่งเบื้องหลังเมื่อมี ซึ่งมีประโยชน์ระหว่าง
การแก้จุดบกพร่อง แต่ทำให้แชตมีข้อมูลรบกวนมากขึ้น ตัวอย่างเช่น การเรียก `node --check /tmp/app.js`
จะแสดงแตกต่างกันตามโหมด:

| โหมด      | บรรทัดความคืบหน้า                                                   |
| --------- | --------------------------------------------------------------- |
| `explain` | `🛠️ check js syntax for /tmp/app.js`                            |
| `raw`     | `🛠️ check js syntax for /tmp/app.js · node --check /tmp/app.js` |

### ข้อความคำสั่ง/exec

`streaming.progress.commandText` (ค่าเริ่มต้น `"raw"`) ควบคุมปริมาณรายละเอียดคำสั่ง
ที่แสดงถัดจากบรรทัดความคืบหน้าของ exec/bash โดยไม่ขึ้นกับโหมดรายละเอียด
ด้านบน ตั้งค่าเป็น `"status"` เพื่อให้บรรทัดความคืบหน้าของเครื่องมือยังคงมองเห็นได้ขณะซ่อน
ข้อความคำสั่งทั้งหมด:

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          commandText: "status",
        },
      },
    },
  },
}
```

### ช่องทางคำบรรยาย

`streaming.progress.commentary` (ค่าเริ่มต้น `false`) จะแทรกคำบรรยาย
ความคิดเห็น/คำนำก่อนใช้เครื่องมือของโมเดล (💬 เช่น "ฉันจะตรวจสอบ... จากนั้น
...") สลับกับบรรทัดเครื่องมือในร่าง ดูรูปแบบการกำหนดค่าที่ใช้ร่วมกันระหว่างช่องทางได้ที่
[การสตรีมและการแบ่งส่วน](/th/concepts/streaming#commentary-progress-lane)

เมื่อเปิดใช้งานช่องทางคำบรรยาย คำนำจะแสดงเฉพาะเป็นบรรทัด 💬 ที่แทรกสลับกัน
ส่วนหัวสถานะด้านล่างจะไม่เข้ามารบกวน เพื่อให้ช่องทางคงรูปแบบ
ตามที่ระบุไว้ในเอกสาร

### ส่วนหัวสถานะ

บน Discord และ Telegram ในโหมดความคืบหน้า คำนำก่อนใช้เครื่องมือแบบมีชนิดของโมเดล
จะกลายเป็นส่วนหัวสถานะของร่างเมื่อมีข้อมูล ช่องทางอื่น
ในโหมดความคืบหน้าจะคงพฤติกรรมสถานะเดิม ส่วนหัวเปิดใช้งาน
เป็นค่าเริ่มต้นและไม่ข้ามเกณฑ์กิจกรรมตามปกติสำหรับรอบสั้น ๆ
การเปิดใช้ `streaming.progress.commentary` จะส่งคำนำไปยัง
ช่องทางคำบรรยายแบบแทรกสลับแทน

บน Discord เมื่อมีการเลือกโมเดลอรรถประโยชน์สำหรับเอเจนต์ — ไม่ว่าจะเป็น
[`utilityModel`](/th/gateway/config-agents#utilitymodel) ที่ระบุอย่างชัดเจน หรือค่าเริ่มต้น
โมเดลขนาดเล็กที่ประกาศโดยผู้ให้บริการหลัก (OpenAI → `gpt-5.6-luna`,
Anthropic → `claude-haiku-4-5`) — โมเดลนั้นจะสร้างข้อความเสริมสั้น ๆ ในภาษาธรรมดา
เมื่อโมเดลไม่ส่งคำนำหรือเงียบไปประมาณ 20 วินาที
(ปัจจุบันส่วนหัวของ Telegram ใช้เฉพาะคำนำ):

```text
กำลังอัปเดตโมเดลเริ่มต้นในการกำหนดค่าของคุณ จากนั้นจะรีสตาร์ต Gateway เพื่อให้
การเปลี่ยนแปลงมีผล การเรียกรายการเอเจนต์หนึ่งครั้งล้มเหลวและกำลังลองใหม่
```

คำบรรยายจากโมเดลอรรถประโยชน์เปิดใช้งานเป็นค่าเริ่มต้น (`streaming.progress.narration`, ค่าเริ่มต้น
`true`) และจะไม่ย้อนกลับไปใช้โมเดลหลัก โดยจะทำงานเฉพาะเมื่อมี
`utilityModel` ที่ระบุอย่างชัดเจน หรือค่าเริ่มต้นที่ผู้ให้บริการประกาศไว้สำหรับ
ผู้ให้บริการหลักของเอเจนต์ ตั้งค่า `utilityModel: ""` เพื่อปิดใช้งานการกำหนดเส้นทาง
โมเดลอรรถประโยชน์ทั้งหมด บรรทัดเครื่องมือจะยังคงสะสมอยู่ด้านล่างและกลับมาแสดง
หากแหล่งสถานะทั้งสองหยุดทำงาน การแก้ไขร่างยังคงรอเกณฑ์กิจกรรมตามปกติและ
การเปลี่ยนแปลงข้อความจริง ซึ่งช่วยหลีกเลี่ยงการกะพริบในรอบที่รวดเร็วและลดการแก้ไขซ้ำ ๆ
ในช่องทางที่มีการใช้งานหนาแน่น ตั้งค่า `narration: false` เพื่อปิดใช้งานเฉพาะข้อความเสริม
จากโมเดลอรรถประโยชน์ ส่วนหัวคำนำของโมเดลจะยังคงเปิดใช้งาน:

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          narration: false,
        },
      },
    },
  },
}
```

อินพุตคำบรรยายมีขอบเขตจำกัดและผ่านการปกปิดข้อมูล โมเดลอรรถประโยชน์จะได้รับ
ข้อความคำขอขาเข้า พร้อมกับสรุปเครื่องมือแบบกระชับและปกปิดข้อมูลชุดเดียวกับที่ร่าง
จะแสดง — ไม่ได้รับเอาต์พุตคำสั่งดิบหรือผลลัพธ์เครื่องมือโดยเด็ดขาด เมื่อใช้
`commandText: "status"` อินพุตคำบรรยายจะละข้อความคำสั่ง exec/bash ด้วย
ให้ตรงกับสิ่งที่ร่างแสดง

### ขีดจำกัดบรรทัด

จำกัดจำนวนบรรทัดที่ยังคงมองเห็นได้ (ค่าเริ่มต้น 8):

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          maxLines: 4,
        },
      },
    },
  },
}
```

บรรทัดความคืบหน้าจะถูกย่อโดยอัตโนมัติเพื่อลดการจัดวางกรอบข้อความแชตใหม่ขณะ
แก้ไขร่าง และ OpenClaw จะตัดบรรทัดที่ยาวเพื่อให้การแก้ไขร่างซ้ำ ๆ
ไม่ตัดบรรทัดต่างกันในทุกการอัปเดต งบประมาณเริ่มต้นต่อบรรทัดคือ 120
อักขระ ข้อความร้อยแก้วจะตัดที่ขอบเขตคำ ส่วนรายละเอียดที่ยาว เช่น พาธหรือ
คำสั่งดิบ จะย่อด้วยจุดไข่ปลาตรงกลางเพื่อให้ส่วนท้ายยังคงมองเห็นได้

ปรับงบประมาณต่อบรรทัด:

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          maxLineChars: 160,
        },
      },
    },
  },
}
```

### การแสดงผลแบบสมบูรณ์ (Slack)

Slack สามารถแสดงบรรทัดความคืบหน้าเป็นฟิลด์ Block Kit ที่มีโครงสร้างแทน
ข้อความธรรมดา:

```json5
{
  channels: {
    slack: {
      streaming: {
        mode: "progress",
        progress: {
          render: "rich",
        },
      },
    },
  },
}
```

การแสดงผลแบบสมบูรณ์จะส่งเนื้อหาข้อความธรรมดาชุดเดียวกันไปพร้อมกับฟิลด์ Block Kit
เสมอ ดังนั้นไคลเอนต์ที่ไม่สามารถแสดงรูปแบบที่สมบูรณ์กว่ายังคงแสดงข้อความ
ความคืบหน้าแบบกระชับได้

### ซ่อนบรรทัดเครื่องมือ/งาน

คงร่างความคืบหน้ารายการเดียวไว้ แต่ซ่อนบรรทัดเครื่องมือและงาน:

```json5
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          toolProgress: false,
        },
      },
    },
  },
}
```

เมื่อใช้ `toolProgress: false` OpenClaw จะยังคงระงับข้อความความคืบหน้าของเครื่องมือแบบแยกเดี่ยวรุ่นเก่าสำหรับรอบนั้น ช่องจึงดูเงียบจนกว่าคำตอบสุดท้ายจะปรากฏ ยกเว้นป้ายกำกับหากมีการกำหนดค่าไว้

## พฤติกรรมของช่อง

| ช่อง             | การส่งความคืบหน้า                         | หมายเหตุ                                                                                                                                                  |
| --------------- | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Discord         | ส่งหนึ่งข้อความแล้วแก้ไขข้อความนั้น        | ค่าเริ่มต้นคือโหมด `progress` โดยคำตอบสุดท้ายจะมีใบรับรองกิจกรรม `-#` และฉบับร่างสถานะจะถูกลบหลังจากส่งคำตอบสำเร็จ                     |
| Matrix          | ส่งหนึ่งเหตุการณ์แล้วแก้ไขเหตุการณ์นั้น     | การกำหนดค่าสตรีมมิงระดับบัญชีควบคุมฉบับร่างระดับบัญชี                                                                                             |
| Microsoft Teams | สตรีมแบบเนทีฟของ Teams ในแชตส่วนตัว       | `streaming.mode: "block"` จะถูกแมปเป็นการส่งแบบบล็อกของ Teams แทน                                                                                           |
| Slack           | สตรีมแบบเนทีฟหรือโพสต์ฉบับร่างที่แก้ไขได้   | ต้องมีเธรดเป้าหมายสำหรับการตอบกลับ ส่วน DM ระดับบนสุดที่ไม่มีเธรดเป้าหมายจะยังคงได้รับโพสต์แสดงตัวอย่างฉบับร่างและการแก้ไข                                                           |
| Telegram        | ส่งหนึ่งข้อความแล้วแก้ไขข้อความนั้น        | หากมีข้อความเข้ามาระหว่างฉบับร่างความคืบหน้ากับคำตอบ ระบบจะโพสต์ฉบับร่างใหม่ไว้ด้านล่างข้อความนั้น (โพสต์ข้อความใหม่แล้วลบข้อความเก่า) แทนการทำให้หน้าจอไคลเอนต์เลื่อนข้ามตำแหน่ง |
| Mattermost      | โพสต์ฉบับร่างที่แก้ไขได้                   | โหมด `block` จะสลับระหว่างข้อความที่เสร็จสมบูรณ์กับโพสต์กิจกรรมของเครื่องมือ ส่วนโหมดอื่นจะรวมกิจกรรมของเครื่องมือไว้ในโพสต์แบบฉบับร่างเดียวกัน                       |

ช่องที่ไม่รองรับการแก้ไขอย่างปลอดภัยจะใช้ตัวบ่งชี้การพิมพ์หรือการส่งเฉพาะ
คำตอบสุดท้ายแทน ดูรายละเอียดพฤติกรรมรันไทม์ทั้งหมดแยกตามช่องได้ที่
[การสตรีมและการแบ่งส่วน](/th/concepts/streaming)

## การทำให้เสร็จสมบูรณ์

เมื่อคำตอบสุดท้ายพร้อมแล้ว OpenClaw จะพยายามรักษาความเรียบร้อยของแชต:

- ในโหมด `progress` บน Discord คำตอบสุดท้ายจะถูกส่งเป็นข้อความใหม่
  พร้อมแนบใบรับรองกิจกรรม `-#` ขนาดเล็ก (เช่น
  `-# 🧠 2 thoughts · 🛠️ 5 tool calls · ⏱️ 12s`) และฉบับร่างสถานะจะ
  ถูกลบเมื่อส่งคำตอบนั้นสำเร็จแล้ว ช่องที่มีข้อความหนาแน่นจะไม่มีบันทึก
  เครื่องมือกำพร้าค้างอยู่เหนือคำตอบ ส่วนคำตอบสุดท้ายที่เป็นข้อผิดพลาดจะเก็บฉบับร่างไว้เป็นบันทึกที่มองเห็นได้ของ
  รอบที่ล้มเหลว
- หากสามารถเปลี่ยนฉบับร่างเป็นคำตอบสุดท้ายได้อย่างปลอดภัย (โหมด `partial`/`block`)
  OpenClaw จะแก้ไขฉบับร่างนั้นโดยตรง
- หากช่องใช้การสตรีมความคืบหน้าแบบเนทีฟ OpenClaw จะทำให้
  สตรีมนั้นเสร็จสมบูรณ์เมื่อระบบส่งแบบเนทีฟยอมรับข้อความสุดท้าย
- ในกรณีอื่น (มีสื่อ พรอมต์ขออนุมัติ เป้าหมายการตอบกลับที่ระบุชัดเจน จำนวน
  ส่วนมากเกินไป หรือการแก้ไข/ส่งล้มเหลว) OpenClaw จะส่งคำตอบสุดท้ายผ่าน
  เส้นทางการส่งตามปกติของช่องแทนการเขียนทับฉบับร่าง

การใช้ทางเลือกสำรองนี้เป็นความตั้งใจ เพราะการส่งคำตอบสุดท้ายเป็นข้อความใหม่
ดีกว่าการสูญเสียข้อความ การผูกคำตอบเข้ากับเธรดผิด หรือการเขียนทับฉบับร่างด้วยเพย์โหลดที่ช่อง
ไม่สามารถแสดงผลได้อย่างปลอดภัย

## การแก้ไขปัญหา

**ฉันเห็นเฉพาะคำตอบสุดท้าย**

ตรวจสอบว่า `channels.<channel>.streaming.mode` เป็น `progress` สำหรับบัญชี
หรือช่องที่จัดการข้อความ เส้นทางของกลุ่มหรือการตอบกลับแบบอ้างข้อความบางแบบจะปิดใช้
การแสดงตัวอย่างฉบับร่างสำหรับรอบนั้น เมื่อช่องไม่สามารถแก้ไขข้อความที่ถูกต้อง
ได้อย่างปลอดภัย

**ฉันเห็นป้ายกำกับแต่ไม่เห็นบรรทัดของเครื่องมือ**

ตรวจสอบ `streaming.progress.toolProgress` หากเป็น `false` OpenClaw จะคง
พฤติกรรมฉบับร่างเดียวไว้ แต่ซ่อนบรรทัดความคืบหน้าของเครื่องมือและงาน

**ฉันเห็นคำตอบสุดท้ายเป็นข้อความใหม่แทนฉบับร่างที่ถูกแก้ไข**

นี่คือทางเลือกสำรองเพื่อความปลอดภัยที่อธิบายไว้ใน [การทำให้เสร็จสมบูรณ์](#finalization) กรณีนี้อาจ
เกิดขึ้นกับคำตอบที่มีสื่อ คำตอบที่ยาว เป้าหมายการตอบกลับที่ระบุชัดเจน ฉบับร่าง Telegram
ที่เก่า เธรดเป้าหมายของ Slack ที่ขาดหายไป ข้อความแสดงตัวอย่างที่ถูกลบ หรือการทำให้
สตรีมแบบเนทีฟเสร็จสมบูรณ์ล้มเหลว

**ฉันยังคงเห็นข้อความความคืบหน้าแบบแยกเดี่ยว**

โหมดความคืบหน้าจะระงับข้อความความคืบหน้าของเครื่องมือแบบแยกเดี่ยวตามค่าเริ่มต้นทุกครั้งที่มี
ฉบับร่างทำงานอยู่ หากข้อความแบบแยกเดี่ยวยังคงปรากฏ ให้ยืนยันว่ารอบนั้น
กำลังใช้โหมด `progress` จริง ไม่ใช่ `streaming.mode: "off"` หรือเส้นทางของช่อง
ที่ไม่สามารถสร้างฉบับร่างสำหรับข้อความนั้นได้

**Teams ทำงานต่างจาก Discord หรือ Telegram**

Microsoft Teams ใช้สตรีมแบบเนทีฟในแชตส่วนตัวแทนระบบส่งและแก้ไข
สำหรับการแสดงตัวอย่างทั่วไป และแมป `streaming.mode: "block"` เป็น
การส่งแบบบล็อกของ Teams เนื่องจากไม่มีโหมดบล็อกสำหรับการแสดงตัวอย่างฉบับร่างเช่นเดียวกับ Discord และ
Telegram

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

- [การสตรีมและการแบ่งส่วน](/th/concepts/streaming)
- [ข้อความ](/th/concepts/messages)
- [การกำหนดค่าช่อง](/th/gateway/config-channels)
- [Discord](/th/channels/discord)
- [Matrix](/th/channels/matrix)
- [Microsoft Teams](/th/channels/msteams)
- [Slack](/th/channels/slack)
- [Telegram](/th/channels/telegram)
- [Mattermost](/th/channels/mattermost)
