错误
当请求失败时,Shisa 服务会通过 HTTP 状态码和描述问题所在的 JSON 主体来通知该问题。本指南涵盖你会遇到的状态码、承载详情的 JSON 结构,以及在哪里查找各端点的错误表。
HTTP 状态码
请先检查响应状态——它会告诉你问题的类别以及如何解决。
| Status | Meaning | How to resolve |
|---|---|---|
400 | 错误请求——参数无效或缺失 | 检查请求主体和必填字段;具体字段请参见错误消息。 |
401 | 身份验证失败 | 验证你的 API 密钥和各服务的请求头形式。请参见 身份验证。 |
429 | 超出速率限制 | 放慢速度并以退避方式重试。请参见 速率限制。 |
500 | 服务器错误或服务未就绪 | 短暂延迟后重试;如果持续存在,请通过 平台 联系支持。 |
JSON 错误结构
错误主体在各服务中有两种结构。请始终先读取 HTTP 状态,然后解析主体以获取人类可读的 error 字段。
简单错误
某些端点会返回一个紧凑的主体,包含数字 code 和 error 消息。例如,一个未附带音频的 ASR 请求:
{
"code": 400,
"error": "No audio data provided"
}
身份验证错误
身份验证失败(见于 ASR 和 TTS)会返回一个更丰富的主体,其中还标识了中间件和一个命名的错误类型:
{
"context": ["authMiddleware"],
"code": 104,
"name": "ErrAuthenticationFailed",
"error": "Authentication error: Invalid token"
}
Invalid token 错误几乎总是意味着该服务的 Authorization 请求头有误——例如 ASR 或翻译缺少 shsk: 前缀。请查阅 各服务请求头约定。
提示
在解析主体之前,请始终检查 response.ok(或状态码)。429 或 500 可能不包含你成功路径所期望的 JSON,因此先按状态分支可以避免出现第二个令人困惑的解析错误。
在实践中,先检查状态再解析:
const response = await fetch(url, options);
if (!response.ok) {
const detail = await response.json().catch(() => ({}));
throw new Error(`Shisa request failed (${response.status}): ${detail.error ?? 'unknown error'}`);
}
const data = await response.json();
response = requests.post(url, headers=headers, json=payload)
if not response.ok:
detail = response.json() if response.content else {}
raise RuntimeError(f"Shisa request failed ({response.status_code}): {detail.get('error', 'unknown error')}")
data = response.json()
各服务错误详情
错误字段和确切的消息因端点而异。有关特定端点的错误表和请求要求,请参见每项服务的 API 参考: