# 提醒机制说明
## 问题:为什么时间到了没有自动提醒?
### MCP协议的工作方式
MCP(模型上下文协议)是**请求-响应模式**,服务端**不能主动推送**消息:
```
❌ 错误理解:
时间到了 → MCP服务主动通知小智 → 小智语音提醒
✅ 正确理解:
小智定期查询 → MCP服务返回到期项 → 小智语音提醒
```
### 从日志看问题
你的日志显示:
```
INFO Processing request of type PingRequest
```
**只有心跳包,没有查询请求!**
这说明:
- ✅ MCP服务运行正常(接收心跳包)
- ❌ 小智没有调用查询工具(`get_pending_todos` 或 `get_pending_alarms`)
---
## 解决方案
### 方案1: 手动测试(立即验证)
直接对小智说:
```
"小智,检查一下有没有到期的提醒"
"小智,看看待办事项到期了吗"
"小智,闹钟到时间了吗"
```
这会触发小智调用 `check_all_reminders` 工具,立即检查所有到期项。
### 方案2: 配置小智定期查询(推荐)
需要在小智AI端配置**定期任务**:
```javascript
// 伪代码示例
setInterval(() => {
// 每分钟调用一次
const result = xiaozhi.callMCPTool('check_all_reminders');
if (result.has_reminders) {
// 语音播报每一条提醒
result.messages.forEach(msg => {
xiaozhi.speak(msg);
});
}
}, 60000); // 60秒 = 1分钟
```
**联系小智AI开发者**配置此功能。
### 方案3: 使用新的综合检查工具
我刚刚添加了一个新工具 `check_all_reminders`,它一次性检查所有提醒:
#### 工具说明
**check_all_reminders** - 一次性检查所有到期的闹钟和待办
返回示例:
```json
{
"success": true,
"has_reminders": true,
"total_count": 3,
"alarm_count": 1,
"todo_count": 2,
"alarms": [
{
"id": "xxx",
"time": "2026-02-01T13:30:00",
"description": "会议提醒",
"type": "alarm"
}
],
"todos": [
{
"id": "yyy",
"title": "完成报告",
"remind_time": "2026-02-01T14:00:00",
"type": "todo"
}
],
"messages": [
"闹钟提醒: 会议提醒",
"待办提醒: 完成报告"
],
"message": "有 3 个提醒到期"
}
```
---
## 当前可用的8个MCP工具
### 闹钟管理
1. **add_alarm** - 添加闹钟
2. **get_pending_alarms** - 查询到期闹钟
3. **dismiss_alarm** - 关闭闹钟
### 待办事项管理
4. **add_todo** - 添加待办事项
5. **get_pending_todos** - 查询到期待办
6. **complete_todo** - 完成待办
7. **list_todos** - 列出待办事项
### 综合查询
8. **check_all_reminders** - 一次性检查所有提醒(新增)✨
---
## 测试提醒功能
### 1. 添加一个即将到期的待办
对小智说:
```
"小智,提醒我1分钟后测试提醒功能"
```
### 2. 等待1分钟后,手动检查
对小智说:
```
"小智,检查一下有没有到期的提醒"
```
### 3. 查看响应
如果功能正常,小智应该回复:
```
"待办提醒:测试提醒功能"
```
---
## 配置建议(给小智AI开发者)
### 推荐配置
```yaml
定期任务:
- 名称: 检查提醒
工具: check_all_reminders
频率: 每1分钟
条件: has_reminders == true
动作: 语音播报 messages 列表
```
### 提醒流程
```
每1分钟:
1. 调用 check_all_reminders
2. 如果 has_reminders == true:
- 遍历 messages 列表
- 语音播报每一条提醒
- 可选:播放提示音
3. 如果 has_reminders == false:
- 不做任何操作
```
---
## 常见问题
### Q1: 为什么我添加了待办,时间到了没提醒?
**A:** MCP服务不会主动推送,需要小智定期调用查询工具。目前小智可能没有配置定期查询。
### Q2: 如何验证提醒功能是否正常?
**A:** 添加一个1分钟后的待办,然后手动说"小智,检查一下有没有到期的提醒"。
### Q3: 日志显示"列出待办事项,状态: pending, 数量: 1"是什么意思?
**A:** 这说明你调用了 `list_todos` 查看待办列表,但这个工具不会检查是否到期,只是列出所有待办。需要调用 `check_all_reminders` 或 `get_pending_todos`。
### Q4: 能否让MCP服务主动推送提醒?
**A:** 不能。MCP协议是请求-响应模式,不支持服务端主动推送。这是协议设计限制。
### Q5: 多久检查一次提醒比较合适?
**A:** 建议每1分钟检查一次,既能及时提醒又不会造成过多请求。
---
## 总结
1. ✅ MCP服务功能正常
2. ❌ 小智需要配置定期查询
3. ✨ 新增 `check_all_reminders` 工具方便一次性检查
4. 🔧 联系小智AI开发者配置定期任务
5. 🧪 可以手动测试验证功能
**下一步行动:**
- 手动测试:对小智说"检查一下有没有到期的提醒"
- 长期解决:联系小智AI开发者配置定期查询任务