# 任务系统 Flutter 对接

## 获取任务页

地址：`GET /api/v1/tasks/tabs`

参数：无。需要登录态。

返回值：

```json
{
  "sections": [
    {
      "section": "daily",
      "server_time_ms": 1781097600000,
      "next_refresh_at_ms": 1781136000000,
      "items": [
        {
          "task_id": "task_xxx",
          "task_type": "daily",
          "category": "gift",
          "audience_type": "all",
          "metric_type": "gift_spend_coin",
          "title": "普通礼物消耗金币",
          "description": "",
          "icon_key": "gift",
          "icon_url": "",
          "action_type": "gift_panel",
          "action_param": "",
          "action_payload": {},
          "action_payload_json": "{}",
          "dimension_filter_json": "{}",
          "target_value": 10000,
          "target_unit": "coin",
          "progress_value": 1200,
          "reward_coin_amount": 200,
          "status": "in_progress",
          "claimable": false,
          "task_day": "2026-06-11",
          "server_time_ms": 1781097600000,
          "next_refresh_at_ms": 1781136000000,
          "sort_order": 10,
          "version": 1
        }
      ]
    },
    {
      "section": "exclusive",
      "server_time_ms": 1781097600000,
      "next_refresh_at_ms": 1781136000000,
      "items": []
    }
  ],
  "server_time_ms": 1781097600000,
  "next_refresh_at_ms": 1781136000000
}
```

说明：

- `section=daily` 是每日任务，按服务端 UTC 00:00 刷新。
- `section=exclusive` 是专属/新手任务，`task_day` 固定为 `lifetime`。
- `claimable=true` 显示领取按钮。
- `status=claimed` 显示已领取。
- 其他状态显示去完成按钮，按 `action_type` 跳转。

## 领取任务奖励

地址：`POST /api/v1/tasks/claim`

参数：

```json
{
  "task_id": "task_xxx",
  "task_type": "daily",
  "task_day": "2026-06-11",
  "command_id": "app-generated-uuid"
}
```

返回值：

```json
{
  "claim_id": "tclaim_xxx",
  "task_id": "task_xxx",
  "task_type": "daily",
  "task_day": "2026-06-11",
  "reward_coin_amount": 200,
  "status": "granted",
  "wallet_transaction_id": "wtx_xxx",
  "granted_at_ms": 1781097600000,
  "claimed": true
}
```

说明：

- `command_id` 由 App 每次点击领取时生成；同一次重试继续使用同一个 `command_id`。
- 每日任务只能领取当天 `task_day`。
- 专属任务领取时传列表里的 `task_day`，通常是 `lifetime`。

## 跳转类型

| action_type | action_param |
| --- | --- |
| `none` | 不跳转 |
| `room_random` | 随机进入一个有人的房间；没有有人的房间时进入随机房间 |
| `room_random_game` | `game_id`，进入房间后打开指定游戏 |
| `wallet` | 打开钱包 |
| `gift_panel` | 进入房间后打开礼物面板 |
| `gift_panel_specific` | `gift_id`，进入房间后打开礼物面板并定位指定礼物 |

## 相关 IM

无。任务进度来自服务端事实事件，领取结果以接口返回和 `wallet_transaction_id` 为准。
