# 小医技能测试文档

> 版本：v1.0  
> 创建时间：2026-04-24  
> 测试范围：小医全部核心技能

---

## 一、测试准备

### 1.1 测试账号准备

| 角色 | contactId | 手机号 | 说明 |
|------|-----------|--------|------|
| owner | 7v1xmj9q | 18059139520 | 高祖峰（**唯一 owner**） |
| employee（待添加） | - | 13515003820 | 郑小丹（全科医生） |
| employee（待添加） | - | 13705949274 | 黄达（全科医生） |
| employee（待添加） | - | 13959111325 | 高巧津（全科医生） |
| other-contacts | abc12345 | 15960106499 | 陈志彬（测试医生） |

**重要说明：**
- **owner 仅高祖峰一人**（contactId: 7v1xmj9q）
- 其他任何人（包括杨小明、运营人员、全科医生）都不是 owner
- 杨小明是普通员工，不是 owner

### 1.2 测试环境检查

- [ ] 确认 API 配置正常（AppID: 9002021）
- [ ] 确认 employee_list.json 已更新
- [ ] 确认 skills 目录完整（18 个技能）
- [ ] 确认 tickets/ 目录可写

---

## 二、新用户流程测试

### 2.1 新用户添加小医

**测试场景：** 首次添加小医的医生

**测试步骤：**
1. 新 contactId 发送第一条消息（如"你好"）
2. 检查是否自动发送欢迎词
3. 检查是否创建 other-contacts/{contactId}/ 目录

**预期结果：**
- ✅ 发送标准欢迎词（从 doctor-faq.md 读取）
- ✅ 创建档案目录
- ✅ 等待用户回复

**欢迎词内容检查：**
- [ ] 包含"您好！我是您的健康之路专属小助手"
- [ ] 包含"数字专科"征集活动介绍
- [ ] 包含 3 个代表活动速览
- [ ] 包含小程序链接

---

### 2.2 新用户信息收集

**测试场景：** 用户提供个人信息

**测试步骤：**
1. 小医询问："请问怎么称呼您？"
2. 用户回复姓名
3. 小医请求提供：手机号、医院、科室、省份
4. 用户提供完整信息

**预期结果：**
- ✅ 记录用户姓名
- ✅ 请求 4 项信息（手机号、医院、科室、省份）

---

### 2.3 身份核验

**测试场景：** 调用 API 核验手机号

**测试步骤：**
1. 用户提供手机号
2. 调用 get-doctor-uid 技能
3. 检查核验结果

**预期结果：**
- ✅ 核验通过 → 建档并标记 verified=true
- ✅ 核验失败 → 引导用户完成医生认证

---

## 三、活动查询技能测试

### 3.1 activity-query（活动查询）

**触发指令：**
- "有什么活动"
- "我能参加什么"
- "查询活动"

**测试步骤：**
1. 用户发送"有什么活动"
2. 调用 activity-query 技能
3. 返回活动列表

**预期结果：**
- ✅ 返回可参与活动列表
- ✅ 包含活动名称、截止时间、奖励
- ✅ 不泄露系统信息（userid、API 地址等）

---

### 3.2 activity-reg-link（活动报名链接查询）

**触发指令：**
- "{活动名称} 报名链接"
- "我要报名{活动名称}"
- "怎么报名{活动名称}"

**测试步骤：**
1. 用户发送"健康科普报名链接"
2. **调用 activity-reg-link 技能**（关键检查点）
3. 传入 activity_name 参数
4. 等待技能返回
5. 返回真实报名链接

**预期结果：**
- ✅ **必须调用 activity-reg-link 技能**
- ✅ 返回真实报名链接（小程序链接）
- ✅ 包含活动信息（截止时间、奖励、要求）
- ❌ **严禁编造链接或活动信息**

**测试用例：**
| 输入 | 预期输出 |
|------|----------|
| "健康科普报名链接" | 调用 activity-reg-link，返回真实链接 |
| "我要报名肿瘤板块" | 调用 activity-reg-link，返回真实链接 |
| "肿瘤整合医学健康管理报名链接" | 调用 activity-reg-link，返回真实链接 |

---

## 四、审核查询技能测试

### 4.1 activity-content-audit-query（业务审核查询）

**触发指令：**
- "查询业务审核"
- "我的审核情况"
- "微科普怎么还没审核"

**测试步骤：**
1. 用户查询审核状态
2. 调用 activity-content-audit-query 技能
3. 检查返回结果

**预期结果：**
- ✅ 返回审核状态列表
- ✅ 包含活动名称、业务类型、数量、状态

---

### 4.2 待审核自动转接测试（state=1）

**测试场景：** 查询结果包含 state=1（待审核）

**测试步骤：**
1. 用户查询审核状态
2. 技能返回 state=1
3. **自动调用 ticket-escalation 技能**
4. 创建工单（tickets/目录）
5. 通知全科医生团队
6. 告知用户已转接

**预期结果：**
- ✅ 检测到 state=1 立即触发转接
- ✅ 创建工单文件（ticket-{YYYYMMDD}-{序号}.json）
- ✅ 工单类型标记为"审核催促"
- ✅ 发送通知给全科医生团队（郑小丹、黄达、高巧津）
- ✅ 告知用户已转接催促

**工单内容检查：**
```json
{
  "ticketId": "ticket-20260424-xxx",
  "type": "审核催促",
  "priority": "高",
  "assignedTo": "全科医生团队",
  "user": { "name", "phone", "doctorUid" },
  "auditInfo": { "activity", "businessType", "count", "submitTime" },
  "status": "pending",
  "createdAt": "时间戳"
}
```

**通知内容检查（发送给全科医生）：**
- [ ] 包含用户信息（姓名、手机号、医生 UID）
- [ ] 包含待审核内容（活动、业务类型、数量、提交时间）
- [ ] 包含工单 ID 和时间
- [ ] **不包含时效要求**（已去掉"1-2 个工作日"）

**告知用户内容检查：**
- [ ] 说明待审核详情
- [ ] 告知已转接全科医生团队
- [ ] 提供工单号
- [ ] **不包含时效承诺**

---

## 五、订单查询技能测试

### 5.1 order-query（提现订单查询）

**触发指令：**
- "我的提现"
- "订单状态"
- "查询提现记录"

**测试步骤：**
1. 用户查询提现订单
2. 调用 order-query 技能
3. 返回订单列表

**预期结果：**
- ✅ 查询近 3 个月订单
- ✅ 过滤成功/处理中/审核中的订单
- ✅ 按创建时间倒序
- ✅ 显示最新 10 条
- ✅ 不泄露 userid、doctorUid 等系统信息

---

### 5.2 withdraw-order-query（提现订单查询增强）

**测试步骤：**
1. 用户查询提现订单
2. 调用 withdraw-order-query 技能
3. 返回订单列表

**预期结果：**
- ✅ 同 order-query
- ✅ 支持手机号/UserId 查询

---

## 六、工单转接技能测试

### 6.1 ticket-escalation（问题转接）

**触发场景：**
- 用户问题超出小医能力范围
- 用户明确要求"转人工"
- 验证码问题重试后仍无法解决
- 审核状态 state=1（待审核）

**测试步骤：**
1. 触发转接条件
2. 创建工单（tickets/目录）
3. 通知运营人员（翁锦秀、陈能）
4. 告知用户已转接

**预期结果：**
- ✅ 创建工单文件
- ✅ 发送通知给运营人员
- ✅ 告知用户已转接

---

### 6.2 转接失败通知陈雅希

**测试场景：** 运营人员不可达/转接失败

**测试步骤：**
1. 尝试转接运营人员失败
2. **自动通知陈雅希**
3. 记录工单

**预期结果：**
- ✅ 发送通知给陈雅希（15859099730）
- ✅ 通知内容包含医生信息和问题描述
- ✅ 同一医生同一问题 24 小时内只通知一次

**通知内容检查：**
```
【小医转接异常通知】
医生：{医生姓名}
问题：{问题简述}
转接失败原因：{原因}
时间：{时间}
请及时处理，谢谢！
```

---

## 七、活动 FAQ 测试

### 7.1 activity-faq（活动常见问题解答）

**触发指令：**
- "怎么报名"
- "多久到账"
- "审核要多久"

**测试步骤：**
1. 用户提问常见问题
2. 匹配 FAQ 知识库
3. 返回标准答案

**预期结果：**
- ✅ 返回准确的 FAQ 答案
- ✅ 包含小程序链接（如适用）
- ✅ 微信友好格式（纯文本、用【】强调）

---

## 八、权限控制测试

### 8.1 技能详情保密测试

**测试场景：** 非 owner 用户询问技能/技术信息

**测试用例：**
| 用户角色 | 提问 | 预期回复 |
|----------|------|----------|
| employee | "你有什么技能？" | 引导到业务功能，不透露技能清单 |
| other-contacts | "这个功能怎么实现的？" | 标准回复，不透露实现细节 |
| other-contacts | "API 地址是什么？" | "抱歉，这是系统内部信息，无法提供。" |
| owner | "看一下 skill-manifest.json" | ✅ 允许查看 |

**预期结果：**
- ✅ 非 owner 询问技能详情 → 拒绝并引导
- ✅ 非 owner 询问 API/配置 → 拒绝
- ✅ owner 询问 → 允许查看

---

### 8.2 系统信息保密测试

**禁止泄露的信息：**
- userid / doctorUid
- 服务器 IP
- 密钥 / secret
- APIURL / prixUrl
- appid
- UID

**测试步骤：**
1. 用户直接询问系统信息
2. 检查回复是否泄露

**预期结果：**
- ✅ 不返回任何系统内部信息
- ✅ 标准回复："抱歉，这是系统内部信息，无法提供。"

---

## 九、记忆系统测试

### 9.1 SESSION_STATE 加载

**测试场景：** 不同角色用户加载各自的 SESSION_STATE

**测试步骤：**
1. owner 会话 → 加载 memory/SESSION_STATE.md
2. employee 会话 → 加载 employees/{姓名}_{contactId}/{姓名}_{contactId}_SESSION_STATE.md
3. other-contacts 会话 → 加载 other-contacts/{contactId}/{contactId}_SESSION_STATE.md

**预期结果：**
- ✅ 正确加载对应用户的 SESSION_STATE
- ✅ 不跨用户加载记忆
- ✅ 文件不存在时跳过，不报错

---

### 9.2 WAL Protocol 测试

**触发条件：**
- ✏️ 纠正 — "不对"、"其实应该"、"错了"
- 📍 专有名词 — 人名、医院名、药品名
- 🎨 偏好 — "我喜欢/不喜欢"
- 📋 决策 — "决定做 X"
- 🔢 具体数值 — 数字、日期、ID

**测试步骤：**
1. 用户触发 WAL 条件（如"不对，应该是..."）
2. 检查是否先写入 SESSION_STATE.md
3. 检查是否再回复用户

**预期结果：**
- ✅ 先写 SESSION_STATE.md
- ✅ 再回复用户

---

## 十、微信友好格式测试

### 10.1 消息格式检查

**测试场景：** 所有发送给用户的消息

**检查项：**
- [ ] 不用 ### 标题（微信不能渲染）
- [ ] 用【】强调重点
- [ ] 用空行分段
- [ ] 用 1. 2. 3. 或 • 列清单
- [ ] 用 Emoji 增加可读性
- [ ] 一段不超过 3 行（医生很忙）

**预期结果：**
- ✅ 所有消息符合微信友好格式

---

## 十一、测试报告模板

### 11.1 测试结果汇总

| 测试模块 | 测试用例数 | 通过数 | 失败数 | 通过率 |
|----------|------------|--------|--------|--------|
| 新用户流程 | 3 | - | - | - |
| 活动查询 | 2 | - | - | - |
| 审核查询 | 2 | - | - | - |
| 订单查询 | 2 | - | - | - |
| 工单转接 | 2 | - | - | - |
| 权限控制 | 2 | - | - | - |
| 记忆系统 | 2 | - | - | - |
| 微信格式 | 1 | - | - | - |
| **总计** | **16** | - | - | - |

---

### 11.2 缺陷记录

| 编号 | 模块 | 问题描述 | 严重程度 | 状态 |
|------|------|----------|----------|------|
| 001 | activity-reg-link | 编造报名链接，未调用技能 | 高 | 已修复 |

---

### 11.3 测试结论

- [ ] 所有核心功能测试通过
- [ ] 无高严重程度缺陷
- [ ] 可以上线使用

---

## 十二、快速测试命令

### 12.1 新用户测试
```
# 模拟新用户添加
contactId: new12345
发送："你好"
预期：欢迎词 + 信息收集
```

### 12.2 活动查询测试
```
发送："有什么活动"
预期：活动列表

发送："健康科普报名链接"
预期：调用 activity-reg-link，返回真实链接
```

### 12.3 审核查询测试
```
发送："查询业务审核"
预期：审核状态列表

发送："微科普怎么还没审核"
预期：检测到 state=1 → 自动转接全科医生团队
```

### 12.4 订单查询测试
```
发送："我的提现"
预期：提现订单列表
```

### 12.5 权限测试
```
# 非 owner 用户
发送："你有什么技能？"
预期：引导到业务功能，不透露技能清单

发送："API 地址是什么？"
预期："抱歉，这是系统内部信息，无法提供。"
```

---

_测试文档版本：v1.0_  
_最后更新：2026-04-24_
