---
read_when:
    - คุณกำลังสร้างหรือปรับโครงสร้างเส้นทางการรับข้อความของ Plugin ช่องทางการส่งข้อความ
    - คุณต้องใช้การสร้างบริบทขาเข้าร่วมกัน การบันทึกเซสชัน หรือการส่งคำตอบที่เตรียมไว้
    - คุณกำลังย้ายตัวช่วยรอบการสนทนาของช่องทางแบบเก่าไปยัง API สำหรับข้อความขาเข้าและข้อความ
summary: 'ตัวช่วยเหตุการณ์ขาเข้าสำหรับ Plugin ช่องทาง: การสร้างบริบท การควบคุมตัวรันที่ใช้ร่วมกัน การบันทึกเซสชัน และการส่งการตอบกลับที่เตรียมไว้'
title: API ขาเข้าของช่องทาง
x-i18n:
    generated_at: "2026-07-20T06:07:13Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: 7f702019b0ee35055edd6fdbccc190eee66f35419d918c50076a005072d3f8ec
    source_path: plugins/sdk-channel-inbound.md
    workflow: 16
---

เส้นทางการรับข้อมูลของช่องทางใช้โฟลว์เดียวกัน:

```text
เหตุการณ์ของแพลตฟอร์ม -> ข้อเท็จจริง/บริบทขาเข้า -> การตอบกลับของเอเจนต์ -> การส่งข้อความ
```

ใช้ `openclaw/plugin-sdk/channel-inbound` สำหรับการปรับเหตุการณ์ขาเข้าให้เป็นรูปแบบมาตรฐาน
การจัดรูปแบบ รูท และการประสานงาน ใช้
`openclaw/plugin-sdk/channel-outbound` สำหรับการส่งแบบเนทีฟ การรับ การส่งที่คงทน
และลักษณะการทำงานของตัวอย่างแบบสด

## ตัวช่วยหลัก

```ts
import {
  buildChannelInboundEventContext,
  runChannelInboundEvent,
  dispatchChannelInboundReply,
} from "openclaw/plugin-sdk/channel-inbound";
```

- `buildChannelInboundEventContext(...)`: แปลงข้อเท็จจริงของช่องทางที่ปรับเป็นรูปแบบมาตรฐานแล้ว
  ไปยังบริบทของพรอมต์/เซสชัน ส่งข้อมูลเมตาของผู้ส่ง/แชตที่ช่องทางเป็นเจ้าของ
  ผ่าน `channelContext` ซึ่งฮุกของ Plugin จะเห็นเป็น `ctx.channelContext`
  เพิ่มเติม `PluginHookChannelSenderContext` หรือ `PluginHookChannelChatContext`
  จากพาธย่อยนี้สำหรับฟิลด์เฉพาะช่องทาง
- `runChannelInboundEvent(...)`: ดำเนินการรับเข้า จำแนก ตรวจสอบเบื้องต้น แก้ไข
  บันทึก จัดส่ง และสรุปผลสำหรับเหตุการณ์แพลตฟอร์มขาเข้าหนึ่งเหตุการณ์
- `dispatchChannelInboundReply(...)`: บันทึกและจัดส่งการตอบกลับขาเข้าที่ประกอบเสร็จแล้ว
  ด้วยอะแดปเตอร์การส่ง

สำหรับเหตุการณ์ขาเข้าที่มีเฉพาะสื่อ ให้เว้นเนื้อหาข้อความและข้อความคำสั่งว่างไว้ และ
ส่งข้อเท็จจริง `ChannelInboundMediaInput` หนึ่งรายการต่อไฟล์แนบเนทีฟหนึ่งรายการ เมื่อบรรทัด
ประวัติโดยรอบหรือตัวนำส่งแบบข้อความเท่านั้นชนิดอื่นต้องอธิบายข้อเท็จจริงเหล่านั้น ให้ใช้
`formatMediaPlaceholderText(media)` ซึ่งจะจำแนกข้อเท็จจริงแต่ละรายการจาก `kind` ประเภท
MIME แล้วจึงพิจารณานามสกุลของพาธหรือ URL ส่วนไฟล์แนบเนทีฟที่ยังไม่ได้ดาวน์โหลดควร
ยังคงให้ข้อเท็จจริงที่ระบุเฉพาะประเภทหนึ่งรายการต่อไฟล์แนบหนึ่งรายการ อย่าใช้ตัวจัดรูปแบบเพื่อสังเคราะห์
เนื้อหาขาเข้าหลัก

ช่องทางแบบบันเดิล/เนทีฟที่ได้รับอ็อบเจ็กต์รันไทม์ของ Plugin ที่แทรกเข้ามาอยู่แล้ว
สามารถเรียกตัวช่วยเดียวกันภายใต้ `runtime.channel.inbound.*` แทนการ
นำเข้าพาธย่อยนี้โดยตรง:

```ts
await runtime.channel.inbound.run({
  channel: "demo",
  accountId,
  raw: platformEvent,
  adapter: {
    ingest: normalizePlatformEvent,
    resolveTurn: resolveInboundReply,
  },
});
```

ประกอบอินพุต `dispatchChannelInboundReply(...)` สำหรับตัวจัดส่งเพื่อความเข้ากันได้
ที่คงการส่งของแพลตฟอร์มไว้ในอะแดปเตอร์การส่ง พาธการส่งใหม่
ควรใช้อะแดปเตอร์ข้อความและตัวช่วยข้อความที่คงทนจาก
`channel-outbound` แทน

## การย้ายระบบ

นามแฝงรันไทม์ `runtime.channel.turn.*` ถูกนำออกแล้ว ให้ใช้:

- `runtime.channel.inbound.run(...)` สำหรับเหตุการณ์ขาเข้าดิบ
- `runtime.channel.inbound.dispatchReply(...)` สำหรับบริบทการตอบกลับที่ประกอบแล้ว
- `runtime.channel.inbound.buildContext(...)` สำหรับเพย์โหลดบริบทขาเข้า
- `runtime.channel.inbound.runPreparedReply(...)` ซึ่งเลิกแนะนำให้ใช้แล้ว ใช้เฉพาะสำหรับ
  พาธการจัดส่งที่เตรียมไว้ซึ่งช่องทางเป็นเจ้าของและประกอบคลอเชอร์
  การจัดส่งของตนเองอยู่แล้ว

โค้ด Plugin ใหม่ไม่ควรเพิ่ม API ช่องทางที่มีชื่อ `turn` ให้ใช้คำศัพท์เกี่ยวกับเทิร์นของโมเดลหรือ
เอเจนต์เฉพาะภายในโค้ดเอเจนต์/ผู้ให้บริการ ส่วน Plugin ช่องทางให้ใช้คำที่เกี่ยวกับข้อมูลขาเข้า
ข้อความ การส่ง และการตอบกลับ
