Configuration

กลุ่ม

OpenClaw ใช้กฎกลุ่มเดียวกันกับทุกช่องทางที่รองรับกลุ่ม รวมถึง Discord, iMessage, Matrix, Microsoft Teams, QQBot, Signal, Slack, Telegram, WhatsApp และ Zalo

สำหรับห้องที่เปิดใช้งานตลอดเวลาซึ่งควรให้บริบทอย่างเงียบ ๆ เว้นแต่เอเจนต์จะส่งข้อความที่มองเห็นได้อย่างชัดเจน โปรดดู เหตุการณ์ห้องแบบแวดล้อม

บทนำสำหรับผู้เริ่มต้น (2 นาที)

OpenClaw "ทำงานอยู่" บนบัญชีรับส่งข้อความของคุณเอง โดยไม่มีผู้ใช้บอต WhatsApp แยกต่างหาก กล่าวคือ หาก คุณ อยู่ในกลุ่ม OpenClaw จะมองเห็นกลุ่มนั้นและตอบกลับในกลุ่มได้

ลักษณะการทำงานเริ่มต้น:

  • กลุ่มถูกจำกัด (groupPolicy: "allowlist"); ผู้ส่งในกลุ่มจะถูกบล็อกจนกว่าจะได้รับอนุญาต
  • การตอบกลับต้องมีการกล่าวถึง เว้นแต่คุณจะปิดข้อกำหนดการกล่าวถึงสำหรับกลุ่มนั้น
  • ข้อความตอบกลับสุดท้ายจะถูกโพสต์ไปยังห้องโดยอัตโนมัติ (visibleReplies: "automatic")

กล่าวคือ ผู้ส่งที่ได้รับอนุญาตสามารถกระตุ้น OpenClaw ได้ด้วยการกล่าวถึง OpenClaw

ลำดับการทำงานโดยย่อ (สิ่งที่เกิดขึ้นกับข้อความกลุ่ม):

text
groupPolicy? disabled -> dropgroupPolicy? allowlist -> group allowed? no -> droprequireMention? yes -> mentioned? no -> store for context onlymention/reply/command/DM -> user requestalways-on group chatter -> user request, or room event when configured

การตอบกลับที่มองเห็นได้

สำหรับคำขอทั่วไปในกลุ่ม/ช่องทาง ค่าเริ่มต้นของ 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 เพื่อกลับไปใช้ลักษณะการทำงานที่แสดงเฉพาะการตอบกลับสุดท้าย สถานะแบบละเอียดแยกตามเซสชันและทำงานเหมือนกันในแชตโดยตรง กลุ่ม ช่องทาง และหัวข้อฟอรัม

หากต้องการส่งการสนทนาในกลุ่มที่เปิดใช้งานตลอดเวลาและไม่มีการกล่าวถึงเป็นบริบทของห้องอย่างเงียบ ๆ แทนคำขอของผู้ใช้ ให้ใช้ เหตุการณ์ห้องแบบแวดล้อม:

json5
{  messages: {    groupChat: {      unmentionedInbound: "room_event",    },  },}

ค่าเริ่มต้นคือ unmentionedInbound: "user_request" ข้อความที่มีการกล่าวถึง คำสั่ง คำขอยกเลิก และข้อความส่วนตัวยังคงเป็นคำขอของผู้ใช้

หากต้องการกำหนดให้ผลลัพธ์ที่มองเห็นได้สำหรับคำขอในกลุ่ม/ช่องทางต้องส่งผ่านเครื่องมือส่งข้อความ:

json5
{  messages: {    groupChat: {      visibleReplies: "message_tool",    },  },}

หากต้องการกำหนดเช่นนี้สำหรับทุกแชตต้นทาง:

json5
{  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) จะใช้นโยบายนี้ขณะสร้างบริบทขาเข้า หากพบชุดนโยบายที่ไม่รู้จัก ระบบจะปฏิเสธโดยค่าเริ่มต้นและละเว้นบริบทนั้น

ลำดับการทำงานของข้อความกลุ่ม

หากคุณต้องการ...

เป้าหมาย ค่าที่ต้องตั้ง
อนุญาตทุกกลุ่ม แต่ตอบกลับเฉพาะเมื่อมีการกล่าวถึงด้วย @ 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> ต่อท้ายรหัสกลุ่ม เพื่อให้แต่ละหัวข้อมีเซสชันของตนเอง
  • แชตโดยตรงใช้เซสชันหลัก (หรือเซสชันแยกตามผู้ส่ง หากกำหนดค่า session.dmScope)
  • Heartbeat ทำงานในเซสชัน Heartbeat ที่กำหนดไว้ (ค่าเริ่มต้น: เซสชันหลักของเอเจนต์); เซสชันกลุ่มจะไม่เรียกใช้ Heartbeat ของตนเอง

รูปแบบ: ข้อความส่วนตัวส่วนบุคคล + กลุ่มสาธารณะ (เอเจนต์เดียว)

ใช่ — วิธีนี้ทำงานได้ดีหากการรับส่งข้อมูล "ส่วนบุคคล" ของคุณเป็น ข้อความส่วนตัว และการรับส่งข้อมูล "สาธารณะ" เป็น กลุ่ม

เหตุผล: ในโหมดเอเจนต์เดียว ข้อความส่วนตัวมักเข้าสู่คีย์เซสชัน หลัก (agent:main:main) ขณะที่กลุ่มจะใช้คีย์เซสชันที่ ไม่ใช่เซสชันหลัก (agent:main:<channel>:group:<id>) เสมอ หากคุณเปิดใช้แซนด์บ็อกซ์ด้วย mode: "non-main" เซสชันกลุ่มเหล่านั้นจะทำงานในแบ็กเอนด์แซนด์บ็อกซ์ที่กำหนดไว้ ขณะที่เซสชันข้อความส่วนตัวหลักของคุณยังคงทำงานบนโฮสต์ Docker เป็นแบ็กเอนด์เริ่มต้นหากคุณไม่ได้เลือกแบ็กเอนด์อื่น

วิธีนี้ทำให้คุณมี "สมอง" ของเอเจนต์หนึ่งชุด (พื้นที่ทำงาน + หน่วยความจำที่ใช้ร่วมกัน) แต่มีรูปแบบการดำเนินงานสองแบบ:

  • ข้อความส่วนตัว: เครื่องมือครบถ้วน (โฮสต์)
  • กลุ่ม: แซนด์บ็อกซ์ + เครื่องมือที่ถูกจำกัด

ข้อความส่วนตัวบนโฮสต์ กลุ่มอยู่ในแซนด์บ็อกซ์

json5
{  agents: {    defaults: {      sandbox: {        mode: "non-main", // groups/channels are non-main -> sandboxed        scope: "session", // strongest isolation (one container per group/channel)        workspaceAccess: "none",      },    },  },  tools: {    sandbox: {      tools: {        // If allow is non-empty, everything else is blocked (deny still wins).        allow: ["group:messaging", "group:sessions"],        deny: ["group:runtime", "group:fs", "group:ui", "nodes", "cron", "gateway"],      },    },  },}

กลุ่มมองเห็นเฉพาะโฟลเดอร์ที่ได้รับอนุญาต

ต้องการให้ "กลุ่มมองเห็นได้เฉพาะโฟลเดอร์ X" แทน "ไม่มีสิทธิ์เข้าถึงโฮสต์" ใช่หรือไม่ ให้คง workspaceAccess: "none" ไว้และเมานต์เฉพาะพาธที่ได้รับอนุญาตเข้าสู่แซนด์บ็อกซ์:

json5
{  agents: {    defaults: {      sandbox: {        mode: "non-main",        scope: "session",        workspaceAccess: "none",        docker: {          binds: [            // hostPath:containerPath:mode            "/home/user/FriendsShared:/data:ro",          ],        },      },    },  },}

เนื้อหาที่เกี่ยวข้อง:

ป้ายกำกับที่แสดง

  • ป้ายกำกับใน UI ใช้ displayName เมื่อมี โดยจัดรูปแบบเป็น <channel>:<token>
  • #room สงวนไว้สำหรับห้อง/ช่องทาง ส่วนแชตกลุ่มใช้ g-<slug> (ตัวพิมพ์เล็ก ช่องว่าง -> - และคงอักขระ #@+._- ไว้) รหัสทึบแสงที่ยาวมากจะถูกย่อเป็นโทเค็นที่คงที่ แทนการเปิดเผยรหัสเส้นทางทั้งหมดใน UI

นโยบายกลุ่ม

ควบคุมวิธีจัดการข้อความกลุ่ม/ห้องในแต่ละช่องทาง:

json5
{  channels: {    whatsapp: {      groupPolicy: "disabled", // "open" | "disabled" | "allowlist"      groupAllowFrom: ["+15551234567"],    },    telegram: {      groupPolicy: "disabled",      groupAllowFrom: ["123456789"], // numeric Telegram user id (setup resolves @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" อนุญาตเฉพาะกลุ่ม/ห้องที่ตรงกับรายการอนุญาตที่กำหนดค่าไว้
Per-channel notes
  • 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 (เปิด/ปิดใช้งาน/รายการอนุญาต)

  • Group allowlists

    รายการอนุญาตของกลุ่ม (*.groups, *.groupAllowFrom, รายการอนุญาตเฉพาะช่องทาง)

  • Mention gating

    การควบคุมด้วยการกล่าวถึง (requireMention, /activation)

  • การควบคุมด้วยการกล่าวถึง (ค่าเริ่มต้น)

    ข้อความกลุ่มต้องมีการกล่าวถึง เว้นแต่จะมีการกำหนดเป็นอย่างอื่นสำหรับแต่ละกลุ่ม ค่าเริ่มต้นอยู่ในแต่ละระบบย่อยภายใต้ *.groups."*"

    การตอบกลับข้อความของบอตถือเป็นการกล่าวถึงโดยนัยเมื่อช่องทางเปิดเผยข้อมูลเมตาของการตอบกลับ การอ้างข้อความของบอตก็อาจถือเป็นการกล่าวถึงได้เช่นกันในช่องทางที่เปิดเผยข้อมูลเมตาของการอ้าง กรณีที่รองรับในตัวปัจจุบัน ได้แก่ Discord, Microsoft Teams, QQBot, Slack, Telegram, WhatsApp และ Zalo ส่วนบุคคล

    json5
    {  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 หรือช่องทางอื่นสามารถยืนยันได้ว่าข้อความกล่าวถึงบอตอย่างชัดเจน การกล่าวถึงโดยตรงนั้นจะยังคงกระตุ้นการทำงานแม้ในตำแหน่งที่ปฏิเสธรูปแบบนิพจน์ทั่วไปที่กำหนดค่าไว้

    โดยค่าเริ่มต้น รูปแบบการกล่าวถึงที่กำหนดค่าไว้จะใช้ทุกที่ที่ช่องทางส่งข้อมูลผู้ให้บริการและการสนทนาเข้าสู่การตรวจจับการกล่าวถึง เพื่อป้องกันไม่ให้รูปแบบที่กว้างปลุกเอเจนต์ในทุกกลุ่ม ให้กำหนดขอบเขตแยกตามช่องทางด้วย channels.<channel>.mentionPatterns

    ใช้ mode: "deny" เมื่อต้องการปิดรูปแบบการกล่าวถึงแบบนิพจน์ทั่วไปเป็นค่าเริ่มต้นสำหรับช่องทาง แล้วเลือกเปิดใช้เฉพาะห้องด้วย allowIn:

    json5
    {  messages: {    groupChat: {      mentionPatterns: ["\\bopenclaw\\b", "\\bops bot\\b"],    },  },  channels: {    slack: {      mentionPatterns: {        mode: "deny",        allowIn: ["C0123OPS"],      },    },  },}

    ใช้ค่าเริ่มต้น mode: "allow" (หรือละ mode ไว้) เมื่อต้องการให้รูปแบบการกล่าวถึงแบบนิพจน์ทั่วไปใช้ในวงกว้าง แล้วปิดรูปแบบดังกล่าวในห้องที่มีข้อความรบกวนมากด้วย denyIn:

    json5
    {  messages: {    groupChat: {      mentionPatterns: ["\\bopenclaw\\b"],    },  },  channels: {    telegram: {      mentionPatterns: {        denyIn: ["-1001234567890", "-1001234567890:topic:42"],      },    },  },}

    การตัดสินนโยบาย:

    ฟิลด์ ผล
    mode: "allow" เปิดใช้รูปแบบการกล่าวถึงแบบนิพจน์ทั่วไป เว้นแต่รหัสการสนทนาจะอยู่ใน denyIn นี่คือค่าเริ่มต้น
    mode: "deny" ปิดใช้รูปแบบการกล่าวถึงแบบนิพจน์ทั่วไป เว้นแต่รหัสการสนทนาจะอยู่ใน allowIn
    allowIn รหัสการสนทนาที่เปิดใช้รูปแบบการกล่าวถึงแบบนิพจน์ทั่วไปในโหมดปฏิเสธ
    denyIn รหัสการสนทนาที่ปิดใช้รูปแบบการกล่าวถึงแบบนิพจน์ทั่วไป หากทั้งสองรายการมีรหัสเดียวกัน denyIn จะมีลำดับความสำคัญเหนือ allowIn

    นโยบายนิพจน์ทั่วไปแบบกำหนดขอบเขตที่รองรับในปัจจุบัน:

    ช่องทาง รหัสที่ใช้ใน allowIn / denyIn
    Discord รหัสช่อง Discord
    Matrix รหัสห้อง Matrix
    Slack รหัสช่อง Slack
    Telegram รหัสแชตกลุ่ม หรือ chatId:topic:threadId สำหรับหัวข้อในฟอรัม
    WhatsApp รหัสการสนทนา WhatsApp เช่น 123@g.us

    การกำหนดค่าช่องทางระดับบัญชีสามารถตั้งนโยบายเดียวกันภายใต้ channels.<channel>.accounts.<accountId>.mentionPatterns เมื่อช่องทางนั้นรองรับหลายบัญชี นโยบายบัญชีมีลำดับความสำคัญเหนือนโยบายช่องทางระดับบนสุดสำหรับบัญชีนั้น

    Mention gating notes
    • mentionPatterns เป็นรูปแบบนิพจน์ทั่วไปที่ปลอดภัยและไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่ รูปแบบที่ไม่ถูกต้องและรูปแบบการทำซ้ำซ้อนที่ไม่ปลอดภัยจะถูกละเว้น (พร้อมคำเตือน)
    • ลำดับความสำคัญของรูปแบบ: 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> และอักขระตัวแทน "*" รหัสช่องใช้รหัสช่องมาตรฐานของ OpenClaw ส่วนนามแฝง เช่น teams จะถูกปรับให้เป็น msteams คีย์แบบเดิมที่ไม่มีคำนำหน้ายังคงใช้ได้ โดยจะจับคู่เป็น id: เท่านั้น และบันทึกคำเตือนการเลิกใช้งาน

    ลำดับการตัดสิน (รายการที่เฉพาะเจาะจงที่สุดมีลำดับความสำคัญสูงสุด):

  • Group toolsBySender

    การจับคู่ toolsBySender ของกลุ่ม/ช่องทาง

  • Group tools

    tools ของกลุ่ม/ช่องทาง

  • Default toolsBySender

    การจับคู่ toolsBySender ค่าเริ่มต้น ("*")

  • Default tools

    tools ค่าเริ่มต้น ("*")

  • ตัวอย่าง (Telegram):

    json5
    {  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 คีย์เหล่านี้จะทำหน้าที่เป็นรายการอนุญาตของกลุ่ม ใช้ "*" เพื่ออนุญาตทุกกลุ่ม โดยยังคงกำหนดลักษณะการกล่าวถึงเริ่มต้นได้

    จุดประสงค์ที่พบบ่อย (คัดลอก/วาง):

    ปิดการตอบกลับในกลุ่มทั้งหมด

    json5
    {  channels: { whatsapp: { groupPolicy: "disabled" } },}

    อนุญาตเฉพาะกลุ่มที่ระบุ (WhatsApp)

    json5
    {  channels: {    whatsapp: {      groups: {        "123@g.us": { requireMention: true },        "456@g.us": { requireMention: false },      },    },  },}

    อนุญาตทุกกลุ่มแต่ต้องมีการกล่าวถึง

    json5
    {  channels: {    whatsapp: {      groups: { "*": { requireMention: true } },    },  },}

    ทริกเกอร์สำหรับเจ้าของเท่านั้น (WhatsApp)

    json5
    {  channels: {    whatsapp: {      groupPolicy: "allowlist",      groupAllowFrom: ["+15551234567"],      groups: { "*": { requireMention: true } },    },  },}

    การเปิดใช้งาน (เฉพาะเจ้าของ)

    เจ้าของกลุ่มสามารถสลับการเปิดใช้งานของแต่ละกลุ่มได้ด้วยข้อความเดี่ยว:

    • /activation mention
    • /activation always

    /activation เป็นคำสั่งหลักที่จำกัดไว้สำหรับเจ้าของและใช้ได้เฉพาะในแชตกลุ่ม เจ้าของหมายถึงผู้ส่งที่ตรงกับ allowFrom / commands.ownerAllowFrom ของช่องทาง (เมื่อไม่ได้กำหนดรายการอนุญาต รหัสของบัญชีนั้นเองจะถือเป็นเจ้าของ) โหมดที่จัดเก็บไว้จะแทนที่ requireMention ของกลุ่มนั้นในช่องทางที่ตรวจสอบค่านี้ (Google Chat, QQBot, Telegram, WhatsApp) และข้อความเกริ่นนำของพรอมต์ระบบสำหรับกลุ่มจะแสดงโหมดที่ใช้งานอยู่ในทุกช่องทาง

    ฟิลด์บริบท

    เพย์โหลดขาเข้าของกลุ่มจะตั้งค่า:

    • ChatType=group
    • GroupSubject (หากทราบ)
    • GroupMembers (หากทราบ)
    • WasMentioned (ผลลัพธ์จากเงื่อนไขการกล่าวถึง)
    • หัวข้อฟอรัมของ Telegram จะมี MessageThreadId และ IsForum เพิ่มด้วย

    พรอมต์ระบบของเอเจนต์จะมีข้อความเกริ่นนำสำหรับกลุ่มในเทิร์นแรกของเซสชันกลุ่มใหม่ (และหลังการเปลี่ยนแปลง /activation) ข้อความนี้เตือนโมเดลให้ตอบอย่างเป็นธรรมชาติ ลดบรรทัดว่างให้เหลือน้อยที่สุด ใช้ระยะห่างตามปกติของการแชต และหลีกเลี่ยงการพิมพ์ลำดับอักขระ \n แบบตรงตัว นอกจากนี้ กลุ่มที่ไม่ใช่ Telegram ยังไม่แนะนำให้ใช้ตาราง Markdown ส่วนแนวทางข้อความแบบริชเท็กซ์ของ Telegram มาจากพรอมต์ของช่องทาง Telegram ชื่อกลุ่มและป้ายกำกับผู้เข้าร่วมที่มาจากช่องทางจะแสดงเป็นเมทาดาทาที่ไม่น่าเชื่อถือภายในบล็อกแบบมีรั้ว ไม่ใช่คำสั่งระบบแบบอินไลน์

    รายละเอียดเฉพาะของ iMessage

    • ควรใช้ chat_id:<id> เมื่อกำหนดเส้นทางหรือเพิ่มลงในรายการอนุญาต
    • แสดงรายการแชต: imsg chats --limit 20
    • การตอบกลับในกลุ่มจะส่งกลับไปยัง chat_id เดิมเสมอ

    พรอมต์ระบบของ WhatsApp

    ดูหลักเกณฑ์มาตรฐานของพรอมต์ระบบ WhatsApp ได้ที่ WhatsApp ซึ่งครอบคลุมการเลือกพรอมต์สำหรับกลุ่มและข้อความโดยตรง ลักษณะการทำงานของไวลด์การ์ด และความหมายของการแทนที่ค่าระดับบัญชี

    รายละเอียดเฉพาะของ WhatsApp

    ดูพฤติกรรมเฉพาะของ WhatsApp (การแทรกประวัติและรายละเอียดการจัดการการกล่าวถึง) ได้ที่ ข้อความกลุ่ม

    เนื้อหาที่เกี่ยวข้อง

    Was this useful?
    On this page

    On this page