# 库存预警 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"} ```