---
name: xpeng-china-delivery
description: |
  小鹏汽车交付周期监控工具。XPeng China delivery lead time monitor.
  查询指定小鹏车型（一个或多个）不同配置版本的交付周期（单位：周）。
  Query XPeng (Xpeng) vehicle model delivery lead time / wait time in weeks for China market.

  当用户提到以下任何场景时，都应使用此 Skill：
  - "小鹏交付周期"、"小鹏交付时间"、"小鹏提车周期"、"小鹏提车时间"
  - "XPeng交付"、"小鹏交付监控"、"小鹏交付周期监控"
  - "查询小鹏车型交付"、"小鹏各配置交付周期"
  - "小鹏购车要等多久"、"小鹏订车到提车要多久"、"小鹏什么时候能提车"
  - "小鹏GX交付"、"G7等几周"、"小鹏M03多久能到"
  - "/xpeng-china-delivery"
  - XPeng delivery time, XPeng delivery lead time, XPeng delivery wait, XPeng wait time
  - XPeng delivery period, XPeng how long to deliver, XPeng delivery estimate
  - When will my XPeng be delivered, XPeng delivery schedule, XPeng delivery weeks
  - 当用户询问小鹏汽车某个/某些车型的交付等待时间、提车周期、订车到交付需要多久时，即使没有明确说"交付周期"，也使用此 Skill
  - When a user asks about XPeng vehicle delivery time, wait time, or lead time for any model, even without explicitly saying "delivery", use this Skill
---

# 小鹏汽车交付周期监控 Skill

## 目标

查询指定小鹏车型各配置版本的交付周期信息，以表格形式输出。交付周期单位为**周**。

## 技术实现

所有网络请求通过 `scripts/` 目录下的 Node.js 脚本执行，使用 Bash 工具运行 `node <script>.js`。不使用 Python、curl 或其他方式。

脚本目录：`.claude/skills/xpeng-china-delivery/scripts/`

| 脚本文件 | 用途 | 用法 |
|---------|------|------|
| `fetch_car_series.js` | 获取全部车型列表 | `node fetch_car_series.js` |
| `fetch_car_versions.js` | 获取指定车型的配置版本列表 | `node fetch_car_versions.js <carSeriesCode>` |
| `fetch_delivery_period.js` | 查询指定配置的交付周期 | 见下方详细说明 |

### fetch_delivery_period.js 用法

该脚本根据车型类型使用不同的 API 策略：

| 模式 | 用法 | 适用车型 | 输出格式 |
|------|------|---------|---------|
| Case 1 单版本 | `node fetch_delivery_period.js <carVersionCode> <carSeriesCode>` | GX、M03、P7 系列 | `OK\|min\|max\|carName` |
| Case 2 单版本 | `node fetch_delivery_period.js <carVersionCode> <carSeriesCode>` | 其他车型 | `OK\|min\|max\|carName` |
| Case 2 批量 | `node fetch_delivery_period.js <carSeriesCode> --all` | 其他车型（推荐） | `versionCode\|OK\|min\|max\|carName`（每行一个版本） |

脚本自动根据 carSeriesCode 判断使用 Case 1 还是 Case 2。

## 核心流程

### 步骤一：获取全部车型列表

运行 `scripts/fetch_car_series.js`，解析输出获取全部车型列表。

输出格式（每行一个）：`序号|carSeriesCode|carSeriesName`

### 步骤二：识别用户想监控的车型

根据用户的问题识别用户想要监控哪几个（一个或多个）`carSeriesCode`。匹配时支持用户说车型名称（如"G6"）或完整名称（如"2026款G6"），做模糊匹配。

如果用户没有提供具体车型，或提供的车型名无法匹配，则使用 AskUserQuestion 工具展示全部车型列表并让用户选择：

> | 序号 | carSeriesCode | carSeriesName |
> |------|--------------|---------------|
> | 1    | GX           | GX            |
> | 2    | M03_2026     | M03           |
> | ...  | ...          | ...           |
>
> 请告诉我您想查询哪些车型的交付周期？可以提供车型名称或序号，支持多个（如：1,3,5 或 GX,G7）。

### 步骤三：获取每个车型的配置版本列表

针对用户选中的每个 `carSeriesCode`，运行 `scripts/fetch_car_versions.js <carSeriesCode>`。

输出格式（每行一个）：`carVersionCode|carVersionName`

### 步骤四：查询每个配置版本的交付周期

根据车型是否为 GX/M03/P7 系列，使用不同的查询方式。脚本会根据 `carSeriesCode` 自动判断。

#### Case 1：GX/M03/P7 系列车型

针对每个 `carVersionCode`，运行：
```
node scripts/fetch_delivery_period.js <carVersionCode> <carSeriesCode>
```

**脚本内部逻辑：**
1. 请求 `listSpecGroupAndSpecList?carVersionSn=${carVersionCode}` 获取可选配置规格列表
2. 遍历每个配置组，在 `specList` 中找到 `isDefault=1` 的默认规格，收集其 `carSpecificationCode`
3. 组成排序后的 `carSpecificationCode` 列表，作为该车型的默认配置规格（列表可以为空，表示无默认选中配置）
4. 请求 `listCarInfoList?carVersionSn=${carVersionCode}` 获取 SKU 列表
5. 对每个 SKU，提取其 `specList` 中所有 `specCode` 组成列表并排序
6. 找到 `specCode` 列表与默认配置列表完全匹配的 SKU（应唯一）
7. 输出该 SKU 的 `minDeliveryPeriod`、`maxDeliveryPeriod` 和 `carName`

输出格式：`OK|minDeliveryPeriod|maxDeliveryPeriod|carName` 或 `NO_DATA|0|0|` 或 `ERROR|0|0|`

#### Case 2：其他车型

**推荐方式（批量查询）：** 运行一次即可获取该车型所有版本的交付周期：
```
node scripts/fetch_delivery_period.js <carSeriesCode> --all
```

**脚本内部逻辑：**
1. 请求 `allInOne?carSeriesSn=${carSeriesCode}` 获取全部数据
2. 从响应中提取 `carSpecGroupVoMap`（配置规格）和 `carInfoVoMap`（SKU 信息），两者均以 `carVersionCode` 为 key
3. 对每个 `carVersionCode`：
   - 从 `carSpecGroupVoMap` 中找到默认配置规格（同 Case 1 的匹配逻辑）
   - 从 `carInfoVoMap` 中找到匹配的 SKU
   - 输出该版本的交付周期

输出格式（每行一个版本）：`carVersionCode|OK|minDeliveryPeriod|maxDeliveryPeriod|carName` 或 `carVersionCode|NO_DATA|0|0|`

**备选方式（单版本查询）：** 也可按版本逐一查询：
```
node scripts/fetch_delivery_period.js <carVersionCode> <carSeriesCode>
```
输出格式同 Case 1：`OK|minDeliveryPeriod|maxDeliveryPeriod|carName` 或 `NO_DATA|0|0|` 或 `ERROR|0|0|`

#### 如何选择 Case

脚本自动判断，规则如下：
- **Case 1**：`carSeriesCode` 以 `GX`、`M03`、`P7`（不区分大小写）开头
- **Case 2**：其他所有车型

### 步骤五：输出结果

以表格形式输出每个车型下的交付周期。脚本输出中最后一个 `|` 后的字段即为 `carName`，**必须将完整的 carName 原样输出到表格的"车辆名称"列，不得省略或截断**。

| 车型 | 配置版本 | 车辆名称 | 最短交付周期 | 最长交付周期 |
|------|---------|---------|------------|------------|
| GX   | 1585 四驱 Max | GX 1585 四驱 Max 仰望绿 | 4周 | 6周 |
| GX   | 665 Max | GX 665 Max 星云白 | 6周 | 8周 |

## 执行约束

1. **严格遵守流程**：按步骤一至步骤五顺序执行，不跳过任何步骤。
2. **单位为周**：交付周期单位是**周**，不要理解为"天"或做任何转换。
3. **默认配置匹配**：交付周期取默认配置规格对应 SKU 的数据，不是取 SKU 列表第一个元素。
4. **统一使用 Node.js 脚本**：所有请求通过 `scripts/` 下的脚本执行，不使用 curl 或 Python。
5. **Case 2 优先批量**：对于非 GX/M03/P7 车型，优先使用 `--all` 模式一次获取全部版本，减少 API 请求次数。
6. **容错**：某个车型请求失败时，输出该车型查询失败，继续查询其他车型，不中断整个流程。
7. **完整输出 carName**：脚本输出的最后一个字段是 `carName`，输出表格时必须将其完整填入"车辆名称"列，不得省略、截断或简写。

## 异常处理

| 异常场景 | 处理方式 |
|---------|---------|
| navigationBar API 请求失败 | 报告网络错误，无法继续 |
| 用户提供的车型不在列表中 | 提示用户重新选择，展示完整列表 |
| 配置页 HTML 中未找到版本信息 | 该车型输出"暂无配置信息" |
| listSpecGroupAndSpecList / allInOne API 返回失败 | 该配置输出"查询失败"，继续其他配置 |
| listCarInfoList API 返回空 data | 该配置输出"N/A" |
| 默认配置未匹配到任何 SKU | 该配置输出"N/A" |
| listCarInfoList API 请求失败 | 该配置输出"查询失败"，继续其他配置 |
