# Contract: IM 平台 extCreate（外部依赖）

**方向**: 平台后端 → IM 平台（出站调用）
**用途**: 为用户创建 IM 账号，获取 apiKey + userId

## 请求

```
POST {im.base-url}{im.create-path}
```

- 测试环境示例：`POST https://test-im.abtim-my.com/bot/extCreate`
- `create-path` 默认 `/bot/extCreate`

### 请求头

| Header | 值 | 来源 |
|--------|----|----|
| `extToken` | `92a88467-6eca-11f1-9dd5-00163e1eec55`（测试） | 配置 `im.ext-token` |

### 请求体（JSON）

```json
{ "nickName": "+88615287406952", "type": 0 }
```

- `nickName`：昵称，由后端取用户 `userName`，无则取 `phone`（哪个有值用哪个）。
- `type`：固定默认 `0`。
- Content-Type：`application/json`。

### 配置项（application.yml 新增段）

```yaml
# IM 即时沟通配置
im:
  base-url: https://test-im.abtim-my.com   # IM 平台根地址（正式环境另行配置）
  ext-token: 92a88467-6eca-11f1-9dd5-00163e1eec55   # 平台级鉴权令牌
  create-path: /bot/extCreate               # 创建用户接口路径
  timeout-ms: 5000                          # 连接/读取超时(毫秒)
```

## 响应

```json
{
  "code": 200,
  "message": "成功",
  "data": {
    "apiKey": "f7a49f9745114462a3333e5698aac9ae",
    "userId": 2069305587785445400
  }
}
```

| 字段 | 类型 | 说明 |
|------|------|------|
| `code` | int | 200 表示成功；非 200 视为失败 |
| `message` | String | 状态描述 |
| `data.apiKey` | String | IM API 密钥（落库 `im_api_key`，返回 APP） |
| `data.userId` | long | IM 用户ID（落库 `im_user_id`，转 String 返回 APP） |

## 处理规则

- **成功**：`code == 200` 且 `data.apiKey`、`data.userId` 均非空 → 取 data 落库并返回。
- **失败**：`code != 200`、data 缺字段、HTTP 非 2xx、超时、网络异常 → 抛异常，不写库，接口返回失败供 APP 重试。
- **幂等**：调用前先查本地 `info_user`，已有 `imApiKey` 则不调用本接口，直接返回。
