Files

147 lines
3.3 KiB
Markdown
Raw Permalink 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.
# 企业微信 → Win11 本地 TTS 播报服务
通过企业微信长连接(WebSocket)接收智能机器人消息,调用 Windows 11 本地 .NET System.Speech 语音引擎朗读出来。
**你发什么,它就说什么。**
---
## 工作原理
```
你在企业微信给机器人发消息
→ 企微服务器通过 WebSocket 推送消息给本服务
→ 调用 Windows 11 .NET System.Speech 语音引擎朗读
→ 扬声器发声
→ 回复"已播报"到企微
```
全程**无需公网 IP、域名、回调 URL**,通过长连接主动连接企微,内网直接用。
---
## 项目结构
```
wework_xiaoai_bot/
├── app/services/
│ ├── ws_client.py # WebSocket 客户端(核心)
│ └── tts.py # Windows 11 本地 TTS 服务
├── config.py # 配置加载(从 .env 读取)
├── run.py # 程序入口
├── requirements.txt # Python 依赖
├── tests/ # 测试
├── .env.example # 环境变量模板
└── README.md
```
---
## 前置条件
### 1. 企业微信智能机器人
在企业微信管理后台创建智能机器人,开启「API 模式」→「长连接」:
1. 登录 [企业微信管理后台](https://work.weixin.qq.com)
2. 进入「应用管理」→「智能机器人」
3. 创建机器人,开启 API 模式,选择「长连接」
4. 获取 **Bot ID****Secret**
### 2. Windows 11 系统
使用 Windows 11 自带的 .NET System.Speech 语音引擎,无需额外安装语音包。
> 如需更好的中文语音,可在 Win11 设置 → 时间和语言 → 语音 → 添加语音包中安装「Microsoft Xiaoxiao」等自然语音。
---
## 快速开始
### 1. 配置
```bash
copy .env.example .env
```
编辑 `.env`,填入你的企微 Bot ID 和 Secret
```env
WECOM_BOT_ID=你的BotID
WECOM_BOT_SECRET=你的Secret
```
### 2. 安装依赖
```bash
pip install -r requirements.txt
```
### 3. 启动
```bash
python run.py
```
---
## 配置说明
| 环境变量 | 说明 | 必填 |
|---------|------|------|
| `WECOM_BOT_ID` | 企微智能机器人 Bot ID | 是 |
| `WECOM_BOT_SECRET` | 企微智能机器人 Secret | 是 |
| `TTS_VOICE_NAME` | 指定语音名称,留空自动选中文语音 | 否 |
| `TTS_RATE` | 语速 -10(最慢)到 10(最快),默认 0 | 否 |
| `TTS_ENABLED` | 是否启用 TTS,默认 true | 否 |
| `TTS_MAX_TEXT_LENGTH` | 最大播报长度,默认 500 | 否 |
---
## 日志示例
正常运行:
```
[INFO] Connecting to wss://openws.work.weixin.qq.com ...
[INFO] WebSocket connected
[INFO] Subscribed successfully
[INFO] Received: 你好世界
[INFO] TTS success
```
故障时自动重连:
```
[ERROR] Connection lost, reconnecting in 5s...
[INFO] WebSocket connected
[INFO] Subscribed successfully
```
---
## 技术要点
- **长连接**WebSocket `wss://openws.work.weixin.qq.com`,无需公网 IP
- **消息加解密**:长连接模式免加解密,ws 协议层自带加密
- **心跳保活**WebSocket 层 + 应用层双重心跳,每 30 秒
- **断线重连**:自动检测断线,5 秒后重连
- **本地 TTS**:调用 .NET System.Speech 直接驱动声卡,不生成临时文件
---
## 依赖
```
aiohttp>=3.9.0
python-dotenv>=1.0.0
websockets>=13.0
pytest>=8.0.0
pytest-asyncio>=0.23.0
```
---
## License
MIT