Configuration
กลุ่มการเข้าถึง
กลุ่มการเข้าถึงคือรายชื่อผู้ส่งที่มีชื่อ ซึ่งคุณกำหนดครั้งเดียวแล้วอ้างอิงจาก allowlist ของช่องทางด้วย accessGroup:<name>.
ใช้กลุ่มเหล่านี้เมื่อคนชุดเดียวกันควรได้รับอนุญาตในหลายช่องทางข้อความ หรือเมื่อชุดที่เชื่อถือได้ชุดหนึ่งควรใช้ได้กับทั้งการอนุญาตผู้ส่งใน DM และกลุ่ม.
กลุ่มการเข้าถึงไม่ได้ให้สิทธิ์การเข้าถึงด้วยตัวเอง กลุ่มจะมีผลก็ต่อเมื่อฟิลด์ allowlist อ้างอิงถึงกลุ่มนั้นเท่านั้น.
กลุ่มผู้ส่งข้อความแบบคงที่
กลุ่มผู้ส่งแบบคงที่ใช้ type: "message.senders".
{
accessGroups: {
operators: {
type: "message.senders",
members: {
"*": ["global-owner-id"],
discord: ["discord:123456789012345678"],
telegram: ["987654321"],
whatsapp: ["+15551234567"],
},
},
},
}
รายการสมาชิกใช้ id ช่องทางข้อความเป็นคีย์:
| คีย์ | ความหมาย |
|---|---|
"*" |
รายการร่วมที่ตรวจสอบสำหรับทุกช่องทางข้อความที่อ้างอิงกลุ่ม. |
discord |
รายการที่ตรวจสอบเฉพาะการจับคู่ allowlist ของ Discord. |
telegram |
รายการที่ตรวจสอบเฉพาะการจับคู่ allowlist ของ Telegram. |
whatsapp |
รายการที่ตรวจสอบเฉพาะการจับคู่ allowlist ของ WhatsApp. |
รายการจะถูกจับคู่ด้วยกฎ allowFrom ปกติของช่องทางปลายทาง OpenClaw ไม่แปล id ผู้ส่งระหว่างช่องทาง หาก Alice มี id ของ Telegram และ id ของ Discord ให้ระบุทั้งสอง id ไว้ใต้คีย์ที่เหมาะสม.
อ้างอิงกลุ่มจาก allowlist
อ้างอิงกลุ่มด้วย accessGroup:<name> ในทุกตำแหน่งที่เส้นทางช่องทางข้อความรองรับ allowlist ผู้ส่ง.
ตัวอย่าง allowlist ของ DM:
{
accessGroups: {
operators: {
type: "message.senders",
members: {
discord: ["discord:123456789012345678"],
telegram: ["987654321"],
},
},
},
channels: {
discord: {
dmPolicy: "allowlist",
allowFrom: ["accessGroup:operators"],
},
telegram: {
dmPolicy: "allowlist",
allowFrom: ["accessGroup:operators"],
},
},
}
ตัวอย่าง allowlist ผู้ส่งในกลุ่ม:
{
accessGroups: {
oncall: {
type: "message.senders",
members: {
whatsapp: ["+15551234567"],
googlechat: ["users/1234567890"],
},
},
},
channels: {
whatsapp: {
groupPolicy: "allowlist",
groupAllowFrom: ["accessGroup:oncall"],
},
googlechat: {
spaces: {
"spaces/AAA": {
users: ["accessGroup:oncall"],
},
},
},
},
}
คุณสามารถใช้กลุ่มร่วมกับรายการโดยตรงได้:
{
channels: {
discord: {
dmPolicy: "allowlist",
allowFrom: ["accessGroup:operators", "discord:123456789012345678"],
},
},
}
เส้นทางช่องทางข้อความที่รองรับ
กลุ่มการเข้าถึงใช้งานได้ในเส้นทางการอนุญาตช่องทางข้อความร่วม รวมถึง:
- allowlist ผู้ส่ง DM เช่น
channels.<channel>.allowFrom - allowlist ผู้ส่งในกลุ่ม เช่น
channels.<channel>.groupAllowFrom - allowlist ผู้ส่งรายห้องเฉพาะช่องทางที่ใช้กฎการจับคู่ผู้ส่งเดียวกัน
- เส้นทางการอนุญาตคำสั่งที่นำ allowlist ผู้ส่งของช่องทางข้อความกลับมาใช้
การรองรับช่องทางขึ้นอยู่กับว่าช่องทางนั้นเชื่อมผ่านตัวช่วยการอนุญาตผู้ส่งร่วมของ OpenClaw หรือไม่ การรองรับที่รวมมาในปัจจุบันประกอบด้วย Discord, Google Chat, Nostr, WhatsApp, Zalo และ Zalo Personal กลุ่ม message.senders แบบคงที่ออกแบบมาให้ไม่ผูกกับช่องทาง ดังนั้นช่องทางข้อความใหม่ควรรองรับกลุ่มเหล่านี้โดยใช้ตัวช่วย Plugin SDK ร่วม แทนการขยาย allowlist แบบกำหนดเอง.
ผู้ชมช่องทาง Discord
Discord ยังรองรับประเภทกลุ่มการเข้าถึงแบบไดนามิกด้วย:
{
accessGroups: {
maintainers: {
type: "discord.channelAudience",
guildId: "1456350064065904867",
channelId: "1456744319972282449",
membership: "canViewChannel",
},
},
channels: {
discord: {
dmPolicy: "allowlist",
allowFrom: ["accessGroup:maintainers"],
},
},
}
discord.channelAudience หมายถึง "อนุญาตผู้ส่ง DM ของ Discord ที่สามารถดูช่องทาง guild นี้ได้ในขณะนี้" OpenClaw จะแก้ผู้ส่งผ่าน Discord ณ เวลาการอนุญาต และใช้กฎสิทธิ์ ViewChannel ของ Discord.
ใช้รูปแบบนี้เมื่อช่องทาง Discord เป็นแหล่งข้อมูลจริงของทีมอยู่แล้ว เช่น #maintainers หรือ #on-call.
ข้อกำหนดและพฤติกรรมเมื่อเกิดความล้มเหลว:
- บอตต้องมีสิทธิ์เข้าถึง guild และช่องทาง.
- บอตต้องมี Server Members Intent ใน Discord Developer Portal.
- กลุ่มการเข้าถึงจะปิดกั้นเมื่อ Discord ส่งคืน
Missing Access, ไม่สามารถแก้ผู้ส่งให้เป็นสมาชิก guild ได้, หรือช่องทางเป็นของ guild อื่น.
ตัวอย่างเฉพาะ Discord เพิ่มเติม: การควบคุมการเข้าถึง Discord
หมายเหตุด้านความปลอดภัย
- กลุ่มการเข้าถึงเป็น alias ของ allowlist ไม่ใช่บทบาท กลุ่มเหล่านี้ไม่ได้สร้างเจ้าของ อนุมัติคำขอจับคู่ หรือให้สิทธิ์เครื่องมือด้วยตัวเอง.
dmPolicy: "open"ยังคงต้องมี"*"ใน allowlist ของ DM ที่มีผลจริง การอ้างอิงกลุ่มการเข้าถึงไม่เหมือนกับการเปิดให้เข้าถึงสาธารณะ.- ชื่อกลุ่มที่หายไปจะปิดกั้น หาก
allowFromมีaccessGroup:operatorsและไม่มีaccessGroups.operatorsรายการนั้นจะไม่อนุญาตใครเลย. - รักษา id ช่องทางให้เสถียร เลือกใช้ id แบบตัวเลข/ผู้ใช้แทนชื่อที่แสดงเมื่อช่องทางรองรับทั้งสองแบบ.
การแก้ไขปัญหา
หากผู้ส่งควรจับคู่ได้แต่ถูกบล็อก:
- ยืนยันว่าฟิลด์ allowlist มีการอ้างอิง
accessGroup:<name>ที่ตรงกันทุกตัวอักษร. - ยืนยันว่า
accessGroups.<name>.typeถูกต้อง. - ยืนยันว่า id ผู้ส่งถูกระบุไว้ใต้คีย์ช่องทางที่ตรงกัน หรือใต้
"*". - ยืนยันว่ารายการใช้ไวยากรณ์ allowlist ปกติของช่องทางนั้น.
- สำหรับผู้ชมช่องทาง Discord ให้ยืนยันว่าบอตเห็นช่องทาง guild ได้และเปิดใช้ Server Members Intent แล้ว.
เรียกใช้ openclaw doctor หลังจากแก้ไขการกำหนดค่าการควบคุมการเข้าถึง คำสั่งนี้ตรวจจับชุด allowlist และนโยบายที่ไม่ถูกต้องได้จำนวนมากก่อนรันไทม์.