import { buildChannelOutboundSessionRoute, stripChannelTargetPrefix, type ChannelOutboundSessionRouteParams, } from "openclaw/plugin-sdk/channel-core"; import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/text-runtime"; export function resolveFeishuOutboundSessionRoute(params: ChannelOutboundSessionRouteParams) { let trimmed = stripChannelTargetPrefix(params.target, "feishu", "lark"); if (!trimmed) { return null; } const lower = normalizeLowercaseStringOrEmpty(trimmed); let isGroup = false; let typeExplicit = false; if (lower.startsWith("group:") || lower.startsWith("chat:") || lower.startsWith("channel:")) { trimmed = trimmed.replace(/^(group|chat|channel):/i, "").trim(); isGroup = true; typeExplicit = true; } else if (lower.startsWith("user:") || lower.startsWith("dm:")) { trimmed = trimmed.replace(/^(user|dm):/i, "").trim(); isGroup = false; typeExplicit = true; } if (!typeExplicit) { const idLower = normalizeLowercaseStringOrEmpty(trimmed); if (idLower.startsWith("ou_") || idLower.startsWith("on_")) { isGroup = false; } } return buildChannelOutboundSessionRoute({ cfg: params.cfg, agentId: params.agentId, channel: "feishu", accountId: params.accountId, peer: { kind: isGroup ? "group" : "direct", id: trimmed, }, chatType: isGroup ? "group" : "direct", from: isGroup ? `feishu:group:${trimmed}` : `feishu:${trimmed}`, to: trimmed, }); }