Plugin maintainer reference
API ขาเข้าของช่องทาง
API ทางเข้าของช่องทาง
ทางเข้าของช่องทางคือขอบเขตการควบคุมการเข้าถึงแบบทดลองสำหรับเหตุการณ์ช่องทางขาเข้า ใช้ openclaw/plugin-sdk/channel-ingress-runtime สำหรับเส้นทางการรับเข้า พาธย่อย openclaw/plugin-sdk/channel-ingress รุ่นเก่ายังคงถูกส่งออกเป็น facade ความเข้ากันได้ที่เลิกแนะนำแล้วสำหรับ Plugin ภายนอก
Plugin เป็นเจ้าของข้อเท็จจริงของแพลตฟอร์มและ side effect แกนหลักเป็นเจ้าของนโยบายทั่วไป: รายการอนุญาต DM/กลุ่ม, รายการ DM ใน pairing-store, เกตเส้นทาง, เกตคำสั่ง, การยืนยันสิทธิ์เหตุการณ์, การเปิดใช้งานด้วยการกล่าวถึง, diagnostics ที่ปกปิดข้อมูลแล้ว และการรับเข้า
ตัวแก้ค่าในรันไทม์
defineStableChannelIngressIdentity,
resolveChannelMessageIngress,
} from "openclaw/plugin-sdk/channel-ingress-runtime";
const identity = defineStableChannelIngressIdentity({
key: "platform-user-id",
normalize: normalizePlatformUserId,
sensitivity: "pii",
});
const result = await resolveChannelMessageIngress({
channelId: "my-channel",
accountId,
identity,
subject: { stableId: platformUserId },
conversation: { kind: isGroup ? "group" : "direct", id: conversationId },
event: { kind: "message", authMode: "inbound", mayPair: !isGroup },
policy: {
dmPolicy: config.dmPolicy,
groupPolicy: config.groupPolicy,
groupAllowFromFallbackToAllowFrom: true,
},
allowFrom: config.allowFrom,
groupAllowFrom: config.groupAllowFrom,
accessGroups: cfg.accessGroups,
route,
readStoreAllowFrom,
command: hasControlCommand ? { allowTextCommands: true, hasControlCommand } : undefined,
});
อย่าคำนวณรายการอนุญาตที่มีผลจริง เจ้าของคำสั่ง หรือกลุ่มคำสั่งไว้ล่วงหน้า ตัวแก้ค่าจะอนุมานสิ่งเหล่านั้นจากรายการอนุญาตดิบ, callback ของ store, descriptor เส้นทาง, กลุ่มการเข้าถึง, นโยบาย และชนิดของบทสนทนา
ผลลัพธ์
Plugin ที่บันเดิลมาควรใช้ projection สมัยใหม่โดยตรง:
ingress: การตัดสินใจของเกตแบบเรียงลำดับและการรับเข้าsenderAccess: การอนุญาตผู้ส่ง/บทสนทนาเท่านั้นrouteAccess: projection ของเส้นทางและผู้ส่งของเส้นทางcommandAccess: การอนุญาตคำสั่ง; เป็น false เมื่อไม่มีเกตคำสั่งทำงานactivationAccess: ผลลัพธ์การกล่าวถึง/การเปิดใช้งาน
การอนุญาตเหตุการณ์ยังคงมีอยู่บน ingress.graph แบบเรียงลำดับและ ingress.reasonCode ที่เป็นตัวตัดสิน; ไม่มีการปล่อย projection ของเหตุการณ์แยกต่างหาก
ตัวช่วย SDK ภายนอกที่เลิกแนะนำแล้วอาจสร้างรูปทรงเก่าขึ้นใหม่ภายใน เส้นทางรับเข้าที่บันเดิลมาใหม่ไม่ควรแปลงผลลัพธ์สมัยใหม่กลับเป็น DTO ภายในเครื่อง
กลุ่มการเข้าถึง
รายการ accessGroup:<name> ยังคงถูกปกปิดข้อมูล แกนหลักแก้ค่ากลุ่ม message.senders แบบสแตติกเอง และเรียก resolveAccessGroupMembership เฉพาะสำหรับกลุ่มแบบไดนามิกที่ต้องค้นหาบนแพลตฟอร์ม กลุ่มที่ขาดหาย ไม่รองรับ หรือทำงานล้มเหลวจะล้มเหลวแบบปิด
โหมดเหตุการณ์
authMode |
ความหมาย |
|---|---|
inbound |
เกตผู้ส่งขาเข้าปกติ |
command |
เกตคำสั่งสำหรับ callback หรือปุ่มที่มีขอบเขต |
origin-subject |
ผู้กระทำต้องตรงกับ subject ของข้อความต้นฉบับ |
route-only |
เกตเส้นทางเท่านั้นสำหรับเหตุการณ์ที่เชื่อถือได้ภายใต้ขอบเขตเส้นทาง |
none |
เหตุการณ์ภายในที่ Plugin เป็นเจ้าของจะข้าม auth ที่ใช้ร่วมกัน |
ใช้ mayPair: false สำหรับ reaction, ปุ่ม, callback และคำสั่งเนทีฟ
เส้นทางและการเปิดใช้งาน
ใช้ descriptor เส้นทางสำหรับนโยบายห้อง หัวข้อ guild เธรด หรือเส้นทางแบบซ้อน:
route: {
id: "room",
allowed: roomAllowed,
enabled: roomEnabled,
senderPolicy: "replace",
senderAllowFrom: roomAllowFrom,
blockReason: "room_sender_not_allowlisted",
}
ใช้ channelIngressRoutes(...) เมื่อ Plugin มี descriptor เส้นทางที่เป็นทางเลือกหลายรายการ; ฟังก์ชันนี้จะกรองกิ่งที่ปิดใช้งานออก ขณะยังคงข้อเท็จจริงของเส้นทางให้เป็นแบบทั่วไปและเรียงตาม precedence ของแต่ละ descriptor
การเกตการกล่าวถึงคือเกตการเปิดใช้งาน เมื่อไม่พบการกล่าวถึงจะคืนค่า admission: "skip" เพื่อให้ turn kernel ไม่ประมวลผล turn แบบ observe-only ช่องทางส่วนใหญ่ควรปล่อยให้การเปิดใช้งานอยู่หลังเกตผู้ส่งและเกตคำสั่ง พื้นที่แชตสาธารณะที่ต้องทำให้ทราฟฟิกที่ไม่ได้ถูกกล่าวถึงเงียบลงก่อนเสียงรบกวนจากรายการอนุญาตของผู้ส่งสามารถเลือกใช้ activation.order: "before-sender" ได้เมื่อปิดใช้งานการข้ามด้วยคำสั่งข้อความ ช่องทางที่มีการเปิดใช้งานโดยนัย เช่น การตอบกลับในเธรดของบอต สามารถส่ง activation.allowedImplicitMentionKinds; จากนั้น activationAccess.shouldBypassMention ที่ถูก project จะรายงานเมื่อคำสั่งหรือการเปิดใช้งานโดยนัยข้ามการกล่าวถึงอย่างชัดเจน
การปกปิดข้อมูล
ค่าผู้ส่งดิบและรายการอนุญาตดิบเป็นเพียงอินพุตของตัวแก้ค่าเท่านั้น ค่าเหล่านี้ต้องไม่ปรากฏในสถานะที่แก้ค่าแล้ว การตัดสินใจ diagnostics snapshot หรือข้อเท็จจริงความเข้ากันได้ ใช้ id ของ subject แบบทึบ, id ของรายการ, id ของเส้นทาง และ id ของ diagnostic
การตรวจสอบ
pnpm test src/channels/message-access/message-access.test.ts src/plugin-sdk/channel-ingress-runtime.test.ts
pnpm plugin-sdk:api:check