API 文件

Error Codes

目錄


錯誤回應格式

所有 API 錯誤使用統一格式:

{
  "type": "error",
  "data": {
    "error_code": "auth_invalid_api_key",
    "severity": "fatal",
    "message": "API Key 無效",
    "context": "auth",
    "request_id": "req_abc123xyz789",
    "timestamp": "2025-12-25T10:30:45.123Z",
    "details": null
  }
}
欄位類型說明
error_codestring錯誤碼(程式化處理用)
severitystring嚴重程度:fatal / error / warning
messagestring人類可讀的錯誤訊息
contextstring錯誤來源分類
sidint可選。句子級錯誤的句子編號(如該句翻譯失敗);非句子級錯誤不帶
request_idstring請求追蹤 ID
timestampstring錯誤發生時間(ISO 8601)
detailsobject額外除錯資訊;翻譯場景常見 key:providertranslation_languagesource_lang

嚴重程度說明

severity說明處理建議
fatal致命錯誤停止服務,要求重新連線
error操作失敗顯示錯誤提示,允許重試
warning警告顯示警告,不阻斷操作

句子級錯誤判斷規則(重要):當錯誤訊息帶 sid 欄位時,無論 severity 為何,都應視為 sentence-level 錯誤(單句失敗),客戶端只需標記該句失敗並繼續,不應斷線fatal + sid 的組合僅代表「該句嚴重失敗」,session 整體仍可繼續運作。

換句話說,「停止服務/要求重新連線」的處理建議僅適用於不帶 sid 的 session-level fatal 錯誤


認證錯誤

錯誤碼HTTPseverity說明處理建議
auth_missing_api_key401fatal缺少 API Key確認請求包含 API Key
auth_invalid_api_key401fatalAPI Key 無效確認 API Key 正確
auth_invalid_key_format401fatalAPI Key 格式錯誤確認 API Key 格式為 vas_ 開頭
auth_key_expired401fatalAPI Key 已過期重新申請 API Key
auth_key_disabled401fatalAPI Key 已停用聯繫技術支援
auth_user_disabled403fatal帳戶已停用聯繫技術支援
auth_budget_exceeded402fatal月度預算已超額等待下月預算重置或調整預算
auth_account_expired401fatal帳戶服務已到期聯繫技術支援或續約
auth_service_error500fatal認證服務暫時不可用稍後重試

Ticket 認證錯誤

錯誤碼HTTPseverity說明處理建議
ticket_invalid401fatalTicket 無效或已過期重新取得 Ticket
ticket_expired401fatalTicket 已過期重新取得 Ticket
ticket_already_used401fatalTicket 已被使用每個 Ticket 僅能使用一次
ticket_validation_failed401fatalTicket 驗證失敗確認 Ticket 格式正確

工作階段錯誤

錯誤碼HTTPseverity說明處理建議
session_not_found404error工作階段不存在確認工作階段 ID 正確
session_expired400error工作階段已過期重新建立工作階段
session_not_started400error尚未開始錄音先呼叫 start
session_already_paused400warning已經暫停可忽略此錯誤
session_not_paused400warning未暫停可忽略此錯誤
service_shutdownwarning服務即將關閉,請重新連線伺服器 graceful shutdown 時廣播給所有活躍 WebSocket 客戶端;客戶端應顯示維護提示並在短暫退避後重連

語音辨識錯誤

錯誤碼HTTPseverity說明處理建議
stt_init_failed503fatal服務初始化失敗稍後重試
stt_start_failed500fatal無法開始語音辨識稍後重試
stt_auth_failed500fatal服務認證失敗聯繫技術支援
stt_quota_exceeded503fatal使用量已達上限稍後重試
stt_connection_lost500fatal連線中斷停止服務,重新連線

音訊處理錯誤

錯誤碼HTTPseverity說明處理建議
audio_invalid_format400error音訊資料格式錯誤確認音訊格式正確
audio_process_failed500error音訊處理失敗稍後重試
audio_format_unsupported400error不支援的音訊格式使用支援的格式
audio_decode_failed500error音訊解碼失敗確認音訊檔案完整性

語者分離錯誤

錯誤碼HTTPseverity說明處理建議
diarization_init_failed503fatal語者分離服務初始化失敗稍後重試
diarization_start_failed500fatal語者分離會話開始失敗稍後重試
diarization_failed500error語者分離處理失敗稍後重試
diarization_unavailable503fatal語者分離服務不可用確認服務狀態
diarization_multilang_conflict400error語者分離不支援多語言(拒絕開始)請只提供一個來源語言,或關閉語者分離

說話者錯誤

錯誤碼HTTPseverity說明處理建議
speaker_not_found404error找不到指定的說話者確認說話者 ID 正確
speaker_sid_not_found404error找不到指定的句子確認句子 ID 正確
speaker_name_empty400error說話者名稱不能為空提供說話者名稱
speaker_name_duplicate400error說話者名稱已被使用使用不同的名稱
merge_speakers_same_id400error來源和目標語者不能相同提供不同的語者 ID

設定錯誤

錯誤碼HTTPseverity說明處理建議
config_empty400error未提供任何設定提供至少一項設定
config_term_too_long400error術語超過 100 字元縮短術語長度
config_too_many_entries400error術語數量超過 500 個減少術語數量
config_too_many_dict_entries400error翻譯字典超過 50 條目減少字典條目
config_terminology_locked400error術語庫已鎖定(錄製中)先停止錄音再更新

翻譯服務錯誤

錯誤碼HTTPseverity說明處理建議
llm_init_failed503fatal翻譯服務初始化失敗稍後重試
llm_timeout504error翻譯逾時稍後重試
llm_rate_limit429warning請求過於頻繁減少請求頻率
llm_request_failed500error翻譯請求失敗稍後重試
llm_provider_error503error翻譯服務暫時不可用稍後重試
llm_content_filtered400warning內容無法翻譯修改輸入內容
llm_auth_failed500fatal翻譯服務認證失敗聯繫技術支援
llm_deployment_not_found500fatal翻譯服務設定錯誤聯繫技術支援
llm_quota_exceeded503fatal翻譯使用量已達上限稍後重試
translation_service_unavailable-error翻譯服務連續失敗達閾值(session-level,不帶 sid)顯示全域提示「翻譯暫不可用」,不需斷線;STT 仍會繼續運作

translation_service_unavailable 觸發規則(後端行為):

  • 累計型升級llm_timeout / llm_provider_error / llm_rate_limit / llm_request_failed 連續失敗 5 次後升級
  • 立即升級llm_auth_failed / llm_deployment_not_found / llm_quota_exceeded 1 次就升級(設定/帳務問題)
  • 不計入llm_content_filtered(內容問題,非服務問題)
  • 去重:每個 session 只通知一次,任一句翻譯成功則重置;可再次觸發
  • payloadtype: "error"不帶 siddetailsproviderlast_error_codefail_count
  • 觀眾通知:廣播模式下,所有觀眾(不限語言)也會收到此事件(透過 SSE/WS 廣播通道)

TTS 語音合成錯誤

錯誤碼HTTPseverity說明處理建議
tts_init_failed503fatalTTS 服務初始化失敗稍後重試
tts_not_enabled400warningTTS 未啟用確認 start 時設定 tts_enabled
tts_invalid_language400errorTTS 語言無效確認語言在 translation_languages 中
tts_invalid_voice400error無效的語音名稱使用 /api/v1/tts/voices 查詢
tts_segment_not_found400warning找不到指定的句子確認 SID 存在
tts_translation_not_found400warning找不到該語言的翻譯確認該語言的翻譯存在
tts_synthesis_failed500errorTTS 合成失敗稍後重試
tts_voice_not_found404error找不到指定的語音確認語音名稱是否正確
tts_sample_generation_failed500error語音示範生成失敗稍後重試
tts_quota_exceeded503fatalTTS 使用量已達上限稍後重試

錄音錯誤

錯誤碼HTTPseverity說明處理建議
recording_not_found404error找不到錄音確認 taskId 正確
recording_unauthorized403error無權限操作此錄音確認任務屬於該用戶
recording_audio_not_ready422error音檔尚未就緒稍後重試
recording_transcript_not_ready422error逐字稿尚未產生完成或為空確認 processing_status = completed 後再匯出
recording_not_completed422error錄音尚未完成處理;不允許在進行中執行重翻/編輯/重生摘要等待 processing_status = completed 後重試
entry_not_found404error找不到指定的句子(sid 不存在於 transcript)確認 sid 正確
entry_text_empty422error句子原文為空提供非空 original_text
entry_text_too_long422error句子原文超過 2000 字元上限縮短內容後重試
transcript_revision_conflict409error逐字稿已被其他請求修改(樂觀鎖衝突)重新讀取 transcript 取得最新 revision 後重試
invalid_processing_status422error處理狀態不符操作需求見下方「處理狀態不符(invalid_processing_status)」說明

處理狀態不符(invalid_processing_status)

此錯誤碼用於 POST /api/v1/tasks/{taskId}/force-failPOST /api/v1/tasks/{taskId}/retry,當錄音狀態不符操作前提時回應。details 欄位可進一步判別觸發原因:

端點觸發條件details 帶的欄位處理建議
force-fail錄音已是終態(completed / failedcurrent_statusmessage已完成的任務請改用 DELETE /api/v1/tasks/{taskId};已失敗的任務無需再次強制失敗
retry錄音不在 failed 狀態current_statusmessage只有 failed 的任務可 retry
retry音檔或逐字稿尚未上傳完成current_statusaudio_statustranscript_statusmessage請確認來源檔完整;若錄音源頭已損毀請改用 force-fail 收尾

檔案匯入錯誤

錯誤碼HTTPseverity說明處理建議
import_not_found404error找不到匯入任務確認 import_id 正確
import_file_too_large413error檔案大小超過限制壓縮檔案或分割
import_invalid_format415error不支援的音檔格式使用 mp3/wav/m4a 格式
import_download_failed500error下載失敗稍後重試
import_conversion_failed500error轉換失敗確認音檔完整性
import_stt_timeout504error語音辨識逾時稍後重試
import_stt_failed500error語音辨識失敗稍後重試
import_translation_failed500error翻譯處理失敗稍後重試
import_summary_failed500warning摘要生成失敗稍後重試
import_upload_failed500error結果上傳失敗稍後重試
import_callback_failed500warning回報進度失敗不影響處理,可忽略
import_invalid_request500error請求格式錯誤確認請求格式

注意:上傳時若月度預算已超額,會回傳 auth_budget_exceeded 錯誤(HTTP 402)。


儲存錯誤

錯誤碼HTTPseverity說明處理建議
storage_connection_failed503error儲存服務連線失敗稍後重試
storage_upload_failed500error上傳失敗稍後重試
storage_download_failed500error下載失敗稍後重試
storage_queue_full500warning上傳佇列已滿稍後重試

SSE 錯誤

錯誤碼HTTPseverity說明處理建議
sse_transcript_not_found404error找不到逐字稿錄音可能尚未處理完成
sse_missing_target_lang400error缺少目標語言參數提供 targetLang
sse_unsupported_language400error不支援的目標語言使用有效的語言代碼
sse_translation_failed500error翻譯失敗稍後重試
sse_summary_not_found404error找不到摘要該錄音沒有摘要
sse_summary_translation_failed500error摘要翻譯失敗稍後重試
sse_summary_regeneration_failed500error摘要重新生成失敗稍後重試
sse_template_not_found404error找不到摘要模板確認模板 slug 正確

廣播錯誤

錯誤碼HTTPseverity說明處理建議
broadcast_not_enabled500error會話未啟用廣播確認廣播設定
broadcast_token_invalid401fatal分享連結無效停止服務,確認分享連結正確
broadcast_token_revoked401fatal分享連結已撤銷停止服務,重新建立廣播
broadcast_token_already_used422errorToken 已被其他 Session 使用關閉其他分頁後重試
broadcast_token_required400error廣播模式需要 broadcast_token提供 broadcast_token 參數
broadcast_session_not_found404error找不到廣播會話確認廣播 Token 正確
broadcast_session_not_started500error廣播尚未開始等待主講者開始廣播
broadcast_not_ready503warning即時翻譯服務尚未啟動稍後重試
broadcast_session_ended410error廣播會話已結束等待主講者重新開始
broadcast_capacity_exceeded503warning超過最大觀眾數量等待排隊或稍後重試
broadcast_queue_timeout408error排隊逾時重新連線嘗試
broadcast_viewer_kicked403error已被主講者移除聯繫主講者
broadcast_unauthorized401error未授權存取觀眾管理 API確認認證資訊
broadcast_password_required422error此直播需要密碼驗證提供正確密碼
broadcast_password_incorrect422error密碼錯誤確認密碼後重試
broadcast_not_in_standby500warning目前不在預備階段等待主講者切換至預備階段
broadcast_cannot_revoke422error只有 pending 狀態可以撤銷先停止直播再撤銷
broadcast_cannot_start422error無法開始直播確認廣播狀態為 pending
broadcast_already_live422error已有直播進行中先停止當前直播
broadcast_not_live422error目前沒有直播進行中先開始直播
broadcast_max_viewers_exceeded422error觀眾人數上限超過系統最大值調低觀眾人數上限

互譯錯誤

錯誤碼HTTPseverity說明處理建議
conversation_requires_two_languages400error互譯模式需恰好兩個語言提供恰好 2 個 transcription_languages
conversation_languages_identical400error互譯的兩個語言不可相同提供兩個不同的語言
conversation_invalid_language400error無效的互譯語言確認語言是 transcription_languages 之一
conversation_same_language400warning已是當前語言可忽略此警告
conversation_speaking400error正在說話中,無法執行此操作先呼叫 stop_speaking 結束說話
conversation_not_speaking400warning目前未在說話狀態可忽略此警告
conversation_invalid_speaker400error無效的用戶編號使用 1 或 2
conversation_invalid_mode400error無效的對話模式使用 automanual
conversation_not_manual_mode400error此操作僅限手動模式先切換到 manual 模式
conversation_missing_speakers400error互譯模式必須提供 speakers 設定在 start 時提供 speakers 參數
conversation_invalid_speakers400errorspeakers 格式錯誤確認提供恰好 2 個 speaker 設定
conversation_language_change_failed500error語言變更失敗(STT 重建失敗)稍後重試
conversation_language_same_as_peer400error新語言與另一位用戶相同兩位用戶語言不可相同

處理策略:

錯誤碼是否重試處理方式
conversation_requires_two_languages顯示「請提供恰好 2 個語言」
conversation_languages_identical顯示「兩個語言不可相同」
conversation_invalid_language顯示「語言無效」,使用 start 時的語言
conversation_same_language可忽略,已是當前語言
conversation_speaking顯示「請先結束說話」
conversation_not_speaking可忽略,未在說話中
conversation_invalid_speaker顯示「用戶編號無效」
conversation_invalid_mode顯示「無效的模式」
conversation_not_manual_mode顯示「請先切換到手動模式」
conversation_missing_speakers顯示「請提供 speakers 設定」
conversation_invalid_speakers顯示「speakers 格式錯誤」
conversation_language_change_failed稍後重試,若持續失敗請重新建立連線
conversation_language_same_as_peer顯示「不可與另一位用戶語言相同」

conversation_requires_two_languages 錯誤詳情:

此錯誤在 type: "conversation"start action 中,transcription_languages 數量不為 2 時發生。

{
  "type": "error",
  "data": {
    "error_code": "conversation_requires_two_languages",
    "severity": "error",
    "message": "互譯模式需要恰好 2 個語言",
    "context": "session",
    "request_id": "req_abc123xyz",
    "timestamp": "2026-03-04T10:30:45.123Z",
    "details": {
      "received_count": 1,
      "expected_count": 2
    }
  }
}

conversation_languages_identical 錯誤詳情:

此錯誤在 type: "conversation"start action 中,提供的兩個 transcription_languages 相同時發生。

{
  "type": "error",
  "data": {
    "error_code": "conversation_languages_identical",
    "severity": "error",
    "message": "互譯的兩個語言不可相同",
    "context": "session",
    "request_id": "req_abc123xyz",
    "timestamp": "2026-03-04T10:30:45.123Z",
    "details": {
      "languages": ["zh-TW", "zh-TW"]
    }
  }
}

conversation_invalid_language 錯誤詳情:

此錯誤在 switch_language 時,指定的語言不在互譯語言對中。

{
  "type": "error",
  "data": {
    "error_code": "conversation_invalid_language",
    "severity": "error",
    "message": "指定語言不在互譯語言中",
    "context": "session",
    "request_id": "req_abc123xyz",
    "timestamp": "2026-03-04T10:30:45.123Z",
    "details": {
      "language": "ja-JP",
      "conversation_languages": ["zh-TW", "en-US"]
    }
  }
}

摘要錯誤

錯誤碼HTTPseverity說明處理建議
summary_text_empty400error文字內容不能為空提供文字內容
summary_text_too_long400error文字內容超過限制(100,000 字元)縮短文字內容
summary_failed500error摘要生成失敗稍後重試
summary_timeout504error摘要生成逾時稍後重試
custom_prompt_too_long400errorcustom_prompt 超過 2000 字元上限縮短 custom_prompt 字元數
custom_prompt_slug_too_long400errorcustom_prompt_slug 超過 64 字元上限縮短 custom_prompt_slug 字元數
custom_prompt_slug_invalid400errorcustom_prompt_slug 含控制字元移除換行 / Tab / NULL 等控制字元
template_not_found404error指定 slug 的摘要模板不存在或已停用改用 GET /api/v1/summary-templates 列出可用模板

重翻錯誤

錯誤碼HTTPseverity說明處理建議
retranslate_sid_not_found404error找不到指定的句子編號確認 SID 存在
retranslate_session_not_active400errorSession 未啟動確認 Session 狀態
retranslate_no_target_lang400error未提供目標語言提供 target_lang 參數
retranslate_no_text400error未提供要翻譯的文字提供文字內容
retranslate_llm_not_ready503error翻譯服務未就緒稍後重試
retranslate_llm_failed500error翻譯失敗稍後重試
retranslate_failed500error重翻失敗稍後重試

語言切換錯誤

錯誤碼HTTPseverity說明處理建議
switch_language_no_target400error未提供目標語言提供目標語言參數
switch_language_in_progress400warning語言切換進行中等待切換完成
switch_language_same_target400warning目標語言相同可忽略此警告
batch_retranslate_partial_failed500warning部分句子重翻失敗可忽略,不影響主流程
batch_retranslate_failed500warning批次重翻單句失敗(持久化於 transcript.translation_errors失敗 sid 由 failed_sids 匯總回報,可後續單句重試

錄音名稱錯誤

錯誤碼HTTPseverity說明處理建議
set_name_empty400error錄音名稱不能為空提供名稱
set_name_too_long400error名稱超過長度限制縮短名稱
set_name_not_ready400errorSession 未開始先開始語音辨識

通用錯誤

錯誤碼HTTPseverity說明處理建議
invalid_json422errorJSON 格式錯誤確認 JSON 格式正確
invalid_data422error資料格式錯誤確認資料符合 API 規格
validation_failed422error請求驗證失敗確認必填參數已提供
internal_error-error伺服器處理單一 WebSocket 訊息時 panic(已被 recover)連線保持,不應斷線;視為該則訊息失敗,可選擇重試該操作。details.message_typedetails.action 標示失敗的具體操作(詳見 WebSocket API: 單一訊息錯誤
missing_transcription_languages400error未提供語音辨識語言提供 transcription_languages
invalid_transcription_language400error無效的語言代碼使用有效的 BCP 47 語言代碼
invalid_translation_language400error無效的翻譯語言代碼translation_languages 必須使用支援的 BCP 47 代碼(見 languages.md)
too_many_languages400error語言數量超過上限最多 2 種語言
invalid_recording_type400error錄音類型無效使用有效的類型
invalid_summary_template400error摘要模板無效確認模板識別碼
name_too_long400error名稱太長縮短名稱長度

前端錯誤處理範例

function handleError(error) {
  const { error_code, severity, message } = error.data;

  switch (severity) {
    case 'fatal':
      // 致命錯誤:停止服務,顯示錯誤頁面
      showErrorPage(message);
      disconnectWebSocket();
      break;

    case 'error':
      // 操作失敗:顯示錯誤提示,允許重試
      showErrorToast(message);
      break;

    case 'warning':
      // 警告:顯示警告,不阻斷操作
      showWarningToast(message);
      break;
  }

  // 記錄錯誤用於除錯
  console.error(`[${error_code}] ${message}`);
}

版本:V1.5.7 最後更新:2026-05-20

Copyright © 2026