Configuration
ข้อความกลุ่ม WhatsApp
สำหรับโมเดลกลุ่มข้ามช่องทาง (Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo) โปรดดู กลุ่ม หน้านี้ครอบคลุมพฤติกรรมเฉพาะของ WhatsApp ที่ต่อยอดจากโมเดลนั้น: การเปิดใช้งาน รายการอนุญาตของกลุ่ม คีย์เซสชันต่อกลุ่ม และการฉีดบริบทข้อความที่รอดำเนินการ
เป้าหมาย: ให้ OpenClaw อยู่ในกลุ่ม WhatsApp ตื่นขึ้นเฉพาะเมื่อถูกเรียก และแยกเธรดนั้นออกจากเซสชันข้อความส่วนตัว
พฤติกรรม
- โหมดการเปิดใช้งาน:
mention(ค่าเริ่มต้น) หรือalwaysmentionต้องมีการเรียก (การ @-กล่าวถึงจริงของ WhatsApp ผ่านmentionedJids, รูปแบบ regex ที่ปลอดภัย หรือ E.164 ของบอตที่ปรากฏที่ใดก็ได้ในข้อความ)alwaysจะปลุกเอเจนต์ในทุกข้อความ แต่ควรตอบกลับเฉพาะเมื่อเพิ่มคุณค่าได้อย่างมีความหมาย มิฉะนั้นจะคืนโทเค็นเงียบที่ตรงกันทุกตัวอักษรNO_REPLY/no_replyสามารถตั้งค่าเริ่มต้นในคอนฟิก (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(ส่งเป็นข้อความเดี่ยว) จะมีขอบเขตเฉพาะกลุ่มนั้น สถานะข้อความส่วนตัวจะไม่ถูกแตะต้อง Heartbeat จะถูกข้ามสำหรับเธรดกลุ่ม - การฉีดบริบท: ข้อความกลุ่ม เฉพาะที่รอดำเนินการ (ค่าเริ่มต้น 50) ที่ ไม่ได้ กระตุ้นการรัน จะถูกเติมนำหน้าภายใต้
[Chat messages since your last reply - for context]โดยมีบรรทัดที่กระตุ้นอยู่ภายใต้[Current message - respond to this]ข้อความที่อยู่ในเซสชันแล้วจะไม่ถูกฉีดซ้ำ - การแสดงผู้ส่ง: ตอนนี้ทุกชุดข้อความกลุ่มจะลงท้ายด้วย
[from: Sender Name (+E164)]เพื่อให้ OpenClaw รู้ว่าใครกำลังพูด - ข้อความชั่วคราว/ดูครั้งเดียว: เราแกะข้อความเหล่านั้นก่อนแยกข้อความ/การกล่าวถึง ดังนั้นการเรียกที่อยู่ข้างในยังคงกระตุ้นได้
- พรอมป์ระบบของกลุ่ม: ในเทิร์นแรกของเซสชันกลุ่ม (และทุกครั้งที่
/activationเปลี่ยนโหมด) เราจะฉีดข้อความสั้น ๆ ลงในพรอมป์ระบบ เช่น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 ไม่สนใจตัวพิมพ์เล็กใหญ่ และใช้แนวป้องกัน safe-regex เดียวกับพื้นผิว regex ในคอนฟิกอื่น ๆ รูปแบบที่ไม่ถูกต้องและการทำซ้ำซ้อนที่ไม่ปลอดภัยจะถูกเพิกเฉย
- WhatsApp ยังคงส่งการกล่าวถึงแบบมาตรฐานผ่าน
mentionedJidsเมื่อมีคนแตะรายชื่อติดต่อ ดังนั้นค่ากลับสำรองด้วยหมายเลขจึงแทบไม่จำเป็น แต่เป็นตาข่ายนิรภัยที่มีประโยชน์
คำสั่งเปิดใช้งาน (เฉพาะเจ้าของ)
ใช้คำสั่งแชตกลุ่ม:
/activation mention/activation always
มีเพียงหมายเลขเจ้าของ (จาก channels.whatsapp.allowFrom หรือ E.164 ของบอตเองเมื่อไม่ได้ตั้งค่า) เท่านั้นที่เปลี่ยนค่านี้ได้ ส่ง /status เป็นข้อความเดี่ยวในกลุ่มเพื่อดูโหมดการเปิดใช้งานปัจจุบัน
วิธีใช้
- เพิ่มบัญชี WhatsApp ของคุณ (บัญชีที่รัน OpenClaw) เข้ากลุ่ม
- พูดว่า
@openclaw …(หรือใส่หมายเลข) เฉพาะผู้ส่งที่อยู่ในรายการอนุญาตเท่านั้นที่กระตุ้นได้ เว้นแต่คุณตั้งค่าgroupPolicy: "open" - พรอมป์ของเอเจนต์จะรวมบริบทกลุ่มล่าสุดพร้อมเครื่องหมายท้าย
[from: …]เพื่อให้สามารถเรียกคนที่ถูกต้องได้ - คำสั่งกำกับระดับเซสชัน (
/verbose on,/trace on,/think high,/newหรือ/reset,/compact) มีผลเฉพาะกับเซสชันของกลุ่มนั้น ส่งเป็นข้อความเดี่ยวเพื่อให้ระบบลงทะเบียน เซสชันข้อความส่วนตัวของคุณยังคงแยกอิสระ
การทดสอบ / การยืนยัน
- การทดสอบแบบเร็วด้วยตนเอง:
- ส่งการเรียก
@openclawในกลุ่ม และยืนยันว่ามีการตอบกลับที่อ้างถึงชื่อผู้ส่ง - ส่งการเรียกครั้งที่สอง และตรวจสอบว่ามีบล็อกประวัติรวมอยู่ จากนั้นถูกล้างในเทิร์นถัดไป
- ส่งการเรียก
- ตรวจสอบบันทึก Gateway (รันด้วย
--verbose) เพื่อดูรายการinbound web messageที่แสดงfrom: <groupJid>และส่วนต่อท้าย[from: …]
ข้อควรพิจารณาที่ทราบ
- Heartbeat ถูกข้ามสำหรับกลุ่มโดยตั้งใจ เพื่อหลีกเลี่ยงการออกอากาศที่รบกวน
- การระงับเสียงสะท้อนใช้สตริงชุดข้อความที่รวมกัน หากคุณส่งข้อความเหมือนกันสองครั้งโดยไม่มีการกล่าวถึง เฉพาะครั้งแรกเท่านั้นที่จะได้รับการตอบกลับ
- รายการในที่เก็บเซสชันจะปรากฏเป็น
agent:<agentId>:whatsapp:group:<jid>ในที่เก็บเซสชัน (~/.openclaw/agents/<agentId>/sessions/sessions.jsonโดยค่าเริ่มต้น) รายการที่หายไปหมายความเพียงว่ากลุ่มยังไม่ได้กระตุ้นการรัน - ตัวบ่งชี้การพิมพ์ในกลุ่มเป็นไปตาม
agents.defaults.typingModeเมื่อเลือกให้การตอบกลับที่มองเห็นได้อยู่ในโหมดเฉพาะเครื่องมือข้อความ การพิมพ์จะเริ่มทันทีโดยค่าเริ่มต้น เพื่อให้สมาชิกกลุ่มเห็นว่าเอเจนต์กำลังทำงาน แม้จะไม่มีการโพสต์คำตอบสุดท้ายโดยอัตโนมัติก็ตาม คอนฟิกโหมดการพิมพ์ที่ระบุชัดเจนยังคงมีสิทธิเหนือกว่า