Files
aiagents-stock/通知问题排查指南.md
T
2025-10-09 11:47:54 +08:00

277 lines
6.6 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:运行诊断工具
```bash
python test_notification_debug.py
```
这个工具会检查:
- ✅ 数据库中的通知记录
- ✅ 邮件配置状态
- ✅ 邮件发送测试
- ✅ 股票价格和触发条件
- ✅ 待发送通知
### 步骤2:检查常见问题
#### 问题1:价格已不在触发区间
**症状**:股票价格曾经到达过,但现在已经超出区间
**示例**
- 进场区间:44.87 - 46.48
- 当前价格:47.99(已超出)
- 结果:不会触发新通知
**解决**
- 查看"通知历史"确认是否之前已触发过
- 如需重新监测,调整进场区间
#### 问题260分钟防重复机制
**症状**:价格在区间内,但不发送通知
**原因**:同一触发条件60分钟内只发送一次,避免重复
**查看方法**
```bash
python test_notification_debug.py
```
会显示:"⚠️ 最近60分钟内已发送过XX通知"
**解决**
- 等待60分钟后会自动重新发送
- 或者清空数据库通知记录(会导致历史丢失)
#### 问题3:网页通知显示问题
**症状**:有通知但网页看不到
**原因**
1. 之前的显示逻辑只显示"未发送"的通知
2. 通知发送后被标记为"已发送"就不显示了
**已修复**
- 现在显示所有最近通知(包括已发送和未发送)
- 显示发送状态:"✅ 已发送" 或 "⏳ 待发送"
#### 问题4:邮件配置问题
**检查清单**
```env
# .env 文件
EMAIL_ENABLED=true # 必须是 true
SMTP_SERVER=smtp.qq.com # QQ邮箱或其他
SMTP_PORT=587 # 587(TLS) 或 465(SSL)
EMAIL_FROM=your_email@qq.com # 发件邮箱
EMAIL_PASSWORD=xxxxxx # 授权码(不是登录密码!)
EMAIL_TO=receiver@example.com # 收件邮箱
```
**测试方法**
1. 在网页界面:监测管理 → 通知管理 → 发送测试邮件
2. 或运行:`python test_notification_debug.py`
**常见错误**
- ❌ 使用邮箱登录密码而非授权码
- ❌ EMAIL_ENABLED 设置为 false
- ❌ 端口号不正确(QQ邮箱用587或465)
## 完整排查流程
### 1. 确认监测服务运行
```
网页界面 → 监测管理
查看状态:🟢 运行中
```
如果显示"🔴 已停止",点击"▶️ 启动监测"
### 2. 查看通知历史
```
网页界面 → 监测管理 → 通知历史
```
应该能看到:
- 所有触发的通知(新版本已修复)
- 每条通知的发送状态
- 触发时间
### 3. 检查股票状态
运行诊断工具查看详细信息:
```bash
python test_notification_debug.py
```
关注输出中的:
```
📊 股票代码 - 股票名称
当前价格: XX.XX
进场区间: XX.XX - XX.XX
🟢 当前价格在进场区间内
⚠️ 但最近60分钟内已发送过进场通知
```
### 4. 查看终端日志
监测服务运行时会输出详细日志:
**正常流程**
```
正在更新股票 300832 的价格...
✅ 300832 当前价格: ¥66.5
==================================================
开始发送通知,共 1 条
==================================================
处理通知: 300832 - entry
📧 正在发送邮件...
- 收件人: xxx@qq.com
- 主题: 股票监测提醒 - 300832
- 使用 SMTP+TLS 连接 smtp.qq.com:587
- 正在登录...
- 正在发送...
✅ 邮件发送成功: 300832
✅ 通知已成功发送并标记
```
**配置问题**
```
⚠️ 邮件配置不完整,使用界面通知
- SMTP服务器: 未配置
- 发件人: 未配置
- 收件人: 未配置
- 密码: 未配置
```
**发送失败**
```
邮件发送失败: [Errno 11001] getaddrinfo failed
使用界面通知作为备用方案
```
### 5. 手动测试通知
如果想立即测试通知(不等待价格触发):
```python
# 创建测试脚本 test_manual_notification.py
from monitor_db import monitor_db
from notification_service import notification_service
# 添加一条测试通知
monitor_db.add_notification(
stock_id=1, # 你的股票ID
notification_type='entry',
message='这是一条测试通知'
)
# 立即发送
notification_service.send_notifications()
```
## 修复后的改进
### 1. 网页通知显示增强 ✅
- 显示所有最近通知(不只是待发送的)
- 显示发送状态标识
- 显示待发送通知数量警告
### 2. 日志输出增强 ✅
- 详细的邮件发送过程日志
- 配置检查提示
- 错误堆栈跟踪
### 3. 防重复机制 ✅
- 60分钟内同类型通知只发送一次
- 避免价格波动导致的重复通知
### 4. 监测频率优化 ✅
- 5分钟循环检查
- 按设定间隔更新每只股票
- 股票间3秒延迟,避免API限流
## 预期效果
当股票价格满足条件时:
1. **数据库记录**
```
notifications 表中新增记录
sent = FALSE
```
2. **发送通知** ✅
```
调用 notification_service.send_notifications()
尝试发送邮件
标记 sent = TRUE
```
3. **邮件到达** ✅
```
收件箱收到邮件
主题:股票监测提醒 - XXX
```
4. **网页显示** ✅
```
监测管理 → 通知历史
显示:[✅ 已发送] 股票 XXX ...
```
## 常见场景答疑
### Q1: 价格到了但没收到通知
**检查**
1. 是否60分钟内已发送过?→ 查看通知历史
2. 邮件配置是否正确?→ 发送测试邮件
3. 监测服务是否运行?→ 查看状态
4. 通知是否被禁用?→ 检查股票的"通知启用"开关
### Q2: 测试邮件能收到,但监测邮件收不到
**可能原因**
1. 触发条件未满足(价格不在区间)
2. 60分钟防重复
3. 监测服务未启动
4. 代码更新前的旧版本问题
**解决**
1. 运行 `test_notification_debug.py` 全面检查
2. 查看终端日志确认是否真的触发
3. 确保使用的是修复后的代码
### Q3: 网页看不到通知
**已修复**:旧版本只显示待发送通知,新版本显示所有通知
**刷新界面**:点击"🔄 刷新状态"
### Q4: 想立即重新发送通知
**方法**
1. 清空通知记录(会丢失历史)
2. 或等待60分钟
3. 或调整价格区间让其重新触发
## 技术支持
如果问题仍未解决:
1. **提供诊断报告**
```bash
python test_notification_debug.py > diagnosis.txt
```
2. **提供终端日志**
复制运行 Streamlit 的终端输出
3. **检查文件**
- `.env` 配置(隐藏密码)
- `stock_monitor.db` 是否存在
- 监测股票列表截图
4. **描述问题**
- 什么时候开始的?
- 做了什么操作?
- 预期行为 vs 实际行为