API 文件

錯誤碼完整參考

目錄


錯誤回應格式

所有 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:provider、translation_language、source_lang

嚴重程度說明

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

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

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

另外,部分不帶 sid 的 fatal 錯誤也不會關閉連線(例如 auth_quota_exceeded、plan_feature_not_allowed);是否需要重新連線,以各錯誤碼的說明為準。


認證錯誤

錯誤碼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_account_blocked403fatal帳戶已封鎖聯繫技術支援
auth_ip_not_allowed403fatal來源 IP 不被允許確認從已授權的 IP 位址存取
auth_insufficient_credit402fatal點數不足儲值點數後再使用
auth_quota_exceeded402fatal可用點數不足,錄音未開始(WebSocket start 時判斷:即時錄音為不足一分鐘,廣播為已用盡;連線不會關閉;details.remaining_budget 與 details.budget_scope 見下方「可用額度欄位」)儲值後重新送出 start,或等待額度週期重置
auth_account_expired401fatal帳戶服務已到期。目前不會由任何端點回傳,保留供未來使用聯繫技術支援或續約
auth_service_error500fatal認證服務暫時不可用(WebSocket start 時發生則錄音不會開始,連線不會關閉)稍後重試

方案限制錯誤

適用於使用「吃到飽方案」的 API Key(v1.9.0 新增;方案說明見 計費說明 – 吃到飽方案)。被下列錯誤擋下時,可透過 GET /api/v1/me/plan 查詢「我的方案含什麼、離上限多遠、限制何時恢復」。

錯誤碼HTTPseverity說明處理建議
plan_feature_not_allowed403fatal吃到飽方案不含使用中的功能改用方案內功能或升級方案;可用 GET /api/v1/me/plan 查方案內容
concurrency_limit_reached—error同一把 API Key 的併發錄音達上限連線不會關閉;名額在伺服端送出 task_complete 時釋放,收到後即可開始下一場
daily_limit_disconnect—error已達方案用量門檻,本場錄音中止可立即開始新的錄音(同一條連線上重新開始時,上一場處理完成後才會收到 session_started)
daily_limit_reached—fatal用量已達方案上限依方案規則重置(每日上限隔日重置)後恢復
plan_daily_limit_reached402error已達方案每日用量上限(REST 事前閘)依方案規則重置後再取得 Ticket 或上傳匯入

plan_feature_not_allowed 的兩個發生時點(WebSocket):

  • start 被拒:方案不含請求中啟用的功能時,start 直接被拒;連線不會關閉,可調整參數後重新 start。
  • 錄音中檢查發現:例如中途開啟方案沒有的功能,下一分鐘開始前檢查發現後該場錄音中止。

即時錄音的用量上限在每一分鐘開始前判斷,達到時下一分鐘不會開始、也不計入用量。同一把 API Key 同時進行多場錄音時,達到定期中斷的門檻後,每一場都會在各自的下一分鐘開始前中斷。

REST 端點回 HTTP 403 的場景:POST /api/v1/broadcasts(方案 key 建立廣播——廣播一律不含在吃到飽方案內)、POST /api/v1/auth/tasks/{taskId}/subtitle-feed-token 與 subtitle-share(方案不含浮動字幕)、POST /api/v1/imports(方案不含匯入)。

plan_daily_limit_reached(HTTP 402)出現在 POST /api/v1/auth/ticket 與匯入上傳:已達方案每日硬上限時,事前擋下新的錄音/匯入。 同一個字串也會出現在 POST /api/v1/imports/check-quota 的 data.reason(該端點為唯讀查詢,回 HTTP 200,不是錯誤)。

too_many_languages 語意擴充(v1.9.0):details.max 除了系統上限(轉錄語言 10 種),也可能來自方案的「同時識別語言數上限」;details 帶 max 與 received。


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;若是重複送出 stop 可忽略
session_already_paused400warning已經暫停可忽略此錯誤
session_not_paused400warning未暫停可忽略此錯誤
service_shutdown—warning服務即將關閉,請重新連線服務正常關閉(例如維護更新)時廣播給所有進行中的連線。沒有在錄音的連線會在通知後約 2 秒關閉;錄音中的連線可以把這一場錄完,stop 後照常收到 task_complete,之後連線才會關閉。服務關閉期間送出 start 也會收到這個錯誤:錄音不會開始,之後連線會關閉。客戶端應顯示維護提示,連線關閉後短暫退避再重連;start 被拒的,重連後再重新 start
resume_token_invalid—error續接憑證無效或不存在斷線續接失敗;重取 Ticket 後送全新 start,但使用者已結束錄音時請勿自動開始新的錄音(詳見連線文件 - 斷線續接)
resume_grace_expired—error續接寬限期已逾時同上
resume_ownership_mismatch—error續接憑證歸屬不符同上
resume_unavailable—error續接暫不可用(此連線無法續接原場次;原場次已送出 stop 或已被結束、仍在處理中時也會收到)同上
set_speaking_speed_failed400error語速變更失敗(重建語音辨識時失敗)稍後重試

語音辨識錯誤

錯誤碼HTTPseverity說明處理建議
stt_init_failed503fatal服務初始化失敗稍後重試
stt_start_failed500fatal無法開始語音辨識稍後重試
stt_auth_failed500fatal服務認證失敗聯繫技術支援
stt_quota_exceeded402fatal可用點數不足(即時錄音:錄音已結束,於下一分鐘開始前判斷,details.remaining_budget 與 details.budget_scope 見下方「可用額度欄位」;匯入、重新翻譯、重新生成摘要等:請求未執行,見各端點說明)儲值後再試
stt_connection_lost500fatal連線中斷停止服務,重新連線
stt_silence_timeout-fatal連續一段時間(預設 15 分鐘,可用 start 的 silenceTimeoutSeconds 調整)沒有偵測到語音,錄音已自動結束(details.silence_seconds 為判定的秒數)。暫停中、斷線等待續接的期間與廣播不計時,詳見 長時間沒有語音時自動結束確認麥克風有收到聲音;要繼續請重新開始錄音。此為 WebSocket 事件,無 HTTP 狀態碼
stt_silence_warning-warning連續一段時間沒有偵測到語音,錄音即將自動結束(details.silenceSeconds 為已持續的秒數,details.remainingSeconds 為剩下的秒數)。錄音照常進行提醒使用者;辨識出文字或恢復錄音就會重新計時。此為 WebSocket 事件,無 HTTP 狀態碼

錄音被結束後重新開始:收到 stt_quota_exceeded、stt_silence_timeout、plan_feature_not_allowed、daily_limit_disconnect 等使錄音結束的錯誤後,可以在同一條連線上立即送出 start,但要等上一場處理完成(收到 status: "ended")後才會收到 session_started,視摘要長度可能需要數秒到數十秒,請勿視為逾時。


音訊處理錯誤

錯誤碼HTTPseverity說明處理建議
audio_invalid_format400error音訊資料格式錯誤確認音訊格式正確
audio_process_failed500error音訊處理失敗稍後重試
audio_format_unsupported400error不支援的音訊格式使用支援的格式
audio_decode_failed500error音訊解碼失敗確認音訊檔案完整性。即時錄音中:錄音不會結束;WebM 請重新送出全新容器(含檔頭)即可恢復,無法解碼的期間不計費

語者分離錯誤

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

多聲道錯誤

適用於多聲道模式(recognition_mode: "multi_channel",v1.10.0 新增;參數與聲道操作說明見 WebSocket API 參考 – 語音翻譯,計費見 計費說明)。以下皆為 WebSocket 錯誤,無對應 HTTP 狀態碼。

錯誤碼HTTPseverity說明處理建議
channel_mode_required—error多聲道模式必須指定 channel_mode帶 channel_mode(per_channel 或 shared)
invalid_channel_mode—error無效的 channel_mode可用值為 per_channel 與 shared;shared 在此環境未開通時也回此錯並附 message,請改用 per_channel
channels_required—error多聲道模式必須提供 channels提供 1–8 路 channels(含主講者,慣例 channel_id: 1)
too_many_channels—error聲道數量超過上限減少聲道數,上限 8;details 帶 max/received
invalid_channel_id—error無效或重複的 channel_idchannel_id 必須是 1–8 的整數且不可重複
channel_language_required—error每個聲道必須指定恰好一種語言每路 transcription_languages 提供恰好 1 個語言
channel_language_not_allowed—errorshared 模式不支援各聲道獨立語言shared 模式的語言為全場共用:start/add_channel 的聲道不可帶 transcription_languages,錄音中也不能用 set_channel_language 變更
channel_language_mismatch—error聲道語言與 transcription_languages 不一致各路語言的聯集必須與 session 級 transcription_languages 一致
channel_id_required—error多聲道模式必須指定 channel_id多聲道下 audio 每幀必帶 channel_id;聲道操作亦必帶
unknown_channel_id—error未知的 channel_id確認該路已在 start 或 add_channel 宣告且未被移除
multichannel_tts_not_allowed—error多聲道模式不支援語音合成關閉 tts_enabled
multichannel_broadcast_not_allowed—error廣播不支援多聲道模式廣播請改用其他辨識模式
multichannel_requires_pcm—error多聲道模式僅支援 PCM 音訊格式audio_format 使用 "pcm"(16kHz/16bit/mono)
multichannel_switch_language_not_allowed—error多聲道模式不支援 switch_language語言綁定在聲道上,改用 set_channel_language
channel_id_in_use—error此 channel_id 已使用過,不可重複使用聲道編號不可重用(含已移除的聲道),add_channel 請換新編號
channel_remove_not_allowed—error此聲道不可移除最後一路聲道不可移除;要結束錄音請用 stop
channel_action_while_paused—error暫停中無法增減聲道,請先恢復錄音先 resume 再執行聲道操作
not_multi_channel_session—error本場錄音不是多聲道模式聲道操作僅適用 recognition_mode: "multi_channel" 的錄音
channel_rebuild_too_frequent—error該聲道設定變更過於頻繁,請稍後再試同一路聲道 5 秒內僅接受一次設定變更;details 帶 cooldown_seconds

複用既有錯誤碼的多聲道語意:

  • invalid_recognition_mode:多聲道功能未在此環境開通時,start 帶 recognition_mode: "multi_channel" 會回此錯;details 帶 field: "recognition_mode" 與 received_value。
  • invalid_parameter:參數組合衝突時回傳——multi_channel 同時指定 speaker_diarization(多聲道本身即為語者分離);type: "conversation" 搭配 multi_channel;set_channel_language 換成該路現行語言、transcription_languages 帶多於一個語言、或 transcription_languages 與 language 同時提供且不一致;channels[].speaker_name 超長或含控制字元。
  • plan_feature_not_allowed(details.field: "max_stt_streams"):start 或 add_channel 的聲道數超過吃到飽方案的路數上限;details 另帶 max 與當前路數。
  • too_many_languages:add_channel/set_channel_language 引入新語言,使同時識別語言數超過平台上限(10 種)或方案上限;details 帶 max/received/language。

另有 speaker_op_not_allowed_multi_channel(REST 為 HTTP 422):多聲道錄音的語者由聲道決定,語者操作僅開放改名;重新歸屬(reassign)與合併(merge)在錄音中(WebSocket)與錄音後(REST)皆會回此錯,見說話者錯誤。


說話者錯誤

錯誤碼HTTPseverity說明處理建議
speaker_not_found422error找不到指定的說話者確認說話者 ID 正確
speaker_sid_not_found422error找不到指定的句子確認句子 ID 正確
speaker_name_empty422error說話者名稱不能為空提供說話者名稱
speaker_name_duplicate422error說話者名稱已被使用使用不同的名稱
merge_speakers_same_id400error來源和目標語者不能相同提供不同的語者 ID
speaker_op_not_allowed_multi_channel422error多聲道錄音不支援此語者操作(v1.10.0 新增)多聲道的語者由聲道決定,僅 rename 可用;reassign/merge 會回此錯

設定錯誤

錯誤碼HTTPseverity說明處理建議
config_empty400error未提供任何設定。空物件 {} 不算「有提供」提供至少一項有內容的設定;清空字庫請送 {"語言代碼": []}
config_term_too_long400error術語超過 100 字元縮短術語長度
config_too_many_entries400error術語筆數超過 500,或模糊詞校正規則超過 4000(皆為所有語言合計,非每種語言各算)。details 帶 count 與 max,模糊詞另帶 field減少術語或校正規則
config_too_many_dict_entries400error翻譯字典單一語言超過 3000 條目(details.language 指出是哪個語言)減少該語言的字典條目
config_invalid_entry400error某一條術語或校正規則的欄位不合法。details 帶 language、index、field、reason 供定位(部分情境另帶 variant_index),並視 reason 附上 max_length 或 count/max依 details 指出的位置修正該條目
config_ignored_in_start-warningstart 內帶的字庫已被忽略,請改用 config action 設定(details.ignored_fields 列出被忽略的欄位)。start 仍會成功改用 config action 送字庫
config_too_many_languages400error字庫某個區塊的語言代碼數量超過上限(details 帶 field/count/max)。僅字庫驗證 API 使用減少該區塊的語言代碼數
config_payload_too_large413error請求本體超過大小上限。僅字庫驗證 API 使用分批送出,或減少字庫內容

錄音類型限制錯誤

record(純錄音)為輕量純語音辨識類型:不支援翻譯與 TTS,摘要需 opt-in(帶 summary_template 或 summary_mode=custom 才生成)。以下錯誤碼在違反這些限制時於 start 階段回傳(自 v1.7.0 起)。

錯誤碼HTTPseverity說明處理建議
record_translation_not_allowed400error純錄音類型不支援翻譯移除 translation_languages,或改用 transcribe 類型
record_tts_not_allowed400error純錄音類型不支援語音合成移除 tts_enabled,或改用支援 TTS 的類型
record_summary_requires_template400error純錄音類型開啟摘要需帶模板提供 summary_template 或使用 summary_mode=custom

record_translation_not_allowed 亦會在事後對 record 錄音呼叫重翻端點(逐字稿重翻、摘要翻譯)時回傳。


翻譯服務錯誤

錯誤碼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_exceeded402fatal翻譯使用量已達上限稍後重試
translation_service_unavailable-error翻譯服務連續失敗達閾值(session-level,不帶 sid)顯示全域提示「翻譯暫不可用」,不需斷線;STT 仍會繼續運作

本表的 HTTP 欄是語意標註,不是實際回應狀態碼。 翻譯服務錯誤絕大多數以串流事件(SSE event: error/WebSocket type: error)送出, 而串流本身一律是 HTTP 200。此欄標的是「這個錯誤在語意上屬於哪一類」, 供您決定重試策略:4xx 表示需要調整輸入、5xx 與 429 表示可稍後重試。 請以 error_code 與 severity 判讀,不要依賴此欄比對實際收到的狀態碼。

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 只通知一次,任一句翻譯成功則重置;可再次觸發
  • payload:type: "error",不帶 sid,details 含 provider、last_error_code、fail_count
  • 觀眾通知:廣播模式下,所有觀眾(不限語言)也會收到此事件(透過 SSE/WS 廣播通道)

TTS 語音合成錯誤

錯誤碼HTTPseverity說明處理建議
tts_init_failed503fatalTTS 服務初始化失敗稍後重試
tts_not_enabled400warningTTS 未啟用確認 start 時設定 tts_enabled
tts_invalid_language400errorTTS 語言無效確認語言在 translation_languages 中
tts_invalid_voice400error無效的語音名稱。僅由即時語音通道回傳——建立廣播時不驗證語音名稱,無效的值要到開播時才會浮現送出前先以 GET /api/v1/tts/voices 確認語音名稱
sentence_not_found—warning找不到指定的句子確認 SID 存在
translation_not_found—warning找不到該語言的翻譯確認該語言的翻譯存在
tts_translation_not_found—errorTTS SSE 串流中,該句缺少該語言的翻譯。以 tts_error 事件送出,會中止整段串流確認該語言的翻譯已完成且內容非空
tts_connection_failed—error語音合成連線失敗稍候重試
tts_timeout—error語音合成逾時稍候重試
tts_synthesis_failed500errorTTS 合成失敗稍後重試
tts_voice_not_found404error找不到指定的語音,或該語音所屬語言無法作為 TTS 目標語言以 GET /api/v1/tts/voices 列出的語音為準
tts_sample_generation_failed500error語音示範生成失敗稍後重試

HTTP 欄為 — 表示該錯誤碼不是以 HTTP 狀態碼回傳,而是在連線建立後,透過串流中的 error 或 tts_error 事件送出。


錄音錯誤

錯誤碼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 後重試
retranslate_segmentation_required422error全文重翻:逐字稿太長,一次請求翻不完(details.sentenceCount 為要翻的句數,details.maxSentences 為上限)。在串流開始前回傳,不扣點帶 segmented=1 分段重翻,見 重新翻譯 SSE
task_already_processing409error同一筆任務仍有處理作業尚未結束,本次請求未執行稍候再送出同一個請求
invalid_processing_status422error處理狀態不符操作需求見下方「處理狀態不符(invalid_processing_status)」說明

可用額度欄位(remaining_budget 與 budget_scope)

auth_quota_exceeded 與 stt_quota_exceeded 的 details 會帶這兩個欄位。

欄位說明
remaining_budget最近一次結算時的可用額度;尚未結算過時,是連線當下的值。budget_scope 為 api_key_unlimited 時固定為 null
budget_scope說明上面那個數字屬於誰。目前有兩個值,見下表
budget_scope意思同一則 details 裡的 remaining_budget
api_key_credit本次請求所用的 API Key 採點數制,數字是這把 Key 目前可動用的點數數字
api_key_unlimited本次請求所用的 API Key 綁著方案,沒有「剩餘點數」這個概念null

重要:remaining_budget 是「發出這次請求的 API Key」可動用的額度,不是終端使用者的餘額。 若您是代其他使用者呼叫本服務的整合方,請不要把這個數字直接顯示給您的終端使用者—— 它反映的是您自己那把金鑰的狀態。

注意:廣播為獨立付費:即使金鑰綁著方案,廣播仍依實際用量扣點,因此廣播場次收到這兩顆碼時 budget_scope 會是 api_key_credit、remaining_budget 是真實的可用點數。

處理狀態不符(invalid_processing_status)

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

端點觸發條件details 帶的欄位處理建議
force-fail錄音已是終態(completed / failed)current_status、message已完成的任務請改用 DELETE /api/v1/tasks/{taskId};已失敗的任務無需再次強制失敗
DELETE任務仍在處理中(非 completed / failed),或該任務的匯入仍在處理中task_id、current_status、message等任務完成或失敗後再刪;卡住的錄音可先 force-fail,匯入仍在處理中則需等匯入結束。批次刪除不回此錯誤,改列在 skipped_task_ids
retry錄音不在 failed 狀態current_status、message只有 failed 的任務可 retry
retry音檔或逐字稿尚未上傳完成current_status、audio_status、transcript_status、message請確認來源檔完整;若錄音源頭已損毀請改用 force-fail 收尾

任務仍在處理中(task_already_processing)

POST /api/v1/tasks/{taskId}/retry 在同一筆任務仍有處理作業尚未結束時回應。與 invalid_processing_status 的差別在於:這是暫時性的——任務狀態不會被本次請求改動,等前一次處理結束後,同一個請求即可成功。

端點觸發條件details 帶的欄位處理建議
retry同一筆任務仍有處理作業尚未結束task_id、message稍候再送出同一個請求,不需更動任何參數

注意:任務失敗後系統會自動再試數次,這段期間 processing_status 可能已經是 failed,但重試請求仍會收到 409 —— 代表自動重試尚未結束。此時不需要做任何處置,隔幾分鐘再送出同一個請求即可。


檔案匯入錯誤

錯誤碼HTTPseverity說明處理建議
import_not_found404error找不到匯入任務確認 import_id 正確
import_file_too_large413error檔案大小超過限制壓縮檔案或分割
import_invalid_format415error不支援的音檔格式使用 mp3/wav/m4a 格式
import_recognition_mode_unsupported422error匯入不支援此辨識模式(只支援 single、multi_speaker)。details 帶 field 與 supportedModes改用 single 或 multi_speaker
import_duration_out_of_range-error音檔時長超出允許範圍(最短 1 秒、最長 10 小時)。以匯入進度的 failed 事件回報改用符合長度的音檔,或先切分後分次匯入
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請求格式錯誤確認請求格式
go_service_error-error處理服務暫時無法使用稍後重新匯入
dispatch_failed-error無法派發處理任務稍後重新匯入
job_failed-error處理任務失敗稍後重新匯入
PROCESSING_TIMEOUT-error匯入等待或處理的時間過長,已標為失敗稍後重新匯入
unknown_error-error匯入處理失敗稍後重新匯入;持續失敗請提供 import_id 洽客服

注意:上傳時若點數不足,會回傳 auth_insufficient_credit 錯誤(HTTP 402)。

HTTP 欄為 - 的錯誤碼不是以 HTTP 狀態碼回傳,而是出現在匯入失敗時的 error_code:匯入查詢 API、匯入進度 SSE 的 failed 事件,以及 import.failed Webhook。對應的 error_message 是固定的一般說明,不含內部細節;需要排查時請提供 import_id。


儲存錯誤

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

SSE 錯誤

錯誤碼HTTPseverity說明處理建議
sse_transcript_not_found404error找不到逐字稿錄音可能尚未處理完成
sse_translation_failed500error翻譯失敗稍後重試
sse_summary_not_found404error找不到摘要該錄音沒有摘要
sse_summary_translation_failed500error摘要翻譯失敗(重新翻譯摘要、摘要翻譯)。details.original_error 為 Translation timed out 時表示逾時稍後重試
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_started503error廣播尚未開始等待主講者開始廣播
broadcast_not_ready503warning即時翻譯服務尚未啟動稍後重試
broadcast_session_ended410error廣播會話已結束等待主講者重新開始
broadcast_capacity_exceeded503warning超過最大觀眾數量等待排隊或稍後重試
broadcast_queue_timeout—error排隊逾時重新連線嘗試
broadcast_viewer_kicked403error已被主講者移除聯繫主講者
broadcast_unauthorized401error未授權存取觀眾管理 API確認認證資訊
broadcast_password_required401error此直播需要密碼驗證提供正確密碼
broadcast_password_incorrect401error密碼錯誤確認密碼後重試
broadcast_not_in_standby500warning目前不在預備階段等待主講者切換至預備階段
broadcast_standby_warning—warning預備階段即將達到時間上限(預設 30 分鐘;details 帶 standbySeconds、remainingSeconds、limitSeconds),廣播照常進行提示主講者開播或重新開始
broadcast_standby_timeout—fatal預備階段已達時間上限,這一場已自動結束(details 帶 standbySeconds、limitSeconds)。預備階段沒有錄音,不會收到 task_complete重新取得 Ticket 並送出 start,見 廣播功能指南
broadcast_cannot_revoke422error只有 pending 狀態可以撤銷先停止直播再撤銷
broadcast_cannot_start422error無法開始直播確認廣播狀態為 pending
broadcast_already_live422error已有直播進行中先停止當前直播
broadcast_not_live422error目前沒有直播進行中先開始直播
validation_failed422errormax_viewers 超過帳戶觀眾上限(訊息會帶出實際上限)調低 max_viewers

HTTP 欄為 — 表示該錯誤碼不是以 HTTP 狀態碼回傳,而是在連線建立後,透過串流中的 error 或 tts_error 事件送出。


互譯錯誤

錯誤碼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無效的對話模式使用 auto 或 manual
conversation_not_manual_mode400error此操作僅限手動模式先切換到 manual 模式
conversation_missing_speakers400errorV1.24.0 起 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否V1.24.0 起不再回傳,不需處理
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文字內容超過限制(200,000 字元)縮短文字內容
summary_failed500error摘要生成失敗稍後重試
summary_timeout504error摘要生成逾時稍後重試
summary_prompt_too_long400errorsummary_prompt 超過 3000 字元上限縮短 summary_prompt 字元數
summary_prompt_slug_too_long400errorsummary_prompt_slug 超過 64 字元上限縮短 summary_prompt_slug 字元數
summary_prompt_slug_invalid400errorsummary_prompt_slug 含控制字元移除換行 / Tab / NULL 等控制字元
summary_mode_field_mismatch400/422error摘要模式(summary_mode)與摘要欄位的組合不符:必填欄位沒帶(WebSocket 中只含空白字元視同沒帶),或帶了該模式禁帶的欄位依模式規則調整 summary_template、summary_prompt、summary_prompt_slug,見摘要客製化
template_not_found404error指定 slug 的摘要模板不存在或已停用改用 GET /api/v1/summary-templates 列出可用模板
summary_idempotency_key_conflict409error同一 idempotency_key 已用於不同的請求內容——content 或任一參數不同(Ad-hoc 摘要 v1.9.1 新增;摘要翻譯 v1.17.0 起也使用)換新的 idempotency_key;重試請帶與原請求完全相同的欄位
summary_insufficient_credit—warning可用點數不足,未產生摘要(即時錄音因可用點數不足而結束,或結束時可用點數不足以支付摘要費用;以 summary_error 事件通知,逐字稿與錄音照常保存)儲值後可透過重新生成摘要取得

重翻錯誤

錯誤碼HTTPseverity說明處理建議
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目標語言相同可忽略此警告
switch_language_op_required400error多語言場次未帶 op(v1.6.7)帶 op: "add" 或 op: "remove"
switch_language_already_exists400warning新增的語言已在翻譯清單(v1.6.7)可忽略此警告
switch_language_not_in_session400error移除的語言不在翻譯清單(v1.6.7)確認語言代碼
switch_language_last_language400error至少需保留一種翻譯語言(v1.6.7)不可移除最後一種語言
batch_retranslate_partial_failed500warning部分句子重翻失敗可忽略,不影響主流程
batch_retranslate_failed500warning批次重翻單句失敗(持久化於 transcript.translation_errors)失敗 sid 由 failed_sids 匯總回報,可後續單句重試

錄音名稱錯誤

錯誤碼HTTPseverity說明處理建議
set_name_empty400error錄音名稱不能為空提供名稱
set_name_too_long400error名稱超過長度限制縮短名稱

通用錯誤

錯誤碼HTTPseverity說明處理建議
invalid_json400/422errorJSON 格式錯誤。即時服務網域上的端點回 400,其餘回 422確認 JSON 格式正確
invalid_data422error資料格式錯誤確認資料符合 API 規格
validation_failed422error請求驗證失敗確認必填參數已提供
invalid_parameter400error參數的值或組合不合法,details.field 標示是哪一個參數。例如 WebSocket start 的 silenceTimeoutSeconds 或 broadcast_phase 值不合法、非 broadcast 類型帶 broadcast_token、name 超過 60 字元、summary_language 超過 20 字元,或 options.speaking_speed、options.profanity_handling、conversation_mode、tts_mode 的值不在可用清單內(details.valid_values 列出可用的值)依 details.field 修正參數
internal_error-error處理單則 WebSocket 訊息時發生未預期內部錯誤(連線不受影響)連線保持,不應斷線;視為該則訊息失敗,可選擇重試該操作。details.message_type 與 details.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語言數量超過上限(details 帶 max/received;max 可能為系統上限或方案的同時識別語言數上限)轉錄語言最多 10 種、翻譯語言最多 12 種;使用吃到飽方案時依 details.max 減少語言數或升級方案
invalid_recording_type400error錄音類型無效使用有效的類型
invalid_summary_template400error摘要模板無效確認模板識別碼
method_not_allowed405error路徑正確但 HTTP 方法不支援(回應會帶 Allow 標頭列出支援的方法)改用 Allow 標頭列出的方法
invalid_action400/405errorWebSocket:此 action 不適用於目前的錄音模式。即時服務網域上的 REST 端點:HTTP 方法不支援(405,回應帶 Allow 標頭)依情境改用正確的 action 或 HTTP 方法
http_error4xxerror其他 HTTP 語意錯誤,實際狀態碼以回應為準依回應的 HTTP 狀態碼處理
too_many_requests429error請求頻率過高。回應帶 X-RateLimit-* 與 Retry-After 標頭依 Retry-After 等待後重試
invalid_service-error不支援的服務類型確認 WebSocket 訊息的 type 欄位

前端錯誤處理範例

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.24.1 最後更新:2026-10-07

Copyright © 2026