Configuration

กลุ่ม

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

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

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

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

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

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

กล่าวคือ ผู้ส่งที่อยู่ในรายการที่อนุญาตสามารถทริกเกอร์ OpenClaw ได้ด้วยการกล่าวถึง

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

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

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

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

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

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

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

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

หากต้องการ...

เป้าหมาย ค่าที่ต้องตั้ง
อนุญาตทุกกลุ่มแต่ตอบกลับเฉพาะเมื่อมี @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 บนโฮสต์ กลุ่มอยู่ในแซนด์บ็อกซ์

json5
{  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" ไว้และเมานต์เฉพาะพาธที่อยู่ในรายการที่อนุญาตเข้าไปในแซนด์บ็อกซ์:

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> (ตัวพิมพ์เล็ก, ช่องว่าง -> -, คง #@+._- ไว้) ID แบบทึบแสงที่ยาวมากจะถูกย่อเป็นโทเค็นที่คงที่ แทนการเปิดเผย ID เส้นทางแบบเต็มใน UI

นโยบายกลุ่ม

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

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

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

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

    json5
    {  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 สำหรับหัวข้อในฟอรัม
    WhatsApp 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):

    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 เป็นคำสั่งหลักที่จำกัดให้เจ้าของใช้ และมีผลเฉพาะในการแชตกลุ่ม เจ้าของหมายถึงผู้ส่งที่ตรงกับ commands.ownerAllowFrom; รายการ allowFrom ของช่องควบคุมเฉพาะการเข้าถึงช่องและคำสั่งทั่วไป โหมดที่จัดเก็บไว้จะแทนที่ requireMention ของกลุ่มนั้นในช่องที่ตรวจสอบค่านี้ (Google Chat, QQBot, Telegram, WhatsApp) และบทนำของพรอมต์ระบบกลุ่มจะแสดงโหมดที่ใช้งานอยู่ในทุกช่อง

    ฟิลด์บริบท

    เพย์โหลดขาเข้าของกลุ่มกำหนดค่า:

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

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

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

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

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

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

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

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

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

    Was this useful?
    On this page

    On this page