HTTP 錯誤處理
訂閱 onSseError 來處理 bot provider 回傳的 HTTP 錯誤。搭配
@asgard-js/core 的 isHttpError helper,可以安全地檢查 status code。
HTTP 429 用量限制
點擊下方按鈕模擬 onSseError 收到 HTTP 429 錯誤。handler 會呼叫 isHttpError() 判斷錯誤類型,然後顯示 toast 通知。下方的程式碼展示實際的接線方式。
程式範例
import { isHttpError } from "@asgard-js/core";
<Chatbot
onSseError={(error) => {
if (isHttpError(error) && error.status === 429) {
toast.warning("用量已達上限,請稍後再試");
}
}}
{...rest}
/>;
HttpError
| 屬性 | 型別 | 說明 |
|---|---|---|
status | number | HTTP 狀態碼(如 401、403、429、500) |
statusText | string | 狀態文字 |
body | unknown | 回應 body |
isHttpError(error) 是 type guard,確認 error 是 HttpError 後才安全存取上述屬性。
常見錯誤碼
| 狀態碼 | 場景 |
|---|---|
401 | API key 無效或過期 |
403 | 無權限存取此 bot provider |
429 | 請求頻率超過限制 |
500 | Bot provider 內部錯誤 |
錯誤泡泡與 details 展開
asgard.run.error 會在對話串裡留下一顆錯誤泡泡。它原樣顯示後端給的 message——sandbox 被
配額或訂閱狀態擋下時,理由就只寫在那裡,換成固定字串等於把使用者唯一的線索丟掉。事件沒帶
message 時才退回「發生未預期的錯誤」。
其餘屬於診斷而非指示的欄位(code、traceId、上游的 inner)收在「顯示更多/顯示較少」
的展開區裡,整包 { traceId, ...error } 直接 JSON.stringify 印出來:
- 整包印是刻意的。這個 payload 的形狀還在變(後端仍在補
code/inner),手挑欄位會在 它下次新增時安靜地漏掉;整包印也讓工程師有一塊可以直接貼進 ticket 的東西。 - 除了
message以外真的有東西時才會出現切換鈕——否則展開後看到的就是上面那行摘要。 - 後端錯誤可以任意長,所以摘要夾到兩行、展開區各自有高度上限並在裡面捲動;泡泡的佔位始終有界。
errorMessageRenderer 仍然優先:有回傳值就整顆換成你的,回傳 null / undefined 則落回上述
預設 UI,不會把泡泡清空。
展開區的顏色可以覆寫,見主題的 JSON 與錯誤細節變數。
深入閱讀
底層的訊息 API 與錯誤回傳定義,見 Asgard 開發者文件: