---
read_when:
    - การกำหนดค่ากลุ่ม WhatsApp โดยเฉพาะ
    - การเปลี่ยนโหมดการเปิดใช้งาน WhatsApp (`mention` เทียบกับ `always`)
    - การปรับแต่งคีย์เซสชันกลุ่ม WhatsApp หรือบริบทข้อความที่ค้างอยู่
sidebarTitle: WhatsApp groups
summary: การจัดการข้อความกลุ่ม WhatsApp — การเปิดใช้งาน รายการอนุญาต เซสชัน และการแทรกบริบท
title: ข้อความในกลุ่ม WhatsApp
x-i18n:
    generated_at: "2026-05-06T09:02:20Z"
    model: gpt-5.5
    provider: openai
    source_hash: 489f04ea9f4d0954f77eee4590d609383d5dc987eaaea5eb121b454620a2d0fe
    source_path: channels/group-messages.md
    workflow: 16
---

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

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

<Note>
`agents.list[].groupChat.mentionPatterns` ยังใช้โดย Telegram, Discord, Slack และ iMessage ด้วย สำหรับการตั้งค่าหลายเอเจนต์ ให้ตั้งค่าต่อเอเจนต์ หรือใช้ `messages.groupChat.mentionPatterns` เป็นค่าทดแทนส่วนกลาง
</Note>

## พฤติกรรม

- โหมดการเปิดใช้งาน: `mention` (ค่าเริ่มต้น) หรือ `always` `mention` ต้องมีการเรียก (การ @-mention จริงของ WhatsApp ผ่าน `mentionedJids`, รูปแบบ regex ที่ปลอดภัย หรือ E.164 ของบอตที่ปรากฏที่ใดก็ได้ในข้อความ) `always` จะปลุกเอเจนต์ในทุกข้อความ แต่ควรตอบเฉพาะเมื่อสามารถเพิ่มคุณค่าได้อย่างมีความหมาย มิฉะนั้นจะคืนโทเค็นเงียบที่ตรงตัวคือ `NO_REPLY` / `no_reply` สามารถตั้งค่าเริ่มต้นได้ใน config (`channels.whatsapp.groups`) และเขียนทับต่อกลุ่มได้ผ่าน `/activation` เมื่อตั้งค่า `channels.whatsapp.groups` แล้ว ค่านี้ยังทำหน้าที่เป็นรายการอนุญาตของกลุ่มด้วย (ใส่ `"*"` เพื่ออนุญาตทั้งหมด)
- นโยบายกลุ่ม: `channels.whatsapp.groupPolicy` ควบคุมว่าจะรับข้อความกลุ่มหรือไม่ (`open|disabled|allowlist`) `allowlist` ใช้ `channels.whatsapp.groupAllowFrom` (ค่าทดแทน: `channels.whatsapp.allowFrom` ที่ระบุอย่างชัดเจน) ค่าเริ่มต้นคือ `allowlist` (ถูกบล็อกจนกว่าคุณจะเพิ่มผู้ส่ง)
- เซสชันรายกลุ่ม: คีย์เซสชันมีรูปแบบเช่น `agent:<agentId>:whatsapp:group:<jid>` ดังนั้นคำสั่งอย่าง `/verbose on`, `/trace on` หรือ `/think high` (ส่งเป็นข้อความเดี่ยวแยกต่างหาก) จะถูกจำกัดขอบเขตไว้ที่กลุ่มนั้น สถานะ DM ส่วนตัวจะไม่ถูกแตะต้อง Heartbeat จะถูกข้ามสำหรับเธรดกลุ่ม
- การแทรกบริบท: ข้อความกลุ่ม **เฉพาะที่รอดำเนินการ** (ค่าเริ่มต้น 50) ที่ _ไม่ได้_ กระตุ้นการรัน จะถูกเติมคำนำหน้าภายใต้ `[Chat messages since your last reply - for context]` พร้อมบรรทัดที่กระตุ้นภายใต้ `[Current message - respond to this]` ข้อความที่อยู่ในเซสชันแล้วจะไม่ถูกแทรกซ้ำ
- การแสดงผู้ส่ง: ตอนนี้ทุกชุดข้อความกลุ่มจะลงท้ายด้วย `[from: Sender Name (+E164)]` เพื่อให้ Pi รู้ว่าใครกำลังพูด
- ข้อความชั่วคราว/ดูได้ครั้งเดียว: เราแกะข้อความเหล่านี้ก่อนดึงข้อความ/mentions ดังนั้นการเรียกที่อยู่ข้างในยังคงกระตุ้นได้
- system prompt ของกลุ่ม: ในเทิร์นแรกของเซสชันกลุ่ม (และทุกครั้งที่ `/activation` เปลี่ยนโหมด) เราจะแทรกข้อความสั้น ๆ ลงใน system prompt เช่น `You are replying inside the WhatsApp group "<subject>". Group members: Alice (+44...), Bob (+43...), ... Activation: trigger-only ... Address the specific sender noted in the message context.` หากไม่มี metadata เราจะยังบอกเอเจนต์ว่าเป็นแชตกลุ่ม

## ตัวอย่าง config (WhatsApp)

เพิ่มบล็อก `groupChat` ลงใน `~/.openclaw/openclaw.json` เพื่อให้การเรียกด้วยชื่อที่แสดงทำงานได้ แม้ WhatsApp จะตัด `@` ที่มองเห็นในเนื้อหาข้อความออก:

```json5
{
  channels: {
    whatsapp: {
      groups: {
        "*": { requireMention: true },
      },
    },
  },
  agents: {
    list: [
      {
        id: "main",
        groupChat: {
          historyLimit: 50,
          mentionPatterns: ["@?openclaw", "\\+?15555550123"],
        },
      },
    ],
  },
}
```

หมายเหตุ:

- regex ไม่คำนึงถึงตัวพิมพ์ใหญ่เล็ก และใช้ข้อจำกัด safe-regex แบบเดียวกับพื้นผิว regex ของ config อื่น ๆ รูปแบบที่ไม่ถูกต้องและการทำซ้ำแบบซ้อนที่ไม่ปลอดภัยจะถูกละเว้น
- WhatsApp ยังคงส่ง mentions แบบมาตรฐานผ่าน `mentionedJids` เมื่อมีคนแตะรายชื่อติดต่อ ดังนั้นค่าทดแทนที่เป็นหมายเลขจึงแทบไม่จำเป็น แต่เป็นตาข่ายนิรภัยที่มีประโยชน์

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

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

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

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

## วิธีใช้งาน

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

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

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

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

- Heartbeat จะถูกข้ามสำหรับกลุ่มโดยตั้งใจ เพื่อหลีกเลี่ยงการออกอากาศที่รบกวน
- การระงับ echo ใช้สตริงชุดข้อความรวม หากคุณส่งข้อความเหมือนกันสองครั้งโดยไม่มี mentions จะมีเพียงครั้งแรกที่ได้รับคำตอบ
- รายการในที่เก็บเซสชันจะปรากฏเป็น `agent:<agentId>:whatsapp:group:<jid>` ในที่เก็บเซสชัน (ค่าเริ่มต้นคือ `~/.openclaw/agents/<agentId>/sessions/sessions.json`) รายการที่หายไปหมายความเพียงว่ากลุ่มนั้นยังไม่เคยกระตุ้นการรัน
- ตัวบ่งชี้การพิมพ์ในกลุ่มจะทำตาม `agents.defaults.typingMode` เมื่อคำตอบที่มองเห็นใช้โหมดเริ่มต้นแบบเครื่องมือข้อความเท่านั้น การพิมพ์จะเริ่มทันทีตามค่าเริ่มต้น เพื่อให้สมาชิกกลุ่มเห็นว่าเอเจนต์กำลังทำงาน แม้จะไม่มีการโพสต์คำตอบสุดท้ายโดยอัตโนมัติ การตั้งค่า typing-mode อย่างชัดเจนยังคงมีสิทธิ์เหนือกว่า

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

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