Spaces:
Paused
Paused
库存预警 Webhook 与自动导入对接文档
本文档用于指导开发者编写对接程序,实现在收到库存预警通知后自动导入新账号的功能。
1. 库存预警 Webhook 通知
当系统内所有活跃 Team 的总剩余车位(max_members - current_members)数量低于或等于管理员设置的阈值时,系统会向配置的 Webhook URL 发送 POST 请求。
请求信息
- 方法:
POST - Content-Type:
application/json
请求 Payload 示例
{
"event": "low_stock",
"current_seats": 5,
"threshold": 10,
"message": "库存不足预警:系统总可用车位仅剩 5,已低于预警阈值 10,请及时补货导入新账号。"
}
2. 账号自动导入接口
对接程序在收到通知并准备好新账号数据后,可以调用以下接口进行导入。
接口信息
- 接口地址:
/admin/teams/import - 方法:
POST - 认证方式:
- Session 认证: 浏览器访问时自动使用。
- 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 示例)
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"}