# wework-reminder **Repository Path**: lainyu/wework-reminder ## Basic Information - **Project Name**: wework-reminder - **Description**: 这是一个基于企业微信的智能提醒应用,使用 Rust + Axum 构建,支持 AI 驱动的提醒计划创建。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-02 - **Last Updated**: 2025-11-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RemindMe - AI 驱动的智能提醒助手 基于 Rust + Axum 构建的企业微信智能提醒机器人,支持自然语言创建提醒计划。 ## ✨ 特性 - 🤖 **AI 驱动**: 使用 DeepSeek-V3 智能解析用户意图 - 🔐 **安全加密**: 企业微信 AES-256-CBC 加密通信 - ⏰ **精准提醒**: 提前检测窗口 + 去重机制,确保不遗漏 - 🚫 **消息去重**: 基于 msgid 的缓存机制,防止重复处理 - 📊 **完整日志**: 结构化日志,中国时区显示 - 📖 **API 文档**: Swagger UI 在线文档 - 🚀 **高性能**: Rust 异步运行时,低资源占用 ## 🚀 快速开始 ### 环境要求 - Rust 1.75+ - SQLite 3 - 企业微信机器人(需要 Token 和 EncodingAESKey) - SiliconFlow API Key (或其他 AI 服务) ### 安装 ```bash # 克隆项目 git clone cd simple_server # 配置文件 cp config.json.example config.json # 编辑 config.json 填入你的配置 # 编译运行 cargo build --release RUST_LOG=info ./target/release/simple_server ``` ### 配置文件示例 ```json { "server_host": "0.0.0.0", "server_port": 8086, "database_url": "sqlite://./data/remindme.db", "wx_token": "your_wechat_token", "wx_encoding_aes_key": "your_43_char_aes_key", "wx_webhook_url": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx", "ai_api_key": "your_siliconflow_api_key", "ai_api_url": "https://api.siliconflow.cn/v1/chat/completions", "ai_model": "deepseek-ai/DeepSeek-V3" } ``` ## 📖 使用说明 ### 1. 配置企业微信机器人 在企业微信后台配置: - URL: `http://your-server:8086/callback` - Token: 填入 config.json 中的 `wx_token` - EncodingAESKey: 填入 config.json 中的 `wx_encoding_aes_key` ### 2. 使用机器人创建提醒 在企业微信群中 @ 机器人: ``` @机器人 明天下午3点提醒我开会 @机器人 每天早上8点提醒我吃早餐 @机器人 下周五提醒我交报告 ``` AI 会智能解析并创建提醒计划,然后在指定时间通过企业微信通知你。 ### 3. 查看 API 文档 启动服务后访问: `http://localhost:8086/swagger-ui` ## 🏗️ 技术架构 ### 技术栈 - **Web 框架**: Axum 0.7 - **异步运行时**: Tokio - **数据库**: SQLite + SQLx - **AI 服务**: SiliconFlow (DeepSeek-V3) - **加密**: AES-256-CBC + SHA-1 - **日志**: Tracing + Tracing-Subscriber - **定时任务**: Tokio-Cron-Scheduler ### 架构图 ``` 企业微信客户端 | v GET/POST /callback (加密通信) | v 解密 | v POST /reminder (业务处理) | v AI 解析 | v 数据库存储 | v 定时检查 (每3分钟) | v 企业微信 Webhook ``` ## 📁 项目结构 ``` src/ ├── config.rs # 配置管理 ├── error.rs # 错误处理 ├── models/ # 数据模型 ├── db/ # 数据库操作 ├── services/ # 业务逻辑 │ ├── ai_service.rs # AI 服务 │ ├── plan_service.rs │ ├── user_service.rs │ └── wechat_service.rs ├── routes/ # HTTP 路由 │ ├── callback.rs # 企业微信回调 │ └── reminder.rs # 提醒处理 ├── scheduler/ # 定时任务 ├── utils/ # 工具函数 │ ├── wx_crypto.rs # 加密解密 │ └── msg_cache.rs # 消息去重缓存 └── main.rs # 程序入口 ``` ## 🔧 开发 ### 运行开发模式 ```bash # 带详细 debug 日志 RUST_LOG=debug cargo run # 仅 info 级别日志 RUST_LOG=info cargo run ``` ### 数据库迁移 ```bash # 初始化数据库 sqlx database create sqlx migrate run ``` ### 运行测试 ```bash cargo test ``` ## 🐛 常见问题 ### 1. Base64 解码失败 **错误**: `Invalid last symbol 82, offset 42` **解决**: 检查 `wx_encoding_aes_key` 是否正确,应该是 43 位字符。 ### 2. 签名验证失败 **错误**: `Signature verification failed` **解决**: 检查 `wx_token` 是否与企业微信后台配置一致。 ### 3. 时间显示错误 **问题**: 时间相差 8 小时 **解决**: 已修复,日志和提醒均使用 CST (UTC+8) 时区。 ### 4. 消息重复处理 **问题**: 企业微信重复发送消息,导致创建多个相同的提醒 **解决**: 已实现基于 `msgid` 的缓存去重机制,处理中的消息会被自动忽略。缓存过期时间为 5 分钟。 ## 📝 更新日志 查看 [CHANGELOG.md](./CHANGELOG.md) 获取详细更新记录。 ## 📄 技术文档 查看 [DEV.md](./DEV.md) 获取完整的技术设计文档。 ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ## 📜 许可证 MIT License ## 🙏 致谢 - 企业微信加密解密参考: WxBizJsonMsgCrypt.py - AI 服务: SiliconFlow - 开源社区的各位贡献者