wechaty-web-panel 1.6.112 → 1.6.113
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/bot/chatgpt/index.js +235 -0
- package/dist/bot/coze/sdk/index.js +110 -0
- package/dist/bot/dify/sdk/index.js +461 -0
- package/dist/bot/dify/sdk/office.js +319 -0
- package/dist/bot/fastgpt/index.js +98 -0
- package/dist/bot/qanything/index.js +136 -0
- package/dist/botInstance/coze.js +167 -0
- package/dist/botInstance/cozev3.js +157 -0
- package/dist/botInstance/dify.js +160 -0
- package/dist/botInstance/fastgpt.js +130 -0
- package/dist/botInstance/gpt4v.js +95 -0
- package/dist/botInstance/officialOpenAi.js +186 -0
- package/dist/botInstance/qany.js +144 -0
- package/dist/botInstance/sdk/chatGPT4V.js +89 -0
- package/dist/botInstance/sdk/coze.js +200 -0
- package/dist/botInstance/sdk/difyClient.js +354 -0
- package/dist/botInstance/sdk/pTimeout.js +97 -0
- package/dist/botInstance/sdk/qanything.js +137 -0
- package/dist/botInstance/sdk/quick-lru.js +237 -0
- package/dist/common/hook.js +66 -0
- package/dist/common/index.js +513 -0
- package/dist/common/multiReply.js +158 -0
- package/dist/common/reply.js +23 -0
- package/dist/const/puppet-type.js +71 -0
- package/dist/db/aiDb.js +27 -0
- package/dist/db/aichatDb.js +84 -0
- package/dist/db/chatHistory.js +137 -0
- package/dist/db/configDb.js +97 -0
- package/dist/db/global.js +62 -0
- package/dist/db/gptConfig.js +85 -0
- package/dist/db/nedb.js +88 -0
- package/dist/db/puppetDb.js +58 -0
- package/dist/db/roomDb.js +83 -0
- package/dist/db/rssConfig.js +82 -0
- package/dist/db/rssHistory.js +88 -0
- package/dist/db/userDb.js +27 -0
- package/dist/handlers/on-callback-message.js +183 -0
- package/dist/handlers/on-error.js +5 -0
- package/dist/handlers/on-friend.js +62 -0
- package/dist/handlers/on-heartbeat.js +20 -0
- package/dist/handlers/on-login.js +58 -0
- package/dist/handlers/on-logout.js +17 -0
- package/dist/handlers/on-message.js +644 -0
- package/dist/handlers/on-ready.js +36 -0
- package/dist/handlers/on-record-message.js +56 -0
- package/dist/handlers/on-roomjoin.js +42 -0
- package/dist/handlers/on-roomleave.js +12 -0
- package/dist/handlers/on-roomtopic.js +16 -0
- package/dist/handlers/on-scan.js +64 -0
- package/dist/handlers/on-verifycode.js +42 -0
- package/dist/index.js +81 -69306
- package/dist/lib/contentCensor.js +23 -0
- package/dist/lib/index.js +562 -0
- package/dist/lib/oss.js +43 -0
- package/dist/lib/s3oss.js +33 -0
- package/dist/mcp/mcp-server.js +26 -0
- package/dist/mcp/src/config/database.js +51 -0
- package/dist/mcp/src/index.js +238 -0
- package/dist/mcp/src/mcp/schemas.js +178 -0
- package/dist/mcp/src/mcp/server.js +421 -0
- package/dist/mcp/src/mcp/streamable-server.js +690 -0
- package/dist/mcp/src/models/ChatMessage.js +151 -0
- package/dist/mcp/src/models/Friend.js +64 -0
- package/dist/mcp/src/models/Group.js +55 -0
- package/dist/mcp/src/models/GroupMember.js +67 -0
- package/dist/mcp/src/models/index.js +27 -0
- package/dist/mcp/src/scripts/migrate.js +21 -0
- package/dist/mcp/src/services/ChatDataService.js +284 -0
- package/dist/mcp/src/services/McpService.js +521 -0
- package/dist/mcp/src/services/McpTools.js +504 -0
- package/dist/mcp/streamable-examples.js +283 -0
- package/dist/mcp/streamable-server.js +79 -0
- package/dist/mcp/test-mcp.js +64 -0
- package/dist/mcp/test-streamable-server.js +86 -0
- package/dist/package-json.js +89 -0
- package/dist/proxy/aibotk.js +829 -0
- package/dist/proxy/api.js +431 -0
- package/dist/proxy/apib.js +587 -0
- package/dist/proxy/bot/chatgpt.js +38 -0
- package/dist/proxy/bot/coze.js +38 -0
- package/dist/proxy/bot/cozev3.js +38 -0
- package/dist/proxy/bot/dify.js +38 -0
- package/dist/proxy/bot/dispatch.js +81 -0
- package/dist/proxy/bot/fastgpt.js +27 -0
- package/dist/proxy/bot/qany.js +27 -0
- package/dist/proxy/config.js +14 -0
- package/dist/proxy/cozeAi.js +60 -0
- package/dist/proxy/cozeV3Ai.js +60 -0
- package/dist/proxy/difyAi.js +58 -0
- package/dist/proxy/fastgpt.js +55 -0
- package/dist/proxy/mqtt.js +275 -0
- package/dist/proxy/multimodal.js +122 -0
- package/dist/proxy/openAi.js +63 -0
- package/dist/proxy/outapi.js +62 -0
- package/dist/proxy/qAnyAi.js +57 -0
- package/dist/proxy/superagent.js +200 -0
- package/dist/proxy/tencent-open.js +255 -0
- package/dist/service/event-dispatch-service.js +309 -0
- package/dist/service/gpt4vService.js +45 -0
- package/dist/service/msg-filter-service.js +121 -0
- package/dist/service/msg-filters.js +645 -0
- package/dist/service/room-async-service.js +455 -0
- package/dist/task/index.js +535 -0
- package/dist/task/rss.js +174 -0
- package/package.json +2 -2
- package/src/package-json.js +2 -2
- package/tsconfig.json +3 -12
- package/dist/index.d.ts +0 -9
- package/tsconfig.cjs.json +0 -12
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Sequelize } from 'sequelize';
|
|
2
|
+
import { config } from 'dotenv';
|
|
3
|
+
config();
|
|
4
|
+
// 数据库配置
|
|
5
|
+
const dbConfig = {
|
|
6
|
+
host: process.env.DB_HOST || '0.0.0.0',
|
|
7
|
+
port: parseInt(process.env.DB_PORT) || 5432,
|
|
8
|
+
database: process.env.DB_NAME || 'chat_mcp',
|
|
9
|
+
username: process.env.DB_USER || 'postgres',
|
|
10
|
+
password: process.env.DB_PASSWORD || 'postgres',
|
|
11
|
+
dialect: 'postgres',
|
|
12
|
+
logging: process.env.NODE_ENV === 'development' ? console.log : false,
|
|
13
|
+
pool: {
|
|
14
|
+
max: 5,
|
|
15
|
+
min: 0,
|
|
16
|
+
acquire: 30000,
|
|
17
|
+
idle: 10000
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
// 创建Sequelize实例
|
|
21
|
+
export const sequelize = new Sequelize(dbConfig.database, dbConfig.username, dbConfig.password, {
|
|
22
|
+
host: dbConfig.host,
|
|
23
|
+
port: dbConfig.port,
|
|
24
|
+
dialect: dbConfig.dialect,
|
|
25
|
+
logging: dbConfig.logging,
|
|
26
|
+
pool: dbConfig.pool
|
|
27
|
+
});
|
|
28
|
+
// 测试数据库连接
|
|
29
|
+
export const testConnection = async () => {
|
|
30
|
+
try {
|
|
31
|
+
await sequelize.authenticate();
|
|
32
|
+
console.log('✅ 数据库连接成功');
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error('❌ 数据库连接失败:', error);
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
// 初始化数据库
|
|
40
|
+
export const initDatabase = async () => {
|
|
41
|
+
try {
|
|
42
|
+
await sequelize.sync({ force: false });
|
|
43
|
+
console.log('✅ 数据库同步成功');
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
console.error('❌ 数据库同步失败:', error);
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
export default sequelize;
|
|
51
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { testConnection, initDatabase } from './config/database.js';
|
|
2
|
+
import ChatDataService from './services/ChatDataService.js';
|
|
3
|
+
import McpService from './services/McpService.js';
|
|
4
|
+
import McpTools from './services/McpTools.js';
|
|
5
|
+
/**
|
|
6
|
+
* 初始化微信聊天数据存储系统
|
|
7
|
+
*/
|
|
8
|
+
class ChatMCP {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.chatDataService = new ChatDataService();
|
|
11
|
+
this.mcpService = new McpService();
|
|
12
|
+
this.mcpTools = new McpTools();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 初始化数据库连接和表结构
|
|
16
|
+
*/
|
|
17
|
+
async init() {
|
|
18
|
+
try {
|
|
19
|
+
console.log('🚀 正在启动微信聊天数据存储系统...');
|
|
20
|
+
// 测试数据库连接
|
|
21
|
+
await testConnection();
|
|
22
|
+
// 初始化数据库表结构
|
|
23
|
+
await initDatabase();
|
|
24
|
+
console.log('🎉 微信聊天数据存储系统启动成功!');
|
|
25
|
+
return this;
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
console.error('💥 系统启动失败:', error);
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 批量写入好友信息
|
|
34
|
+
* @param {Array} friendsData - 好友信息数组
|
|
35
|
+
* @param {Object} options - 配置选项
|
|
36
|
+
* @returns {Promise<Array>} 创建的好友记录
|
|
37
|
+
*/
|
|
38
|
+
async batchCreateFriends(friendsData, options) {
|
|
39
|
+
return this.chatDataService.batchCreateFriends(friendsData, options);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 批量写入群信息
|
|
43
|
+
* @param {Array} groupsData - 群信息数组
|
|
44
|
+
* @param {Object} options - 配置选项
|
|
45
|
+
* @returns {Promise<Array>} 创建的群记录
|
|
46
|
+
*/
|
|
47
|
+
async batchCreateGroups(groupsData, options) {
|
|
48
|
+
return this.chatDataService.batchCreateGroups(groupsData, options);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 批量写入群成员信息
|
|
52
|
+
* @param {Array} membersData - 群成员信息数组
|
|
53
|
+
* @param {Object} options - 配置选项
|
|
54
|
+
* @returns {Promise<Array>} 创建的群成员记录
|
|
55
|
+
*/
|
|
56
|
+
async batchCreateGroupMembers(membersData, options) {
|
|
57
|
+
return this.chatDataService.batchCreateGroupMembers(membersData, options);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 写入对话记录
|
|
61
|
+
* @param {Object|Array} messageData - 消息数据,可以是单条或数组
|
|
62
|
+
* @returns {Promise<Object|Array>} 创建的消息记录
|
|
63
|
+
*/
|
|
64
|
+
async createChatMessage(messageData) {
|
|
65
|
+
return this.chatDataService.createChatMessage(messageData);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 使用事务批量写入所有数据
|
|
69
|
+
* @param {Object} data - 包含所有类型数据的对象
|
|
70
|
+
* @returns {Promise<Object>} 写入结果
|
|
71
|
+
*/
|
|
72
|
+
async batchCreateAllData(data) {
|
|
73
|
+
return this.chatDataService.batchCreateAllData(data);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 获取好友列表
|
|
77
|
+
* @param {string} robotId - 机器人ID
|
|
78
|
+
* @returns {Promise<Array>} 好友列表
|
|
79
|
+
*/
|
|
80
|
+
async getFriends(robotId) {
|
|
81
|
+
return this.chatDataService.getFriendsByRobotId(robotId);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 获取群组列表
|
|
85
|
+
* @param {string} robotId - 机器人ID
|
|
86
|
+
* @returns {Promise<Array>} 群组列表
|
|
87
|
+
*/
|
|
88
|
+
async getGroups(robotId) {
|
|
89
|
+
return this.chatDataService.getGroupsByRobotId(robotId);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* 获取聊天记录
|
|
93
|
+
* @param {Object} query - 查询条件
|
|
94
|
+
* @returns {Promise<Array>} 聊天记录列表
|
|
95
|
+
*/
|
|
96
|
+
async getChatMessages(query) {
|
|
97
|
+
return this.chatDataService.getChatMessages(query);
|
|
98
|
+
}
|
|
99
|
+
// =================== MCP 高级查询方法 ===================
|
|
100
|
+
/**
|
|
101
|
+
* 搜索好友
|
|
102
|
+
* @param {Object} params - 搜索参数
|
|
103
|
+
* @returns {Promise<Object>} 搜索结果
|
|
104
|
+
*/
|
|
105
|
+
async searchFriends(params) {
|
|
106
|
+
return this.mcpService.searchFriends(params);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* 搜索群组
|
|
110
|
+
* @param {Object} params - 搜索参数
|
|
111
|
+
* @returns {Promise<Object>} 搜索结果
|
|
112
|
+
*/
|
|
113
|
+
async searchGroups(params) {
|
|
114
|
+
return this.mcpService.searchGroups(params);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* 搜索聊天消息
|
|
118
|
+
* @param {Object} params - 搜索参数
|
|
119
|
+
* @returns {Promise<Object>} 搜索结果
|
|
120
|
+
*/
|
|
121
|
+
async searchChatMessages(params) {
|
|
122
|
+
return this.mcpService.searchChatMessages(params);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* 获取机器人统计信息
|
|
126
|
+
* @param {string} robotId - 机器人ID
|
|
127
|
+
* @returns {Promise<Object>} 统计信息
|
|
128
|
+
*/
|
|
129
|
+
async getRobotStatistics(robotId) {
|
|
130
|
+
return this.mcpService.getRobotStatistics(robotId);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* 获取会话详细信息
|
|
134
|
+
* @param {Object} params - 查询参数
|
|
135
|
+
* @returns {Promise<Object>} 会话信息
|
|
136
|
+
*/
|
|
137
|
+
async getConversationDetails(params) {
|
|
138
|
+
return this.mcpService.getConversationDetails(params);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* 获取群组成员详细信息
|
|
142
|
+
* @param {Object} params - 查询参数
|
|
143
|
+
* @returns {Promise<Object>} 群组成员信息
|
|
144
|
+
*/
|
|
145
|
+
async getGroupMembersDetail(params) {
|
|
146
|
+
return this.mcpService.getGroupMembersDetail(params);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* 获取消息热力图数据
|
|
150
|
+
* @param {Object} params - 查询参数
|
|
151
|
+
* @returns {Promise<Array>} 热力图数据
|
|
152
|
+
*/
|
|
153
|
+
async getMessageHeatmap(params) {
|
|
154
|
+
return this.mcpService.getMessageHeatmap(params);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* 全文搜索
|
|
158
|
+
* @param {Object} params - 搜索参数
|
|
159
|
+
* @returns {Promise<Object>} 搜索结果
|
|
160
|
+
*/
|
|
161
|
+
async fullTextSearch(params) {
|
|
162
|
+
return this.mcpService.fullTextSearch(params);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* 获取系统信息
|
|
166
|
+
* @returns {Promise<Object>} 系统信息
|
|
167
|
+
*/
|
|
168
|
+
async getSystemInfo() {
|
|
169
|
+
return this.mcpService.getSystemInfo();
|
|
170
|
+
}
|
|
171
|
+
// =================== MCP 工具方法 ===================
|
|
172
|
+
/**
|
|
173
|
+
* 快速查找
|
|
174
|
+
* @param {Object} params - 查询参数
|
|
175
|
+
* @returns {Promise<Object>} 查找结果
|
|
176
|
+
*/
|
|
177
|
+
async quickFind(params) {
|
|
178
|
+
return this.mcpTools.quickFind(params);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* 关系分析
|
|
182
|
+
* @param {Object} params - 分析参数
|
|
183
|
+
* @returns {Promise<Object>} 关系分析结果
|
|
184
|
+
*/
|
|
185
|
+
async analyzeRelationships(params) {
|
|
186
|
+
return this.mcpTools.analyzeRelationships(params);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* 活动分析
|
|
190
|
+
* @param {Object} params - 分析参数
|
|
191
|
+
* @returns {Promise<Object>} 活动分析结果
|
|
192
|
+
*/
|
|
193
|
+
async analyzeActivity(params) {
|
|
194
|
+
return this.mcpTools.analyzeActivity(params);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* 内容分析
|
|
198
|
+
* @param {Object} params - 分析参数
|
|
199
|
+
* @returns {Promise<Object>} 内容分析结果
|
|
200
|
+
*/
|
|
201
|
+
async analyzeContent(params) {
|
|
202
|
+
return this.mcpTools.analyzeContent(params);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* 导出数据
|
|
206
|
+
* @param {Object} params - 导出参数
|
|
207
|
+
* @returns {Promise<Object>} 导出结果
|
|
208
|
+
*/
|
|
209
|
+
async exportData(params) {
|
|
210
|
+
return this.mcpTools.exportData(params);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// 导出主类和服务类
|
|
214
|
+
export default ChatMCP;
|
|
215
|
+
export { ChatDataService, McpService, McpTools };
|
|
216
|
+
// 如果直接运行此文件,则进行初始化演示
|
|
217
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
218
|
+
console.log('📋 微信聊天数据存储系统 - 使用示例');
|
|
219
|
+
console.log('');
|
|
220
|
+
console.log('// 创建实例');
|
|
221
|
+
console.log('const chatMCP = new ChatMCP();');
|
|
222
|
+
console.log('');
|
|
223
|
+
console.log('// 初始化系统');
|
|
224
|
+
console.log('await chatMCP.init();');
|
|
225
|
+
console.log('');
|
|
226
|
+
console.log('// 批量写入好友信息');
|
|
227
|
+
console.log('await chatMCP.batchCreateFriends([{ robotId: "robot1", wxid: "friend1", name: "张三" }]);');
|
|
228
|
+
console.log('');
|
|
229
|
+
console.log('// 批量写入群信息');
|
|
230
|
+
console.log('await chatMCP.batchCreateGroups([{ robotId: "robot1", wxid: "group1", name: "技术交流群" }]);');
|
|
231
|
+
console.log('');
|
|
232
|
+
console.log('// 批量写入群成员信息');
|
|
233
|
+
console.log('await chatMCP.batchCreateGroupMembers([{ robotId: "robot1", roomWxid: "group1", wxid: "member1", name: "李四" }]);');
|
|
234
|
+
console.log('');
|
|
235
|
+
console.log('// 写入对话记录');
|
|
236
|
+
console.log('await chatMCP.createChatMessage({ robotId: "robot1", conversationId: "friend1", content: "你好", recordType: "contact", timestamp: Date.now() });');
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* MCP 工具的数据验证模式定义
|
|
4
|
+
*/
|
|
5
|
+
// 基础参数模式
|
|
6
|
+
export const RobotIdSchema = z.object({
|
|
7
|
+
robotId: z.string().describe('机器人账号ID')
|
|
8
|
+
});
|
|
9
|
+
// 搜索好友参数模式
|
|
10
|
+
export const SearchFriendsSchema = z.object({
|
|
11
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
12
|
+
keyword: z.string().optional().describe('搜索关键词(姓名、备注、别名、微信号)'),
|
|
13
|
+
tags: z.string().optional().describe('标签筛选'),
|
|
14
|
+
limit: z.number().default(50).describe('返回结果数量限制'),
|
|
15
|
+
offset: z.number().default(0).describe('结果偏移量'),
|
|
16
|
+
orderBy: z.string().default('createdAt').describe('排序字段'),
|
|
17
|
+
orderDirection: z.enum(['ASC', 'DESC']).default('DESC').describe('排序方向')
|
|
18
|
+
});
|
|
19
|
+
// 搜索群组参数模式
|
|
20
|
+
export const SearchGroupsSchema = z.object({
|
|
21
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
22
|
+
keyword: z.string().optional().describe('群名关键词'),
|
|
23
|
+
includeMembers: z.boolean().default(false).describe('是否包含成员信息'),
|
|
24
|
+
minMemberCount: z.number().default(0).describe('最小成员数'),
|
|
25
|
+
maxMemberCount: z.number().optional().describe('最大成员数'),
|
|
26
|
+
limit: z.number().default(50).describe('返回结果数量限制'),
|
|
27
|
+
offset: z.number().default(0).describe('结果偏移量')
|
|
28
|
+
});
|
|
29
|
+
// 搜索聊天消息参数模式
|
|
30
|
+
export const SearchMessagesSchema = z.object({
|
|
31
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
32
|
+
conversationId: z.string().optional().describe('会话ID'),
|
|
33
|
+
keyword: z.string().optional().describe('消息内容关键词'),
|
|
34
|
+
contentType: z.string().optional().describe('内容类型(文字、图片、文件等)'),
|
|
35
|
+
recordType: z.enum(['contact', 'room']).optional().describe('记录类型(contact私聊/room群聊)'),
|
|
36
|
+
chatUserId: z.string().optional().describe('聊天用户ID'),
|
|
37
|
+
isRobotAnswer: z.boolean().optional().describe('是否机器人回复'),
|
|
38
|
+
startTime: z.number().optional().describe('开始时间戳'),
|
|
39
|
+
endTime: z.number().optional().describe('结束时间戳'),
|
|
40
|
+
limit: z.number().default(100).describe('返回结果数量限制'),
|
|
41
|
+
offset: z.number().default(0).describe('结果偏移量')
|
|
42
|
+
});
|
|
43
|
+
// 全文搜索参数模式
|
|
44
|
+
export const FullTextSearchSchema = z.object({
|
|
45
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
46
|
+
keyword: z.string().describe('搜索关键词'),
|
|
47
|
+
searchTypes: z.array(z.enum(['friends', 'groups', 'messages'])).default(['friends', 'groups', 'messages']).describe('搜索类型'),
|
|
48
|
+
limit: z.number().default(20).describe('每种类型的返回结果数量限制')
|
|
49
|
+
});
|
|
50
|
+
// 会话详情参数模式
|
|
51
|
+
export const ConversationDetailsSchema = z.object({
|
|
52
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
53
|
+
conversationId: z.string().describe('会话ID')
|
|
54
|
+
});
|
|
55
|
+
// 群组成员详情参数模式
|
|
56
|
+
export const GroupMembersDetailSchema = z.object({
|
|
57
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
58
|
+
roomWxid: z.string().describe('群微信ID'),
|
|
59
|
+
includeMessageStats: z.boolean().default(true).describe('是否包含消息统计')
|
|
60
|
+
});
|
|
61
|
+
// 消息热力图参数模式
|
|
62
|
+
export const MessageHeatmapSchema = z.object({
|
|
63
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
64
|
+
conversationId: z.string().optional().describe('会话ID'),
|
|
65
|
+
startDate: z.string().optional().describe('开始日期(YYYY-MM-DD格式)'),
|
|
66
|
+
endDate: z.string().optional().describe('结束日期(YYYY-MM-DD格式)'),
|
|
67
|
+
granularity: z.enum(['hour', 'day', 'week', 'month']).default('hour').describe('时间粒度')
|
|
68
|
+
});
|
|
69
|
+
// 快速查找参数模式
|
|
70
|
+
export const QuickFindSchema = z.object({
|
|
71
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
72
|
+
query: z.string().describe('查询内容'),
|
|
73
|
+
type: z.enum(['auto', 'friend', 'group', 'member']).default('auto').describe('查找类型')
|
|
74
|
+
});
|
|
75
|
+
// 关系分析参数模式
|
|
76
|
+
export const RelationshipAnalysisSchema = z.object({
|
|
77
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
78
|
+
userId: z.string().describe('目标用户ID'),
|
|
79
|
+
analysisType: z.enum(['basic', 'comprehensive']).default('comprehensive').describe('分析类型')
|
|
80
|
+
});
|
|
81
|
+
// 活动分析参数模式
|
|
82
|
+
export const ActivityAnalysisSchema = z.object({
|
|
83
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
84
|
+
targetId: z.string().describe('目标ID(用户或群组)'),
|
|
85
|
+
targetType: z.enum(['auto', 'user', 'group']).default('auto').describe('目标类型'),
|
|
86
|
+
timeRange: z.number().default(30).describe('分析时间范围(天数)'),
|
|
87
|
+
granularity: z.enum(['hour', 'day', 'week']).default('day').describe('时间粒度')
|
|
88
|
+
});
|
|
89
|
+
// 内容分析参数模式
|
|
90
|
+
export const ContentAnalysisSchema = z.object({
|
|
91
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
92
|
+
conversationId: z.string().optional().describe('会话ID'),
|
|
93
|
+
timeRange: z.number().default(30).describe('分析时间范围(天数)'),
|
|
94
|
+
analysisTypes: z.array(z.enum(['contentType', 'keywords', 'sentiment'])).default(['contentType', 'keywords', 'sentiment']).describe('分析类型')
|
|
95
|
+
});
|
|
96
|
+
// 数据导出参数模式
|
|
97
|
+
export const DataExportSchema = z.object({
|
|
98
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
99
|
+
exportType: z.enum(['messages', 'friends', 'groups', 'statistics']).default('messages').describe('导出类型'),
|
|
100
|
+
conversationId: z.string().optional().describe('会话ID(仅导出消息时需要)'),
|
|
101
|
+
format: z.enum(['json', 'csv', 'txt']).default('json').describe('导出格式'),
|
|
102
|
+
timeRange: z.number().default(30).describe('时间范围(天数)'),
|
|
103
|
+
includeMetadata: z.boolean().default(true).describe('是否包含元数据')
|
|
104
|
+
});
|
|
105
|
+
// 批量写入好友参数模式
|
|
106
|
+
export const BatchCreateFriendsSchema = z.object({
|
|
107
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
108
|
+
friends: z.array(z.object({
|
|
109
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
110
|
+
wxid: z.string().describe('好友微信ID'),
|
|
111
|
+
wxNumber: z.string().optional().describe('好友微信号'),
|
|
112
|
+
name: z.string().optional().describe('昵称'),
|
|
113
|
+
avatar: z.string().optional().describe('头像URL'),
|
|
114
|
+
alias: z.string().optional().describe('别名'),
|
|
115
|
+
remark: z.string().optional().describe('备注'),
|
|
116
|
+
tags: z.string().optional().describe('标签')
|
|
117
|
+
})).describe('好友信息数组'),
|
|
118
|
+
updateOnDuplicate: z.boolean().default(true).describe('重复时是否更新')
|
|
119
|
+
});
|
|
120
|
+
// 批量写入群组参数模式
|
|
121
|
+
export const BatchCreateGroupsSchema = z.object({
|
|
122
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
123
|
+
groups: z.array(z.object({
|
|
124
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
125
|
+
wxid: z.string().describe('群微信ID'),
|
|
126
|
+
adminId: z.string().optional().describe('群管理员微信ID'),
|
|
127
|
+
name: z.string().optional().describe('群名'),
|
|
128
|
+
avatar: z.string().optional().describe('群头像URL'),
|
|
129
|
+
memberCount: z.number().optional().describe('群成员数')
|
|
130
|
+
})).describe('群组信息数组'),
|
|
131
|
+
updateOnDuplicate: z.boolean().default(true).describe('重复时是否更新')
|
|
132
|
+
});
|
|
133
|
+
// 批量写入群成员参数模式
|
|
134
|
+
export const BatchCreateGroupMembersSchema = z.object({
|
|
135
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
136
|
+
members: z.array(z.object({
|
|
137
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
138
|
+
roomWxid: z.string().describe('群微信ID'),
|
|
139
|
+
wxid: z.string().describe('群成员微信ID'),
|
|
140
|
+
wxNumber: z.string().optional().describe('群成员微信号'),
|
|
141
|
+
name: z.string().optional().describe('群成员昵称'),
|
|
142
|
+
avatar: z.string().optional().describe('群成员头像URL'),
|
|
143
|
+
alias: z.string().optional().describe('群成员别名'),
|
|
144
|
+
remark: z.string().optional().describe('群成员备注')
|
|
145
|
+
})).describe('群成员信息数组'),
|
|
146
|
+
updateOnDuplicate: z.boolean().default(true).describe('重复时是否更新')
|
|
147
|
+
});
|
|
148
|
+
// 写入聊天消息参数模式
|
|
149
|
+
export const CreateChatMessageSchema = z.object({
|
|
150
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
151
|
+
message: z.object({
|
|
152
|
+
robotId: z.string().describe('机器人账号ID'),
|
|
153
|
+
robotName: z.string().optional().describe('机器人昵称'),
|
|
154
|
+
conversationId: z.string().describe('会话ID'),
|
|
155
|
+
conversationName: z.string().optional().describe('会话名'),
|
|
156
|
+
conversationAvatar: z.string().optional().describe('会话头像'),
|
|
157
|
+
isRobotAnswer: z.boolean().default(false).describe('是否机器人回复'),
|
|
158
|
+
realUser: z.number().default(0).describe('是否真人回复'),
|
|
159
|
+
msgId: z.string().optional().describe('消息ID'),
|
|
160
|
+
contentType: z.string().default('文字').describe('内容类型'),
|
|
161
|
+
recordType: z.enum(['contact', 'room']).describe('记录类型'),
|
|
162
|
+
chatUserName: z.string().optional().describe('聊天用户昵称'),
|
|
163
|
+
chatUserAlias: z.string().optional().describe('聊天用户备注'),
|
|
164
|
+
chatUserId: z.string().optional().describe('聊天用户ID'),
|
|
165
|
+
chatUserAvatar: z.string().optional().describe('聊天用户头像'),
|
|
166
|
+
roomName: z.string().optional().describe('群聊名称'),
|
|
167
|
+
roomId: z.string().optional().describe('群聊ID'),
|
|
168
|
+
content: z.string().optional().describe('聊天内容'),
|
|
169
|
+
url: z.string().optional().describe('H5链接'),
|
|
170
|
+
fileName: z.string().optional().describe('文件名称'),
|
|
171
|
+
isImage: z.boolean().default(false).describe('是否图片'),
|
|
172
|
+
description: z.string().optional().describe('H5描述'),
|
|
173
|
+
imageUrl: z.string().optional().describe('H5图片链接'),
|
|
174
|
+
title: z.string().optional().describe('H5标题'),
|
|
175
|
+
timestamp: z.number().describe('聊天时间戳')
|
|
176
|
+
}).describe('消息信息')
|
|
177
|
+
});
|
|
178
|
+
//# sourceMappingURL=schemas.js.map
|