Skip to content
Back to skills

Amemo Save Task

ASecurity

当用户说含时间词(今天/明天/后天/具体日期)的祈使句,或说「提醒我」「记得要」时调用,保存任务并创建麦小记邮件 + AI 定时双重提醒。

  • 8 stars
  • 0 votes
  • 0 copies
  • 8 views
  • Added May 28, 2026
ai-agentspythonbash

Security analysis

A100/100

Scanned May 28, 2026

npx -y skills add lockfeel/amemo-skill --skill amemo-save-task --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Amemo Save Task?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Amemo Save Task
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/lockfeel-amemo-save-task/badge)](https://www.skillsdirectory.com/skills/lockfeel-amemo-save-task)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: amemo-save-task
description: 当用户说含时间词(今天/明天/后天/具体日期)的祈使句,或说「提醒我」「记得要」时调用,保存任务并创建麦小记邮件 + AI 定时双重提醒。
---

# amemo-save-task — 保存任务

---

## 接口信息

| 属性 | 值 |
|:-----|:---|
| **路由** | `POST https://skill.amemo.cn/save-task` |
| **Bean** | `TaskBean` |
| **Content-Type** | `application/json` |

---

## 请求参数

> ⚠️ 服务端要求所有字段必须存在。`userToken`、`taskTitle`、`taskTime` 必填且有值,其他字段可选但字段必须存在。

| 参数 | 类型 | 必填 | 说明 |
|:-----|:----:|:----:|:-----|
| `userToken` | str | ✅ | 用户登录凭证 |
| `taskId` | str | — | 任务 ID(新建传 `null`,更新时传入已有 ID) |
| `taskTitle` | str | ✅ | 任务标题(不能为空) |
| `taskExplain` | str | — | 任务说明,不传则传 `null` |
| `taskTime` | str | ✅ | 任务时间(如 "2025-12-31",不能为空) |
| `taskEmail` | list[str] | — | 通知邮箱列表,不传则传 `null` |

---

## 请求示例

```bash
# 新建任务
curl -X POST https://skill.amemo.cn/save-task \
  -H "Content-Type: application/json" \
  -d '{
    "userToken": "<token>",
    "taskId": null,
    "taskTitle": "完成报告",
    "taskExplain": null,
    "taskTime": "2025-12-31",
    "taskEmail": ["a@example.com"]
  }'

# 更新任务(传入已有 taskId)
curl -X POST https://skill.amemo.cn/save-task \
  -H "Content-Type: application/json" \
  -d '{
    "userToken": "<token>",
    "taskId": "123456",
    "taskTitle": "完成报告",
    "taskExplain": null,
    "taskTime": "2025-12-31",
    "taskEmail": null
  }'
```

---

## 响应示例

```json
{
  "code": 200,
  "desc": "success",
  "data": {
    "taskId": "xyz456"
  }
}
```

## 响应解析

| 字段 | 类型 | 说明 |
|:-----|:----:|:-----|
| `code` | int | 状态码,200 表示成功 |
| `desc` | str | 状态描述 |
| `data.taskId` | str | 保存成功后返回的任务 ID,**必须提取并保存到当前对话上下文 `lastTaskId`,用于后续邮件发送和更新操作** |

---

## 注意事项

> 📌 **字段要求**:所有字段必须存在,即使不传值也要传 `null`
>
> 🔄 **新建 vs 更新**:新建时 `taskId` 传 `null`,更新时传入已有 taskId
>
> 👥 **多人通知**:`taskEmail` 为字符串数组,可同时通知多人

---

## 执行流程(由主模块调度)

### 时间解析

**优先使用脚本**(推荐,避免 AI 自行推算出错):

```bash
python3 scripts/parse_time.py "{用户原始输入}"
```

脚本返回 JSON,包含 `intent`(task/memo)、`pairs`(时间-内容对列表)、`base_time`(系统基准时间)。

> 脚本路径相对于 skill 根目录。完整路径:`{skill_root}/scripts/parse_time.py`

**脚本不可用时**,按以下规则手动推算(必须以 System Current Date 为基准):

| 类别 | 时间词 | 转换规则 |
|:---|:---|:---|
| 相对日期 | 今天/明日/昨天/后天/大后天 | 偏移 0/+1/-1/+2/+3 天 |
| 特殊偏移 | 将来/未来 → +365天;最近/最新/近期 → +15天 | 偏移天数 |
| 星期 | 下周X | 下一个周X |
| 周末 | 本周末→本周六;下周末→下周六 | 计算偏移 |
| 具体日期 | 12月25日 / 2025-12-25 | 原样转换 |

**时段叠加**(在日期基础上替换时间):

| 时段词 | 时间 | 时段词 | 时间 |
|:---|:---|:---|:---|
| 早上/早晨/清早 | 07:00 | 下午 | 14:00 |
| 上午 | 09:00 | 晚上/傍晚 | 19:00 |
| 中午 | 12:00 | 深夜/半夜 | 23:00 |

**具体时间优先**:"下午3点" → 15:00,"上午10点半" → 10:30

### 多时间词拆分

用户单条消息含多个时间词时,拆分为多个独立任务:

| 用户输入 | 拆分结果 |
|:---|:---|
| "今天和明天都要开会" | 任务1: 今天开会 / 任务2: 明天开会 |
| "3月1号和3月5号交房租" | 任务1: 3月1日交房租 / 任务2: 3月5日交房租 |

无法拆分时,按最晚时间创建一条任务。

### 任务内容提取

- 从对话中提取任务标题(taskTitle)
- 去除语气词、感叹词
- 保留核心任务内容

---

### 执行步骤

```
1. 检测用户对话中的时间词语
    ↓
2. 提取并转换时间
    ↓
3. 提取待办事项
    ↓
4. 检查 userToken
    ├── 无 token → 引导登录流程
    ↓
5. 【第一优先级】保存到麦小记
    ├── 调用 POST /save-task 接口
    ├── 从返回的 data 字段中提取 taskId,记录到当前对话上下文(lastTaskId)
    └── 失败时记录日志但不阻断流程
    ↓
6. 【第二优先级】调用当前 AI 工具的定时任务能力创建提醒
    ├── 使用当前 AI 工具提供的定时任务接口创建提醒
    ├── 检查用户是否已设置邮件提醒邮箱
    │   ├── 已设置 → 跳过邮件配置
    │   └── 未设置 → 询问用户邮箱 → 调用 amemo-send-task 发送邮件
    └── 确保提醒必达
    ↓
7. 返回保存结果
```

---

### AI 工具定时任务参数

| 参数 | 类型 | 必填 | 说明 |
|:-----|:----:|:----:|:-----|
| `name` | str | ✅ | 任务名称(与 taskTitle 一致) |
| `schedule.at` | str | ✅ | ISO 8601 格式时间 |
| `payload.text` | str | ✅ | 提醒消息内容 |
| `sessionTarget` | str | ✅ | `"main"` |

> ⚠️ AI 工具定时任务由当前调用此 SKILL 的 AI 工具提供,使用其自身的定时任务接口创建,而非操作系统级别的 cron。

---

### 邮件提醒检查流程

#### 检查方式

读取主 SKILL.md 顶部 `<amemo-user-config>` 块中的 `userEmail` 字段:
- `userEmail` 不为空 → 已配置,直接使用
- `userEmail` 为空字符串 → 未配置,进入询问流程

> **存储规范**:用户首次确认邮箱后,使用文件编辑工具将邮箱写入主 SKILL.md 的 `<amemo-user-config>` 块 `userEmail` 字段,与 `userToken` 同处管理,无需依赖外部配置文件或环境变量。

---

#### 分支处理

**情况零:用户消息中已包含邮箱**

```
用户消息中直接检测到邮箱地址(正则:\S+@\S+\.\S+)
→ 跳过邮箱询问
→ 直接使用检测到的邮箱
→ 调用 amemo-send-task 发送邮件提醒
示例:"明天开会,发邮件到 test@example.com" → 直接使用 test@example.com
```

**情况一:已设置邮件**

```
检测到用户已配置邮件:xxx@example.com
→ 跳过邮箱询问
→ 当前 AI 工具定时任务将在提醒时间自动触发
```

**情况二:未设置邮件**

```
未检测到邮件配置(userEmail 为空)
→ 提示用户:"📧 是否开启邮件提醒?请输入邮箱地址(或直接回复'跳过')"
→ 等待用户输入
    ├── 用户输入有效邮箱
    │   → 写入主 SKILL.md <amemo-user-config> 的 userEmail 字段
    │   → 调用 amemo-send-task 发送测试邮件
    ├── 用户回复"跳过" → 仅保留当前 AI 工具定时任务
    └── 用户输入无效 → 提示重新输入或跳过
```

> 📖 具体请求参数和调用示例,请查阅 `modules/amemo-send-task/SKILL.md`

---

### 响应处理

#### 都成功时

```
✅ 已为您设置提醒:「{taskTitle}」
📅 时间:{taskTime}

📧 麦小记邮件提醒:已保存
⏰ AI 工具定时提醒:已设置

双重保障,确保您不会错过!
```

#### 麦小记成功,AI 工具失败时

```
✅ 已为您保存待办:「{taskTitle}」
📅 时间:{taskTime}
📧 麦小记邮件提醒:已启用

⚠️ AI 工具定时提醒设置失败,但麦小记邮件提醒仍可用。
```

#### 麦小记失败,AI 工具成功时

```
⚠️ 麦小记保存失败,已启用 AI 工具定时提醒
⏰ 提醒时间:{taskTime}
📋 任务:{taskTitle}

当前 AI 工具将在指定时间提醒您。
```

#### 都失败时

```
❌ 提醒设置失败

可能原因:
• 麦小记服务异常
• 当前 AI 工具暂不支持定时任务

请检查服务状态后重试。
```

---

## 调用示例

### 示例一:首次使用(未设置邮件)

**用户输入:**
```
明天早上提醒我早起买胡辣汤
```

**系统处理:**
1. 检测到时间词语:`明天早上`
2. 转换时间:`2026-03-23 07:00:00`(早上默认7点)
3. 提取待办:`早起买胡辣汤`
4. 【第一优先级】调用 `POST /save-task` 保存到麦小记
5. 【第二优先级】调用当前 AI 工具的定时任务能力创建备份提醒
6. 检查邮件配置 → **未设置**
7. 询问用户:

```
✅ 已为您设置提醒:「早起买胡辣汤」
📅 时间:2026-03-23 07:00:00

📧 麦小记邮件提醒:已保存
⏰ AI 工具定时提醒:已设置

💡 是否开启邮件提醒?请输入邮箱地址(或回复"跳过"):
```

**用户回复:** `lockfeel@example.com`

**系统处理:**
8. 验证邮箱格式
9. 保存邮箱配置到本地
10. 调用 `POST /send-task` 发送测试邮件
11. 返回:

```
✅ 邮件提醒已设置!
📧 接收邮箱:lockfeel@example.com
⏰ 提醒时间:2026-03-23 07:00:00

测试邮件已发送,请查收。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 提醒配置总览
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📧 麦小记清单:已保存
⏰ AI 工具定时任务:已设置
📧 邮件提醒:已启用

三重保障,确保您不会错过!
```

---

### 示例二:已设置邮件(自动跳过询问)

**用户输入:**
```
12月25日要送礼物
```

**系统处理:**
1. 检测到时间词语:`12月25日`
2. 转换时间:`2024-12-25 00:00:00`
3. 提取待办:`送礼物`
4. 【第一优先级】调用 `POST /save-task` 保存到麦小记
5. 【第二优先级】调用当前 AI 工具的定时任务能力创建备份提醒
6. 检查邮件配置 → **已设置:lockfeel@example.com**
7. 自动调用 `POST /send-task` 发送邮件提醒
8. 返回:

```
✅ 已为您设置提醒:「送礼物」
📅 时间:2024-12-25 00:00:00

📧 麦小记清单:已保存
⏰ AI 工具定时任务:已设置
📧 邮件提醒:已启用(lockfeel@example.com)

三重保障,确保您不会错过!
```

---

### 示例三:用户选择跳过邮件

**用户输入:**
```
后天要去医院复查
```

**系统处理:**
1-5. (同上,保存到麦小记 + 当前 AI 工具创建定时任务)
6. 检查邮件配置 → **未设置**
7. 询问用户邮箱
8. **用户回复:** `跳过`
9. 返回:

```
✅ 已为您设置提醒:「去医院复查」
📅 时间:2024-03-24 00:00:00

📧 麦小记清单:已保存
⏰ AI 工具定时任务:已设置
📧 邮件提醒:未启用

💡 如需开启邮件提醒,可随时说"设置邮件提醒"
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.