# 领券引导窗频控（prompt 族）

> 所属:Coupon 组（前缀 `/api/v1/coupon`） | 鉴权:无（按 device_id 判断，MVP 阶段） | [← 返回 API 索引](../README.md)

领券引导窗频控：今天这台设备**这个 App** 已弹过/领过/拒过 → 不再弹。各 App 独立（美团弹过不压淘宝/京东）。

---

## GET /prompt/should-show — 是否还应弹引导窗

客户端切到外卖 App 时查。

### 入参（query）

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `device_id` | string | ✅ | 设备 ID |
| `package` | string | ❌ | App 包名（默认 ""，老客户端兼容全局态） |

Mock 请求:
```
GET /api/v1/coupon/prompt/should-show?device_id=android_abc&package=com.sankuai.meituan
```

### 出参

响应 `200`:`CouponPromptShouldShowOut`

| 字段 | 类型 | 说明 |
|---|---|---|
| `should_show` | bool | 今天是否还应弹引导窗 |

Mock 出参:
```json
{"should_show": true}
```

---

## POST /prompt/shown — 引导窗弹出即上报

客户端弹出引导窗那刻调 → 记一条今日 engagement（shown），今天这个 App 不再自动弹。频控主判据管跨重装。

### 入参

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `device_id` | string | ✅ | 设备 ID |
| `package` | string | ✅ | App 包名 |
| `user_id` | int \| null | ❌ | 登录用户 ID |

Mock 入参:
```json
{
  "device_id": "android_abc123def456",
  "package": "com.sankuai.meituan",
  "user_id": 42
}
```

### 出参

```json
{"ok": true}
```

---

## POST /prompt/dismiss — 用户拒绝/关闭引导窗

客户端点关闭时调 → 记 dismissed，今天这个 App 不再弹。

### 入参

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `device_id` | string | ✅ | 设备 ID |
| `package` | string | ❌ | App 包名（默认 ""） |
| `user_id` | int \| null | ❌ | 登录用户 ID |

Mock 入参:
```json
{
  "device_id": "android_abc123def456",
  "package": "com.sankuai.meituan"
}
```

### 出参

```json
{"ok": true}
```

---

## POST /prompt/reset — 重置今日引导窗状态

删这台设备今天的 engagement → 今天又能弹。开发测频控用。

### 入参

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `device_id` | string | ✅ | 设备 ID |
| `package` | string | ❌ | App 包名（默认 ""） |
| `user_id` | int \| null | ❌ | 登录用户 ID |

Mock 入参:
```json
{
  "device_id": "android_abc123def456"
}
```

### 出参

```json
{"ok": true}
```

---

## 说明
- 频控按 `(device, package, 日)`，各 App 独立
- 弹出即占用今天一次（管跨重装），后续领取/拒绝再升级 type
- user_id 可选，登录态带上就一并记（资产留痕）
- MVP 不鉴权
