소개
예약 알림은 개인 AI 어시스턴트의 가장 실용적인 기능 중 하나입니다. 채팅 창에서 "내일 아침 9시에 회의 참석 알려줘"라고 간단히 말하면, 해당 시간에 알림을 받을 수 있다고 상상해 보십시오. 이것이 바로 이 튜토리얼에서 구현할 Skill입니다.
이 튜토리얼에서는 자연어 시간 파싱, 주기적 알림, 영구 저장소를 지원하는 완전한 기능의 예약 알림 Skill을 개발합니다.
기능 기획
알림 Skill은 다음 기능을 갖추어야 합니다:
| 기능 | 설명 | 우선순위 |
|---|---|---|
| 알림 설정 | 자연어를 통한 일회성 알림 설정 | 필수 |
| 주기적 알림 | 매일, 매주, 매월 반복 알림 | 필수 |
| 알림 조회 | 대기 중인 모든 알림 목록 확인 | 필수 |
| 알림 삭제 | 지정된 알림 취소 | 필수 |
| 영구 저장 | 재시작 후에도 알림이 유지됨 | 필수 |
| 다중 채널 푸시 | 알림을 설정한 채널에서 알림 전송 | 권장 |
MCP 도구 설정
알림 기능에는 파일 읽기/쓰기와 예약 스케줄링 기능이 필요합니다. ~/.config/openclaw/openclaw.json5에서 MCP 도구를 설정합니다:
{
mcp: {
servers: {
"filesystem": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-filesystem",
"--allow-read", "--allow-write",
"~/.openclaw/data/reminders/"],
},
"scheduler": {
command: "npx",
args: ["-y", "@openclaw-mcp/scheduler"],
}
}
}
}
알림 데이터 디렉토리를 생성합니다:
mkdir -p ~/.openclaw/data/reminders/
SKILL.md 작성
~/.openclaw/skills/ 디렉토리에 reminder.SKILL.md를 생성합니다:
---
name: reminder
version: 1.0.0
description: 定时提醒技能,支持自然语言设置提醒、周期任务和持久化存储
triggers:
- 提醒
- remind
- 闹钟
- alarm
- 定时
- 待办
- 记得
- 别忘了
- 到时候
mcp_tools:
- filesystem
- scheduler
---
# 定时提醒技能
## Description
这是一个定时提醒技能,让用户可以通过自然语言设置、管理提醒事项。
提醒到期时,自动在用户所在的频道发送通知。
## Core Behavior
### 设置提醒
当用户想设置提醒时:
1. **解析时间**:从用户消息中提取时间信息,支持以下格式:
- 绝对时间:"明天早上9点"、"3月15日下午3点"、"2026-03-20 14:00"
- 相对时间:"5分钟后"、"1小时后"、"3天后"
- 自然语言:"今天晚上"、"这周五"、"下周一上午"
2. **提取内容**:识别提醒内容,即用户想被提醒做什么。
3. **确认信息**:向用户确认提醒的时间和内容。
4. **保存提醒**:使用 filesystem 工具将提醒保存到
`~/.openclaw/data/reminders/reminders.json`。
5. **注册调度**:使用 scheduler 工具注册定时任务。
### 查看提醒
当用户要查看提醒列表时,读取 reminders.json 并按时间排序展示。
### 删除提醒
当用户要取消提醒时,根据编号或内容匹配找到提醒并删除。
### 触发提醒
当提醒时间到达时,scheduler 会回调 OpenClaw,在对应频道发送提醒消息。
## Data Schema
提醒数据使用 JSON 格式存储:
```json
{
"reminders": [
{
"id": "rem_20260328_001",
"content": "参加下午的产品会议",
"triggerTime": "2026-03-28T14:00:00+08:00",
"repeat": null,
"channelType": "telegram",
"channelId": "12345678",
"userId": "user_001",
"createdAt": "2026-03-28T09:00:00+08:00",
"status": "pending"
}
]
}
字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 唯一标识,格式 rem_YYYYMMDD_NNN |
| content | string | 提醒内容 |
| triggerTime | string | 触发时间,ISO 8601 格式 |
| repeat | object/null | 重复规则(见下方) |
| channelType | string | 来源频道类型 |
| channelId | string | 来源频道/用户 ID |
| userId | string | 设置提醒的用户 |
| createdAt | string | 创建时间 |
| status | string | 状态:pending/triggered/cancelled |
重复规则
{
"repeat": {
"type": "daily",
"interval": 1,
"endDate": "2026-12-31T23:59:59+08:00"
}
}
type 可选值:
daily:每天重复weekly:每周重复(可指定周几)monthly:每月重复(可指定几号)cron:自定义 cron 表达式
Output Format
设置提醒成功
✅ 提醒已设置!
📋 内容:{提醒内容}
⏰ 时间:{YYYY年MM月DD日 HH:mm}
🔁 重复:{重复规则,无则显示"一次性"}
🆔 编号:{ID}
到时候我会在这里通知你。
查看提醒列表
📝 你的提醒列表:
1. ⏰ {时间1} - {内容1} [编号: {ID1}]
2. ⏰ {时间2} - {内容2} [编号: {ID2}]
3. 🔁 {时间3} - {内容3}(每天重复)[编号: {ID3}]
共 {N} 个待触发提醒。
输入"取消提醒 {编号}"可删除指定提醒。
提醒触发通知
🔔 提醒时间到!
📋 {提醒内容}
⏰ 当前时间:{HH:mm}
---
这是你在 {设置时间} 设置的提醒。
删除提醒成功
❌ 已取消提醒:{提醒内容}
Error Handling
- 如果无法解析时间,请用户用更明确的方式表述
- 如果时间已经过去,提醒用户设置的时间已过期
- 如果 reminders.json 不存在,自动创建空文件
- 如果 scheduler 不可用,告知用户提醒功能暂时不可用
Example Interactions
用户:明天早上8点提醒我买咖啡 助手:✅ 提醒已设置! 📋 内容:买咖啡 ⏰ 时间:2026年03月29日 08:00 🔁 重复:一次性 🆔 编号:rem_20260328_001
用户:每周五下午5点提醒我写周报 助手:✅ 提醒已设置! 📋 内容:写周报 ⏰ 时间:每周五 17:00(下次:2026年03月28日) 🔁 重复:每周五 🆔 编号:rem_20260328_002
用户:看看我有哪些提醒 助手:📝 你的提醒列表: 1. ⏰ 03/29 08:00 - 买咖啡 [编号: rem_20260328_001] 2. 🔁 每周五 17:00 - 写周报 [编号: rem_20260328_002] 共 2 个待触发提醒。
用户:取消买咖啡的提醒 助手:❌ 已取消提醒:买咖啡
## 영구 저장 메커니즘
### 저장 전략
알림 데이터는 `~/.openclaw/data/reminders/reminders.json`에 저장됩니다. 각 작업(추가, 삭제, 수정) 후 즉시 파일에 기록됩니다.
### 재시작 복구
OpenClaw 재시작 후 reminder 스킬은 다음을 수행해야 합니다:
1. reminders.json에서 status가 `pending`인 모든 알림을 읽습니다
2. scheduler에 다시 등록합니다
3. 만료되었지만 트리거되지 않은 알림을 정리합니다 (`missed`로 표시하고, 다음 사용자 상호작용 시 알림)
## 시간대 처리
시간 파싱과 저장 시 시간대를 고려해야 합니다:
```markdown
## Timezone Rules
- 默认使用用户所在频道配置的时区
- 如果未配置时区,默认使用 Asia/Shanghai (UTC+8)
- 所有存储时间使用 ISO 8601 带时区格式
- 显示时间使用用户本地时区
테스트 체크리스트
개발 완료 후 다음 체크리스트에 따라 테스트합니다:
# 1. 재시작하여 스킬 로드
openclaw restart
# 2. 스킬 로드 확인
openclaw skill list
그런 다음 채팅에서 순서대로 테스트합니다:
- [ ] 1분 후 알림을 설정하여 제시간에 트리거되는지 확인
- [ ] 절대 시간 알림 설정
- [ ] 주기적 알림 설정
- [ ] 알림 목록 조회
- [ ] 알림 하나 삭제
- [ ] OpenClaw 재시작 후 알림이 복구되는지 확인
마무리
예약 알림 Skill은 자연어 시간 파싱, 데이터 영구 저장, 예약 스케줄링, 다중 채널 푸시 등 여러 기술 포인트를 포함하는 종합적인 프로젝트입니다. 이 Skill의 개발 방법을 익히면 더 복잡한 자동화 워크플로우 스킬을 개발할 수 있습니다.