---
read_when:
    - การกำหนดค่ากลุ่ม WhatsApp โดยเฉพาะ
    - การเปลี่ยนโหมดการเปิดใช้งาน WhatsApp (`mention` เทียบกับ `always`)
    - การปรับแต่งคีย์เซสชันกลุ่ม WhatsApp หรือบริบทของข้อความที่รอดำเนินการ
sidebarTitle: WhatsApp groups
summary: การจัดการข้อความกลุ่ม WhatsApp — การเปิดใช้งาน รายการที่อนุญาต เซสชัน และการแทรกบริบท
title: ข้อความกลุ่ม WhatsApp
x-i18n:
    generated_at: "2026-07-16T18:43:04Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: bd1adb379a4cae4ee9b4b9950d7519e62e1fc0e72ece25ec1b337ee3cb803cda
    source_path: channels/group-messages.md
    workflow: 16
---

สำหรับโมเดลกลุ่มข้ามช่องทาง (Discord, iMessage, Matrix, Microsoft Teams, QQBot, Signal, Slack, Telegram, WhatsApp, Zalo) โปรดดู [กลุ่ม](/th/channels/groups) หน้านี้ครอบคลุมพฤติกรรมเฉพาะของ WhatsApp ที่ทำงานเพิ่มเติมจากโมเดลดังกล่าว ได้แก่ การเปิดใช้งาน รายการอนุญาตของกลุ่ม คีย์เซสชันแยกตามกลุ่ม และการแทรกบริบทของข้อความที่รอดำเนินการ

เป้าหมาย: ให้ OpenClaw อยู่ในกลุ่ม WhatsApp ตื่นขึ้นเฉพาะเมื่อถูกเรียก และแยกเธรดนั้นออกจากเซสชัน DM ส่วนตัว

<Note>
`agents.list[].groupChat.mentionPatterns` ใช้ร่วมกับการควบคุมด้วยการกล่าวถึงของช่องทางอื่น สำหรับการตั้งค่าแบบหลายเอเจนต์ ให้กำหนดค่านี้แยกตามเอเจนต์ หรือใช้ `messages.groupChat.mentionPatterns` เป็นค่าสำรองส่วนกลาง หากไม่ได้กำหนดทั้งสองค่า ระบบจะสร้างรูปแบบจากชื่อ/อีโมจิของข้อมูลประจำตัวเอเจนต์
</Note>

## พฤติกรรม

- โหมดการเปิดใช้งาน: `mention` (ค่าเริ่มต้น) หรือ `always` โดย `mention` ต้องมีการเรียก ได้แก่ การ @-กล่าวถึงจริงของ WhatsApp (`mentionedJids`) รูปแบบนิพจน์ทั่วไปที่กำหนดค่าไว้ เลข E.164 ของบอตที่ปรากฏตรงส่วนใดก็ได้ในข้อความ หรือการตอบกลับโดยอ้างข้อความใดข้อความหนึ่งของบอต (ยกเว้นการตั้งค่าแชตกับตนเองที่ใช้หมายเลขร่วมกัน) ส่วน `always` จะปลุกเอเจนต์ทุกครั้งที่มีข้อความ แต่พรอมต์กลุ่มที่แทรกเข้ามาจะสั่งให้ตอบเฉพาะเมื่อคำตอบมีประโยชน์ และในกรณีอื่นให้ส่งคืนโทเค็นเงียบ `NO_REPLY` ตรงตามนี้ (ไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่) ค่าเริ่มต้นมาจากการกำหนดค่า (`channels.whatsapp.groups` `requireMention`) และสามารถแทนที่แยกตามกลุ่มผ่าน `/activation`
- รายการอนุญาตของกลุ่ม: เมื่อกำหนด `channels.whatsapp.groups` ระบบจะยอมรับเฉพาะ JID ของกลุ่มที่ระบุไว้เท่านั้น (ใส่ `"*"` เพื่ออนุญาตทั้งหมด) ข้อความจากกลุ่มที่ไม่อยู่ในรายการจะถูกทิ้งพร้อมคำแนะนำในบันทึก
- นโยบายกลุ่ม: `channels.whatsapp.groupPolicy` ควบคุมว่าจะยอมรับข้อความกลุ่มหรือไม่ (`open|disabled|allowlist`) โดย `allowlist` ใช้ `channels.whatsapp.groupAllowFrom` (ค่าสำรอง: `channels.whatsapp.allowFrom` ที่ระบุอย่างชัดเจน) ค่าเริ่มต้นคือ `allowlist` (ถูกบล็อกจนกว่าจะเพิ่มผู้ส่ง)
- เซสชันแยกตามกลุ่ม: คีย์เซสชันมีรูปแบบคล้าย `agent:<agentId>:whatsapp:group:<jid>` (บัญชีที่ไม่ใช่ค่าเริ่มต้นจะต่อท้ายด้วย `:thread:whatsapp-account-<accountId>`) ดังนั้นคำสั่งกำกับ เช่น `/verbose on`, `/trace on` หรือ `/think high` (ส่งเป็นข้อความแยกเดี่ยว) จะมีขอบเขตเฉพาะกลุ่มนั้น โดยไม่กระทบสถานะ DM ส่วนตัว
- การแทรกบริบท: ข้อความกลุ่มที่ **รอดำเนินการเท่านั้น** (ค่าเริ่มต้น 50 ข้อความ) ซึ่ง _ไม่ได้_ ทริกเกอร์การทำงาน จะถูกเติมไว้ข้างหน้าภายใต้ `[Chat messages since your last reply - for context]` และบรรทัดที่ทริกเกอร์จะอยู่ภายใต้ `[Current message - respond to this]` หน้าต่างข้อความรอดำเนินการจะถูกล้างหลังการทำงาน และข้อความที่อยู่ในเซสชันแล้วจะไม่ถูกแทรกซ้ำ
- การระบุผู้ส่ง: แต่ละบรรทัดในกลุ่มจะมีป้ายกำกับผู้ส่งอยู่ภายในซองข้อความ เช่น `[WhatsApp <groupJid> <timestamp>] Alice (+447700900123): text` และข้อมูลประจำตัวผู้ส่ง รวมถึงหัวข้อ/สมาชิกของกลุ่ม จะถูกส่งไปพร้อมกันในบล็อกข้อมูลเมตาการสนทนาที่ไม่เชื่อถือ
- ข้อความชั่วคราว/ดูได้ครั้งเดียว: ระบบจะแกะตัวห่อหุ้มก่อนแยกข้อความ/การกล่าวถึง ดังนั้นการเรียกที่อยู่ภายในยังคงทริกเกอร์ได้
- พรอมต์ระบบของกลุ่ม: เทิร์นแรกของเซสชันกลุ่ม (และทุกเทิร์นหลังจาก `/activation` เปลี่ยนโหมด) จะแทรกคำแนะนำการเปิดใช้งานไว้ในพรอมต์ระบบ (`Activation: trigger-only ...` หรือ `Activation: always-on ...` รวมถึง "กล่าวตอบผู้ส่งรายนั้นโดยเฉพาะ") ระบบจะใส่คำแนะนำถาวรเกี่ยวกับการส่งข้อความในแชตกลุ่ม ("คุณอยู่ในแชตกลุ่ม WhatsApp...") เสมอ

## ตัวอย่างการกำหนดค่า (WhatsApp)

ทำให้การเรียกด้วยชื่อที่แสดงทำงานได้ แม้ WhatsApp จะตัด `@` ที่มองเห็นออกจากเนื้อหาข้อความ:

```json5
{
  channels: {
    whatsapp: {
      groups: {
        "*": { requireMention: true },
      },
      historyLimit: 50, // หน้าต่างบริบทกลุ่มที่รอดำเนินการ (ค่าเริ่มต้น 50)
    },
  },
  agents: {
    list: [
      {
        id: "main",
        groupChat: {
          mentionPatterns: ["@?openclaw", "\\+?15555550123"],
        },
      },
    ],
  },
}
```

หมายเหตุ:

- นิพจน์ทั่วไปไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่ และใช้ข้อจำกัดด้านความปลอดภัยของนิพจน์ทั่วไปแบบเดียวกับพื้นผิวการกำหนดค่าอื่น ระบบจะละเว้นรูปแบบที่ไม่ถูกต้องและการทำซ้ำซ้อนแบบไม่ปลอดภัย
- WhatsApp ยังคงส่งการกล่าวถึงตามรูปแบบมาตรฐานผ่าน `mentionedJids` เมื่อมีผู้แตะรายชื่อติดต่อ ดังนั้นจึงแทบไม่จำเป็นต้องใช้หมายเลขเป็นค่าสำรอง แต่ก็เป็นแนวป้องกันที่มีประโยชน์
- ระบบกำหนดหน้าต่างบริบทที่รอดำเนินการตามลำดับ `channels.whatsapp.accounts.<id>.historyLimit` → `channels.whatsapp.historyLimit` → `messages.groupChat.historyLimit` → 50

### คำสั่งเปิดใช้งาน (เจ้าของเท่านั้น)

ใช้คำสั่งแชตกลุ่ม:

- `/activation mention`
- `/activation always`

เฉพาะหมายเลขของเจ้าของ (จาก `channels.whatsapp.allowFrom` หรือหมายเลข E.164 ของบอตเองเมื่อไม่ได้กำหนดค่า) เท่านั้นที่เปลี่ยนค่านี้ได้ ระบบจะละเว้น `/activation` จากบุคคลอื่นและจัดเก็บเป็นบริบทเท่านั้น ส่ง `/status` เป็นข้อความแยกเดี่ยวในกลุ่มเพื่อดูโหมดการเปิดใช้งานปัจจุบัน

## วิธีใช้

1. เพิ่มบัญชี WhatsApp ของคุณ (บัญชีที่ใช้เรียกใช้ OpenClaw) เข้ากลุ่ม
2. ส่ง `@openclaw ...` (หรือใส่หมายเลขด้วย) เฉพาะผู้ส่งที่อยู่ในรายการอนุญาตเท่านั้นที่สามารถทริกเกอร์ได้ เว้นแต่จะกำหนด `groupPolicy: "open"`
3. พรอมต์ของเอเจนต์จะมีบริบทกลุ่มที่รอดำเนินการ พร้อมบรรทัดที่ติดป้ายกำกับผู้ส่ง เพื่อให้ตอบบุคคลที่ถูกต้องได้
4. คำสั่งกำกับเซสชัน (`/verbose on`, `/trace on`, `/think high`, `/new` หรือ `/reset`, `/compact`) จะใช้กับเซสชันของกลุ่มนั้นเท่านั้น โปรดส่งเป็นข้อความแยกเดี่ยวเพื่อให้ระบบบันทึกคำสั่ง เซสชัน DM ส่วนตัวจะยังคงเป็นอิสระจากกัน

## การทดสอบ / การตรวจสอบ

- การทดสอบเบื้องต้นด้วยตนเอง:
  - ส่งการเรียก `@openclaw` ในกลุ่ม และยืนยันว่าได้รับคำตอบที่อ้างถึงชื่อผู้ส่ง
  - ส่งการเรียกครั้งที่สองและตรวจสอบว่ามีบล็อกประวัติรวมอยู่ จากนั้นยืนยันว่าบล็อกถูกล้างในเทิร์นถัดไป
- ตรวจสอบบันทึกของ Gateway (เรียกใช้ด้วย `--verbose`) เพื่อหารายการ `inbound web message` ที่แสดง `from: <groupJid>` และเนื้อหาที่ติดป้ายกำกับผู้ส่ง

## ข้อควรพิจารณาที่ทราบ

- Heartbeat ทำงานในเซสชันหลักของเอเจนต์ เซสชันกลุ่มจะไม่ได้รับการทำงานของ Heartbeat
- การระงับข้อความสะท้อนจะจดจำพรอมต์ที่รวมกัน (ประวัติ + ข้อความปัจจุบัน) แยกตามเซสชัน เพื่อไม่ให้ข้อความที่บอตส่งเองทริกเกอร์การทำงานซ้ำ ระบบอาจข้ามชุดข้อความที่เหมือนกันทุกประการซึ่งเกิดซ้ำ โดยถือว่าเป็นข้อความสะท้อน
- รายการในที่จัดเก็บเซสชันจะแสดงเป็น `agent:<agentId>:whatsapp:group:<jid>` ในที่จัดเก็บเซสชัน SQLite แยกตามเอเจนต์ การไม่มีรายการเพียงหมายความว่ากลุ่มนั้นยังไม่เคยทริกเกอร์การทำงาน
- ตัวบ่งชี้การพิมพ์ทำงานตาม `session.typingMode` / `agents.defaults.typingMode` เมื่อกำหนดให้การตอบกลับที่มองเห็นได้ใช้โหมดเครื่องมือข้อความเท่านั้น โดยค่าเริ่มต้นการพิมพ์จะเริ่มทันที เพื่อให้สมาชิกกลุ่มเห็นว่าเอเจนต์กำลังทำงาน แม้ว่าจะไม่มีการโพสต์คำตอบสุดท้ายอัตโนมัติก็ตาม การกำหนดค่าโหมดการพิมพ์อย่างชัดเจนยังคงมีลำดับความสำคัญเหนือกว่า

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

- [กลุ่ม](/th/channels/groups)
- [การกำหนดเส้นทางช่องทาง](/th/channels/channel-routing)
- [กลุ่มกระจายข้อความ](/th/channels/broadcast-groups)
