This commit is contained in:
2026-04-08 11:00:31 +08:00
parent fb21a127b5
commit 7019cf180d
17 changed files with 960 additions and 1 deletions

137
wechat-bot/README.md Normal file
View File

@@ -0,0 +1,137 @@
# Wechat-Bot
企业微信消息分发中转站 —— 企业微信智能机器人与远程 Agent 的桥梁。
企业微信文档https://developer.work.weixin.qq.com/document/path/101463
## 架构说明
```
企业微信用户
企业微信服务器 (wss://openws.work.weixin.qq.com)
│ WebSocket 长连接
wecom-aibot-python-sdk (接收/发送消息)
│ SSE 流式 + HTTP 调用
远程 Agent 服务 (AGENT_BASE_URL)
```
- **企业微信侧**:通过 `wecom-aibot-python-sdk` 建立 WebSocket 长连接,接收用户消息
- **Agent 侧**:通过 HTTP 调用远程 Agent 的 REST API兼容 ADK `api_server` 格式)
- **流式回复**:优先使用 `/run_sse`SSE 流式)实现打字机效果,失败时降级为 `/run`(同步)
- **会话管理**:自动为每个用户创建 Agent 会话,企业微信 userid 与 Agent user_id 一一对应
- **思考过滤**:自动去除模型思考过程(`<think...>` 标签),只推送正式回复给用户
## 支持的消息类型
| 类型 | msgtype | 说明 |
|------|---------|------|
| 文本 | `text` | 直接转发给 Agent 处理 |
| 图片 | `image` | 下载并描述,转发给 Agent |
| 语音 | `voice` | 提取文本内容后处理 |
| 文件 | `file` | 下载并描述,转发给 Agent |
| 视频 | `video` | 下载并描述,转发给 Agent |
| 图文混排 | `mixed` | 提取文本内容后处理 |
## 项目结构
```
wechat-bot/
├── main.py # 主入口,启动 WebSocket 客户端
├── config.py # 全局配置(从 .env 加载)
├── requirements.txt # Python 依赖
├── Dockerfile # Docker 镜像构建
├── docker-compose.yml # Docker Compose 编排
├── .env.example # 环境变量模板
└── bot/
├── __init__.py
├── wecom_bot.py # 组装层:创建 WSClient + 注册事件
├── agent_client.py # Agent 通信HTTP 客户端、会话管理、SSE/同步调用
├── handlers.py # 消息处理:统一的 handle_message()
├── message_parser.py # 消息解析:提取文本内容和元数据
└── reply_parser.py # 回复解析:去除思考标签、去重
```
## 快速开始
### 1. 配置环境变量
```bash
cp .env.example .env
```
编辑 `.env` 文件,填写以下必要配置:
| 配置项 | 必填 | 说明 | 默认值 |
|--------|------|------|--------|
| `WECHAT_BOT_ID` | ✅ | 企业微信机器人 ID | - |
| `WECHAT_BOT_SECRET` | ✅ | 长连接密钥 | - |
| `AGENT_BASE_URL` | ✅ | Agent 服务地址 | `http://127.0.0.1:8000` |
| `AGENT_APP_NAME` | ❌ | Agent 应用名称 | `root_agent` |
| `AGENT_TIMEOUT` | ❌ | Agent 调用超时(秒) | `120` |
| `LOG_LEVEL` | ❌ | 日志级别 | `INFO` |
> `WECHAT_BOT_ID` 和 `WECHAT_BOT_SECRET` 获取方式:企业微信管理后台 → 智能机器人 → API 模式
### 2. 启动 Agent 服务
确保你的 Agent 服务已启动并监听对应端口。
### 3. 启动 Bot
**Docker 部署(推荐,适用于 NAS**
```bash
docker compose up -d --build
docker compose logs -f
```
**本地运行:**
```bash
pip install -r requirements.txt
python main.py
```
## Agent API 集成
本项目通过 HTTP 调用远程 Agent兼容 ADK `api_server` 接口格式:
| 接口 | 方法 | 用途 |
|------|------|------|
| `/apps/{app_name}/users/{user_id}/sessions` | POST | 为用户创建会话 |
| `/run_sse` | POST | SSE 流式对话(主要方式) |
| `/run` | POST | 同步对话(降级方案) |
### 请求格式
```json
{
"app_name": "root_agent",
"user_id": "企业微信用户ID",
"session_id": "会话ID",
"new_message": {
"role": "user",
"parts": [{"text": "用户消息"}]
}
}
```
### 响应处理
- SSE 流式:逐行解析 `data:` 事件,收集 `content.parts[].text`
- 自动过滤 `thought: true` 的思考内容
- 自动去除 `<think...</think` 标签(兼容 MiniMax 等模型的思考格式)
- 自动去重ADK 最后一个 event 会重复发送完整内容)
- `finishReason: "STOP"` 时提取正式回复并发送给用户
## 技术栈
- **Python** >= 3.10
- **wecom-aibot-python-sdk** - 企业微信智能机器人 SDK
- **httpx** - 异步 HTTP 客户端(支持 SSE 流式)
- **python-dotenv** - 环境变量管理
- **Docker** + **Docker Compose** - 容器化部署