diff --git a/extensions/nextcloud-talk/src/channel.ts b/extensions/nextcloud-talk/src/channel.ts index a9dbad6018d..d912a6bbf33 100644 --- a/extensions/nextcloud-talk/src/channel.ts +++ b/extensions/nextcloud-talk/src/channel.ts @@ -34,6 +34,7 @@ import { import { resolveNextcloudTalkGroupToolPolicy } from "./policy.js"; import { getNextcloudTalkRuntime } from "./runtime.js"; import { sendMessageNextcloudTalk } from "./send.js"; +import { resolveNextcloudTalkOutboundSessionRoute } from "./session-route.js"; import { nextcloudTalkSetupAdapter } from "./setup-core.js"; import { nextcloudTalkSetupWizard } from "./setup-surface.js"; import type { CoreConfig } from "./types.js"; @@ -171,6 +172,7 @@ export const nextcloudTalkPlugin: ChannelPlugin = }, messaging: { normalizeTarget: normalizeNextcloudTalkMessagingTarget, + resolveOutboundSessionRoute: (params) => resolveNextcloudTalkOutboundSessionRoute(params), targetResolver: { looksLikeId: looksLikeNextcloudTalkTargetId, hint: "", diff --git a/extensions/nextcloud-talk/src/session-route.ts b/extensions/nextcloud-talk/src/session-route.ts new file mode 100644 index 00000000000..c469358c70e --- /dev/null +++ b/extensions/nextcloud-talk/src/session-route.ts @@ -0,0 +1,27 @@ +import { + buildChannelOutboundSessionRoute, + type ChannelOutboundSessionRouteParams, +} from "openclaw/plugin-sdk/core"; +import { stripNextcloudTalkTargetPrefix } from "./normalize.js"; + +export function resolveNextcloudTalkOutboundSessionRoute( + params: ChannelOutboundSessionRouteParams, +) { + const roomId = stripNextcloudTalkTargetPrefix(params.target); + if (!roomId) { + return null; + } + return buildChannelOutboundSessionRoute({ + cfg: params.cfg, + agentId: params.agentId, + channel: "nextcloud-talk", + accountId: params.accountId, + peer: { + kind: "group", + id: roomId, + }, + chatType: "group", + from: `nextcloud-talk:room:${roomId}`, + to: `nextcloud-talk:${roomId}`, + }); +}