文件预览

step-7-confirm.md

查看 腾讯出行服务跑腿 Skill 技能包中的文件内容。

文件内容

references/delivery/step-7-confirm.md

# 第七步:支付确认 + 地址保存询问 + 收尾

> **触发**:用户回复"已支付"/"支付完成"/"付了"/"OK"/"好了"

## 7.1 查单确认

```bash
python3 ./scripts/tms_delivery.py state get orderCode
python3 ./scripts/tms_delivery.py mcp-call runerrand_query_order_detail '{"orderCode": "<orderCode>"}'
```

按 `orderStatusText` 分支(**唯一允许读此字段的场景**):

| `orderStatusText` | 动作 |
|---|---|
| ≠ "待支付" | 支付成功 → 展示 `orderSuggestion` + 合并询问地址簿(§7.2) |
| "待支付" | 未支付 → "订单尚未支付成功,请先完成支付后再告诉我" |

> ⚠️ 除 `orderStatusText` 用于分支判断外,**禁读**响应中其他字段(`spName` / `riderName` / `deliveryTime` 等),最终只展示 `orderSuggestion`。

## 7.2 支付成功模版(含第八步询问)

```markdown
✅ 支付成功!

{orderSuggestion}

💬 发送「查跑腿」可随时查看骑手状态

📖 要把这次的地址存进地址簿下次快速使用吗?回复「存」+别名即可(如「存 公司」),不存则可忽略。
```

**立即**执行:

```bash
python3 ./scripts/tms_delivery.py state clear
```

## 7.3 第八步:保存地址到地址簿(用户显式触发)

**触发**:用户在 §7.2 尾部回复 `存 <别名>` 或 `都存 <寄件别名> <收件别名>`。
用户不说"存" → **不再追问**,流程干净结束。

### 流程

1. **数据源**:session 已 clear,从 chat history 最近一次已确认的 sender/receiver 字段提取。找不到 → 婉拒:`不好意思,地址信息已释放,下次下单时可以直接说「寄到[别名]」来保存`
2. **去重**:按 **联系人 + 地址名称** 联合匹配 [PREFERENCE.md 去重规则](../../assets/PREFERENCE.md#去重规则)
3. **意图解析**:
   - `存 公司` → 寄件保存为「公司」
   - `存 公司 张三家` → 寄件「公司」+ 收件「张三家」
   - `都存`(无别名)→ 追问:`请给它们取个别名(寄件+收件用空格分开)`

### 分支动作

| 匹配结果 | 动作 | 回复模版 |
|---|---|---|
| 命中 + 字段齐全 | 跳过保存 | `ℹ️ 该地址已在地址簿中(别名「{已存在别名}」),无需重复保存。` |
| 命中 + 经纬度/手机号为空 | 只补空字段 | `✅ 已为地址簿「{已存在别名}」补充经纬度/手机号。` |
| 未命中 | 新增一行 | 见下方新增模版 |

**❌ 禁止新增重复行**

### 新增行字段 + 回复模版

| 别名 | 地址名称 | 经度 | 纬度 | 联系人 | 手机号 |
|------|----------|------|------|--------|--------|
| {别名} | {addrName} | {longitude} | {latitude} | {name} | {phone} |

> 经纬度必须**完整精度**(如 `116.273514`,不四舍五入)

```markdown
✅ 地址已保存到地址簿
- **{别名}**:{addrName}(联系人:{name} {phone})

💡 下次使用:说「从{别名}寄」或「寄到{别名}」即可快速填入。
```

> 所有模版严格按原文输出,禁止开场白/删改字段/加 emoji(见 [SKILL.md §4](../../SKILL.md#output-leak-firewall))。