Files
openclaw/extensions/feishu/src/session-route.ts
2026-04-07 15:53:49 +01:00

49 lines
1.5 KiB
TypeScript

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,
});
}