---
read_when:
    - การกำหนดค่าห้องกลุ่มหรือห้องช่องทางให้ทำงานตลอดเวลา
    - คุณต้องการให้เอเจนต์ติดตามบทสนทนาในห้องโดยไม่โพสต์ข้อความสุดท้ายโดยอัตโนมัติ
    - การดีบักสถานะกำลังพิมพ์และการใช้โทเค็นเมื่อไม่มีข้อความปรากฏในห้อง
sidebarTitle: Ambient room events
summary: ให้ห้องกลุ่มที่รองรับส่งบริบทแบบเงียบ เว้นแต่เอเจนต์จะส่งข้อความด้วยเครื่องมือข้อความ
title: เหตุการณ์แวดล้อมภายในห้อง
x-i18n:
    generated_at: "2026-07-12T15:52:07Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: 3f144b44c8ae0a78e756d741c7b4685632862c0eb15531185ddeb0c2ba801e1a
    source_path: channels/ambient-room-events.md
    workflow: 16
---

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

สำหรับแชตกลุ่มที่เปิดใช้งานตลอดเวลา ให้ใช้ `messages.groupChat.unmentionedInbound: "room_event"` ร่วมกับ `messages.groupChat.visibleReplies: "message_tool"` เอเจนต์จะรับฟัง ตัดสินใจว่าเมื่อใดควรตอบ และไม่จำเป็นต้องใช้รูปแบบพรอมต์แบบเดิมที่ตอบ `NO_REPLY`

ช่องทางที่รองรับในปัจจุบัน ได้แก่ ช่องกิลด์ Discord, ช่องสาธารณะและช่องส่วนตัวของ Slack, DM แบบหลายคนของ Slack และกลุ่มหรือซูเปอร์กรุ๊ป Telegram ช่องกลุ่มอื่น ๆ จะยังคงใช้พฤติกรรมกลุ่มเดิม เว้นแต่หน้าเอกสารของช่องนั้นจะระบุว่ารองรับเหตุการณ์ห้องแบบแวดล้อม

## การตั้งค่าที่แนะนำ

ตั้งค่าพฤติกรรมแชตกลุ่มส่วนกลาง:

```json5
{
  messages: {
    groupChat: {
      unmentionedInbound: "room_event",
      visibleReplies: "message_tool",
      historyLimit: 50,
    },
  },
}
```

จากนั้นทำให้ห้องเปิดใช้งานตลอดเวลาโดยปิดการจำกัดให้ต้องกล่าวถึงสำหรับห้องนั้น ห้องยังคงต้องผ่าน `groupPolicy` ปกติ รายการอนุญาตของห้อง และรายการอนุญาตของผู้ส่ง

หลังจากบันทึกการกำหนดค่า Gateway จะนำการตั้งค่า `messages` ไปใช้แบบทันที รีสตาร์ตเฉพาะเมื่อปิดการเฝ้าดูไฟล์หรือการโหลดการกำหนดค่าใหม่ (`gateway.reload.mode: "off"`)

## สิ่งที่เปลี่ยนแปลง

เมื่อใช้ `messages.groupChat.unmentionedInbound: "room_event"`:

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

เหตุการณ์ห้องใช้การส่งที่มองเห็นได้แบบเข้มงวด ข้อความสุดท้ายจากผู้ช่วยจะเป็นแบบส่วนตัว เอเจนต์ต้องเรียก `message(action=send)` เพื่อโพสต์ในห้อง

การแสดงสถานะกำลังพิมพ์และรีแอ็กชันสถานะวงจรการทำงานจะยังคงถูกระงับสำหรับเหตุการณ์ห้อง ข้อยกเว้นเดียวที่ยืนยันการรับอย่างชัดเจนคือ `messages.ackReactionScope: "all"` ซึ่งจะส่งรีแอ็กชันยืนยันการรับที่กำหนดค่าไว้ หากห้องต้องเงียบสนิท ให้ใช้ขอบเขตที่แคบกว่านั้นหรือ `"off"`

## ตัวอย่าง Discord

```json5
{
  messages: {
    groupChat: {
      unmentionedInbound: "room_event",
      visibleReplies: "message_tool",
      historyLimit: 50,
    },
  },
  channels: {
    discord: {
      groupPolicy: "allowlist",
      guilds: {
        "<DISCORD_SERVER_ID>": {
          requireMention: false,
          users: ["<YOUR_DISCORD_USER_ID>"],
        },
      },
    },
  },
}
```

ใช้การกำหนดค่า Discord แยกตามช่องเมื่อต้องการให้มีเพียงช่องเดียวเป็นแบบแวดล้อม ภายใต้ `groupPolicy: "allowlist"` การระบุช่องในรายการคือสิ่งที่อนุญาตช่องนั้น (`enabled: false` จะปิดใช้งานรายการ):

```json5
{
  channels: {
    discord: {
      groupPolicy: "allowlist",
      guilds: {
        "<DISCORD_SERVER_ID>": {
          channels: {
            "<DISCORD_CHANNEL_ID_OR_NAME>": {
              requireMention: false,
            },
          },
        },
      },
    },
  },
}
```

## ตัวอย่าง Slack

รายการอนุญาตช่อง Slack ใช้ ID เป็นหลัก ใช้ ID ช่อง เช่น `C12345678` ไม่ใช่ `#channel-name` การระบุช่องไว้ภายใต้ `channels.slack.channels` คือสิ่งที่อนุญาตช่องนั้น (`enabled: false` จะปิดใช้งานรายการ):

```json5
{
  messages: {
    groupChat: {
      unmentionedInbound: "room_event",
      visibleReplies: "message_tool",
      historyLimit: 50,
    },
  },
  channels: {
    slack: {
      groupPolicy: "allowlist",
      channels: {
        "<SLACK_CHANNEL_ID>": {
          requireMention: false,
        },
      },
    },
  },
}
```

## ตัวอย่าง Telegram

สำหรับกลุ่ม Telegram บอตต้องสามารถเห็นข้อความกลุ่มตามปกติได้ หากใช้ `requireMention: false` ให้ปิดโหมดความเป็นส่วนตัวของ BotFather หรือใช้การตั้งค่า Telegram รูปแบบอื่นที่ส่งทราฟฟิกทั้งหมดของกลุ่มไปยังบอต

```json5
{
  messages: {
    groupChat: {
      unmentionedInbound: "room_event",
      visibleReplies: "message_tool",
      historyLimit: 50,
    },
  },
  channels: {
    telegram: {
      groups: {
        "<TELEGRAM_GROUP_CHAT_ID>": {
          groupPolicy: "open",
          requireMention: false,
        },
      },
    },
  },
}
```

โดยทั่วไป ID กลุ่ม Telegram เป็นจำนวนลบ เช่น `-1001234567890` อ่าน `chat.id` จาก `openclaw logs --follow` ส่งต่อข้อความกลุ่มไปยังบอตช่วยค้นหา ID หรือตรวจสอบ `getUpdates` ของ Bot API

## นโยบายเฉพาะเอเจนต์

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

```json5
{
  messages: {
    groupChat: {
      visibleReplies: "message_tool",
    },
  },
  agents: {
    list: [
      {
        id: "main",
        groupChat: {
          unmentionedInbound: "room_event",
          mentionPatterns: ["@openclaw", "openclaw"],
        },
      },
    ],
  },
}
```

ค่า `agents.list[].groupChat.unmentionedInbound` เฉพาะเอเจนต์จะแทนที่ `messages.groupChat.unmentionedInbound` สำหรับเอเจนต์นั้น

## โหมดการตอบกลับที่มองเห็นได้

ค่าเริ่มต้นของ `messages.groupChat.visibleReplies` คือ `"automatic"` สำหรับคำขอของผู้ใช้ในกลุ่มหรือช่องตามปกติ ใช้ค่าเริ่มต้นนี้ต่อไปเมื่อต้องการให้ข้อความสุดท้ายจากผู้ช่วยถูกโพสต์ให้มองเห็นได้โดยไม่ต้องเรียกเครื่องมือส่งข้อความอย่างชัดเจน

สำหรับห้องแบบแวดล้อมที่เปิดใช้งานตลอดเวลา ยังคงแนะนำให้ใช้ `messages.groupChat.visibleReplies: "message_tool"` โดยเฉพาะกับโมเดลรุ่นล่าสุดที่เรียกใช้เครื่องมือได้อย่างเชื่อถือได้ เช่น GPT-5.6 Sol การตั้งค่านี้ช่วยให้เอเจนต์ตัดสินใจว่าจะพูดเมื่อใดด้วยการเรียกเครื่องมือส่งข้อความ หากโมเดลส่งคืนข้อความสุดท้ายโดยไม่เรียกเครื่องมือ OpenClaw จะเก็บข้อความสุดท้ายนั้นไว้เป็นส่วนตัวและบันทึกข้อมูลเมตาของการส่งที่ถูกระงับ

เหตุการณ์ห้องจะยังคงใช้โหมดเข้มงวด แม้ว่าคำขออื่นในกลุ่มจะใช้การตอบกลับอัตโนมัติก็ตาม เหตุการณ์ห้องแบบแวดล้อมที่ไม่ได้กล่าวถึงต้องใช้ `message(action=send)` เสมอเพื่อให้ผลลัพธ์มองเห็นได้

## ประวัติ

`messages.groupChat.historyLimit` กำหนดค่าเริ่มต้นส่วนกลางของประวัติกลุ่ม (50 เมื่อไม่ได้ตั้งค่า และต้องเป็นจำนวนเต็มบวก) ช่องต่าง ๆ สามารถแทนที่ค่านี้ด้วย `channels.<channel>.historyLimit` และบางช่องยังรองรับขีดจำกัดประวัติแยกตามบัญชีด้วย ตั้งค่า `historyLimit: 0` ที่ระดับช่องเพื่อปิดบริบทประวัติกลุ่มสำหรับช่องนั้น

ช่องที่รองรับเหตุการณ์ห้องจะเก็บข้อความห้องแบบแวดล้อมล่าสุดไว้เป็นบริบท Telegram เก็บหน้าต่างข้อความแบบเลื่อนต่อเนื่องแยกตามกลุ่มที่เปิดใช้งานตลอดเวลา โดยมีขอบเขตตาม `historyLimit` รอบคำขอของผู้ใช้จะเลือกรายการหลังจากการตอบกลับล่าสุดของบอตที่บันทึกไว้ ส่วนรอบเหตุการณ์ห้องจะได้รับหน้าต่างข้อความล่าสุดทั้งหมด เพื่อให้โมเดลเห็นโพสต์ล่าสุดของตนเอง คีย์โหมด Telegram `includeGroupHistoryContext` ที่เลิกใช้แล้วจะถูกนำออกโดย `openclaw doctor --fix`

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

หากห้องแสดงสถานะกำลังพิมพ์หรือการใช้โทเค็น แต่ไม่มีข้อความที่มองเห็นได้:

1. ยืนยันว่าห้องได้รับอนุญาตโดยรายการอนุญาตของช่องและรายการอนุญาตของผู้ส่ง
2. ยืนยันว่าได้ตั้งค่า `requireMention: false` ในระดับห้องที่ต้องการ
3. ตรวจสอบว่า `messages.groupChat.unmentionedInbound` หรือการกำหนดค่าทับของเอเจนต์เป็น `"room_event"` หรือไม่
4. ตรวจสอบบันทึกสำหรับข้อมูลเมตาของเพย์โหลดสุดท้ายที่ถูกระงับ หรือ `didSendViaMessagingTool: false`
5. สำหรับคำขอปกติในกลุ่ม ให้คงไว้หรือคืนค่า `messages.groupChat.visibleReplies: "automatic"` หากต้องการให้โพสต์คำตอบสุดท้ายโดยอัตโนมัติ สำหรับห้องแบบแวดล้อมที่ใช้ `message_tool` ให้ใช้โมเดลหรือรันไทม์ที่เรียกใช้เครื่องมือได้อย่างเชื่อถือได้

หากห้องแบบแวดล้อมของ Telegram ไม่ทริกเกอร์เลย ให้ตรวจสอบโหมดความเป็นส่วนตัวของ BotFather และยืนยันว่า Gateway ได้รับข้อความกลุ่มตามปกติ

หากห้องแบบแวดล้อมของ Slack ไม่ทริกเกอร์ ให้ตรวจสอบว่าคีย์ช่องเป็น ID ช่อง Slack และแอปมีขอบเขตสิทธิ์ประวัติสำหรับประเภทห้องนั้น ได้แก่ `channels:history` (สาธารณะ), `groups:history` (ส่วนตัว) หรือ `mpim:history` (DM แบบหลายคน)

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

- [กลุ่ม](/th/channels/groups)
- [Discord](/th/channels/discord)
- [Slack](/th/channels/slack)
- [Telegram](/th/channels/telegram)
- [การแก้ไขปัญหาช่อง](/th/channels/troubleshooting)
- [เอกสารอ้างอิงการกำหนดค่าช่อง](/th/gateway/config-channels)
