# 钉钉通知功能实现总结 ## ✅ 已完成功能 ### 1. 核心模块开发 #### notifiers/dingtalk.py - ✅ 钉钉Markdown消息发送 - ✅ 加签验证(安全增强) - ✅ 交易信号格式化 - ✅ 错误通知支持 - ✅ 发送统计和重试机制 #### scheduler.py 集成 - ✅ 自动初始化钉钉通知器 - ✅ 在生成BUY/SELL信号后自动发送 - ✅ HOLD信号不发送(减少噪音) - ✅ 异常处理和日志记录 ### 2. 配置管理 #### docker-compose.yml ```yaml scheduler: environment: - DINGTALK_WEBHOOK=https://oapi.dingtalk.com/robot/send?access_token=... - DINGTALK_SECRET=SEC... ``` #### requirements.txt - ✅ 添加 requests==2.31.0 依赖 ### 3. 文档完善 - ✅ DINGTALK_SETUP.md - 详细配置指南 - ✅ 包含钉钉机器人创建步骤 - ✅ 包含故障排查指南 - ✅ 包含消息示例 --- ## 📊 消息格式特性 ### 支持的消息类型 1. **交易信号通知** (BUY/SELL) - 信号类型和置信度 - 量化分析详情 - AI深度分析(如果启用) - 交易机会细分: - 📊 日内交易机会 (Intraday) - 📈 中长线交易机会 (Swing) - 📌 埋伏点位 (Ambush) - 价格位建议(入场/止损/止盈) - 风险回报比 - 综合建议和警告 2. **系统错误通知** (未来支持) - 错误消息 - 上下文信息 - @所有人 ### Markdown格式优化 - ✅ 清晰的层级结构(标题/子标题) - ✅ 信号类型emoji标识(🟢 BUY / 🔴 SELL / 🟡 HOLD) - ✅ 关键信息加粗 - ✅ 引用格式的AI分析 - ✅ 列表格式的价格位和因素 - ✅ 分隔线划分区块 - ✅ 页脚免责声明 --- ## 🔐 安全特性 ### 1. 加签验证 ```python # 自动生成时间戳和签名 timestamp = int(time.time() * 1000) sign = hmac_sha256(f"{timestamp}\n{secret}", secret) url = f"{webhook}×tamp={timestamp}&sign={sign}" ``` ### 2. 敏感信息保护 - ✅ Webhook和密钥通过环境变量配置 - ✅ 不硬编码在代码中 - ✅ 建议使用 .env.local 文件 ### 3. 请求限流 - ✅ 只在BUY/SELL信号时发送 - ✅ HOLD信号不发送 - ✅ 避免频繁通知骚扰 --- ## 📱 当前配置状态 ### 已配置信息 ``` Webhook: https://oapi.dingtalk.com/robot/send?access_token=9438788... Secret: SEC88678d8970f0882a1cca36476b92947409fea5f562a09db4cd03524... 状态: ✅ 已启用 ``` ### 测试结果 ``` ✅ 测试消息发送成功 ✅ 模拟交易信号发送成功 ✅ 统计信息正常 - 发送成功: 2次 - 发送失败: 0次 - 成功率: 100% ``` --- ## 🚀 使用方式 ### 自动发送(推荐) 启动scheduler服务后,系统会自动: 1. 每5分钟生成一次交易信号 2. 如果信号为BUY或SELL,自动发送钉钉通知 3. 如果信号为HOLD,跳过通知 ```bash # 启动自动信号生成 docker compose --profile scheduler up -d # 查看日志 docker compose logs -f scheduler ``` ### 手动测试 ```bash # 测试钉钉通知 docker compose exec ingestion python -c " from notifiers.dingtalk import DingTalkNotifier import os notifier = DingTalkNotifier( webhook_url=os.getenv('DINGTALK_WEBHOOK'), secret=os.getenv('DINGTALK_SECRET') ) notifier.send_markdown('测试', '# 测试消息\n\n这是一条测试消息') " # 手动生成信号(会自动发送通知) docker compose exec ingestion python /app/scripts/generate_trading_signal.py ``` --- ## 📊 预期效果 ### 钉钉群将收到 #### 测试消息 ```markdown # 🚀 钉钉通知测试 这是一条测试消息,用于验证钉钉webhook配置是否正确。 **测试时间**: 2025-11-30 14:55:00 --- *如果您收到此消息,说明配置成功!* ``` #### 真实交易信号(示例) ```markdown # 🟢 交易信号: BUY **时间**: 2025-11-30 14:55:28 **置信度**: 75.0% **共识**: QUANT_LLM_AGREE --- ## 📊 量化分析 - **信号**: BUY - **综合得分**: 51.5 - **置信度**: 75.0% - **趋势得分**: 99.0 - **动量得分**: 75.0 - **订单流得分**: -7.8 ## 🤖 AI深度分析 - **信号**: BUY - **置信度**: 60.0% - **风险等级**: MEDIUM ### 📊 日内交易机会 - **方向**: LONG - **入场**: $91,128.00 - **止损**: $91,000.00 - **止盈**: $91,342.00 - **说明**: 5分钟和15分钟周期呈现上涨趋势,MACD金叉扩大... ### 📌 埋伏点位 - **埋伏价位**: $90,612.00 - **说明**: 等待价格回调至4小时支撑位90612附近... ### 💡 AI分析 > 当前市场呈现多周期趋势分歧,日线下跌但短周期上涨... **关键因素**: - 多周期趋势分歧 - 成交量萎缩 - RSI中性区域 ## 💰 价格位 - **当前价格**: $91,650.10 - **入场价**: $91,650.10 - **止损价**: $90,985.52 - **目标价1**: $92,646.96 - **目标价2**: $93,311.54 - **目标价3**: $94,308.40 - **风险回报比**: 1:1.50 ## 📝 综合建议 > 量化和AI分析一致看多,建议在回调时逢低做多 ## ⚠️ 风险提示 - 市场波动较大,注意风险控制 --- *本信号由AI量化系统自动生成,仅供参考,不构成投资建议* ``` --- ## 🔍 日志示例 ### 成功发送 ``` 📱 发送钉钉通知... ✅ 钉钉消息发送成功: 🚨 交易信号: BUY (置信度: 75%) ✅ 钉钉通知发送成功 ``` ### 跳过发送 ``` ℹ️ HOLD信号,跳过钉钉通知 ``` ### 未配置 ``` ⚠️ 钉钉通知发送失败或未配置 ``` --- ## 🛠️ 技术实现细节 ### 依赖库 - requests==2.31.0 - HTTP请求 - hmac, hashlib, base64 - 加签验证(内置库) ### 关键类和方法 #### DingTalkNotifier ```python class DingTalkNotifier: def __init__(webhook_url, secret, enabled) def send_markdown(title, text, at_mobiles, at_all) -> bool def send_signal(aggregated_signal) -> bool def send_error(error_msg, context) -> bool def get_stats() -> dict ``` #### SignalScheduler集成 ```python # 初始化 self.dingtalk = DingTalkNotifier( webhook_url=os.getenv('DINGTALK_WEBHOOK'), secret=os.getenv('DINGTALK_SECRET') ) # 发送 if final_signal in ['BUY', 'SELL']: self.dingtalk.send_signal(aggregated) ``` --- ## 🎯 下一步优化建议 ### 短期 - ✅ 基础功能已完成 - ⏳ 添加消息去重(避免短时间内重复发送相同信号) - ⏳ 添加@特定人员功能 - ⏳ 支持自定义消息模板 ### 中期 - ⏳ 每日交易汇总报告 - ⏳ 系统错误实时告警 - ⏳ 重要市场事件推送(如大幅波动) - ⏳ 信号准确率统计和回测结果推送 ### 长期 - ⏳ 支持企业微信 - ⏳ 支持Telegram - ⏳ 支持邮件通知 - ⏳ 支持Webhook回调(供第三方系统集成) --- ## ✅ 验收清单 - [x] notifiers模块创建完成 - [x] DingTalkNotifier类实现 - [x] 加签验证功能 - [x] Markdown格式化 - [x] scheduler集成 - [x] docker-compose配置 - [x] requirements.txt更新 - [x] 配置文档编写 - [x] 测试消息发送成功 - [x] 模拟信号发送成功 - [x] 用户配置已应用 --- ## 📞 支持 如有问题,请参考: 1. DINGTALK_SETUP.md - 配置指南 2. 查看日志: `docker compose logs scheduler` 3. 检查统计: 调用 `notifier.get_stats()` --- **状态**: ✅ 完全实现并测试通过 **版本**: 1.0.0 **日期**: 2025-11-30