<a id="error-handling-main"></a>
## 异常处理流程

### 1. 处理原则
- 异常流程用于处理脚本执行失败、参数缺失、环境不一致等非主流程场景。
- 出现异常时，先停止当前主流程，进入对应修复流程；修复完成后再返回主流程继续。

### 2. 错误码映射（必须）

脚本返回非 `0` 退出码时，必须按下表执行：

| 退出码 | 错误类型 | 处理动作 |
|------|--------|--------|
| `1` | token 缺失/未配置 | 直接执行本文件「Token 缺失错误」流程 |
| `2` | 接口基地址未配置 | 中断流程并提示配置缺失；不继续业务调用 |
| `3` | HTTP 错误 | 中断当前步骤，向用户返回接口错误并提示稍后重试 |
| `4` | 网络错误 | 中断当前步骤，提示网络异常并引导重试 |

### 3. Token 缺失错误（必须）
当任意脚本返回 token 缺失/未配置相关错误（例如 token not found、token missing、未找到 token）时，必须按以下步骤处理：

1. 立即中断当前流程，不再继续当前打车步骤。
2. 直接切换到 [Quick Start 流程](./quick-start-workflow.md#quick-start-main) 执行修复。
3. 在 Quick Start 内按顺序完成：
   - `python3 ./scripts/tms_takecar.py preflight`
   - 若 token 缺失，引导用户获取 TOKEN
   - `python3 ./scripts/tms_takecar.py save-token xxxxxx`
   - 再次执行 `python3 ./scripts/tms_takecar.py preflight` 验证生效
4. 修复步骤结束后，以 `preflight` 结果为准：
   - 返回码 `0` 且 `next_actions == ["ready"]` 视为修复成功
   - 返回码 `1` 视为仍未就绪，继续按 `next_actions` 补齐

### 4. 返回主流程
- 若修复成功（`preflight` 返回 `0`），返回用户原始意图对应流程继续执行。
- 若修复失败（`preflight` 返回 `1`），明确告知失败原因与下一步需要用户提供的信息。

### 5. 下单业务错误处理（必须）

当 `create-order` 接口返回成功（退出码 `0`）但业务结果异常时，必须按以下规则处理：

| 判定条件 | 含义 | 处理动作 |
|---------|------|--------|
| `data.orderId` 不为空 | 下单成功 | 更新 `~/.config/tms-takecar/state.json` 中的 `orderId`，告知用户下单成功 |
| `data.orderId` 为空 且 `code == 101` | 有未完成订单 | 告知用户存在未完成订单，需先完成或取消后再下单；中断下单流程 |
| `data.orderId` 为空 且 `code != 0` | 其他业务失败 | 展示 `message` 告知用户失败原因，引导用户稍后重试 |
| `data.orderId` 为空 且 `code == 0` | 异常：成功但无订单ID | 告知用户下单异常，建议稍后重试 |


好的，搜索结果返回了多个选项。由于出发地在北京，目的地应该是"北京华侨城"或者"华侨城·大剧院"这两个在北京的选项。根据技能流程的模版要求，我需要向用户展示第一页的选项让用户选择：