




























@@ -0,0 +1,92 @@
1+import { describeAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
2+import { formatNormalizedAllowFromEntries } from "openclaw/plugin-sdk/allow-from";
3+import {
4+adaptScopedAccountAccessor,
5+createScopedChannelConfigAdapter,
6+} from "openclaw/plugin-sdk/channel-config-helpers";
7+import type { ChannelPlugin } from "openclaw/plugin-sdk/channel-core";
8+import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/text-runtime";
9+import {
10+listGoogleChatAccountIds,
11+resolveDefaultGoogleChatAccountId,
12+resolveGoogleChatAccount,
13+type ResolvedGoogleChatAccount,
14+} from "./accounts.js";
15+import { googlechatSetupAdapter } from "./setup-core.js";
16+import { googlechatSetupWizard } from "./setup-surface.js";
17+18+const formatGoogleChatAllowFromEntry = (entry: string) =>
19+normalizeLowercaseStringOrEmpty(
20+entry
21+.trim()
22+.replace(/^(googlechat|google-chat|gchat):/i, "")
23+.replace(/^user:/i, "")
24+.replace(/^users\//i, ""),
25+);
26+27+const googleChatConfigAdapter = createScopedChannelConfigAdapter<ResolvedGoogleChatAccount>({
28+sectionKey: "googlechat",
29+listAccountIds: listGoogleChatAccountIds,
30+resolveAccount: adaptScopedAccountAccessor(resolveGoogleChatAccount),
31+defaultAccountId: resolveDefaultGoogleChatAccountId,
32+clearBaseFields: [
33+"serviceAccount",
34+"serviceAccountFile",
35+"audienceType",
36+"audience",
37+"webhookPath",
38+"webhookUrl",
39+"botUser",
40+"name",
41+],
42+resolveAllowFrom: (account) => account.config.dm?.allowFrom,
43+formatAllowFrom: (allowFrom) =>
44+formatNormalizedAllowFromEntries({
45+ allowFrom,
46+normalizeEntry: formatGoogleChatAllowFromEntry,
47+}),
48+resolveDefaultTo: (account) => account.config.defaultTo,
49+});
50+51+export const googlechatSetupPlugin: ChannelPlugin<ResolvedGoogleChatAccount> = {
52+id: "googlechat",
53+meta: {
54+id: "googlechat",
55+label: "Google Chat",
56+selectionLabel: "Google Chat (Chat API)",
57+docsPath: "/channels/googlechat",
58+docsLabel: "googlechat",
59+blurb: "Google Workspace Chat app with HTTP webhook.",
60+aliases: ["gchat", "google-chat"],
61+order: 55,
62+detailLabel: "Google Chat",
63+systemImage: "message.badge",
64+markdownCapable: true,
65+},
66+setup: googlechatSetupAdapter,
67+setupWizard: googlechatSetupWizard,
68+capabilities: {
69+chatTypes: ["direct", "group", "thread"],
70+reactions: true,
71+threads: true,
72+media: true,
73+nativeCommands: false,
74+blockStreaming: true,
75+},
76+streaming: {
77+blockStreamingCoalesceDefaults: { minChars: 1500, idleMs: 1000 },
78+},
79+reload: { configPrefixes: ["channels.googlechat"] },
80+config: {
81+ ...googleChatConfigAdapter,
82+isConfigured: (account) => account.credentialSource !== "none",
83+describeAccount: (account) =>
84+describeAccountSnapshot({
85+ account,
86+configured: account.credentialSource !== "none",
87+extra: {
88+credentialSource: account.credentialSource,
89+},
90+}),
91+},
92+};
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。