Plugin internals
चैनल इनग्रेस API
चैनल इनग्रेस, इनबाउंड चैनल इवेंट के लिए प्रयोगात्मक एक्सेस-कंट्रोल सीमा है। Plugins प्लेटफ़ॉर्म तथ्यों और साइड इफ़ेक्ट्स के स्वामी होते हैं; कोर सामान्य नीति का स्वामी होता है: DM/ग्रुप अनुमत-सूचियाँ, पेयरिंग-स्टोर DM प्रविष्टियाँ, रूट गेट, कमांड गेट, इवेंट प्रमाणीकरण, उल्लेख सक्रियण, संपादित निदान और प्रवेश।
रिसीव पाथ के लिए openclaw/plugin-sdk/channel-ingress-runtime का उपयोग करें।
रनटाइम रिज़ॉल्वर
import { 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,});प्रभावी अनुमत-सूचियों, कमांड स्वामियों या कमांड समूहों की पहले से गणना न करें। रिज़ॉल्वर उन्हें अपरिष्कृत अनुमत-सूचियों, स्टोर कॉलबैक, रूट डिस्क्रिप्टर, एक्सेस समूहों, नीति और वार्तालाप के प्रकार से प्राप्त करता है।
परिणाम
बंडल किए गए Plugins को आधुनिक प्रोजेक्शन का सीधे उपयोग करना चाहिए:
| फ़ील्ड | अर्थ |
|---|---|
ingress |
क्रमबद्ध गेट निर्णय और प्रवेश |
senderAccess |
केवल प्रेषक/वार्तालाप प्राधिकरण |
routeAccess |
रूट और रूट-प्रेषक प्रोजेक्शन |
commandAccess |
कमांड प्राधिकरण; जब कोई कमांड गेट नहीं चला हो तब requested: false |
activationAccess |
उल्लेख/सक्रियण परिणाम |
इवेंट प्राधिकरण क्रमबद्ध ingress.graph और निर्णायक ingress.reasonCode पर उपलब्ध रहता है; कोई अलग इवेंट प्रोजेक्शन उत्सर्जित नहीं होता।
बहिष्कृत तृतीय-पक्ष SDK सहायक आंतरिक रूप से पुराने आकारों का पुनर्निर्माण कर सकते हैं। नए बंडल किए गए रिसीव पाथ को आधुनिक परिणामों को वापस स्थानीय DTO में रूपांतरित नहीं करना चाहिए।
एक्सेस समूह
accessGroup:<name> प्रविष्टियाँ संपादित रहती हैं। कोर स्थिर message.senders समूहों को स्वयं रिज़ॉल्व करता है और केवल उन डायनेमिक समूहों के लिए resolveAccessGroupMembership को कॉल करता है जिन्हें प्लेटफ़ॉर्म लुकअप की आवश्यकता होती है। अनुपलब्ध, असमर्थित और विफल समूह बंद रहते हैं।
इवेंट मोड
authMode |
अर्थ |
|---|---|
inbound |
सामान्य इनबाउंड प्रेषक गेट |
command |
कॉलबैक या सीमित-स्कोप बटन के लिए कमांड गेट |
origin-subject |
अभिनेता मूल संदेश विषय से मेल खाना आवश्यक है |
route-only |
केवल रूट-स्कोप वाले विश्वसनीय इवेंट के लिए रूट गेट |
none |
Plugin-स्वामित्व वाले आंतरिक इवेंट साझा प्रमाणीकरण को बायपास करते हैं |
प्रतिक्रियाओं, बटन, कॉलबैक और नेटिव कमांड के लिए mayPair: false का उपयोग करें।
रूट और सक्रियण
रूम, टॉपिक, गिल्ड, थ्रेड या नेस्टेड रूट नीति के लिए रूट डिस्क्रिप्टर का उपयोग करें:
route: { id: "room", allowed: roomAllowed, enabled: roomEnabled, senderPolicy: "replace", senderAllowFrom: roomAllowFrom, blockReason: "room_sender_not_allowlisted",}जब किसी Plugin में कई वैकल्पिक रूट डिस्क्रिप्टर हों, तब channelIngressRoutes(...) का उपयोग करें; यह रूट तथ्यों को सामान्य रखते हुए अक्षम शाखाओं को फ़िल्टर करता है और उन्हें प्रत्येक डिस्क्रिप्टर के precedence के अनुसार क्रमबद्ध करता है।
उल्लेख गेटिंग एक सक्रियण गेट है। उल्लेख न मिलने पर admission: "skip" लौटता है, ताकि टर्न कर्नेल केवल-अवलोकन वाले टर्न को संसाधित न करे। अधिकांश चैनलों को सक्रियण को प्रेषक और कमांड गेट के बाद रखना चाहिए। जिन सार्वजनिक चैट सतहों को प्रेषक अनुमत-सूची के शोर से पहले बिना उल्लेख वाले ट्रैफ़िक को शांत करना आवश्यक है, वे टेक्स्ट-कमांड बायपास अक्षम होने पर activation.order: "before-sender" चुन सकती हैं। बॉट थ्रेड में उत्तर जैसे अंतर्निहित सक्रियण वाले चैनल, resolveChannelImplicitMentions(...) के साथ channels.defaults.implicitMentions तथा चैनल और अकाउंट ओवरराइड को रिज़ॉल्व करते हैं, फिर परिणाम को activation.implicitMentions के रूप में पास करते हैं। प्रोजेक्ट किया गया activationAccess.shouldBypassMention बताता है कि कमांड या अंतर्निहित सक्रियण ने स्पष्ट उल्लेख को कब बायपास किया।
संपादन
अपरिष्कृत प्रेषक मान और अपरिष्कृत अनुमत-सूची प्रविष्टियाँ केवल रिज़ॉल्वर इनपुट हैं। वे रिज़ॉल्व की गई स्थिति, निर्णयों, निदान, स्नैपशॉट या संगतता तथ्यों में दिखाई नहीं देने चाहिए। अपारदर्शी विषय आईडी, प्रविष्टि आईडी, रूट आईडी और निदान आईडी का उपयोग करें।
सत्यापन
pnpm test src/channels/message-access/message-access.test.ts src/plugin-sdk/channel-ingress-runtime.test.tspnpm plugin-sdk:api:check