@xwang152/claw-lark 0.1.21 → 0.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/src/monitor.js +122 -23
- package/dist/src/monitor.js.map +1 -1
- package/dist/src/provider.d.ts +107 -0
- package/dist/src/provider.js +350 -0
- package/dist/src/provider.js.map +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
|
|
9
9
|
export { larkPlugin } from "./src/channel.js";
|
|
10
|
+
export { larkProviderPlugin } from "./src/provider.js";
|
|
10
11
|
export { createLarkClient, createLarkWSClient } from "./src/client.js";
|
|
11
12
|
export { monitorLarkProvider, stopMonitor } from "./src/monitor.js";
|
|
12
13
|
export { startWebhookServer } from "./src/webhook.js";
|
package/dist/index.js
CHANGED
|
@@ -7,9 +7,11 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { emptyPluginConfigSchema } from "openclaw/plugin-sdk";
|
|
9
9
|
import { larkPlugin } from "./src/channel.js";
|
|
10
|
+
import { larkProviderPlugin } from "./src/provider.js";
|
|
10
11
|
import { setLarkRuntime } from "./src/runtime.js";
|
|
11
12
|
// Re-export for programmatic usage
|
|
12
13
|
export { larkPlugin } from "./src/channel.js";
|
|
14
|
+
export { larkProviderPlugin } from "./src/provider.js";
|
|
13
15
|
export { createLarkClient, createLarkWSClient } from "./src/client.js";
|
|
14
16
|
export { monitorLarkProvider, stopMonitor } from "./src/monitor.js";
|
|
15
17
|
export { startWebhookServer } from "./src/webhook.js";
|
|
@@ -20,11 +22,13 @@ export { extractMentionTargets, extractMessageBody, isMentionForwardRequest, for
|
|
|
20
22
|
const plugin = {
|
|
21
23
|
id: "claw-lark",
|
|
22
24
|
name: "Lark",
|
|
23
|
-
description: "Lark / Feishu
|
|
25
|
+
description: "Lark / Feishu provider plugin for OpenClaw",
|
|
24
26
|
configSchema: emptyPluginConfigSchema(),
|
|
25
27
|
register(api) {
|
|
26
28
|
setLarkRuntime(api);
|
|
29
|
+
// Register as both channel and provider
|
|
27
30
|
api.registerChannel({ plugin: larkPlugin });
|
|
31
|
+
api.registerProvider(larkProviderPlugin);
|
|
28
32
|
},
|
|
29
33
|
};
|
|
30
34
|
export default plugin;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,mCAAmC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAY1B,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,mCAAmC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAY1B,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,4CAA4C;IACzD,YAAY,EAAE,uBAAuB,EAAE;IACvC,QAAQ,CAAC,GAAsB;QAC7B,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,wCAAwC;QACxC,GAAG,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5C,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IAC3C,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/src/monitor.js
CHANGED
|
@@ -10,6 +10,25 @@ import { startWebhookServer } from "./webhook.js";
|
|
|
10
10
|
// Active connections for cleanup
|
|
11
11
|
let activeWsClient = null;
|
|
12
12
|
let activeWebhookServer = null;
|
|
13
|
+
/**
|
|
14
|
+
* Determine receive_id_type from recipient ID format.
|
|
15
|
+
* IDs starting with "oc_" are chat IDs,
|
|
16
|
+
* IDs starting with "ou_" are open IDs (user),
|
|
17
|
+
* IDs starting with "on_" are union IDs (user).
|
|
18
|
+
*/
|
|
19
|
+
function inferReceiveIdType(recipientId) {
|
|
20
|
+
if (recipientId.startsWith("oc_")) {
|
|
21
|
+
return "chat_id";
|
|
22
|
+
}
|
|
23
|
+
if (recipientId.startsWith("ou_")) {
|
|
24
|
+
return "open_id";
|
|
25
|
+
}
|
|
26
|
+
if (recipientId.startsWith("on_")) {
|
|
27
|
+
return "union_id";
|
|
28
|
+
}
|
|
29
|
+
// Default to open_id for other formats
|
|
30
|
+
return "open_id";
|
|
31
|
+
}
|
|
13
32
|
/**
|
|
14
33
|
* Extract plain text from Lark message content.
|
|
15
34
|
* Handles different message types (text, post/rich-text).
|
|
@@ -105,41 +124,121 @@ export async function routeMessage(event, account) {
|
|
|
105
124
|
return;
|
|
106
125
|
}
|
|
107
126
|
api.logger.info(`[feishu] Received message from ${parsed.senderId} in ${parsed.chatType} ${parsed.chatId}`);
|
|
108
|
-
//
|
|
127
|
+
// Route message to OpenClaw's message dispatcher
|
|
128
|
+
// Use the runtime's channel.reply API if available
|
|
129
|
+
const runtime = api.runtime;
|
|
130
|
+
if (runtime?.channel?.reply?.dispatchReplyWithBufferedBlockDispatcher) {
|
|
131
|
+
try {
|
|
132
|
+
// Build the inbound context
|
|
133
|
+
const isDirect = parsed.chatType === "p2p";
|
|
134
|
+
const isGroup = parsed.chatType === "group";
|
|
135
|
+
// Use OpenClaw's routing system
|
|
136
|
+
const resolveAgentRoute = runtime.channel.routing.resolveAgentRoute;
|
|
137
|
+
if (resolveAgentRoute) {
|
|
138
|
+
const route = resolveAgentRoute({
|
|
139
|
+
cfg: api.config,
|
|
140
|
+
channel: "lark",
|
|
141
|
+
accountId: account.accountId,
|
|
142
|
+
peer: {
|
|
143
|
+
kind: isDirect ? "dm" : "group",
|
|
144
|
+
id: parsed.chatId,
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
// Build the inbound context
|
|
148
|
+
const ctx = {
|
|
149
|
+
From: parsed.senderId,
|
|
150
|
+
To: `lark:${parsed.chatId}`,
|
|
151
|
+
Body: parsed.text,
|
|
152
|
+
ChatType: isDirect ? "dm" : "group",
|
|
153
|
+
MessageSid: parsed.messageId,
|
|
154
|
+
ReplyToId: parsed.threadId,
|
|
155
|
+
MediaUrls: parsed.media?.map(m => m.id),
|
|
156
|
+
Timestamp: new Date(parsed.timestamp * 1000).toISOString(),
|
|
157
|
+
// Lark-specific fields
|
|
158
|
+
Provider: "lark",
|
|
159
|
+
AccountId: account.accountId,
|
|
160
|
+
MessageId: parsed.messageId,
|
|
161
|
+
ChatId: parsed.chatId,
|
|
162
|
+
SenderId: parsed.senderId,
|
|
163
|
+
ThreadId: parsed.threadId,
|
|
164
|
+
Mentions: parsed.mentions,
|
|
165
|
+
};
|
|
166
|
+
// Dispatch the message
|
|
167
|
+
await runtime.channel.reply.dispatchReplyWithBufferedBlockDispatcher({
|
|
168
|
+
ctx,
|
|
169
|
+
cfg: api.config,
|
|
170
|
+
dispatcherOptions: {
|
|
171
|
+
deliver: async (payload) => {
|
|
172
|
+
// Send reply to Lark
|
|
173
|
+
try {
|
|
174
|
+
const client = createLarkClient(account);
|
|
175
|
+
const text = payload.text || "";
|
|
176
|
+
const mediaUrls = payload.mediaUrls || [];
|
|
177
|
+
const replyToId = payload.replyToId || parsed.threadId;
|
|
178
|
+
// Send text message
|
|
179
|
+
if (text || mediaUrls.length > 0) {
|
|
180
|
+
let finalText = text;
|
|
181
|
+
// If there are media URLs, append them to the text
|
|
182
|
+
// Note: Lark requires media to be uploaded first, then sent with media_key
|
|
183
|
+
// For now, we'll just send the text
|
|
184
|
+
const response = await client.im.message.create({
|
|
185
|
+
params: {
|
|
186
|
+
receive_id_type: inferReceiveIdType(parsed.chatId),
|
|
187
|
+
},
|
|
188
|
+
data: {
|
|
189
|
+
receive_id: parsed.chatId,
|
|
190
|
+
msg_type: "text",
|
|
191
|
+
content: JSON.stringify({ text: finalText }),
|
|
192
|
+
...(replyToId && { root_id: replyToId }),
|
|
193
|
+
// Reply to specific message if in thread
|
|
194
|
+
...(parsed.threadId && { parent_id: parsed.messageId }),
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
if (response.code === 0) {
|
|
198
|
+
api.logger.info(`[feishu] Reply sent: message_id=${response.data?.message_id}`);
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
api.logger.error(`[feishu] Failed to send reply: ${response.msg}`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch (err) {
|
|
206
|
+
api.logger.error(`[feishu] Error sending reply: ${err}`);
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
onError: (err) => {
|
|
210
|
+
api.logger.error(`[feishu] Reply error: ${err}`);
|
|
211
|
+
},
|
|
212
|
+
},
|
|
213
|
+
replyOptions: {},
|
|
214
|
+
});
|
|
215
|
+
api.logger.info(`[feishu] Message routed to agent ${route.agentId}`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
api.logger.error(`[feishu] Failed to route message: ${error}`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
api.logger.warn("[feishu] Runtime dispatcher not available, message not routed");
|
|
224
|
+
}
|
|
225
|
+
// Optional: Add a "received" reaction to indicate message was processed
|
|
226
|
+
// Using valid Lark emoji type: "THUMBSUP" (confirmed to work)
|
|
109
227
|
const client = createLarkClient(account);
|
|
110
228
|
try {
|
|
111
229
|
await client.im.messageReaction.create({
|
|
112
230
|
path: { message_id: parsed.messageId },
|
|
113
231
|
data: {
|
|
114
232
|
reaction_type: {
|
|
115
|
-
emoji_type: "
|
|
233
|
+
emoji_type: "THUMBSUP",
|
|
116
234
|
},
|
|
117
235
|
},
|
|
118
236
|
});
|
|
119
237
|
}
|
|
120
238
|
catch (e) {
|
|
121
|
-
// Ignore reaction errors
|
|
239
|
+
// Ignore reaction errors (e.g., message already deleted)
|
|
240
|
+
api.logger.debug(`[feishu] Reaction add failed: ${e}`);
|
|
122
241
|
}
|
|
123
|
-
// Use the top-level handleMessage or fallback to inbound.handleMessage
|
|
124
|
-
const handleMessage = api.handleMessage || api.inbound?.handleMessage;
|
|
125
|
-
if (typeof handleMessage !== "function") {
|
|
126
|
-
api.logger.error("[feishu] No handleMessage function found in OpenClaw API");
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
await handleMessage({
|
|
130
|
-
channel: "lark",
|
|
131
|
-
accountId: account.accountId,
|
|
132
|
-
messageId: parsed.messageId,
|
|
133
|
-
chatId: parsed.chatId,
|
|
134
|
-
chatType: parsed.chatType === "p2p" ? "direct" : "group",
|
|
135
|
-
senderId: parsed.senderId,
|
|
136
|
-
text: parsed.text,
|
|
137
|
-
threadId: parsed.threadId,
|
|
138
|
-
timestamp: parsed.timestamp,
|
|
139
|
-
mentions: parsed.mentions,
|
|
140
|
-
media: parsed.media,
|
|
141
|
-
raw: event,
|
|
142
|
-
});
|
|
143
242
|
}
|
|
144
243
|
/**
|
|
145
244
|
* Start WebSocket connection and listen for messages.
|
package/dist/src/monitor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/monitor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lark Provider Plugin
|
|
3
|
+
*
|
|
4
|
+
* Implements the ProviderPlugin interface for Lark/Feishu integration.
|
|
5
|
+
* Provides message monitoring, processing, and sending capabilities.
|
|
6
|
+
*/
|
|
7
|
+
import type { OpenClawConfig } from "openclaw/plugin-sdk";
|
|
8
|
+
import type { ResolvedLarkAccount, SendResult } from "./types.js";
|
|
9
|
+
/**
|
|
10
|
+
* List available users
|
|
11
|
+
*/
|
|
12
|
+
declare function listPeers(account: ResolvedLarkAccount): Promise<Array<{
|
|
13
|
+
id: string;
|
|
14
|
+
name: string;
|
|
15
|
+
}>>;
|
|
16
|
+
/**
|
|
17
|
+
* List available chat groups
|
|
18
|
+
*/
|
|
19
|
+
declare function listGroups(account: ResolvedLarkAccount): Promise<Array<{
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
}>>;
|
|
23
|
+
/**
|
|
24
|
+
* Lark/Feishu provider plugin implementation
|
|
25
|
+
*/
|
|
26
|
+
export declare const larkProviderPlugin: {
|
|
27
|
+
id: string;
|
|
28
|
+
meta: {
|
|
29
|
+
label: string;
|
|
30
|
+
selectionLabel: string;
|
|
31
|
+
docsPath: string;
|
|
32
|
+
blurb: string;
|
|
33
|
+
order: number;
|
|
34
|
+
};
|
|
35
|
+
capabilities: {
|
|
36
|
+
chatTypes: string[];
|
|
37
|
+
reactions: boolean;
|
|
38
|
+
threads: boolean;
|
|
39
|
+
media: boolean;
|
|
40
|
+
nativeCommands: boolean;
|
|
41
|
+
blockStreaming: boolean;
|
|
42
|
+
};
|
|
43
|
+
config: {
|
|
44
|
+
listAccountIds(cfg: OpenClawConfig): string[];
|
|
45
|
+
resolveAccount(cfg: OpenClawConfig, accountId?: string): ResolvedLarkAccount | null;
|
|
46
|
+
isConfigured(account: ResolvedLarkAccount): boolean;
|
|
47
|
+
setAccountEnabled(cfg: OpenClawConfig, accountId: string, enabled: boolean): OpenClawConfig;
|
|
48
|
+
};
|
|
49
|
+
outbound: {
|
|
50
|
+
deliveryMode: string;
|
|
51
|
+
textChunkLimit: number;
|
|
52
|
+
chunkerMode: string;
|
|
53
|
+
sendText(args: {
|
|
54
|
+
account: ResolvedLarkAccount;
|
|
55
|
+
recipientId: string;
|
|
56
|
+
text: string;
|
|
57
|
+
threadId?: string;
|
|
58
|
+
}): Promise<SendResult>;
|
|
59
|
+
sendMedia(args: {
|
|
60
|
+
account: ResolvedLarkAccount;
|
|
61
|
+
recipientId: string;
|
|
62
|
+
mediaId: string;
|
|
63
|
+
mediaType: "image" | "file";
|
|
64
|
+
fileName?: string;
|
|
65
|
+
threadId?: string;
|
|
66
|
+
}): Promise<SendResult>;
|
|
67
|
+
downloadMedia(args: {
|
|
68
|
+
account: ResolvedLarkAccount;
|
|
69
|
+
mediaId: string;
|
|
70
|
+
mediaType: "image" | "file";
|
|
71
|
+
messageId?: string;
|
|
72
|
+
}): Promise<Buffer | null>;
|
|
73
|
+
addReaction(args: {
|
|
74
|
+
account: ResolvedLarkAccount;
|
|
75
|
+
messageId: string;
|
|
76
|
+
emoji: string;
|
|
77
|
+
}): Promise<void>;
|
|
78
|
+
removeReaction(args: {
|
|
79
|
+
account: ResolvedLarkAccount;
|
|
80
|
+
messageId: string;
|
|
81
|
+
emoji: string;
|
|
82
|
+
reactionId?: string;
|
|
83
|
+
}): Promise<void>;
|
|
84
|
+
listReactions(args: {
|
|
85
|
+
account: ResolvedLarkAccount;
|
|
86
|
+
messageId: string;
|
|
87
|
+
}): Promise<Array<{
|
|
88
|
+
emoji: string;
|
|
89
|
+
reactionId: string;
|
|
90
|
+
}>>;
|
|
91
|
+
};
|
|
92
|
+
directory: {
|
|
93
|
+
listPeers: typeof listPeers;
|
|
94
|
+
listGroups: typeof listGroups;
|
|
95
|
+
};
|
|
96
|
+
gateway: {
|
|
97
|
+
startAccount: (ctx: {
|
|
98
|
+
account: ResolvedLarkAccount;
|
|
99
|
+
cfg: OpenClawConfig;
|
|
100
|
+
runtime: any;
|
|
101
|
+
abortSignal?: AbortSignal;
|
|
102
|
+
log?: any;
|
|
103
|
+
}) => Promise<void>;
|
|
104
|
+
stopAccount: () => Promise<void>;
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
export {};
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lark Provider Plugin
|
|
3
|
+
*
|
|
4
|
+
* Implements the ProviderPlugin interface for Lark/Feishu integration.
|
|
5
|
+
* Provides message monitoring, processing, and sending capabilities.
|
|
6
|
+
*/
|
|
7
|
+
import { createLarkClient } from "./client.js";
|
|
8
|
+
import { monitorLarkProvider, stopMonitor } from "./monitor.js";
|
|
9
|
+
import { listLarkDirectoryPeers, listLarkDirectoryGroups } from "./directory.js";
|
|
10
|
+
import { addReactionLark, removeReactionLark, listReactionsLark } from "./reactions.js";
|
|
11
|
+
import { downloadImageLark, downloadFileLark } from "./media.js";
|
|
12
|
+
// Default values for account configuration
|
|
13
|
+
const DEFAULTS = {
|
|
14
|
+
domain: "feishu",
|
|
15
|
+
connectionMode: "websocket",
|
|
16
|
+
webhookPort: 3000,
|
|
17
|
+
dmPolicy: "pairing",
|
|
18
|
+
groupPolicy: "open",
|
|
19
|
+
requireMention: true,
|
|
20
|
+
mediaMaxMb: 30,
|
|
21
|
+
renderMode: "auto",
|
|
22
|
+
historyLimit: 10,
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Extract Feishu channel config from OpenClaw config
|
|
26
|
+
*/
|
|
27
|
+
function getChannelConfig(cfg) {
|
|
28
|
+
return cfg.channels?.lark ?? {};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get account config from channel config, with empty object fallback
|
|
32
|
+
*/
|
|
33
|
+
function getAccountConfig(channelConfig, accountId) {
|
|
34
|
+
return channelConfig.accounts?.[accountId] ?? {};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Check if default account has env var credentials configured
|
|
38
|
+
*/
|
|
39
|
+
function hasEnvCredentials() {
|
|
40
|
+
return Boolean(process.env.LARK_APP_ID && process.env.LARK_APP_SECRET);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Resolve account configuration with defaults and env fallbacks.
|
|
44
|
+
* For "default" account, environment variables take precedence.
|
|
45
|
+
*/
|
|
46
|
+
function resolveAccount(cfg, accountId) {
|
|
47
|
+
const channelConfig = getChannelConfig(cfg);
|
|
48
|
+
const accountConfig = getAccountConfig(channelConfig, accountId);
|
|
49
|
+
// Resolve credentials - env vars as fallback for default account
|
|
50
|
+
const isDefault = accountId === "default";
|
|
51
|
+
const appId = accountConfig.appId ?? (isDefault ? process.env.LARK_APP_ID : undefined);
|
|
52
|
+
const appSecret = accountConfig.appSecret ?? (isDefault ? process.env.LARK_APP_SECRET : undefined);
|
|
53
|
+
const encryptKey = accountConfig.encryptKey ?? (isDefault ? process.env.LARK_ENCRYPT_KEY : undefined);
|
|
54
|
+
const verificationToken = accountConfig.verificationToken ?? (isDefault ? process.env.LARK_VERIFICATION_TOKEN : undefined);
|
|
55
|
+
const configured = Boolean(appId?.trim() && appSecret?.trim());
|
|
56
|
+
return {
|
|
57
|
+
accountId,
|
|
58
|
+
enabled: accountConfig.enabled ?? true,
|
|
59
|
+
configured,
|
|
60
|
+
appId: appId ?? "",
|
|
61
|
+
appSecret: appSecret ?? "",
|
|
62
|
+
encryptKey,
|
|
63
|
+
verificationToken,
|
|
64
|
+
domain: accountConfig.domain ?? DEFAULTS.domain,
|
|
65
|
+
connectionMode: accountConfig.connectionMode ?? DEFAULTS.connectionMode,
|
|
66
|
+
webhookPort: accountConfig.webhookPort ?? DEFAULTS.webhookPort,
|
|
67
|
+
dmPolicy: accountConfig.dmPolicy ?? DEFAULTS.dmPolicy,
|
|
68
|
+
dmAllowlist: accountConfig.dmAllowlist ?? [],
|
|
69
|
+
groupPolicy: accountConfig.groupPolicy ?? DEFAULTS.groupPolicy,
|
|
70
|
+
requireMention: accountConfig.requireMention ?? DEFAULTS.requireMention,
|
|
71
|
+
groupAllowlist: accountConfig.groupAllowlist ?? [],
|
|
72
|
+
mediaMaxMb: accountConfig.mediaMaxMb ?? DEFAULTS.mediaMaxMb,
|
|
73
|
+
renderMode: accountConfig.renderMode ?? DEFAULTS.renderMode,
|
|
74
|
+
historyLimit: accountConfig.historyLimit ?? DEFAULTS.historyLimit,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Determine receive_id_type from recipient ID format.
|
|
79
|
+
* IDs starting with "oc_" are chat IDs,
|
|
80
|
+
* IDs starting with "ou_" are open IDs (user),
|
|
81
|
+
* IDs starting with "on_" are union IDs (user).
|
|
82
|
+
*/
|
|
83
|
+
function inferReceiveIdType(recipientId) {
|
|
84
|
+
if (recipientId.startsWith("oc_")) {
|
|
85
|
+
return "chat_id";
|
|
86
|
+
}
|
|
87
|
+
if (recipientId.startsWith("ou_")) {
|
|
88
|
+
return "open_id";
|
|
89
|
+
}
|
|
90
|
+
if (recipientId.startsWith("on_")) {
|
|
91
|
+
return "union_id";
|
|
92
|
+
}
|
|
93
|
+
// Default to open_id for other formats
|
|
94
|
+
return "open_id";
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Send a message via Lark API, supporting text and interactive cards.
|
|
98
|
+
*/
|
|
99
|
+
async function sendTextMessage(account, recipientId, text, threadId) {
|
|
100
|
+
try {
|
|
101
|
+
const client = createLarkClient(account);
|
|
102
|
+
const renderMode = account.renderMode;
|
|
103
|
+
// Determine if we should use a card
|
|
104
|
+
const useCard = renderMode === "card" ||
|
|
105
|
+
(renderMode === "auto" && (text.includes("```") || text.includes("| --- |") || text.includes("\n- ")));
|
|
106
|
+
let msgType;
|
|
107
|
+
let content;
|
|
108
|
+
if (useCard) {
|
|
109
|
+
msgType = "interactive";
|
|
110
|
+
// Simple Markdown card
|
|
111
|
+
content = JSON.stringify({
|
|
112
|
+
config: { wide_screen_mode: true },
|
|
113
|
+
header: {
|
|
114
|
+
template: "orange",
|
|
115
|
+
title: {
|
|
116
|
+
content: "OpenClaw Message",
|
|
117
|
+
tag: "plain_text",
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
elements: [
|
|
121
|
+
{
|
|
122
|
+
tag: "div",
|
|
123
|
+
text: {
|
|
124
|
+
tag: "lark_md",
|
|
125
|
+
content: text,
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
msgType = "text";
|
|
133
|
+
content = JSON.stringify({ text });
|
|
134
|
+
}
|
|
135
|
+
const response = await client.im.message.create({
|
|
136
|
+
params: {
|
|
137
|
+
receive_id_type: inferReceiveIdType(recipientId),
|
|
138
|
+
},
|
|
139
|
+
data: {
|
|
140
|
+
receive_id: recipientId,
|
|
141
|
+
msg_type: msgType,
|
|
142
|
+
content,
|
|
143
|
+
...(threadId && { root_id: threadId }),
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
if (response.code === 0 && response.data) {
|
|
147
|
+
return { ok: true, messageId: response.data.message_id };
|
|
148
|
+
}
|
|
149
|
+
return { ok: false, error: response.msg ?? "Unknown error" };
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
return {
|
|
153
|
+
ok: false,
|
|
154
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* List available users
|
|
160
|
+
*/
|
|
161
|
+
async function listPeers(account) {
|
|
162
|
+
const peers = await listLarkDirectoryPeers({ account });
|
|
163
|
+
return peers.map(p => ({
|
|
164
|
+
id: p.id,
|
|
165
|
+
name: p.name ?? "",
|
|
166
|
+
}));
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* List available chat groups
|
|
170
|
+
*/
|
|
171
|
+
async function listGroups(account) {
|
|
172
|
+
const groups = await listLarkDirectoryGroups({ account });
|
|
173
|
+
return groups.map(g => ({
|
|
174
|
+
id: g.id,
|
|
175
|
+
name: g.name ?? "",
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Lark/Feishu provider plugin implementation
|
|
180
|
+
*/
|
|
181
|
+
export const larkProviderPlugin = {
|
|
182
|
+
id: "lark",
|
|
183
|
+
meta: {
|
|
184
|
+
label: "Lark",
|
|
185
|
+
selectionLabel: "Feishu / Lark",
|
|
186
|
+
docsPath: "/providers/feishu",
|
|
187
|
+
blurb: "Chat with your OpenClaw bot on Feishu or Lark",
|
|
188
|
+
order: 75,
|
|
189
|
+
},
|
|
190
|
+
capabilities: {
|
|
191
|
+
chatTypes: ["direct", "group"],
|
|
192
|
+
reactions: true,
|
|
193
|
+
threads: true,
|
|
194
|
+
media: true,
|
|
195
|
+
nativeCommands: false,
|
|
196
|
+
blockStreaming: false,
|
|
197
|
+
},
|
|
198
|
+
config: {
|
|
199
|
+
listAccountIds(cfg) {
|
|
200
|
+
const channelConfig = getChannelConfig(cfg);
|
|
201
|
+
const accountIds = Object.keys(channelConfig.accounts ?? {});
|
|
202
|
+
// Include default account if env vars are configured
|
|
203
|
+
if (!accountIds.includes("default") && hasEnvCredentials()) {
|
|
204
|
+
accountIds.push("default");
|
|
205
|
+
}
|
|
206
|
+
return accountIds;
|
|
207
|
+
},
|
|
208
|
+
resolveAccount(cfg, accountId) {
|
|
209
|
+
return resolveAccount(cfg, accountId ?? "default");
|
|
210
|
+
},
|
|
211
|
+
isConfigured(account) {
|
|
212
|
+
return account.configured;
|
|
213
|
+
},
|
|
214
|
+
setAccountEnabled(cfg, accountId, enabled) {
|
|
215
|
+
const channelConfig = getChannelConfig(cfg);
|
|
216
|
+
return {
|
|
217
|
+
...cfg,
|
|
218
|
+
channels: {
|
|
219
|
+
...cfg.channels,
|
|
220
|
+
lark: {
|
|
221
|
+
...channelConfig,
|
|
222
|
+
accounts: {
|
|
223
|
+
...channelConfig.accounts,
|
|
224
|
+
[accountId]: {
|
|
225
|
+
...channelConfig.accounts?.[accountId],
|
|
226
|
+
enabled,
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
outbound: {
|
|
235
|
+
deliveryMode: "direct",
|
|
236
|
+
textChunkLimit: 4000,
|
|
237
|
+
chunkerMode: "markdown",
|
|
238
|
+
async sendText(args) {
|
|
239
|
+
const { account, recipientId, text, threadId } = args;
|
|
240
|
+
return sendTextMessage(account, recipientId, text, threadId);
|
|
241
|
+
},
|
|
242
|
+
async sendMedia(args) {
|
|
243
|
+
const { account, recipientId, mediaId, mediaType, fileName, threadId } = args;
|
|
244
|
+
try {
|
|
245
|
+
const client = createLarkClient(account);
|
|
246
|
+
const response = await client.im.message.create({
|
|
247
|
+
params: {
|
|
248
|
+
receive_id_type: inferReceiveIdType(recipientId),
|
|
249
|
+
},
|
|
250
|
+
data: {
|
|
251
|
+
receive_id: recipientId,
|
|
252
|
+
msg_type: mediaType === "image" ? "image" : "file",
|
|
253
|
+
content: JSON.stringify(mediaType === "image" ? { image_key: mediaId } : { file_key: mediaId, file_name: fileName }),
|
|
254
|
+
...(threadId && { root_id: threadId }),
|
|
255
|
+
},
|
|
256
|
+
});
|
|
257
|
+
if (response.code === 0 && response.data) {
|
|
258
|
+
return { ok: true, messageId: response.data.message_id };
|
|
259
|
+
}
|
|
260
|
+
return { ok: false, error: response.msg ?? "Unknown error" };
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
return {
|
|
264
|
+
ok: false,
|
|
265
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
async downloadMedia(args) {
|
|
270
|
+
const { account, mediaId, messageId, mediaType } = args;
|
|
271
|
+
try {
|
|
272
|
+
if (mediaType === "image") {
|
|
273
|
+
const result = await downloadImageLark({ account, imageKey: mediaId });
|
|
274
|
+
return result.buffer;
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
// For files, we need messageId
|
|
278
|
+
if (!messageId)
|
|
279
|
+
return null;
|
|
280
|
+
const result = await downloadFileLark({
|
|
281
|
+
account,
|
|
282
|
+
messageId,
|
|
283
|
+
fileKey: mediaId,
|
|
284
|
+
type: mediaType
|
|
285
|
+
});
|
|
286
|
+
return result.buffer;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
console.error("[lark] Download media failed:", error);
|
|
291
|
+
return null;
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
async addReaction(args) {
|
|
295
|
+
await addReactionLark({
|
|
296
|
+
account: args.account,
|
|
297
|
+
messageId: args.messageId,
|
|
298
|
+
emojiType: args.emoji,
|
|
299
|
+
});
|
|
300
|
+
},
|
|
301
|
+
async removeReaction(args) {
|
|
302
|
+
// If reactionId is not provided, we need to find it first
|
|
303
|
+
let reactionId = args.reactionId;
|
|
304
|
+
if (!reactionId) {
|
|
305
|
+
const reactions = await listReactionsLark({
|
|
306
|
+
account: args.account,
|
|
307
|
+
messageId: args.messageId,
|
|
308
|
+
emojiType: args.emoji,
|
|
309
|
+
});
|
|
310
|
+
// Find reaction by this app (bot)
|
|
311
|
+
// We need to filter by operator_id being the app itself
|
|
312
|
+
// For now, just take the first match
|
|
313
|
+
const match = reactions.find(r => r.emojiType === args.emoji);
|
|
314
|
+
reactionId = match?.reactionId;
|
|
315
|
+
}
|
|
316
|
+
if (reactionId) {
|
|
317
|
+
await removeReactionLark({
|
|
318
|
+
account: args.account,
|
|
319
|
+
messageId: args.messageId,
|
|
320
|
+
reactionId,
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
async listReactions(args) {
|
|
325
|
+
const reactions = await listReactionsLark({
|
|
326
|
+
account: args.account,
|
|
327
|
+
messageId: args.messageId,
|
|
328
|
+
});
|
|
329
|
+
return reactions.map(r => ({
|
|
330
|
+
emoji: r.emojiType,
|
|
331
|
+
reactionId: r.reactionId,
|
|
332
|
+
}));
|
|
333
|
+
},
|
|
334
|
+
},
|
|
335
|
+
directory: {
|
|
336
|
+
listPeers,
|
|
337
|
+
listGroups,
|
|
338
|
+
},
|
|
339
|
+
gateway: {
|
|
340
|
+
startAccount: async (ctx) => {
|
|
341
|
+
const { account, cfg, runtime, abortSignal, log } = ctx;
|
|
342
|
+
log?.info?.(`[${account.accountId}] starting Lark provider`);
|
|
343
|
+
return monitorLarkProvider({ account, abortSignal });
|
|
344
|
+
},
|
|
345
|
+
stopAccount: async () => {
|
|
346
|
+
stopMonitor();
|
|
347
|
+
},
|
|
348
|
+
},
|
|
349
|
+
};
|
|
350
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"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"}
|