📊 Status API (Uptime Kuma)
AWMC TEAM 使用 Uptime Kuma 监控所有服务的运行状态。我们提供了公开的 API 端点,方便开发者获取实时的服务状态数据。
💡 免密钥访问
本页列出的所有 API 均为公开端点。你不需要任何 API Key 或鉴权即可直接通过浏览器或脚本请求。
1. 状态页配置与结构
该接口用于获取状态页的标题、公告(Incidents)、维护计划以及分组结构。
GETMaimai (主站)
/api/status-page/maimai▼
- 端点:
GET /api/status-page/[slug] - 完整示例:
https://status.awmc.cc/api/status-page/maimai
📢 公告与故障信息 (Incidents)
💡 重要提示
你可以通过解析 incidents 数组来获取当前状态页上的置顶公告或故障说明。
json
{
"incidents": [
{
"id": 16,
"style": "info",
"title": "公告标题",
"content": "公告的 Markdown 内容",
"pin": true,
"active": true,
"createdDate": "2026-03-28 07:46:17"
}
]
}🛠️ 分组与监控列表 (Public Groups)
json
{
"publicGroupList": [
{
"id": 1,
"name": "舞萌服务组",
"monitorList": [
{
"id": 12,
"name": "Maimai DX Proxy",
"type": "http"
}
]
}
]
}2. 实时状态与心跳记录
由于基础接口不含实时状态,你需要调用专门的心跳接口。
GETMaimai 心跳
/api/status-page/heartbeat/maimai▼
- 端点:
GET /api/status-page/heartbeat/[slug] - 完整示例:
https://status.awmc.cc/api/status-page/heartbeat/maimai
返回示例 (JSON)
json
{
"heartbeatList": {
"12": [
{
"status": 1,
"time": "2026-03-29 15:28:18",
"msg": "200 OK",
"ping": 32
}
]
}
}⚠️ 状态码解析
在 heartbeatList 中,status 字段代表了服务的当前健康状况:
1: 正常 (Up) —— 服务响应正常,一切 OK。0: 离线 (Down) —— 服务已崩溃或无法访问。2: 待定/异常 (Pending/Warning) —— 服务虽然在线但可能响应极慢或返回了非预期结果。3: 维护中 (Maintenance) —— 服务处于计划内的维护阶段(通常会跳过通知)。
3. 计划维护 (Maintenance)
当服务器有计划内的停机维护时,你可以通过 maintenanceList 获取。
📅 如何解析维护信息?
如果 maintenanceList 不为空,你可以获取以下关键信息:
title: 维护的标题。description: 维护的详细描述。start_date: 维护开始时间。end_date: 维护预计结束时间。
json
{
"maintenanceList": [
{
"id": 5,
"title": "数据库例行维护",
"active": true,
"interval": 0
}
]
}🌐 智能状态预览 (Smart Live Demo)
以下是使用上述 API 接口实时抓取的 maimai 状态预览:
💡 智能排序逻辑
- 业务优先:按 NET服务器 > 机台服务器 > 会员服务器 > 二维码服务器 > ALL.NET服务器 排序。
- 运营商优先:自动识别你的 国内运营商(联通/电信/移动),将匹配你线路的服务器置顶。
🔍 正在识别你的运营商并同步服务状态...
💻 开发者如何实现“运营商优先排序”?
在开发状态页时,你可以参考以下核心代码逻辑。关键在于对服务器名称进行关键词匹配。
javascript
// 1. 获取用户运营商信息 (支持跨域的方案)
async function getUserISP() {
try {
// 推荐使用支持 HTTPS 的 myip.ipip.net (纯文本格式)
const res = await fetch('https://myip.ipip.net/');
const text = await res.text();
if (text.includes('联通')) return '联通';
if (text.includes('电信')) return '电信';
if (text.includes('移动')) return '移动';
return '国内线路';
} catch (e) {
return '识别失败';
}
}
// 2. 定义业务类型排序权重 (数值越大越靠前)
const TYPE_WEIGHT = {
"NET服务器": 500,
"机台服务器": 400,
"会员服务器": 300,
"二维码服务器": 200,
"ALL.NET服务器": 100
};
// 3. 执行智能排序算法 //
const userISP = await getUserISP();
monitors.sort((a, b) => {
let scoreA = 0;
let scoreB = 0;
// A. 根据业务类型加分 //
Object.keys(TYPE_WEIGHT).forEach(key => {
if (a.name.includes(key)) scoreA += TYPE_WEIGHT[key];
if (b.name.includes(key)) scoreB += TYPE_WEIGHT[key];
});
// B. 如果名称包含用户运营商,大幅加分 (置顶)
if (a.name.includes(userISP)) scoreA += 1000;
if (b.name.includes(userISP)) scoreB += 1000;
return scoreB - scoreA; // 分数高的排前面
});🛠️ 接入建议
如果你想在自己的 App 中实现类似“服务状态灯”的功能:
- 先获取
status-page/maimai拿到publicGroupList(确定有哪些服务)。 - 再获取
status-page/heartbeat/maimai拿到最新的status(点亮对应的灯)。 - 别忘了 检查
incidents数组,如果有active: true的公告,可以弹窗提醒用户。