File size: 3,976 Bytes
4e5a541
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# 库存预警 Webhook 与自动导入对接文档

本文档用于指导开发者编写对接程序,实现在收到库存预警通知后自动导入新账号的功能。

## 1. 库存预警 Webhook 通知

当系统内所有活跃 Team 的总剩余车位(`max_members - current_members`)数量低于或等于管理员设置的阈值时,系统会向配置的 Webhook URL 发送 POST 请求。

### 请求信息
- **方法**: `POST`
- **Content-Type**: `application/json`

### 请求 Payload 示例
```json

{

    "event": "low_stock",

    "current_seats": 5,

    "threshold": 10,

    "message": "库存不足预警:系统总可用车位仅剩 5,已低于预警阈值 10,请及时补货导入新账号。"

}

```

---

## 2. 账号自动导入接口

对接程序在收到通知并准备好新账号数据后,可以调用以下接口进行导入。

### 接口信息
- **接口地址**: `/admin/teams/import`
- **方法**: `POST`
- **认证方式**:
  1. **Session 认证**: 浏览器访问时自动使用。
  2. **API Key 认证**: 对接程序建议使用此方式。在 `Header` 中添加 `X-API-Key`- **配置位置**: 管理员后台 -> 系统设置 -> 库存预警 Webhook -> API Key。

### 导入模式 A:单账号导入 (Single)
适用于逐个导入账号。

**认证逻辑(三选一)**:
- 提供 `access_token`: 最直接的方式。
- 提供 `session_token`: 如果 AT 缺失,系统会尝试用 ST 刷新获取 AT。
- 提供 `refresh_token` + `client_id`: 如果上述皆无,系统尝试用 RT 刷新。

**Payload 结构**:
| 字段 | 类型 | 必填 | 说明 |
| :--- | :--- | :--- | :--- |
| `import_type` | string | **是** | 固定为 `"single"` |
| `access_token` | string | 建议 | ChatGPT 的 Access Token (AT) |
| `session_token` | string | 建议 | 用于自动刷新 AT 的 Session Token (ST) |
| `email` | string | 否 | 账号邮箱。若不填,系统将尝试从 AT 中解析。 |
| `account_id` | string | 否 | Team 的 Account ID。若不填,系统将自动获取该账号下所有活跃的 Team。 |
| `refresh_token`| string | 否 | 用于刷新的 Refresh Token (RT) |
| `client_id` | string | 否 | 配合 RT 使用的 Client ID |

---

### 导入模式 B:批量导入 (Batch)
适用于一次性导入多个账号,系统会自动解析文本中的信息。

**Payload 结构**:
| 字段 | 类型 | 必填 | 说明 |
| :--- | :--- | :--- | :--- |
| `import_type` | string | **是** | 固定为 `"batch"` |
| `content` | string | **是** | 包含账号信息的文本内容 |

**批量导入格式说明**:
支持多种分隔符(如 `,``----`)。通常每一行代表一个账号,格式建议为:
`邮箱,Access_Token,Refresh_Token,Session_Token,Client_ID`
*(注:如果某列缺失可以用空占位,如 `email,at,,,`)*

---

## 3. 实现建议 (Python 示例)

```python

import httpx

from fastapi import FastAPI, Request



app = FastAPI()



# 这里的 API Key 需要与管理系统“系统设置”中配置的一致

API_KEY = "YOUR_CONFIGURED_API_KEY"

ADMIN_API_URL = "http://your-manager-domain.com/admin/teams/import"



@app.post("/webhook/low-stock")

async def handle_low_stock(request: Request):

    data = await request.json()

    print(f"收到预警: {data['message']}")

    

    # 逻辑:从其它来源获取新账号数据

    # ...获取逻辑...

    

    new_account = {

        "import_type": "single",

        "email": "new_team@example.com",

        "access_token": "NEW_ACCESS_TOKEN"

    }

    

    # 调用管理系统导入接口

    async with httpx.AsyncClient() as client:

        # 使用 X-API-Key 进行身份验证

        response = await client.post(

            ADMIN_API_URL,

            json=new_account,

            headers={"X-API-Key": API_KEY}

        )

        print(f"导入结果: {response.json()}")

    

    return {"status": "ok"}

```