Configuration
กลุ่ม
OpenClaw ใช้กฎกลุ่มแบบเดียวกันกับทุกช่องทางที่รองรับกลุ่ม รวมถึง Discord, iMessage, Matrix, Microsoft Teams, QQBot, Signal, Slack, Telegram, WhatsApp และ Zalo
สำหรับห้องที่เปิดทำงานตลอดเวลาและควรให้บริบทแบบเงียบ เว้นแต่เอเจนต์จะส่งข้อความที่มองเห็นได้อย่างชัดเจน โปรดดู เหตุการณ์ห้องแบบแวดล้อม
บทนำสำหรับผู้เริ่มต้น (2 นาที)
OpenClaw "ทำงานอยู่" ในบัญชีรับส่งข้อความของคุณเอง ไม่มีผู้ใช้บอต WhatsApp แยกต่างหาก กล่าวคือ หาก คุณ อยู่ในกลุ่ม OpenClaw จะมองเห็นกลุ่มนั้นและตอบกลับในกลุ่มได้
ลักษณะการทำงานเริ่มต้น:
- กลุ่มถูกจำกัด (
groupPolicy: "allowlist") ผู้ส่งในกลุ่มจะถูกบล็อกจนกว่าจะเพิ่มลงในรายการที่อนุญาต - การตอบกลับต้องมีการกล่าวถึง เว้นแต่คุณจะปิดเกตการกล่าวถึงสำหรับกลุ่ม
- ข้อความตอบกลับสุดท้ายจะโพสต์ไปยังห้องโดยอัตโนมัติ (
visibleReplies: "automatic")
กล่าวคือ ผู้ส่งที่อยู่ในรายการที่อนุญาตสามารถทริกเกอร์ OpenClaw ได้ด้วยการกล่าวถึง
ลำดับการทำงานอย่างย่อ (สิ่งที่เกิดขึ้นกับข้อความกลุ่ม):
groupPolicy? disabled -> ละทิ้งgroupPolicy? allowlist -> กลุ่มได้รับอนุญาตหรือไม่? ไม่ -> ละทิ้งrequireMention? yes -> ถูกกล่าวถึงหรือไม่? ไม่ -> เก็บไว้เป็นบริบทเท่านั้นการกล่าวถึง/การตอบกลับ/คำสั่ง/DM -> คำขอของผู้ใช้การสนทนาในกลุ่มที่เปิดตลอดเวลา -> คำขอของผู้ใช้ หรือเหตุการณ์ห้องเมื่อกำหนดค่าไว้การตอบกลับที่มองเห็นได้
สำหรับคำขอทั่วไปในกลุ่ม/ช่องทาง OpenClaw ใช้ messages.groupChat.visibleReplies: "automatic" เป็นค่าเริ่มต้น กล่าวคือ ข้อความสุดท้ายของผู้ช่วยจะโพสต์ไปยังห้องเป็นการตอบกลับที่มองเห็นได้
ใช้ messages.groupChat.visibleReplies: "message_tool" เมื่อห้องที่ใช้ร่วมกันควรให้เอเจนต์ตัดสินใจว่าจะพูดเมื่อใดด้วยการเรียก message(action=send) วิธีนี้ทำงานได้ดีที่สุดกับโมเดลที่ใช้เครื่องมือได้อย่างน่าเชื่อถือ (เช่น GPT-5.6 Sol) หากโมเดลไม่ได้เรียกเครื่องมือและส่งคืนข้อความสุดท้ายที่มีเนื้อหาสำคัญ OpenClaw จะเก็บข้อความนั้นไว้เป็นส่วนตัวแทนการโพสต์ไปยังห้อง
ใช้ "automatic" สำหรับโมเดลหรือรันไทม์ที่ไม่ปฏิบัติตามการส่งผ่านเครื่องมือเท่านั้นอย่างน่าเชื่อถือ ข้อความสุดท้ายแบบปกติจะโพสต์ไปยังห้องโดยตรง และเอเจนต์ยังคงเรียก message(action=send) สำหรับไฟล์ รูปภาพ หรือไฟล์แนบอื่น ๆ ที่ไม่สามารถส่งไปพร้อมข้อความสุดท้ายได้
หากเครื่องมือข้อความไม่พร้อมใช้งานภายใต้นโยบายเครื่องมือที่ใช้งานอยู่ OpenClaw จะย้อนกลับไปใช้การตอบกลับที่มองเห็นได้โดยอัตโนมัติแทนการระงับคำตอบโดยไม่แจ้งให้ทราบ openclaw doctor จะแจ้งเตือนเกี่ยวกับความไม่สอดคล้องนี้
สำหรับแชตโดยตรงและเหตุการณ์จากแหล่งอื่นทั้งหมด messages.visibleReplies: "message_tool" จะใช้ลักษณะการทำงานแบบผ่านเครื่องมือเท่านั้นเดียวกันนี้กับทุกส่วน ส่วน messages.groupChat.visibleReplies ยังคงเป็นการเขียนทับที่เฉพาะเจาะจงกว่าสำหรับห้องกลุ่ม/ช่องทาง เทิร์นโดยตรงใน WebChat ภายในใช้การส่งข้อความตอบกลับสุดท้ายโดยอัตโนมัติเป็นค่าเริ่มต้น เพื่อให้ Pi และ Codex ได้รับสัญญาการตอบกลับที่มองเห็นได้แบบเดียวกัน
โหมดผ่านเครื่องมือเท่านั้นแทนที่รูปแบบเก่าที่บังคับให้โมเดลตอบ NO_REPLY สำหรับเทิร์นส่วนใหญ่ในโหมดเฝ้าดู ในโหมดผ่านเครื่องมือเท่านั้น พรอมต์จะไม่กำหนดสัญญา NO_REPLY การไม่ทำสิ่งใดที่มองเห็นได้หมายถึงเพียงไม่เรียกเครื่องมือข้อความ
การผูกการสนทนาที่ Plugin เป็นเจ้าของถือเป็นข้อยกเว้น เมื่อ Plugin ผูกเธรดและรับเทิร์นขาเข้าแล้ว การตอบกลับที่ Plugin ส่งคืนจะเป็นการตอบสนองของการผูกที่มองเห็นได้ โดยไม่จำเป็นต้องใช้ message(action=send) การตอบกลับนั้นเป็นเอาต์พุตรันไทม์ของ Plugin ไม่ใช่ข้อความสุดท้ายส่วนตัวของโมเดล
ระบบยังคงส่งตัวบ่งชี้การพิมพ์สำหรับคำขอโดยตรงในกลุ่ม เหตุการณ์ห้องแบบแวดล้อมที่เปิดตลอดเวลาจะยังคงเคร่งครัดและเงียบเมื่อเปิดใช้งาน เว้นแต่เอเจนต์จะเรียกเครื่องมือข้อความ
เซสชันจะระงับสรุปเครื่องมือ/ความคืบหน้าแบบละเอียดเป็นค่าเริ่มต้น ใช้ /verbose on (หรือ /verbose full) เพื่อแสดงข้อมูลเหล่านั้นสำหรับเซสชันปัจจุบันขณะดีบัก และใช้ /verbose off เพื่อกลับไปใช้ลักษณะการทำงานที่แสดงเฉพาะการตอบกลับสุดท้าย สถานะแบบละเอียดเป็นค่าเฉพาะของแต่ละเซสชันและทำงานเหมือนกันในแชตโดยตรง กลุ่ม ช่องทาง และหัวข้อฟอรัม
หากต้องการส่งการสนทนาในกลุ่มที่เปิดตลอดเวลาและไม่มีการกล่าวถึงเป็นบริบทห้องแบบเงียบแทนคำขอของผู้ใช้ ให้ใช้ เหตุการณ์ห้องแบบแวดล้อม:
{ messages: { groupChat: { unmentionedInbound: "room_event", }, },}ค่าเริ่มต้นคือ unmentionedInbound: "user_request" ข้อความที่มีการกล่าวถึง คำสั่ง คำขอยกเลิก และ DM ยังคงเป็นคำขอของผู้ใช้
หากต้องการกำหนดให้เอาต์พุตที่มองเห็นได้สำหรับคำขอในกลุ่ม/ช่องทางต้องผ่านเครื่องมือข้อความ:
{ messages: { groupChat: { visibleReplies: "message_tool", }, },}หากต้องการกำหนดเช่นนี้สำหรับทุกแชตต้นทาง:
{ messages: { visibleReplies: "message_tool", },}Gateway จะนำการเปลี่ยนแปลงการกำหนดค่า messages มาใช้โดยไม่ต้องรีสตาร์ตหลังจากบันทึกไฟล์แล้ว ให้รีสตาร์ตเฉพาะเมื่อปิดใช้งานการโหลดการกำหนดค่าซ้ำ (gateway.reload.mode: "off")
เทิร์นคำสั่งจะข้าม visibleReplies: "message_tool" และตอบกลับแบบมองเห็นได้เสมอ ทั้งคำสั่งเครื่องหมายทับแบบเนทีฟ (Discord, Telegram และพื้นผิวอื่น ๆ ที่รองรับคำสั่งแบบเนทีฟ) และคำสั่งข้อความ /... ที่ได้รับอนุญาตจะโพสต์คำตอบไปยังแชตต้นทาง เทิร์นข้อความ /... ที่ไม่ได้รับอนุญาตในกลุ่มจะยังคงใช้เครื่องมือข้อความเท่านั้น ส่วนเทิร์นแชตทั่วไปจะทำตามค่าเริ่มต้นที่กำหนดไว้
การมองเห็นบริบทและรายการที่อนุญาต
ความปลอดภัยของกลุ่มเกี่ยวข้องกับการควบคุมสองแบบ:
- การอนุญาตให้ทริกเกอร์: ใครสามารถทริกเกอร์เอเจนต์ได้ (
groupPolicy,groups,groupAllowFrom, รายการที่อนุญาตเฉพาะช่องทาง) - การมองเห็นบริบท: บริบทเสริมใดที่จะถูกป้อนเข้าสู่โมเดล (ข้อความตอบกลับ/ข้อความอ้างอิง ประวัติเธรด เมทาดาทาของข้อความที่ส่งต่อ)
โดยค่าเริ่มต้น OpenClaw จะเก็บบริบทตามที่ได้รับ รายการที่อนุญาตจะตัดสินว่าใครสามารถทริกเกอร์การดำเนินการได้ ไม่ได้ตัดสินว่าโมเดลจะเห็นข้อความที่อ้างอิงหรือข้อความย้อนหลังส่วนใด หากต้องการกรองบริบทเสริมด้วย ให้ตั้งค่า contextVisibility:
| โหมด | ลักษณะการทำงาน |
|---|---|
"all" (ค่าเริ่มต้น) |
เก็บบริบทเสริมตามที่ได้รับ |
"allowlist" |
ป้อนเฉพาะบริบทประวัติ/เธรด/ข้อความอ้างอิง/ข้อความที่ส่งต่อจากผู้ส่งที่อยู่ในรายการที่อนุญาต |
"allowlist_quote" |
allowlist และเก็บข้อความที่ถูกอ้างอิง/ตอบกลับอย่างชัดเจนจากผู้ส่งทุกรายไว้ด้วย |
ตั้งค่าได้ต่อช่องทาง (channels.<channel>.contextVisibility) ต่อบัญชี (channels.<channel>.accounts.<accountId>.contextVisibility) หรือแบบส่วนกลาง (channels.defaults.contextVisibility) ช่องทางที่ดึงบริบทเสริม (Discord, Feishu, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp) จะใช้นโยบายนี้เมื่อสร้างบริบทขาเข้า หากพบนโยบายหลายแบบร่วมกันที่ไม่รู้จัก ระบบจะปฏิเสธอย่างปลอดภัยและละบริบทนั้น
หากต้องการ...
| เป้าหมาย | ค่าที่ต้องตั้ง |
|---|---|
| อนุญาตทุกกลุ่มแต่ตอบกลับเฉพาะเมื่อมี @mentions | groups: { "*": { requireMention: true } } |
| ปิดการตอบกลับในกลุ่มทั้งหมด | groupPolicy: "disabled" |
| เฉพาะกลุ่มที่กำหนด | groups: { "<group-id>": { ... } } (ไม่มีคีย์ "*") |
| มีเพียงคุณที่ทริกเกอร์ในกลุ่มได้ | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
| ใช้ชุดผู้ส่งที่เชื่อถือชุดเดียวกันในหลายช่องทาง | groupAllowFrom: ["accessGroup:operators"] |
สำหรับรายการผู้ส่งที่อนุญาตแบบนำกลับมาใช้ใหม่ได้ โปรดดู กลุ่มการเข้าถึง
คีย์เซสชัน
- เซสชันกลุ่มใช้คีย์เซสชัน
agent:<agentId>:<channel>:group:<id>(ห้อง/ช่องทางใช้agent:<agentId>:<channel>:channel:<id>) - หัวข้อฟอรัม Telegram จะเพิ่ม
:topic:<threadId>ต่อท้าย ID กลุ่ม เพื่อให้แต่ละหัวข้อมีเซสชันของตนเอง - แชตโดยตรงใช้เซสชันหลัก (หรือเซสชันต่อผู้ส่งหากกำหนดค่า
session.dmScope) - Heartbeat ทำงานในเซสชัน Heartbeat ที่กำหนดค่าไว้ (ค่าเริ่มต้น: เซสชันหลักของเอเจนต์) เซสชันกลุ่มจะไม่เรียกใช้ Heartbeat ของตนเอง
รูปแบบ: DM ส่วนตัว + กลุ่มสาธารณะ (เอเจนต์เดียว)
ได้ วิธีนี้ทำงานได้ดีเมื่อการรับส่งข้อมูล "ส่วนตัว" ของคุณเป็น DM และการรับส่งข้อมูล "สาธารณะ" เป็น กลุ่ม
เหตุผลคือ ในโหมดเอเจนต์เดียว โดยทั่วไป DM จะเข้าสู่คีย์เซสชัน หลัก (agent:main:main) ส่วนกลุ่มจะใช้คีย์เซสชัน ที่ไม่ใช่เซสชันหลัก (agent:main:<channel>:group:<id>) เสมอ หากคุณเปิดใช้งานแซนด์บ็อกซ์ด้วย mode: "non-main" เซสชันกลุ่มเหล่านั้นจะทำงานในแบ็กเอนด์แซนด์บ็อกซ์ที่กำหนดค่าไว้ ส่วนเซสชัน DM หลักจะยังทำงานบนโฮสต์ Docker เป็นแบ็กเอนด์เริ่มต้นหากคุณไม่ได้เลือกแบ็กเอนด์อื่น
วิธีนี้ทำให้คุณมี "สมอง" ของเอเจนต์หนึ่งชุด (พื้นที่ทำงาน + หน่วยความจำที่ใช้ร่วมกัน) แต่มีรูปแบบการดำเนินงานสองแบบ:
- DM: เครื่องมือครบถ้วน (โฮสต์)
- กลุ่ม: แซนด์บ็อกซ์ + เครื่องมือที่ถูกจำกัด
DM บนโฮสต์ กลุ่มอยู่ในแซนด์บ็อกซ์
{ agents: { defaults: { sandbox: { mode: "non-main", // กลุ่ม/ช่องทางไม่ใช่เซสชันหลัก -> อยู่ในแซนด์บ็อกซ์ scope: "session", // การแยกที่เข้มงวดที่สุด (หนึ่งคอนเทนเนอร์ต่อกลุ่ม/ช่องทาง) workspaceAccess: "none", }, }, }, tools: { sandbox: { tools: { // หาก allow ไม่ว่างเปล่า รายการอื่นทั้งหมดจะถูกบล็อก (deny ยังมีสิทธิ์เหนือกว่า) allow: ["group:messaging", "group:sessions"], deny: ["group:runtime", "group:fs", "group:ui", "nodes", "cron", "gateway"], }, }, },}กลุ่มมองเห็นเฉพาะโฟลเดอร์ที่อยู่ในรายการที่อนุญาต
ต้องการให้ "กลุ่มมองเห็นได้เฉพาะโฟลเดอร์ X" แทน "ไม่มีสิทธิ์เข้าถึงโฮสต์" หรือไม่ ให้คง workspaceAccess: "none" ไว้และเมานต์เฉพาะพาธที่อยู่ในรายการที่อนุญาตเข้าไปในแซนด์บ็อกซ์:
{ agents: { defaults: { sandbox: { mode: "non-main", scope: "session", workspaceAccess: "none", docker: { binds: [ // hostPath:containerPath:mode "/home/user/FriendsShared:/data:ro", ], }, }, }, },}เนื้อหาที่เกี่ยวข้อง:
- คีย์การกำหนดค่าและค่าเริ่มต้น: การกำหนดค่า Gateway
- การดีบักสาเหตุที่เครื่องมือถูกบล็อก: แซนด์บ็อกซ์เทียบกับนโยบายเครื่องมือเทียบกับสิทธิ์ระดับสูง
- รายละเอียดการเมานต์แบบผูก: การใช้แซนด์บ็อกซ์
ป้ายกำกับที่แสดง
- ป้ายกำกับ UI ใช้
displayNameเมื่อพร้อมใช้งาน โดยจัดรูปแบบเป็น<channel>:<token> #roomสงวนไว้สำหรับห้อง/ช่องทาง ส่วนแชตกลุ่มใช้g-<slug>(ตัวพิมพ์เล็ก, ช่องว่าง ->-, คง#@+._-ไว้) ID แบบทึบแสงที่ยาวมากจะถูกย่อเป็นโทเค็นที่คงที่ แทนการเปิดเผย ID เส้นทางแบบเต็มใน UI
นโยบายกลุ่ม
ควบคุมวิธีจัดการข้อความกลุ่ม/ห้องแยกตามช่องทาง:
{ channels: { whatsapp: { groupPolicy: "disabled", // "open" | "disabled" | "allowlist" groupAllowFrom: ["+15551234567"], }, telegram: { groupPolicy: "disabled", groupAllowFrom: ["123456789"], // รหัสผู้ใช้ Telegram แบบตัวเลข (การตั้งค่าจะแปลง @username) }, signal: { groupPolicy: "disabled", groupAllowFrom: ["+15551234567"], }, imessage: { groupPolicy: "disabled", groupAllowFrom: ["chat_id:123"], }, msteams: { groupPolicy: "disabled", groupAllowFrom: ["user@org.com"], }, discord: { groupPolicy: "allowlist", guilds: { GUILD_ID: { channels: { help: { enabled: true } } }, }, }, slack: { groupPolicy: "allowlist", channels: { "#general": { enabled: true } }, }, matrix: { groupPolicy: "allowlist", groupAllowFrom: ["@owner:example.org"], groups: { "!roomId:example.org": { enabled: true }, "#alias:example.org": { enabled: true }, }, }, },}| นโยบาย | ลักษณะการทำงาน |
|---|---|
"open" |
กลุ่มข้ามรายการอนุญาตได้ แต่การจำกัดให้ต้องกล่าวถึงยังคงมีผล |
"disabled" |
บล็อกข้อความกลุ่มทั้งหมดโดยสมบูรณ์ |
"allowlist" |
อนุญาตเฉพาะกลุ่ม/ห้องที่ตรงกับรายการอนุญาตที่กำหนดค่าไว้ |
หมายเหตุเฉพาะแต่ละช่องทาง
groupPolicyแยกจากการจำกัดให้ต้องกล่าวถึง (ซึ่งต้องมี @mentions)- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: ใช้
groupAllowFrom(ทางเลือกสำรอง: ระบุallowFromอย่างชัดเจน) - Signal:
groupAllowFromสามารถจับคู่ได้ทั้งรหัสกลุ่ม Signal ขาเข้าหรือหมายเลขโทรศัพท์/UUID ของผู้ส่ง - การอนุมัติการจับคู่ DM (รายการในที่เก็บ
*-allowFrom) ใช้กับการเข้าถึง DM เท่านั้น ส่วนการอนุญาตผู้ส่งในกลุ่มยังต้องระบุอย่างชัดเจนในรายการอนุญาตของกลุ่ม - Discord: รายการอนุญาตใช้
channels.discord.guilds.<id>.channels - Slack: รายการอนุญาตใช้
channels.slack.channels - Matrix: รายการอนุญาตใช้
channels.matrix.groupsใช้รหัสห้อง (!room:server) หรือนามแฝง (#alias:server); คีย์ชื่อห้องจะจับคู่เฉพาะเมื่อใช้channels.matrix.dangerouslyAllowNameMatching: trueและรายการที่แปลงค่าไม่ได้จะถูกละเว้นขณะรันไทม์ ใช้channels.matrix.groupAllowFromเพื่อจำกัดผู้ส่ง และยังรองรับรายการอนุญาตusersแยกตามห้อง - DM แบบกลุ่มถูกควบคุมแยกต่างหาก (
channels.discord.dm.*,channels.slack.dm.*:groupEnabled,groupChannels) - Telegram: รายการอนุญาตผู้ส่งรับเฉพาะรหัสผู้ใช้แบบตัวเลข (
"123456789"; คำนำหน้าtelegram:/tg:จะถูกตัดออกโดยไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่) รายการ@usernameจะไม่จับคู่ขณะรันไทม์และระบบจะบันทึกคำเตือน; การตั้งค่าจะแปลง@usernameเป็นรหัส รหัสแชตที่เป็นค่าลบต้องอยู่ภายใต้channels.telegram.groupsไม่ใช่รายการอนุญาตผู้ส่ง - ค่าเริ่มต้นคือ
groupPolicy: "allowlist"; หากรายการอนุญาตของกลุ่มว่างเปล่า ข้อความกลุ่มจะถูกบล็อก - ความปลอดภัยขณะรันไทม์: เมื่อไม่มีบล็อกผู้ให้บริการโดยสมบูรณ์ (ไม่มี
channels.<provider>) นโยบายกลุ่มจะปิดกั้นอย่างปลอดภัยเป็นallowlistแทนการสืบทอดchannels.defaults.groupPolicyและ Gateway จะบันทึกทางเลือกสำรองนี้หนึ่งครั้งต่อบัญชี
แบบจำลองอย่างรวดเร็ว (ลำดับการประเมินข้อความกลุ่ม):
groupPolicy
groupPolicy (open/disabled/allowlist)
รายการอนุญาตของกลุ่ม
รายการอนุญาตของกลุ่ม (*.groups, *.groupAllowFrom, รายการอนุญาตเฉพาะช่องทาง)
การจำกัดให้ต้องกล่าวถึง
การจำกัดให้ต้องกล่าวถึง (requireMention, /activation)
การจำกัดให้ต้องกล่าวถึง (ค่าเริ่มต้น)
ข้อความกลุ่มต้องมีการกล่าวถึง เว้นแต่จะตั้งค่าเป็นอย่างอื่นแยกตามกลุ่ม ค่าเริ่มต้นอยู่แยกตามระบบย่อยภายใต้ *.groups."*"
ข้อเท็จจริงการกล่าวถึงโดยนัยที่รองรับจะแตกต่างกันไปตามช่องทาง:
| ข้อเท็จจริง | ตัวสร้างในตัวปัจจุบัน |
|---|---|
| ตอบกลับบอต | Discord, Microsoft Teams, QQBot, Slack, Telegram |
| อ้างข้อความของบอต | WhatsApp, Zalo ส่วนบุคคล |
| บอตเข้าร่วมเธรด | Mattermost, Slack, Tlon |
ข้อเท็จจริงแต่ละรายการจะเปิดใช้งานเป็นค่าเริ่มต้นเมื่อช่องทางสร้างข้อเท็จจริงนั้น ตั้งค่าแฟล็ก implicitMentions ที่เกี่ยวข้องเป็น false เพื่อไม่ให้ข้อเท็จจริงนั้นข้ามการจำกัดให้ต้องกล่าวถึง โดยการกล่าวถึงแบบชัดเจนของแพลตฟอร์มจะไม่ได้รับผลกระทบ แฟล็กจะไม่มีผลกับช่องทางที่ไม่ได้สร้างข้อเท็จจริงนั้น
{ channels: { whatsapp: { groups: { "*": { requireMention: true }, "123@g.us": { requireMention: false }, }, }, telegram: { groups: { "*": { requireMention: true }, "123456789": { requireMention: false }, }, }, imessage: { groups: { "*": { requireMention: true }, "123": { requireMention: false }, }, }, }, agents: { list: [ { id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw", "\\+15555550123"], historyLimit: 50, }, }, ], },}กำหนดขอบเขตรูปแบบการกล่าวถึงที่ตั้งค่าไว้
mentionPatterns ที่กำหนดค่าไว้เป็นทริกเกอร์สำรองแบบนิพจน์ทั่วไป ใช้เมื่อ
แพลตฟอร์มไม่เปิดเผยการกล่าวถึงบอตแบบเนทีฟ หรือเมื่อต้องการให้ข้อความธรรมดา เช่น
openclaw: นับเป็นการกล่าวถึง การกล่าวถึงแบบเนทีฟของแพลตฟอร์มจะแยกต่างหาก:
เมื่อ Discord, Slack, Telegram, Matrix, Signal หรือช่องทางอื่นสามารถยืนยันได้ว่าข้อความ
กล่าวถึงบอตอย่างชัดเจน การกล่าวถึงแบบเนทีฟนั้นจะยังคงทริกเกอร์ แม้ว่า
รูปแบบนิพจน์ทั่วไปที่กำหนดค่าไว้จะถูกปฏิเสธ
โดยค่าเริ่มต้น รูปแบบการกล่าวถึงที่กำหนดค่าไว้จะมีผลในทุกจุดที่ช่องทางส่งข้อเท็จจริงของผู้ให้บริการและการสนทนาไปยังการตรวจจับการกล่าวถึง เพื่อป้องกันไม่ให้รูปแบบที่กว้างปลุกเอเจนต์ในทุกกลุ่ม ให้กำหนดขอบเขตแยกตามช่องทางด้วย channels.<channel>.mentionPatterns
ใช้ mode: "deny" เมื่อต้องการปิดรูปแบบการกล่าวถึงแบบนิพจน์ทั่วไปเป็นค่าเริ่มต้นสำหรับช่องทาง แล้วจึงเลือกเปิดใช้ในห้องที่ระบุด้วย allowIn:
{ messages: { groupChat: { mentionPatterns: ["\\bopenclaw\\b", "\\bops bot\\b"], }, }, channels: { slack: { mentionPatterns: { mode: "deny", allowIn: ["C0123OPS"], }, }, },}ใช้ค่าเริ่มต้น mode: "allow" (หรือละ mode ไว้) เมื่อควรใช้รูปแบบ regex สำหรับการกล่าวถึงอย่างกว้างขวาง จากนั้นปิดรูปแบบเหล่านี้ในห้องที่มีข้อความรบกวนมากด้วย denyIn:
{ messages: { groupChat: { mentionPatterns: ["\\bopenclaw\\b"], }, }, channels: { telegram: { mentionPatterns: { denyIn: ["-1001234567890", "-1001234567890:topic:42"], }, }, },}การประมวลผลนโยบาย:
| ฟิลด์ | ผล |
|---|---|
mode: "allow" |
เปิดใช้รูปแบบ regex สำหรับการกล่าวถึง เว้นแต่ ID การสนทนาจะอยู่ใน denyIn ซึ่งเป็นค่าเริ่มต้น |
mode: "deny" |
ปิดใช้รูปแบบ regex สำหรับการกล่าวถึง เว้นแต่ ID การสนทนาจะอยู่ใน allowIn |
allowIn |
ID การสนทนาที่เปิดใช้รูปแบบ regex สำหรับการกล่าวถึงในโหมดปฏิเสธ |
denyIn |
ID การสนทนาที่ปิดใช้รูปแบบ regex สำหรับการกล่าวถึง หากทั้งสองรายการมี ID เดียวกัน denyIn จะมีผลเหนือ allowIn |
นโยบาย regex แบบกำหนดขอบเขตที่รองรับในปัจจุบัน:
| ช่องทาง | ID ที่ใช้ใน allowIn / denyIn |
|---|---|
| Discord | ID ช่องของ Discord |
| Matrix | ID ห้องของ Matrix |
| Slack | ID ช่องของ Slack |
| Telegram | ID แชตกลุ่ม หรือ chatId:topic:threadId สำหรับหัวข้อในฟอรัม |
ID การสนทนาของ WhatsApp เช่น 123@g.us |
การกำหนดค่าช่องทางระดับบัญชีสามารถตั้งนโยบายเดียวกันภายใต้ channels.<channel>.accounts.<accountId>.mentionPatterns เมื่อช่องทางนั้นรองรับหลายบัญชี นโยบายบัญชีมีผลเหนือกว่านโยบายช่องทางระดับบนสุดสำหรับบัญชีนั้น
หมายเหตุเกี่ยวกับการควบคุมด้วยการกล่าวถึง
mentionPatternsเป็นรูปแบบ regex ที่ปลอดภัยและไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่ ระบบจะละเว้นรูปแบบที่ไม่ถูกต้องและรูปแบบการทำซ้ำซ้อนที่ไม่ปลอดภัย (พร้อมแสดงคำเตือน)- ลำดับความสำคัญของรูปแบบ:
agents.list[].groupChat.mentionPatterns(มีประโยชน์เมื่อหลายเอเจนต์ใช้กลุ่มร่วมกัน) มีผลเหนือmessages.groupChat.mentionPatternsเมื่อไม่ได้ตั้งค่าทั้งสองรายการ ระบบจะสร้างรูปแบบจากชื่อ/อีโมจิของข้อมูลประจำตัวเอเจนต์ - การควบคุมด้วยการกล่าวถึงจะมีผลบังคับใช้เฉพาะเมื่อสามารถตรวจจับการกล่าวถึงได้ (การกล่าวถึงแบบเนทีฟหรือมีการกำหนดค่า
mentionPatterns) - การเพิ่มกลุ่มหรือผู้ส่งลงในรายการอนุญาตไม่ได้ปิดการควบคุมด้วยการกล่าวถึง ให้ตั้งค่า
requireMentionของกลุ่มนั้นเป็นfalseเมื่อต้องการให้ทุกข้อความทริกเกอร์การทำงาน - บริบทพรอมต์ของแชตกลุ่มอัตโนมัติจะนำคำสั่งการตอบแบบเงียบที่ประมวลผลแล้วไปใช้ในทุกเทิร์น ไฟล์เวิร์กสเปซไม่ควรทำซ้ำกลไก
NO_REPLY - กลุ่มที่อนุญาตการตอบแบบเงียบโดยอัตโนมัติจะถือว่าเทิร์นของโมเดลที่ว่างเปล่าอย่างสมบูรณ์หรือมีเฉพาะการให้เหตุผลเป็นการตอบแบบเงียบ ซึ่งเทียบเท่ากับ
NO_REPLYแชตโดยตรงจะไม่ได้รับคำแนะนำNO_REPLYและการตอบกลับในกลุ่มที่ใช้เฉพาะเครื่องมือส่งข้อความจะไม่ส่งเสียงโดยไม่เรียกใช้message(action=send) - การสนทนาทั่วไปแบบเปิดตลอดเวลาในกลุ่มใช้ความหมายแบบคำขอของผู้ใช้เป็นค่าเริ่มต้น ตั้งค่า
messages.groupChat.unmentionedInbound: "room_event"เพื่อส่งเป็นบริบทแบบเงียบแทน ดูตัวอย่างการตั้งค่าที่ เหตุการณ์ห้องแวดล้อม - เหตุการณ์ในห้องจะไม่ถูกจัดเก็บเป็นคำขอปลอมของผู้ใช้ และข้อความส่วนตัวของผู้ช่วยจากเหตุการณ์ในห้องที่ไม่มีเครื่องมือส่งข้อความจะไม่ถูกเล่นซ้ำเป็นประวัติแชต
- ค่าเริ่มต้นของ Discord อยู่ใน
channels.discord.guilds."*"(เขียนทับได้แยกตามกิลด์/ช่อง) - บริบทประวัติกลุ่มจะถูกครอบด้วยรูปแบบเดียวกันในทุกช่องทาง กลุ่มที่ควบคุมด้วยการกล่าวถึงจะเก็บข้อความที่ข้ามไว้ซึ่งกำลังรอดำเนินการ ส่วนกลุ่มที่เปิดตลอดเวลาอาจเก็บข้อความล่าสุดในห้องที่ประมวลผลแล้วด้วยเมื่อช่องทางรองรับ ใช้
messages.groupChat.historyLimitสำหรับค่าเริ่มต้นส่วนกลาง และchannels.<channel>.historyLimit(หรือchannels.<channel>.accounts.*.historyLimit) สำหรับการเขียนทับ ตั้งค่า0เพื่อปิดใช้งาน
ข้อจำกัดเครื่องมือของกลุ่ม/ช่องทาง (ไม่บังคับ)
การกำหนดค่าบางช่องทางรองรับการจำกัดเครื่องมือที่ใช้ได้ ภายในกลุ่ม/ห้อง/ช่องที่ระบุ
tools: อนุญาต/ปฏิเสธเครื่องมือสำหรับทั้งกลุ่ม (allow,alsoAllow,deny; การปฏิเสธมีผลเหนือกว่า)toolsBySender: การเขียนทับแยกตามผู้ส่งภายในกลุ่ม ใช้คำนำหน้าคีย์ที่ระบุอย่างชัดเจน:channel:<channelId>:<senderId>,id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>และไวลด์การ์ด"*"ID ช่องทางใช้ ID ช่องทางมาตรฐานของ OpenClaw โดยนามแฝง เช่นteamsจะถูกทำให้เป็นมาตรฐานเป็นmsteamsคีย์แบบเดิมที่ไม่มีคำนำหน้ายังคงใช้งานได้ โดยจับคู่เป็นid:เท่านั้น และบันทึกคำเตือนการเลิกใช้งาน
ลำดับการประมวลผล (รายการที่เฉพาะเจาะจงที่สุดมีผลเหนือกว่า):
toolsBySender ของกลุ่ม
การจับคู่ toolsBySender ของกลุ่ม/ช่องทาง
เครื่องมือของกลุ่ม
tools ของกลุ่ม/ช่องทาง
toolsBySender เริ่มต้น
การจับคู่ toolsBySender เริ่มต้น ("*")
เครื่องมือเริ่มต้น
tools เริ่มต้น ("*")
ตัวอย่าง (Telegram):
{ channels: { telegram: { groups: { "*": { tools: { deny: ["exec"] } }, "-1001234567890": { tools: { deny: ["exec", "read", "write"] }, toolsBySender: { "id:123456789": { alsoAllow: ["exec"] }, }, }, }, }, },}รายการอนุญาตของกลุ่ม
เมื่อกำหนดค่า channels.whatsapp.groups, channels.telegram.groups หรือ channels.imessage.groups คีย์เหล่านี้จะทำหน้าที่เป็นรายการอนุญาตของกลุ่ม ใช้ "*" เพื่ออนุญาตทุกกลุ่มโดยยังคงกำหนดพฤติกรรมเริ่มต้นของการกล่าวถึง
วัตถุประสงค์ทั่วไป (คัดลอก/วาง):
ปิดการตอบกลับในกลุ่มทั้งหมด
{ channels: { whatsapp: { groupPolicy: "disabled" } },}อนุญาตเฉพาะกลุ่มที่ระบุ (WhatsApp)
{ channels: { whatsapp: { groups: { "123@g.us": { requireMention: true }, "456@g.us": { requireMention: false }, }, }, },}อนุญาตทุกกลุ่มแต่ต้องมีการกล่าวถึง
{ channels: { whatsapp: { groups: { "*": { requireMention: true } }, }, },}ทริกเกอร์เฉพาะเจ้าของ (WhatsApp)
{ channels: { whatsapp: { groupPolicy: "allowlist", groupAllowFrom: ["+15551234567"], groups: { "*": { requireMention: true } }, }, },}การเปิดใช้งาน (เฉพาะเจ้าของ)
เจ้าของกลุ่มสามารถสลับการเปิดใช้งานของแต่ละกลุ่มด้วยข้อความเดี่ยว:
/activation mention/activation always
/activation เป็นคำสั่งหลักที่จำกัดให้เจ้าของใช้ และมีผลเฉพาะในการแชตกลุ่ม เจ้าของหมายถึงผู้ส่งที่ตรงกับ commands.ownerAllowFrom; รายการ allowFrom ของช่องควบคุมเฉพาะการเข้าถึงช่องและคำสั่งทั่วไป โหมดที่จัดเก็บไว้จะแทนที่ requireMention ของกลุ่มนั้นในช่องที่ตรวจสอบค่านี้ (Google Chat, QQBot, Telegram, WhatsApp) และบทนำของพรอมต์ระบบกลุ่มจะแสดงโหมดที่ใช้งานอยู่ในทุกช่อง
ฟิลด์บริบท
เพย์โหลดขาเข้าของกลุ่มกำหนดค่า:
ChatType=groupGroupSubject(หากทราบ)GroupMembers(หากทราบ)WasMentioned(ผลการตรวจสอบเงื่อนไขการกล่าวถึง)- หัวข้อฟอรัม Telegram ยังมี
MessageThreadIdและIsForumด้วย
พรอมต์ระบบของเอเจนต์มีคำแนะนำเบื้องต้นเกี่ยวกับกลุ่มในเทิร์นแรกของเซสชันกลุ่มใหม่ (และหลังจาก /activation เปลี่ยนแปลง) โดยเตือนโมเดลให้ตอบอย่างเป็นธรรมชาติแบบมนุษย์ ลดบรรทัดว่างให้เหลือน้อยที่สุด ใช้การเว้นวรรคตามปกติของการแชต และหลีกเลี่ยงการพิมพ์ลำดับ \n โดยตรง นอกจากนี้ ช่องทางที่โหมดตารางซึ่งประกาศไว้ไม่รองรับการคงรูปแบบตารางดั้งเดิมหรือตารางแบบดิบ ก็ไม่แนะนำให้ใช้ตาราง Markdown เช่นกัน ชื่อกลุ่มและป้ายกำกับผู้เข้าร่วมที่มาจากช่องทางจะแสดงเป็นข้อมูลเมตาที่ไม่น่าเชื่อถือภายในกรอบโค้ด ไม่ใช่คำสั่งระบบแบบอินไลน์
รายละเอียดเฉพาะของ iMessage
- ควรใช้
chat_id:<id>เมื่อกำหนดเส้นทางหรือเพิ่มลงในรายการที่อนุญาต - แสดงรายการแชต:
imsg chats --limit 20 - การตอบกลับในกลุ่มจะส่งกลับไปยัง
chat_idเดิมเสมอ
พรอมต์ระบบของ WhatsApp
ดู WhatsApp สำหรับกฎพรอมต์ระบบมาตรฐานของ WhatsApp รวมถึงการเลือกพรอมต์สำหรับกลุ่มและข้อความโดยตรง พฤติกรรมของไวลด์การ์ด และความหมายของการเขียนทับค่าระดับบัญชี
รายละเอียดเฉพาะของ WhatsApp
ดู ข้อความกลุ่ม สำหรับพฤติกรรมเฉพาะของ WhatsApp (การแทรกประวัติและรายละเอียดการจัดการการกล่าวถึง)