Community translations by veiseule.ai — Help improve them on Crowdin
Skip to main content

ข้อความกลุ่ม (ช่องทาง WhatsApp web)

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

หมายเหตุ: ปัจจุบัน agents.list[].groupChat.mentionPatterns ถูกใช้กับ Telegram/Discord/Slack/iMessage ด้วย เอกสารนี้จึงเน้นพฤติกรรมเฉพาะของ WhatsApp สำหรับการตั้งค่าแบบหลายเอเจนต์ ให้ตั้งค่า agents.list[].groupChat.mentionPatterns ต่อเอเจนต์ (หรือใช้ messages.groupChat.mentionPatterns เป็นค่า fallback แบบส่วนกลาง) 35. สำหรับการตั้งค่าแบบหลายเอเจนต์ ให้ตั้งค่า agents.list[].groupChat.mentionPatterns ต่อเอเจนต์ (หรือใช้ messages.groupChat.mentionPatterns เป็นค่า fallback ระดับโกลบอล)

สิ่งที่รองรับแล้ว (2025-12-03)

  • โหมดการกระตุ้น: mention (ค่าเริ่มต้น) หรือ always. 36. mention ต้องมีการ ping (การ @-mention ของ WhatsApp จริงผ่าน mentionedJids, รูปแบบ regex หรือหมายเลข E.164 ของบ็อตที่อยู่ที่ใดก็ได้ในข้อความ) mention ต้องมีการเรียก (การ @-mention ของ WhatsApp จริงผ่าน mentionedJids, แพทเทิร์น regex หรือหมายเลข E.164 ของบอตที่ปรากฏที่ใดก็ได้ในข้อความ) ส่วน always จะปลุกเอเจนต์ทุกข้อความ แต่ควรตอบเฉพาะเมื่อเพิ่มคุณค่าได้ มิฉะนั้นจะส่งโทเคนเงียบ NO_REPLY. สามารถตั้งค่าเริ่มต้นได้ในคอนฟิก (channels.whatsapp.groups) และเขียนทับเป็นรายกลุ่มผ่าน /activation. เมื่อกำหนด channels.whatsapp.groups จะทำหน้าที่เป็น allowlist ของกลุ่มด้วย (ใส่ "*" เพื่ออนุญาตทั้งหมด)
  • นโยบายกลุ่ม: channels.whatsapp.groupPolicy ควบคุมว่าจะยอมรับข้อความกลุ่มหรือไม่ (open|disabled|allowlist). allowlist ใช้ channels.whatsapp.groupAllowFrom (fallback: ระบุ channels.whatsapp.allowFrom แบบชัดเจน) ค่าเริ่มต้นคือ allowlist (บล็อกจนกว่าจะเพิ่มผู้ส่ง) 37. ค่าเริ่มต้นคือ allowlist (ถูกบล็อกจนกว่าคุณจะเพิ่มผู้ส่ง)
  • เซสชันแยกตามกลุ่ม: คีย์เซสชันมีรูปแบบเช่น agent:<agentId>:whatsapp:group:<jid> ดังนั้นคำสั่งอย่าง /verbose on หรือ /think high (ส่งเป็นข้อความเดี่ยว) จะถูกจำกัดขอบเขตอยู่ในกลุ่มนั้น สถานะ DM ส่วนตัวจะไม่ถูกรบกวน ข้ามการส่งฮาร์ตบีตสำหรับเธรดกลุ่ม 38. ข้าม heartbeat สำหรับเธรดกลุ่ม
  • การฉีดบริบท: ข้อความกลุ่มแบบ pending-only (ค่าเริ่มต้น 50 ข้อความ) ที่ ไม่ได้ กระตุ้นการรัน จะถูกใส่นำหน้าภายใต้ [Chat messages since your last reply - for context] โดยมีบรรทัดที่กระตุ้นอยู่ใต้ [Current message - respond to this]. ข้อความที่อยู่ในเซสชันแล้วจะไม่ถูกฉีดซ้ำ
  • การแสดงผู้ส่ง: ทุกแบตช์ของกลุ่มจะลงท้ายด้วย [from: Sender Name (+E164)] เพื่อให้ Pi ทราบว่าใครกำลังพูด
    1. แบบชั่วคราว/ดูครั้งเดียว (Ephemeral/view-once): เราจะแกะห่อสิ่งเหล่านี้ก่อนดึงข้อความ/การกล่าวถึง ดังนั้น ping ภายในยังคงทำงาน
  • 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. หากไม่มีเมตาดาต้า เรายังคงบอกเอเจนต์ว่านี่คือแชตกลุ่ม

ตัวอย่างคอนฟิก (WhatsApp)

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

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

หมายเหตุ:

  • regex ไม่สนตัวพิมพ์ใหญ่เล็ก ครอบคลุมการเรียกด้วยชื่อที่แสดงเช่น @openclaw และหมายเลขดิบที่มีหรือไม่มี +/ช่องว่าง
  • WhatsApp ยังส่ง canonical mentions ผ่าน mentionedJids เมื่อมีการแตะรายชื่อผู้ติดต่อ ดังนั้น fallback ด้วยหมายเลขจึงแทบไม่จำเป็น แต่เป็นตาข่ายนิรภัยที่มีประโยชน์

คำสั่งการกระตุ้น (เฉพาะเจ้าของ)

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

  • /activation mention
  • /activation always

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

วิธีใช้งาน

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

การทดสอบ / การยืนยัน

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

ข้อควรทราบที่ทราบแล้ว

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