Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

กลุ่มการเข้าถึงคือรายการผู้ส่งที่ตั้งชื่อไว้ ซึ่งคุณกำหนดครั้งเดียวแล้วอ้างอิงจากรายการอนุญาตของช่องทางด้วย accessGroup:<name> ใช้เมื่อควรอนุญาตให้คนกลุ่มเดียวกันเข้าถึงได้ในหลายช่องทางข้อความ หรือเมื่อชุดผู้ที่เชื่อถือได้ชุดหนึ่งควรใช้กับทั้งการอนุญาตผู้ส่งใน DM และในกลุ่ม กลุ่มการเข้าถึงไม่ได้ให้สิทธิ์เข้าถึงด้วยตัวเอง กลุ่มจะมีผลก็ต่อเมื่อฟิลด์รายการอนุญาตอ้างอิงถึงกลุ่มนั้น

กลุ่มผู้ส่งข้อความแบบคงที่

กลุ่มผู้ส่งแบบคงที่ใช้ type: "message.senders"
{
  accessGroups: {
    operators: {
      type: "message.senders",
      members: {
        "*": ["global-owner-id"],
        discord: ["discord:123456789012345678"],
        telegram: ["987654321"],
        whatsapp: ["+15551234567"],
      },
    },
  },
}
รายการสมาชิกใช้ id ของช่องทางข้อความเป็นคีย์:
คีย์ความหมาย
"*"รายการร่วมที่ตรวจสอบสำหรับทุกช่องทางข้อความที่อ้างอิงกลุ่มนี้
discordรายการที่ตรวจสอบเฉพาะการจับคู่รายการอนุญาตของ Discord
telegramรายการที่ตรวจสอบเฉพาะการจับคู่รายการอนุญาตของ Telegram
whatsappรายการที่ตรวจสอบเฉพาะการจับคู่รายการอนุญาตของ WhatsApp
รายการต่างๆ จะถูกจับคู่ด้วยกฎ allowFrom ปกติของช่องทางปลายทาง OpenClaw ไม่แปลง id ผู้ส่งระหว่างช่องทาง หาก Alice มี id ของ Telegram และ id ของ Discord ให้ระบุทั้งสอง id ใต้คีย์ที่เหมาะสม

อ้างอิงกลุ่มจากรายการอนุญาต

อ้างอิงกลุ่มด้วย accessGroup:<name> ได้ทุกที่ที่พาธของช่องทางข้อความรองรับรายการอนุญาตผู้ส่ง ตัวอย่างรายการอนุญาตของ 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"],
    },
  },
}
ตัวอย่างรายการอนุญาตผู้ส่งในกลุ่ม:
{
  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"],
    },
  },
}

พาธของช่องทางข้อความที่รองรับ

กลุ่มการเข้าถึงพร้อมใช้งานในพาธการอนุญาตของช่องทางข้อความที่ใช้ร่วมกัน รวมถึง:
  • รายการอนุญาตผู้ส่ง DM เช่น channels.<channel>.allowFrom
  • รายการอนุญาตผู้ส่งในกลุ่ม เช่น channels.<channel>.groupAllowFrom
  • รายการอนุญาตผู้ส่งต่อห้องแบบเฉพาะช่องทางที่ใช้กฎการจับคู่ผู้ส่งเดียวกัน
  • พาธการอนุญาตคำสั่งที่ใช้รายการอนุญาตผู้ส่งของช่องทางข้อความซ้ำ
การรองรับช่องทางขึ้นอยู่กับว่าช่องทางนั้นเชื่อมผ่านตัวช่วยการอนุญาตผู้ส่งที่ใช้ร่วมกันของ OpenClaw หรือไม่ การรองรับแบบบันเดิลในปัจจุบันรวมถึง Discord, Feishu, Google Chat, iMessage, LINE, Mattermost, Microsoft Teams, Nextcloud Talk, Nostr, QQBot, Signal, WhatsApp, Zalo และ Zalo Personal กลุ่ม message.senders แบบคงที่ออกแบบมาให้ไม่ผูกกับช่องทาง ดังนั้นช่องทางข้อความใหม่ควรรองรับกลุ่มเหล่านี้โดยใช้ตัวช่วย SDK ของ Plugin ที่ใช้ร่วมกัน แทนการขยายรายการอนุญาตแบบกำหนดเอง

การวินิจฉัยของ Plugin

ผู้เขียน Plugin สามารถตรวจสอบสถานะกลุ่มการเข้าถึงแบบมีโครงสร้างได้โดยไม่ต้องขยายกลับเป็นรายการอนุญาตแบบแบน:
import { resolveAccessGroupAllowFromState } from "openclaw/plugin-sdk/security-runtime";

const state = await resolveAccessGroupAllowFromState({
  accessGroups: cfg.accessGroups,
  allowFrom: channelConfig.allowFrom,
  channel: "my-channel",
  accountId: "default",
  senderId,
  isSenderAllowed,
});
ผลลัพธ์จะรายงานกลุ่มที่ถูกอ้างอิง จับคู่ได้ ขาดหาย ไม่รองรับ และล้มเหลว ใช้สิ่งนี้เมื่อคุณต้องการการวินิจฉัยหรือการทดสอบความสอดคล้อง ใช้ expandAllowFromWithAccessGroups(...) เฉพาะกับพาธความเข้ากันได้ที่ยังคาดหวังอาร์เรย์ allowFrom แบบแบน

กลุ่มผู้ชมช่องทาง Discord

Discord ยังรองรับประเภทกลุ่มการเข้าถึงแบบไดนามิกด้วย:
{
  accessGroups: {
    maintainers: {
      type: "discord.channelAudience",
      guildId: "1456350064065904867",
      channelId: "1456744319972282449",
      membership: "canViewChannel",
    },
  },
  channels: {
    discord: {
      dmPolicy: "allowlist",
      allowFrom: ["accessGroup:maintainers"],
    },
  },
}
discord.channelAudience หมายถึง “อนุญาตผู้ส่ง DM ของ Discord ที่สามารถดูช่องทางกิลด์นี้ได้ในขณะนี้” OpenClaw จะแก้ผู้ส่งผ่าน Discord ในเวลาที่อนุญาต และใช้กฎสิทธิ์ ViewChannel ของ Discord ใช้สิ่งนี้เมื่อช่องทาง Discord เป็นแหล่งข้อมูลจริงของทีมอยู่แล้ว เช่น #maintainers หรือ #on-call ข้อกำหนดและพฤติกรรมเมื่อล้มเหลว:
  • บอตต้องมีสิทธิ์เข้าถึงกิลด์และช่องทาง
  • บอตต้องมี Server Members Intent ใน Discord Developer Portal
  • กลุ่มการเข้าถึงจะล้มเหลวแบบปิดเมื่อ Discord ส่งคืน Missing Access, ไม่สามารถแก้ผู้ส่งเป็นสมาชิกกิลด์ได้ หรือช่องทางเป็นของกิลด์อื่น
ตัวอย่างเฉพาะ Discord เพิ่มเติม: การควบคุมการเข้าถึงของ Discord

หมายเหตุด้านความปลอดภัย

  • กลุ่มการเข้าถึงเป็นนามแฝงของรายการอนุญาต ไม่ใช่บทบาท กลุ่มเหล่านี้ไม่ได้สร้างเจ้าของ อนุมัติคำขอจับคู่ หรือให้สิทธิ์เครื่องมือด้วยตัวเอง
  • dmPolicy: "open" ยังต้องมี "*" ในรายการอนุญาต DM ที่มีผล การอ้างอิงกลุ่มการเข้าถึงไม่เหมือนกับการเข้าถึงสาธารณะ
  • ชื่อกลุ่มที่ขาดหายจะล้มเหลวแบบปิด หาก allowFrom มี accessGroup:operators และไม่มี accessGroups.operators รายการนั้นจะไม่อนุญาตใครเลย
  • รักษา id ของช่องทางให้เสถียร ควรใช้ id แบบตัวเลขหรือ id ผู้ใช้แทนชื่อที่แสดง เมื่อช่องทางรองรับทั้งสองแบบ

การแก้ไขปัญหา

หากผู้ส่งควรถูกจับคู่แต่ถูกบล็อก:
  1. ยืนยันว่าฟิลด์รายการอนุญาตมีการอ้างอิง accessGroup:<name> ที่ตรงกันทุกตัวอักษร
  2. ยืนยันว่า accessGroups.<name>.type ถูกต้อง
  3. ยืนยันว่า id ผู้ส่งถูกระบุไว้ใต้คีย์ช่องทางที่ตรงกัน หรือใต้ "*"
  4. ยืนยันว่ารายการนั้นใช้ไวยากรณ์รายการอนุญาตปกติของช่องทางนั้น
  5. สำหรับกลุ่มผู้ชมช่องทาง Discord ให้ยืนยันว่าบอตมองเห็นช่องทางกิลด์ได้ และเปิดใช้ Server Members Intent แล้ว
เรียกใช้ openclaw doctor หลังจากแก้ไขการกำหนดค่าการควบคุมการเข้าถึง คำสั่งนี้จะตรวจจับชุดค่าผสมของรายการอนุญาตและนโยบายที่ไม่ถูกต้องจำนวนมากก่อนถึงรันไทม์