

























@@ -0,0 +1,77 @@
1+import { describeAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
2+import { formatAllowFromLowercase } from "openclaw/plugin-sdk/allow-from";
3+import { createTopLevelChannelConfigAdapter } from "openclaw/plugin-sdk/channel-config-helpers";
4+import type { ChannelPlugin } from "openclaw/plugin-sdk/channel-core";
5+import type { OpenClawConfig } from "openclaw/plugin-sdk/config-runtime";
6+import { MSTeamsChannelConfigSchema } from "./config-schema.js";
7+import { msteamsSetupAdapter } from "./setup-core.js";
8+import { msteamsSetupWizard } from "./setup-surface.js";
9+import { resolveMSTeamsCredentials } from "./token.js";
10+11+type ResolvedMSTeamsAccount = {
12+accountId: string;
13+enabled: boolean;
14+configured: boolean;
15+};
16+17+const meta = {
18+id: "msteams",
19+label: "Microsoft Teams",
20+selectionLabel: "Microsoft Teams (Bot Framework)",
21+docsPath: "/channels/msteams",
22+docsLabel: "msteams",
23+blurb: "Teams SDK; enterprise support.",
24+aliases: ["teams"],
25+order: 60,
26+} as const;
27+28+const resolveMSTeamsChannelConfig = (cfg: OpenClawConfig) => ({
29+allowFrom: cfg.channels?.msteams?.allowFrom,
30+defaultTo: cfg.channels?.msteams?.defaultTo,
31+});
32+33+const msteamsConfigAdapter = createTopLevelChannelConfigAdapter<
34+ResolvedMSTeamsAccount,
35+{
36+allowFrom?: Array<string | number>;
37+defaultTo?: string;
38+}
39+>({
40+sectionKey: "msteams",
41+resolveAccount: (cfg) => ({
42+accountId: "default",
43+enabled: cfg.channels?.msteams?.enabled !== false,
44+configured: Boolean(resolveMSTeamsCredentials(cfg.channels?.msteams)),
45+}),
46+resolveAccessorAccount: ({ cfg }) => resolveMSTeamsChannelConfig(cfg),
47+resolveAllowFrom: (account) => account.allowFrom,
48+formatAllowFrom: (allowFrom) => formatAllowFromLowercase({ allowFrom }),
49+resolveDefaultTo: (account) => account.defaultTo,
50+});
51+52+export const msteamsSetupPlugin: ChannelPlugin<ResolvedMSTeamsAccount> = {
53+id: "msteams",
54+meta: {
55+ ...meta,
56+aliases: [...meta.aliases],
57+},
58+capabilities: {
59+chatTypes: ["direct", "channel", "thread"],
60+polls: true,
61+threads: true,
62+media: true,
63+},
64+reload: { configPrefixes: ["channels.msteams"] },
65+configSchema: MSTeamsChannelConfigSchema,
66+config: {
67+ ...msteamsConfigAdapter,
68+isConfigured: (_account, cfg) => Boolean(resolveMSTeamsCredentials(cfg.channels?.msteams)),
69+describeAccount: (account) =>
70+describeAccountSnapshot({
71+ account,
72+configured: account.configured,
73+}),
74+},
75+setupWizard: msteamsSetupWizard,
76+setup: msteamsSetupAdapter,
77+};
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。