openclaw/plugin-sdk/channel-ingress-runtime for receive paths.
Runtime resolver
Result
Bundled plugins should consume modern projections directly:
Event authorization stays available on the ordered
ingress.graph and the
decisive ingress.reasonCode; no separate event projection is emitted.
Deprecated third-party SDK helpers may rebuild older shapes internally. New
bundled receive paths should not translate modern results back into local
DTOs.
Access groups
accessGroup:<name> entries stay redacted. Core resolves static
message.senders groups itself and calls resolveAccessGroupMembership only
for dynamic groups that require a platform lookup. Missing, unsupported, and
failed groups fail closed.
Event modes
Use
mayPair: false for reactions, buttons, callbacks, and native commands.
Routes and activation
Use route descriptors for room, topic, guild, thread, or nested route policy:channelIngressRoutes(...) when a plugin has several optional route
descriptors; it filters disabled branches while keeping route facts generic
and ordered by each descriptor’s precedence.
Mention gating is an activation gate. A mention miss returns
admission: "skip" so the turn kernel does not process an observe-only turn.
Most channels should leave activation after sender and command gates. Public
chat surfaces that must quiet non-mentioned traffic before sender allowlist
noise can opt into activation.order: "before-sender" when text-command
bypass is disabled. Channels with implicit activation, such as replies in bot
threads, can pass activation.allowedImplicitMentionKinds; the projected
activationAccess.shouldBypassMention then reports when command or implicit
activation bypassed an explicit mention.