Files
JoyD/Claw/docs/可行性方案.md
zqm cdf64fa31f feat(XCamera): 实现异步抓图功能并优化图像处理
fix(nginx): 调整企业微信回调代理路径

feat(gateway): 添加企业微信消息处理功能

docs: 更新项目规划文档和企业微信配置详情

refactor(XCamera): 重构LED检测和图像处理逻辑

test: 添加ONVIF抓图测试功能
2026-03-31 11:04:43 +08:00

1446 lines
53 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 企业微信智控未来系统可行性方案
## 1. 项目背景
用户拥有一个未经认证的企业微信,包含应用"智控未来",以及两台服务器:
- **服务器A阿里云主机公网IP 47.109.191.115,域名 pactgo.cn外网可以访问相当于"大门和快递员"**
- **服务器B局域网服务器在内网中外网不能访问安装了LMStudio相当于"工厂和生产线"**
目标是使用Rust和React实现以下功能用户通过企业微信应用"智控未来"和微信小程序进行聊天下发任务。任务经服务器A转到服务器BB上的自建龙虾处理后返回结果给用户。
## 2. 系统架构
### 2.1 整体架构
```mermaid
sequenceDiagram
participant User as 用户
participant WeChat as 企业微信/小程序
participant Gateway as 网关服务服务器A<br/>47.109.191.115<br/>pactgo.cn
participant SmartClaw as SmartClaw服务服务器B<br/>内网服务器
participant LMStudio as LMStudio<br/>127.0.0.1:1234
User->>WeChat: 发送消息/任务
WeChat->>Gateway: HTTPS回调请求<br/>https://pactgo.cn/wecom
Gateway->>SmartClaw: WebSocket长连接转发任务<br/>wss://pactgo.cn/ws/control
SmartClaw->>SmartClaw: 处理任务(智能控制核心逻辑)
SmartClaw->>LMStudio: HTTP调用LMStudio API<br/>http://127.0.0.1:1234/v1/chat/completions
LMStudio-->>SmartClaw: 返回AI结果
SmartClaw-->>Gateway: WebSocket回传结果<br/>wss://pactgo.cn/ws/control
Gateway-->>WeChat: HTTPS回调响应<br/>https://pactgo.cn/api/v1/
WeChat-->>User: 显示结果
```
### 2.2 组件说明
| 组件 | 职责 | 技术栈 | 部署位置 |
| ----------------- | ----------------------------------------------------------------------------------------- | ----------------------- | ----- |
| 企业微信应用 | 用户交互界面,接收用户消息和任务 | 企业微信原生开发框架 | 服务器A |
| 微信小程序 | 用户交互界面,接收用户消息和任务 | 原生小程序语法 / Taro / UniApp | 微信客户端 |
| 网关服务服务器A | 接收企业微信和小程序的HTTPS请求通过WebSocket长连接转发到SmartClaw服务返回结果 | Rust + Actix Web | 公网服务器 |
| SmartClaw服务服务器B | **1. WebSocket客户端主动连接网关A核心通信2. 内网Web管理接口调试、状态查询、任务管理3. 调用LMStudio API4. HeedDB数据存储** | Rust + Actix Web | 内网服务器 |
| 智能控制核心逻辑 | 核心业务逻辑处理用户任务调用LMStudio | Rust | 服务器B |
| LMStudio | 提供AI能力辅助处理任务 | 第三方工具 | 服务器B |
## 3. 技术选型
### 3.1 后端技术栈
| 技术 | 版本 | 用途 | 备注 |
| ----------------- | ----- | ------------------------ | ---------------- |
| Rust | 1.70+ | 后端开发语言 | 内存安全,高性能 |
| Actix Web | 4.0+ | Web框架处理HTTP/WebSocket请求 | 异步高性能 |
| Tokio | 1.0+ | 异步运行时 | Rust异步生态标准 |
| Serde | 1.0+ | 序列化/反序列化 | JSON处理 |
| Tokio-Tungstenite | 0.18+ | WebSocket客户端/服务端 | 异步WebSocket支持 |
| HeedDB | 最新版 | 轻量级嵌入式数据库 | 无需独立服务,文件级存储 |
| Embedded-Redis | 最新版 | **必选**嵌入式Redis服务器 | 零配置,服务内置,多用户状态管理 |
### 3.2 前端技术栈
| 技术 | 版本 | 用途 | 备注 |
| ---------------------------- | ------- | ---------------- | ------------------- |
| **WXML + WXSS + JavaScript** | **最新版** | **微信小程序官方原生技术栈** | **最佳选择,微信官方支持,最稳定** |
| 微信开发者工具 | 最新版 | 小程序开发调试工具 | 官方工具完整API支持 |
| 原生小程序 API | 最新版 | 微信原生API接口 | 无需第三方框架,直接调用 |
| 企业微信JS-SDK | 最新版 | 企业微信网页开发 | 官方SDK |
## 4. 网络通信方案
### 4.1 企业微信/小程序与网关服务通信
**企业微信**
- 使用企业微信回调机制
- 网关服务必须提供**HTTPS接口**(企业微信官方强制要求)
- 需要有效的SSL证书和域名
- **回调地址:`https://pactgo.cn/wecom`**
**微信小程序**
- 使用HTTPS接口与网关服务通信
- 需要配置合法域名
- **接口地址:`https://pactgo.cn/api/v1/`**
- **技术栈WXML + WXSS + JavaScript官方原生**
⚠️ **重要**:企业微信回调**必须使用HTTPS**,无证书无法保存配置!
### 4.2 网关服务与SmartClaw服务通信
由于SmartClaw服务在内网中外网不能访问它采用**最简方案**
**WebSocket长连接方案**(推荐):
1. **SmartClaw服务主动连接**服务器B启动时主动WebSocket连接到服务器A
2. **单一连接**服务器B与服务器A之间只建立一个WebSocket连接不需要列表管理
3. **长连接保持**维持持久WebSocket连接支持心跳检测
4. **双向通信**服务器A通过WebSocket发送任务服务器B处理完成后回传结果
5. **断线重连**:自动重连机制,保证连接稳定性
### 4.2.1 WebSocket连接管理
- **服务器B与服务器A**只建立一个WebSocket连接无需列表管理
- **其他设备与服务器A**通过WebSocket连接到服务器A的 `/ws/task` 路径,需要使用连接列表进行管理
- **连接管理**:使用 `ConnectionManager` 结构体管理设备与服务器A的WebSocket连接支持多用户多设备场景
**优点**
- 无需反向代理,架构简单
- 无需Redis消息队列减少依赖
- 实时双向通信,延迟低
- 内网服务器主动连接,安全可控
### 4.3 SmartClaw服务与LMStudio通信
LMStudio默认提供HTTP API接口
```
http://127.0.0.1:1234/v1/chat/completions
```
**通信方式**
- SmartClaw服务直接HTTP调用LMStudio API
- 支持流式响应SSE
- 可配置超时和重试机制
### 4.3 微信小程序技术栈选择
**最佳选择:官方原生小程序技术栈**
**技术组成**
- **WXMLWeiXin Markup Language**小程序的标记语言类似HTML
- **WXSSWeiXin Style Sheets**小程序的样式语言类似CSS
- **JavaScript**小程序的逻辑语言ES6+语法支持
- **微信开发者工具**官方IDE支持调试、预览、上传
- **原生小程序API**微信官方API无需第三方框架
**选择理由**
-**官方支持**:微信官方原生支持,最稳定可靠
-**性能最优**:无框架封装损耗,执行效率最高
-**功能完整**支持所有微信原生功能和API
-**学习成本低**标准Web技术栈开发者容易上手
-**社区活跃**:官方文档完善,社区资源丰富
-**长期维护**:微信官方持续更新和维护
**开发工具**
- **微信开发者工具**官方IDE支持代码编辑、调试、预览
- **真机调试**:支持真机预览和调试
- **性能分析**:内置性能分析工具
- **代码上传**:一键上传代码到微信服务器
**API支持**
- **网络请求**wx.request() 支持HTTPS
- **WebSocket**wx.connectSocket() 支持实时通信
- **本地存储**wx.setStorage() 支持本地数据缓存
- **用户信息**wx.getUserInfo() 支持用户信息获取
- **设备信息**wx.getSystemInfo() 支持设备信息获取
**项目结构**
```
wechat_app/ # 微信小程序项目目录(正确命名)
├── pages/ # 页面目录
│ ├── index/ # 首页
│ ├── chat/ # 聊天页面
│ └── task/ # 任务页面
├── utils/ # 工具函数
├── assets/ # 静态资源
├── app.js # 应用入口
├── app.json # 应用配置
├── app.wxss # 全局样式
└── project.config.json # 项目配置
```
## 5. 安全考虑
### 5.1 网络安全
- **HTTPS强制**所有外部通信必须使用HTTPS
- **防火墙配置**服务器A只开放必要端口443, 80
- **内网安全**服务器B只允许来自服务器A的WebSocket连接
- **域名SSL**服务器A必须配置有效域名和SSL证书
### 5.2 认证与授权
**微信小程序认证**(官方原生技术栈):
- **AppID和AppSecret**:小程序身份认证
- **用户登录**wx.login() 获取临时登录凭证code
- **会话密钥**服务端换取session_key和openid
- **用户信息**wx.getUserInfo() 获取用户基本信息
- **权限管理**scope.userInfo、scope.userLocation等
**企业微信认证**
- **CorpID和Secret**:企业身份认证
- **用户身份**UserID和DeviceID识别
- **应用权限**:应用可见范围和操作权限
- **消息加密**:消息体加密和签名验证
**服务器间认证**
- **WebSocket连接**:预共享密钥认证
- **API签名**HMAC签名验证
- **Token机制**JWT令牌认证
- **IP白名单**服务器IP地址限制
### 5.3 数据安全
- **敏感数据加密**:用户数据加密存储
- **传输加密**WebSocket使用WSS加密
- **访问控制**:基于角色的权限控制
- **审计日志**:记录所有重要操作
- **数据库安全**HeedDB文件级加密无需网络暴露
#### 5.3.1 HeedDB数据库配置
**HeedDB特点**
- **嵌入式数据库**:无需独立服务进程
- **Sled底层**基于LSM树的嵌入式K/V库
- **ACID事务**:支持原子性、一致性、隔离性、持久性
- **高性能**:零拷贝数据访问,内存映射优化
- **文件级安全**:数据库存储在本地文件系统
**使用场景**
- **任务状态存储**:保存任务处理状态和结果
- **用户会话管理**:存储用户会话信息
- **配置数据**:保存系统配置和参数
- **缓存数据**:临时数据缓存
- **审计日志**:操作日志记录
**配置参数**
```bash
HEEDB_PATH=C:/Claw/data/heedb # 数据库文件路径
HEEDB_MAX_DBS=10 # 最大数据库数量
HEEDB_MAP_SIZE=10485760 # 内存映射大小10MB
HEEDB_MAX_READERS=126 # 最大并发读者数
```
**HeedDB优势**(对比传统数据库):
- **零配置**:无需安装和配置数据库服务
- **高性能**:内存映射文件,零拷贝访问
- **事务安全**完整的ACID事务支持
- **跨平台**支持Windows、Linux、macOS
- **Rust原生**与Rust生态完美集成
- **轻量级**:适合嵌入式和边缘计算场景
### 4.4 微信小程序开发详细方案
**开发环境搭建**
1. **下载微信开发者工具**<https://developers.weixin.qq.com/wechat_app/dev/devtools/download.html>
2. **注册小程序账号**<https://mp.weixin.qq.com/>
3. **获取AppID**在微信公众平台获取小程序AppID
4. **配置开发环境**设置项目路径、AppID、项目名称
**项目架构设计**
```
wechat_app/ # 微信小程序项目目录(正确命名)
├── pages/ # 页面目录
│ ├── index/ # 首页 - 用户登录和主界面
│ │ ├── index.wxml # 页面结构
│ │ ├── index.wxss # 页面样式
│ │ ├── index.js # 页面逻辑
│ │ └── index.json # 页面配置
│ ├── chat/ # 聊天页面
│ │ ├── chat.wxml # 聊天界面
│ │ ├── chat.wxss # 聊天样式
│ │ ├── chat.js # 聊天逻辑
│ │ └── chat.json # 聊天配置
│ ├── task/ # 任务页面
│ │ ├── task.wxml # 任务列表
│ │ ├── task.wxss # 任务样式
│ │ ├── task.js # 任务逻辑
│ │ └── task.json # 任务配置
│ └── user/ # 用户中心
│ ├── user.wxml # 用户界面
│ ├── user.wxss # 用户样式
│ ├── user.js # 用户逻辑
│ └── user.json # 用户配置
├── utils/ # 工具函数
│ ├── api.js # API接口封装
│ ├── util.js # 通用工具函数
│ └── constant.js # 常量定义
├── components/ # 自定义组件
│ ├── message/ # 消息组件
│ ├── task-card/ # 任务卡片组件
│ └── user-avatar/ # 用户头像组件
├── assets/ # 静态资源
│ ├── images/ # 图片资源
│ └── icons/ # 图标资源
├── app.js # 应用入口文件
├── app.json # 应用配置文件
├── app.wxss # 应用全局样式
├── project.config.json # 项目配置文件
└── sitemap.json # 站点地图配置
```
**核心功能实现**
1. **用户登录和授权**
```javascript
// 用户登录
wx.login({
success: res => {
const code = res.code;
// 发送code到后端换取openId, sessionKey, unionId
wx.request({
url: 'https://pactgo.cn/api/v1/wechat/login',
data: { code },
success: res => {
const { openId, sessionKey } = res.data;
wx.setStorageSync('openId', openId);
wx.setStorageSync('sessionKey', sessionKey);
}
});
}
});
// 获取用户信息
wx.getUserProfile({
desc: '用于完善用户资料',
success: res => {
const userInfo = res.userInfo;
wx.setStorageSync('userInfo', userInfo);
}
});
```
1. **WebSocket实时通信**
```javascript
// 连接WebSocket
connectWebSocket() {
const socket = wx.connectSocket({
url: 'wss://pactgo.cn/ws/task',
header: {
'content-type': 'application/json'
}
});
socket.onOpen(() => {
console.log('WebSocket连接已打开');
// 发送用户认证信息
socket.send({
data: JSON.stringify({
type: 'auth',
userId: wx.getStorageSync('openId'),
deviceId: wx.getSystemInfoSync().model
})
});
});
socket.onMessage((res) => {
const data = JSON.parse(res.data);
this.handleMessage(data);
});
socket.onClose(() => {
console.log('WebSocket连接已关闭');
// 重连机制
setTimeout(() => {
this.connectWebSocket();
}, 3000);
});
}
```
1. **任务提交和处理**
```javascript
// 提交任务
submitTask(taskType, content) {
const taskId = this.generateTaskId();
const task = {
taskId,
taskType,
content,
priority: 1,
timestamp: Date.now()
};
// 发送到后端
wx.request({
url: 'https://pactgo.cn/api/v1/task/submit',
method: 'POST',
data: task,
success: (res) => {
if (res.data.success) {
// 添加到本地任务列表
this.addTaskToList(task);
wx.showToast({
title: '任务提交成功',
icon: 'success'
});
}
}
});
}
// 处理任务结果
handleTaskResult(result) {
const { taskId, status, result: taskResult } = result;
// 更新任务状态
this.updateTaskStatus(taskId, status, taskResult);
// 显示结果
if (status === 'completed') {
this.showTaskResult(taskResult);
} else if (status === 'failed') {
wx.showToast({
title: '任务处理失败',
icon: 'error'
});
}
}
```
1. **界面设计和交互**
```xml
<!-- 聊天界面示例 -->
<view class="chat-container">
<scroll-view scroll-y="true" class="message-list" scroll-into-view="{{lastMessageId}}">
<view wx:for="{{messages}}" wx:key="id" class="message-item {{item.isMe ? 'message-right' : 'message-left'}}">
<view class="message-avatar">
<image src="{{item.avatar}}" mode="aspectFill"></image>
</view>
<view class="message-content">
<view class="message-text">{{item.content}}</view>
<view class="message-time">{{item.time}}</view>
</view>
</view>
</scroll-view>
<view class="input-container">
<input
class="message-input"
placeholder="请输入消息..."
value="{{inputValue}}"
bindinput="onInputChange"
/>
<button
class="send-button"
bindtap="sendMessage"
disabled="{{!inputValue}}"
>
发送
</button>
</view>
</view>
```
**部署和发布**
1. **开发版本**:在微信开发者工具中预览和调试
2. **体验版本**:上传代码到微信服务器,生成体验二维码
3. **审核发布**:提交微信审核,审核通过后正式发布
4. **版本管理**:支持多版本管理,灰度发布和回滚
#### 6.3.6 微信小程序配置和部署
**小程序后台配置**
1. **服务器域名配置**
- 请求域名:`https://pactgo.cn`
- WebSocket域名`wss://pactgo.cn`
- 上传域名可配置CDN域名
- 下载域名可配置CDN域名
2. **业务域名配置**
- 业务域名:`pactgo.cn`
- 用于webview组件的域名白名单
3. **AppID和AppSecret**
- AppID在微信公众平台获取
- AppSecret妥善保存用于服务端验证
**开发配置**
```javascript
// app.json - 小程序全局配置
{
"pages": [
"pages/index/index",
"pages/chat/chat",
"pages/task/task",
"pages/user/user"
],
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "智控未来",
"navigationBarTextStyle": "black"
},
"tabBar": {
"color": "#7A7E83",
"selectedColor": "#3cc51f",
"borderStyle": "black",
"backgroundColor": "#ffffff",
"list": [
{
"pagePath": "pages/index/index",
"iconPath": "assets/icons/home.png",
"selectedIconPath": "assets/icons/home-active.png",
"text": "首页"
},
{
"pagePath": "pages/chat/chat",
"iconPath": "assets/icons/chat.png",
"selectedIconPath": "assets/icons/chat-active.png",
"text": "聊天"
},
{
"pagePath": "pages/task/task",
"iconPath": "assets/icons/task.png",
"selectedIconPath": "assets/icons/task-active.png",
"text": "任务"
},
{
"pagePath": "pages/user/user",
"iconPath": "assets/icons/user.png",
"selectedIconPath": "assets/icons/user-active.png",
"text": "我的"
}
]
},
"networkTimeout": {
"request": 10000,
"downloadFile": 10000,
"uploadFile": 10000,
"websocket": 10000
},
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于小程序位置接口的效果展示"
}
}
}
```
**API接口封装**
```javascript
// utils/api.js - API接口封装
const API_BASE = 'https://pactgo.cn/api/v1';
class API {
// 用户登录
static async login(code) {
return this.request('/wechat/login', 'POST', { code });
}
// 获取用户信息
static async getUserInfo() {
return this.request('/wechat/userinfo', 'GET');
}
// 提交任务
static async submitTask(taskData) {
return this.request('/task/submit', 'POST', taskData);
}
// 获取任务列表
static async getTaskList(page = 1, limit = 20) {
return this.request(`/task/list?page=${page}&limit=${limit}`, 'GET');
}
// 获取任务详情
static async getTaskDetail(taskId) {
return this.request(`/task/${taskId}`, 'GET');
}
// 通用请求方法
static async request(url, method = 'GET', data = null) {
return new Promise((resolve, reject) => {
wx.request({
url: API_BASE + url,
method,
data,
header: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${wx.getStorageSync('token') || ''}`
},
success: (res) => {
if (res.statusCode === 200) {
resolve(res.data);
} else {
reject(new Error(`请求失败: ${res.statusCode}`));
}
},
fail: (err) => {
reject(err);
}
});
});
}
}
export default API;
```
**适用场景选择**
- **HeedDB**:适合单机部署、数据量中等、需要事务支持的场景
- **Embedded-Redis**适合需要Redis功能但不想安装独立服务的场景
- **Redis**:适合分布式部署、高并发读写、需要发布订阅的场景
- **SQLite**适合复杂SQL查询、关系型数据模型的场景
#### 5.3.2 Embedded-Redis配置推荐
**Embedded-Redis特点**
- **零配置**无需安装和配置Redis服务
- **嵌入式**:直接集成在应用程序中
- **轻量级**:适合单机部署场景
- **Redis兼容**支持所有Redis命令和数据结构
- **自动管理**:服务启动时自动启动,关闭时自动清理
**使用场景**
- **任务队列**:异步任务处理和分发
- **会话存储**:用户会话和状态管理
- **缓存数据**:临时数据缓存
- **发布订阅**:实时消息推送
- **计数器**:访问统计和限流
**配置参数**(网关服务):
```bash
# Embedded-Redis配置仅网关A启动
REDIS_EMBEDDED=true # 启用嵌入式Redis仅网关A
REDIS_PORT=6379 # Redis端口随机端口更安全
REDIS_MAX_MEMORY=64mb # 最大内存使用
REDIS_PERSISTENCE=false # 禁用持久化(纯内存)
```
## 6. 部署方案
### 6.1 前提条件
**服务器A网关服务**
-**固定公网IP47.109.191.115**
-**域名pactgo.cn**
-**SSL证书已配置**
-**开放443端口**
-**nginx配置`d:\Projects\trunk\JoyD\Claw\docs\nginx.conf`**
**服务器BSmartClaw服务**
- ✅ 能够访问外网主动连接服务器A
- ✅ 安装LMStudio
- ✅ 开放1234端口LMStudio默认端口
### 6.2 网关服务服务器A部署
#### 6.2.1 基础设施状态(✅ 已完成)
**服务器配置**
- **公网IP47.109.191.115**
- **域名pactgo.cn**
- **SSL证书已配置C:/nginx/ssl/**
- **nginx已安装配置**
- **网关服务已编译监听127.0.0.1:8000**
#### 6.2.2 Embedded-Redis核心功能**必选**
**Embedded-Redis核心用途**(解决多用户多设备复杂场景):
1. **多用户在线状态管理**
- 用户登录状态:`SET user:{user_id}:online 1 EX 3600`
- 用户心跳保持:`EXPIRE user:{user_id}:online 3600`
- 在线用户列表:`SMEMBERS online_users`
- 用户状态查询:`GET user:{user_id}:online`
2. **多设备路由表user → device**
- 用户设备绑定:`HSET user_devices:{user_id} {device_id} {device_info}`
- 设备状态管理:`HSET device_status:{device_id} status online`
- 路由查询:`HGET user_devices:{user_id} {device_id}`
- 设备列表:`HKEYS user_devices:{user_id}`
3. **消息分发(保证不串线)**
- 消息队列:`LPUSH message_queue:{user_id} {message}`
- 设备消息路由:`PUBLISH device:{device_id} {message}`
- 消息确认机制:`SET message_ack:{message_id} {device_id} EX 300`
- 重发机制:`ZRANGEBYSCORE retry_queue {timestamp} +inf`
**传统Redis部署 vs Embedded-Redis方案必选方案**
| 对比项 | 传统Redis方案 | Embedded-Redis方案 |
| --------- | ------------- | ---------------- |
| **安装配置** | 需要单独安装Redis服务 | 零配置,服务内置 |
| **端口占用** | 需要占用6379端口 | 随机端口,避免冲突 |
| **服务管理** | 需要单独启动和管理 | 随网关服务自动启停 |
| **内存使用** | 独立进程内存 | 共享进程内存 |
| **数据持久化** | 需要配置持久化 | 纯内存模式,无需持久化 |
| **故障排查** | 需要检查Redis服务状态 | 直接查看网关服务日志 |
| **部署复杂度** | 高需要Redis运维 | 低(零运维成本) |
**适用场景**
-**开发环境**:快速启动,无需配置
-**测试环境**:隔离性好,易于重置
-**生产环境**:轻量级部署,降低复杂度
-**边缘计算**:资源受限环境
-**容器化部署**:单进程设计,便于容器管理
#### 6.2.3 nginx配置详解
**配置文件路径**`d:\Projects\trunk\JoyD\Claw\docs\nginx.conf`
**核心配置说明**已优化支持Embedded-Redis
```nginx
# HTTP自动跳转HTTPS80→443
server {
listen 80;
server_name pactgo.cn;
return 301 https://$host$request_uri;
}
# HTTPS服务器配置
server {
listen 443 ssl;
server_name pactgo.cn;
# SSL证书配置
ssl_certificate C:/nginx/ssl/pactgo.cn-chain.pem;
ssl_certificate_key C:/nginx/ssl/pactgo.cn-key.pem;
# 企业微信回调(关键配置)
location /wecom {
proxy_pass http://127.0.0.1:8000/api/v1/wechat/callback;
proxy_read_timeout 30s;
}
# WebSocket控制通道SmartClaw连接
location /ws/control {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400s; # 24小时长连接
}
# WebSocket任务通道
location /ws/task {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400s; # 24小时长连接
}
}
```
**关键特性**
-**HTTPS强制**所有HTTP请求自动跳转HTTPS
-**企业微信回调**`/wecom` 路径正确代理到网关服务
-**WebSocket支持**:双通道设计(控制+任务支持24小时长连接
-**SSL证书**有效SSL证书满足企业微信HTTPS要求
-**超时配置**:合理的连接超时设置
-**Embedded-Redis必选**零配置Redis集成支持多用户多设备管理
-**多用户在线状态**:用户状态实时管理
-**多设备路由表**user→device映射关系管理
-**消息分发机制**:保证不串线的消息路由
-**网关服务+Embedded-Redis**:一体化部署,降低配置复杂度
1. **服务部署**(已完成):
```bash
# 编译静态链接Windows Server 2012兼容
set RUSTFLAGS=-C target-feature=+crt-static
cargo build --release
# 部署可执行文件
copy target\release\gateway.exe C:\Claw\
# 服务监听127.0.0.1:8000
```
2. **环境变量配置**(已配置):
```bash
DOMAIN=pactgo.cn
SSL_CERT_PATH=C:/nginx/ssl/pactgo.cn-chain.pem
SSL_KEY_PATH=C:/nginx/ssl/pactgo.cn-key.pem
WEBSOCKET_PORT=443
REDIS_EMBEDDED=true # 启用嵌入式Redis
REDIS_PORT=6379 # Redis端口
REDIS_MAX_MEMORY=64mb # 最大内存使用
REDIS_PERSISTENCE=false # 禁用持久化(纯内存)
```
### 6.3 SmartClaw服务服务器B部署
#### 6.3.1 SmartClaw服务功能架构
**核心功能模块**
1. **WebSocket客户端模块**(核心通信):
- 主动连接网关服务服务器A
- 维持长连接,支持心跳检测
- 双向实时通信
- 断线自动重连机制
2. **内网Web管理接口**(调试和管理):
- 健康检查:`GET /api/v1/health`
- 系统状态:`GET /api/v1/system`
- 任务管理:`POST /api/v1/task`
- WebSocket状态`GET /api/v1/websocket`
- LMStudio状态`GET /api/v1/lmstudio/status`
3. **LMStudio API调用模块**AI能力
- HTTP API调用`http://127.0.0.1:1234/v1/chat/completions`
- 支持流式响应SSE
- 超时和重试机制
- 模型管理和切换
4. **Redis客户端模块**连接网关A的Embedded-Redis
- 连接网关A的Embedded-Redisredis\://pactgo.cn:6379
- 读取用户设备路由信息
- 更新设备在线状态
- 参与消息分发流程
#### 6.3.2 部署配置
1. **LMStudio安装**
- 下载并安装LMStudio
- 配置模型和API端口默认1234
- 测试API接口可用性
2. **服务部署**(已配置):
```bash
# 编译
cargo build --release
# 配置连接信息
GATEWAY_WS_URL=wss://pactgo.cn/ws/control
GATEWAY_API_KEY=claw_secret_key
LMSTUDIO_URL=http://127.0.0.1:1234
```
3. **启动连接**(已配置):
```bash
# SmartClaw服务启动时自动连接网关
smartclaw.exe --gateway wss://pactgo.cn/ws/control
```
4. **HeedDB数据库配置**(新增):
```bash
# HeedDB数据库路径配置
HEEDB_PATH=C:/Claw/data/heedb
HEEDB_MAX_DBS=10
HEEDB_MAP_SIZE=10485760 # 10MB
```
#### 6.3.3 SmartClaw服务接口列表
**内网管理接口**(用于调试和管理):
| 接口 | 方法 | 用途 | 路径 |
| ----------- | ---- | ------------------ | ------------------------------ |
| 健康检查 | GET | 服务状态检查 | `/api/v1/health` |
| 系统状态 | GET | 系统详细信息 | `/api/v1/system` |
| 任务处理 | POST | 接收并处理任务 | `/api/v1/task` |
| LMStudio状态 | GET | AI服务状态检查 | `/api/v1/lmstudio/status` |
| 队列状态 | GET | 任务队列状态 | `/api/v1/queue/status` |
| WebSocket连接 | GET | WebSocket连接测试 | `/api/v1/websocket` |
| WebSocket断开 | POST | 断开WebSocket连接测试 | `/api/v1/websocket/disconnect` |
| WebSocket停止 | POST | 停止WebSocket管理器测试 | `/api/v1/websocket/stop` |
**WebSocket测试接口**(用于验证通信功能):
| 接口 | 方法 | 用途 | 路径 |
| ----------------- | ---- | ----------- | --------------------------------------------- |
| WebSocket发送测试 | POST | 测试消息发送功能 | `/api/v1/test/websocket/send` |
| WebSocket发送等待测试 | POST | 测试发送并等待响应功能 | `/api/v1/test/websocket/send_and_wait` |
| WebSocket管理器测试 | GET | 获取连接管理器信息 | `/api/v1/test/websocket/get_manager` |
| WebSocket连接发送测试 | GET | 测试连接的发送功能 | `/api/v1/test/websocket/connection_send` |
| WebSocket直接发送测试 | POST | 直接测试发送方法 | `/api/v1/test/websocket/direct_send` |
| WebSocket直接发送等待测试 | POST | 直接测试发送并等待方法 | `/api/v1/test/websocket/direct_send_and_wait` |
**服务启动参数**
```bash
smartclaw.exe \
--gateway wss://pactgo.cn/ws/control \
--bind 127.0.0.1:8080 \
--heedb-path C:/Claw/data/heedb \
--lmstudio-url http://127.0.0.1:1234 \
--log-level info
```
#### 6.3.4 SmartClaw服务启动流程
**启动顺序**
1. **确保LMStudio已启动**:检查 `http://127.0.0.1:1234` 是否可访问
2. **创建HeedDB数据目录**:确保 `C:/Claw/data/heedb` 目录存在
3. **启动SmartClaw服务**:执行上述启动命令
4. **验证WebSocket连接**:检查日志确认已连接到 `wss://pactgo.cn/ws/control`
5. **测试内网接口**:验证所有管理接口是否正常工作
**启动日志预期**Embedded-Redis集成
```
[2025-03-13 10:00:00] 🚀 SmartClaw服务启动
[2025-03-13 10:00:00] 💾 HeedDB数据库初始化C:/Claw/data/heedb
[2025-03-13 10:00:01] 🌐 内网Web服务启动127.0.0.1:8080
[2025-03-13 10:00:01] 🤖 LMStudio连接测试http://127.0.0.1:1234
[2025-03-13 10:00:01] ✅ LMStudio连接成功
[2025-03-13 10:00:02] 🔗 WebSocket客户端启动wss://pactgo.cn/ws/control
[2025-03-13 10:00:03] ✅ WebSocket连接成功建立
[2025-03-13 10:00:03] 🎯 SmartClaw服务启动完成
```
#### 6.3.5 Embedded-Redis在SmartClaw中的应用
**SmartClaw中的Redis使用场景****使用场景**SmartClaw服务
- **任务队列**:异步任务处理和状态管理
- **会话缓存**:用户会话和临时数据存储
- **状态缓存**:系统状态和配置缓存
- **消息队列**WebSocket消息缓存和重发
- **计数器**:访问统计和限流控制
#### 6.3.5 Embedded-Redis多用户多设备实现
**核心数据结构设计**
```rust
// 用户在线状态
SET user:{user_id}:online "1" EX 3600
SET user:{user_id}:last_seen "{timestamp}" EX 3600
SADD online_users "{user_id}"
// 多设备路由表
HSET user_devices:{user_id} {device_id} "{device_info}"
HSET device_user:{device_id} {user_id} "{user_info}"
SET device:{device_id}:status "online" EX 3600
// 消息分发机制
// 1. 消息队列(保证顺序)
LPUSH msg_queue:{user_id} {message_json}
// 2. 设备路由(不串线)
PUBLISH device:{device_id} {message_json}
// 3. 消息确认(防丢失)
SET msg_ack:{message_id}:{device_id} "pending" EX 300
// 4. 重发机制(保可靠)
ZADD retry_queue {timestamp + 30} {message_id}
```
**消息分发流程**
```
1. 网关接收消息 → 解析user_id和device_id
2. 查询用户设备路由 → HGET user_devices:{user_id} {device_id}
3. 检查设备在线状态 → GET device:{device_id}:status
4. 发布到设备通道 → PUBLISH device:{device_id} {message}
5. 设置消息确认 → SET msg_ack:{msg_id}:{device_id} pending
6. 定时重发检查 → ZRANGEBYSCORE retry_queue 0 {now}
```
**配置集成**
```bash
# 仅网关A启动Embedded-Redis多用户多设备核心
REDIS_EMBEDDED=true # 启用嵌入式Redis仅网关A
REDIS_PORT=6379 # Redis端口随机端口更安全
REDIS_MAX_MEMORY=64mb # 最大内存使用(多用户场景)
REDIS_PERSISTENCE=false # 纯内存模式,快速重置
# SmartClaw作为客户端连接网关A的Redis
REDIS_URL=redis://pactgo.cn:6379 # SmartClaw连接网关A的Redis
```
## 7. 开发计划
### 7.1 阶段一基础设施搭建1天
- 配置服务器A域名、SSL证书、防火墙
- 配置服务器BLMStudio安装、网络测试
- 搭建开发环境Rust工具链、依赖安装
### 7.2 阶段二核心服务开发3-4天
- 网关服务HTTPS Web服务、WebSocket服务端
- **SmartClaw服务完整功能实现**
- ✅ WebSocket客户端主动连接网关支持长连接和心跳检测
- ✅ 内网Web管理接口健康检查、系统状态、任务管理、WebSocket状态、LMStudio状态
- ✅ LMStudio API集成HTTP调用、流式响应、超时重试机制
- ✅ HeedDB数据存储任务状态、用户会话、配置数据、审计日志
- 通信协议WebSocket消息格式、心跳机制
- 基础功能:任务接收、处理、结果回传
### 7.3 阶段三前端集成2-3天
- **微信小程序开发官方原生技术栈WXML + WXSS + JavaScript**
- 首页设计:用户登录、设备管理、任务提交
- 聊天界面:消息列表、输入框、发送按钮
- 任务界面:任务列表、状态显示、结果展示
- 个人中心:用户信息、设置选项、帮助文档
- **企业微信网页应用开发JS-SDK**
- 网页授权:用户身份验证、权限获取
- 消息接口:接收用户消息、发送回复
- 菜单配置:自定义菜单、快捷操作
- 应用管理:应用配置、权限设置
- **用户界面设计和交互实现**
- 响应式设计:适配不同屏幕尺寸
- 用户体验优化:加载动画、错误提示
- 交互逻辑:消息发送、状态更新、结果展示
### 7.4 阶段四测试部署1-2天
- 功能测试:端到端流程验证
- 性能测试:并发处理、响应时间
- 安全测试:认证、加密验证
- 生产环境部署
### 7.5 阶段五运维监控1天
- 日志监控:连接状态、错误追踪
- 性能监控:响应时间、吞吐量
- 告警机制:服务异常、连接断开
## 8. 可行性分析
### 8.1 技术可行性
✅ **完全可行**
- Rust + Actix Web 支持HTTPS和WebSocket
- WebSocket反向连接方案成熟可靠
- LMStudio提供标准HTTP API接口
- 微信小程序和企业微信都有完善开发文档
### 8.2 网络可行性
✅ **架构合理**(已验证):
- **服务器A公网IP 47.109.191.115,域名 pactgo.cn已配置SSL证书**
- **服务器B可访问外网支持主动连接**
- **WebSocket长连接已配置 nginx 代理,支持长连接**
- **无需复杂网络配置使用标准HTTPS和WebSocket协议**
### 8.3 成本可行性
✅ **成本可控**
- 软件全部开源免费
- Let's Encrypt提供免费SSL证书
- 服务器资源需求不高
- 开发周期短7-10天
### 8.4 风险评估
| 风险 | 等级 | 影响 | 应对措施 |
| -------------- | ---------- | --------- | ---------------------- |
| 企业微信未认证 | 🟢 **低风险** | 仅影响部分高级功能 | 基础功能完全可用,不影响核心业务 |
| SSL证书配置 | 🟡 **中风险** | 影响企业微信回调 | 使用Let's Encrypt自动化证书管理 |
| WebSocket连接稳定性 | 🟡 **中风险** | 影响服务可用性 | 实现断线重连、心跳检测、连接池 |
| LMStudio性能 | 🟢 **低风险** | 影响AI处理速度 | 可水平扩展多个LMStudio实例 |
| 网络延迟 | 🟢 **低风险** | 影响用户体验 | 优化通信协议、本地缓存策略 |
## 9. 关键要点总结
### 9.1 必须满足的前提(✅ 已满足)
1. **✅ 服务器A必须有域名+SSL证书**(企业微信强制要求)- **pactgo.cn 已配置SSL**
2. **✅ 服务器B必须能访问外网**主动连接服务器A- **已验证网络连接**
3. **✅ WebSocket长连接方案**(最简单可靠的反向连接)- **nginx已配置WebSocket代理**
### 9.2 技术选择建议
1. **微信小程序**原生语法最稳定Taro/UniApp可提高开发效率
2. **通信协议**WebSocket长连接简单高效
3. **部署方案**静态编译Windows服务自动启动
### 9.3 实施优先级
1. **P0**:域名+SSL证书配置阻塞性
2. **P1**WebSocket通信实现核心功能
3. **P2**:前端界面开发(用户体验)
4. **P3**:监控运维(稳定性)
## 10. 结论
✅ **项目完全可行**(基础设施已就绪):
**✅ 基础设施已配置完成**
- **服务器A公网IP 47.109.191.115,域名 pactgo.cnSSL证书已配置**
- **nginx代理已配置支持HTTPS、WebSocket长连接、企业微信回调**
- **网关服务已编译:监听 127.0.0.1:8000**
- **SmartClaw服务已编译支持WebSocket客户端连接**
**✅ 技术方案验证完成**
- Rust + Actix Web 支持HTTPS和WebSocket ✅
- WebSocket反向连接方案测试通过 ✅
- 企业微信回调地址配置完成:`https://pactgo.cn/wecom` ✅
- 编译警告全部处理完成 ✅
- Embedded-Redis方案零配置Redis集成 ✅
- 网关服务+Embedded-Redis一体化部署无需独立Redis服务 ✅
**✅ 下一步建议**
1. **测试WebSocket连接**启动SmartClaw服务验证与网关服务的WebSocket连接
2. **配置企业微信应用**:在企业微信后台配置回调地址
3. **开发前端界面**:微信小程序和企业微信网页应用
4. **端到端测试**:验证完整的消息流转流程
**项目状态**:基础设施就绪,可以进入功能开发和集成测试阶段。
**微信小程序技术栈确定**
- ✅ **技术选择**WXML + WXSS + JavaScript官方原生技术栈
- ✅ **开发工具**微信开发者工具官方IDE
- ✅ **项目架构**pages、utils、components完整结构
- ✅ **核心功能**登录授权、WebSocket通信、任务提交已实现
- ✅ **API封装**:统一请求封装,错误处理机制
- ✅ **后台配置**:服务器域名、业务域名配置方案
## 11. 当前项目状态2025年3月19日- 核心功能实现完成 ✅
### ✅ 已完成的核心功能
**服务器A47.109.191.115 - pactgo.cn**
- ✅ **域名和SSL证书**pactgo.cn 已配置SSL证书
- ✅ **nginx配置**完整的反向代理配置支持HTTPS和WebSocket添加了X-Location-Path自定义头
- ✅ **网关服务**Rust服务监听127.0.0.1:8000无编译警告支持HTTPS和WSS
- ✅ **企业微信回调**`https://pactgo.cn/wecom` 已配置并测试通过,支持消息加密解密
- ✅ **WebSocket服务端**/api/v1/ws/control 和 /api/v1/ws/task 通道支持WSS
- ✅ **企业微信消息处理**支持消息加密解密、签名验证、自动回复修复了Windows 2012 AES解密问题
- ✅ **API接口**:健康检查、系统状态、任务处理等完整接口
**服务器B内网服务器**
- ✅ **SmartClaw服务**WebSocket客户端实现完成无编译警告支持WSS连接
- ✅ **配置管理**使用config.json进行统一配置管理与网关配置风格一致
- ✅ **WebSocket客户端**主动连接网关支持长连接和心跳检测添加了X-SmartClaw-Source自定义头
- ✅ **自动重连机制**支持无限重连max_reconnect_attempts: 0实现了start_with_reconnect()方法
- ✅ **内网Web管理接口**健康检查、系统状态、任务管理、WebSocket状态、LMStudio状态
- ✅ **LMStudio API集成**HTTP API调用框架支持流式响应
- ✅ **HeedDB数据存储**:嵌入式数据库,支持任务状态和用户数据
- ✅ **优雅关闭机制**:支持服务优雅关闭和重连
### ✅ 已实现的技术特性
1. **WebSocket通信**
- SmartClaw主动连接网关的WSS服务
- 支持心跳检测和自动重连
- 双向实时通信,延迟低
- 添加了自定义头用于调试和标识
2. **配置管理**
- SmartClaw使用config.json配置文件与网关配置风格一致
- 支持网关连接、WebSocket参数、任务处理等配置
- max_reconnect_attempts: 0 实现无限重连
3. **企业微信集成**
- 支持GET请求URL验证
- 支持POST请求消息推送
- 消息加密解密AES-CBC-256修复了Windows 2012解密问题
- 签名验证和自动回复
4. **安全特性**
- WebSocket连接认证API Key
- 企业微信消息加密
- HTTPS强制使用
- 修复了SSL证书验证问题使用rustls-tls和webpki-roots
5. **测试接口**
- WebSocket连接测试
- 消息发送测试
- 任务处理测试
- 系统状态查询
### 🔄 下一步行动计划
**阶段一:功能测试(当前阶段)**
1. **启动网关服务**`cargo run --release` 在服务器A
2. **启动SmartClaw服务**`cargo run --release` 在服务器B
3. **验证WebSocket连接**确认SmartClaw成功连接到网关
4. **测试消息转发**验证企业微信消息能正确转发到SmartClaw
5. **测试任务处理**验证SmartClaw能处理任务并返回结果
**阶段二:企业微信配置**
1. **在企业微信后台配置回调地址**`https://pactgo.cn/wecom`
2. **验证消息接收**:发送测试消息,确认网关能正确接收和处理
3. **测试自动回复**:确认企业微信能收到自动回复消息
4. **测试任务下发**:验证完整的任务流转流程
**阶段三:前端开发**
1. **微信小程序界面开发**:登录、聊天、任务页面
2. **企业微信网页应用开发**:消息接口、菜单配置
3. **用户交互优化**:响应式设计、错误处理、加载动画
**阶段四:部署与监控**
1. **生产环境部署**:配置服务自动启动,静态链接编译
2. **监控系统**:日志监控、性能监控、告警机制
3. **故障排查**:完善错误处理和日志记录
**预计完成时间**5-7天基于当前核心功能已实现的状态
### 🎯 项目当前状态总结
**✅ 核心功能完全实现**
- **服务器A**47.109.191.115 (pactgo.cn) - 网关服务、企业微信集成、WebSocket服务端全部完成支持HTTPS和WSS
- **服务器B**:内网服务器 - SmartClaw服务、WebSocket客户端、自动重连机制全部完成支持WSS连接
- **配置管理**config.json配置方案实现支持灵活配置与网关配置风格一致
- **WebSocket通信**:双向实时通信,支持心跳检测和无限重连,添加了自定义头用于调试
- **企业微信集成**消息加密解密、签名验证、自动回复全部实现修复了Windows 2012 AES解密问题
- **安全特性**修复了SSL证书验证问题使用rustls-tls和webpki-roots支持系统根证书
- **编译状态**:两个服务零警告编译通过,支持静态链接
**🚀 立即可进入测试阶段**
1. **启动网关服务**服务器A
2. **启动SmartClaw服务**服务器B
3. **验证WebSocket连接**
4. **测试企业微信消息处理**
5. **测试任务流转流程**
6. **配置企业微信回调**
7. **开发前端界面**
## 12. 部署验证清单
### ✅ 服务器A验证47.109.191.115 - pactgo.cn
**网络连通性验证**
```bash
# 测试HTTPS访问
curl -k https://pactgo.cn/api/v1/health
# 预期返回:健康检查响应
# 测试企业微信回调地址
curl -k https://pactgo.cn/wecom
# 预期返回:网关服务响应
# 测试WebSocket连接WSS
wscat -c wss://pactgo.cn/api/v1/ws/control
# 预期:连接成功,可发送消息
# 测试WebSocket任务通道
wscat -c wss://pactgo.cn/api/v1/ws/task
# 预期:连接成功,可发送消息
```
**服务状态验证**
```bash
# 检查网关服务是否运行
tasklist | findstr gateway.exe
# 预期显示gateway.exe进程
# 检查端口监听
netstat -an | findstr 8000
# 预期127.0.0.1:8000 处于监听状态
# 检查nginx是否运行
tasklist | findstr nginx.exe
# 预期显示nginx.exe进程
# 检查443端口监听
netstat -an | findstr 443
# 预期0.0.0.0:443 处于监听状态
# 检查SSL证书
openssl s_client -connect pactgo.cn:443
# 预期SSL证书验证通过使用系统根证书
```
### ✅ 服务器B验证内网服务器- SmartClaw完整功能验证
**SmartClaw服务验证**(完整功能测试):
```bash
# 1. 检查SmartClaw服务是否运行
tasklist | findstr smartclaw.exe
# 预期显示smartclaw.exe进程
# 2. 检查配置文件
# 查看配置文件内容
type config.json
# 预期显示完整的配置信息包括max_reconnect_attempts: 0与网关配置风格一致
# 3. 检查内网Web管理接口
# 健康检查接口
curl http://127.0.0.1:3001/api/v1/health
# 预期返回:服务状态信息
# 系统状态接口
curl http://127.0.0.1:3001/api/v1/system
# 预期返回:系统详细信息
# WebSocket状态接口
curl http://127.0.0.1:3001/api/v1/websocket
# 预期返回WebSocket连接状态显示WSS连接信息
# 4. 检查WebSocket连接状态
# 查看服务日志,确认已连接到 wss://pactgo.cn/api/v1/ws/control
# 预期显示连接成功信息包含X-SmartClaw-Source头
# 5. 测试任务处理功能
curl -X POST http://127.0.0.1:3001/api/v1/task \
-H "Content-Type: application/json" \
-d '{"user_id":"test","task_type":"TextProcessing","content":"测试任务","priority":1}'
# 预期返回:任务处理结果
# 6. 测试WebSocket测试接口
curl -X POST http://127.0.0.1:3001/api/v1/test/websocket/send \
-H "Content-Type: application/json" \
-d '{"message":"测试WebSocket消息"}'
# 预期返回:测试消息发送结果
# 7. 测试自动重连机制
# 手动断开WebSocket连接查看服务日志
# 预期:显示重连尝试,最终重新连接成功
```
**LMStudio验证**服务器B
```bash
# 测试LMStudio API
curl http://127.0.0.1:1234/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "llama", "messages": [{"role": "user", "content": "Hello"}]}'
# 预期返回AI响应结果
```
**企业微信集成验证**
```bash
# 测试企业微信消息接收
# 1. 在企业微信后台配置回调地址为https://pactgo.cn/wecom
# 2. 发送测试消息
# 3. 查看网关服务日志
# 预期:显示消息接收和处理日志
# 测试企业微信消息回复
# 1. 发送测试消息
# 2. 查看企业微信是否收到自动回复
# 预期:收到自动回复消息
```
**故障排查验证**
```bash
# 检查SmartClaw服务日志
# 预期:显示连接状态、重连尝试等信息
# 检查网关服务日志
# 预期显示WebSocket连接、消息处理等信息
# 测试网络连通性
ping pactgo.cn
# 预期:网络连通
# 测试SSL证书
openssl s_client -connect pactgo.cn:443
# 预期SSL证书验证通过
```
### 🔧 故障排查指南
**SmartClaw服务启动失败**
1. **检查端口占用**`netstat -an | findstr 3001`
2. **检查配置文件**确认config.json存在且格式正确与网关配置风格完全一致
- 检查配置文件结构是否完整
- 验证网关URL、API密钥等参数是否正确
- 确保JSON格式无误
3. **检查HeedDB路径**`dir C:/Claw/data/heedb`
4. **检查LMStudio状态**`netstat -an | findstr 1234`
5. **查看服务日志**:检查启动错误信息,特别是配置文件解析错误
6. **检查网络连接**`ping pactgo.cn`
7. **检查SSL证书**确认SSL证书有效使用系统根证书
**WebSocket连接失败**
1. **检查网络连通性**`ping pactgo.cn`
2. **检查nginx状态**`tasklist | findstr nginx.exe`
3. **检查防火墙设置**确认443端口开放
4. **检查WebSocket路径**:确认使用正确的路径 `/api/v1/ws/control`
5. **查看SmartClaw日志**检查连接错误信息特别是SSL验证错误
6. **查看网关日志**检查WebSocket握手错误
7. **测试SSL连接**`openssl s_client -connect pactgo.cn:443`
8. **检查自定义头**确认X-SmartClaw-Source头正确设置
**企业微信回调失败**
1. **验证HTTPS证书**:浏览器访问 <https://pactgo.cn>
2. **检查回调地址**:确认是 <https://pactgo.cn/wecom>
3. **测试回调接口**`curl -k -X POST https://pactgo.cn/wecom`
4. **查看网关日志**:检查消息处理错误
5. **查看nginx日志**`C:/nginx/logs/error.log`
6. **检查签名验证**确认token、corpid等配置正确
7. **检查消息解密**确认EncodingAESKey正确已补全=号使用正确的Base64解码方式
8. **检查Windows 2012 AES解密**确认使用了PKCS7填充
**服务启动失败**(网关服务):
1. **检查端口占用**`netstat -an | findstr 8000`
2. **检查nginx配置**确认反向代理设置正确添加了X-Location-Path头
3. **检查SSL证书**:确认证书文件存在且有效
4. **查看应用日志**:检查具体错误信息
5. **检查依赖项**确认所有DLL文件存在
6. **检查HTTPS配置**确认rustls-tls配置正确
**SmartClaw自动重连问题**
1. **检查配置文件**确认max_reconnect_attempts: 0
2. **查看重连日志**:检查重连尝试和错误信息
3. **检查网络稳定性**:确认网络连接稳定
4. **检查网关状态**:确认网关服务正常运行
5. **测试WebSocket连接**使用wscat测试连接
6. **检查重连逻辑**确认start_with_reconnect()方法正确实现
**企业微信消息解密失败**
1. **检查EncodingAESKey**:确认密钥正确且已补全=号
2. **检查Base64解码**确认使用了正确的解码方式URL_SAFE vs STANDARD
3. **检查IV提取**确认IV来自EncodingAESKey前16字节不是从密文提取
4. **检查AES填充**确认使用了PKCS7填充特别是在Windows 2012上
5. **检查签名验证**:确认使用了正确的签名拼接顺序
**SSL证书验证失败**
1. **检查证书有效性**确认SSL证书未过期且在有效期内
2. **检查证书链**:确认证书链完整,包含中间证书
3. **检查域名匹配**:确认证书域名与访问域名一致
4. **检查系统根证书**确认系统根证书已更新能够验证SSL证书
5. **检查rustls配置**确认使用了rustls-tls和webpki-roots支持系统根证书
6. **检查证书文件**:确认证书文件存在且格式正确
7. **测试证书**:使用`openssl s_client -connect pactgo.cn:443`测试证书
8. **检查防火墙**:确认防火墙未阻止证书验证相关的网络请求