跳至主要內容

處理 Bot API 回傳結果、錯誤與重試

MPChat Bot API 所有方法共享同一回應信封。學會讀 ok/result/description、各錯誤碼含義,以及哪些錯誤該重試。

永遠先判斷 ok。之後再讀 result(成功)或 description + error_code(失敗)。


總覽

所有方法回傳同一信封,你只需寫一個解析器並到處複用。

// 成功
{ "ok": true, "result": { ... } }

// 失敗
{ "ok": false, "description": "可讀的錯誤訊息", "error_code": 401 }

錯誤碼

碼

含義

常見原因與處理

400

請求無效

缺欄位或訊息不存在——修正參數。

401

未授權

token 無效或已 revoke——檢查 token。

403

禁止

權限不足或訊息歸屬不符。

409

衝突

Webhook 啟用時呼叫了 getUpdates。

429

限流

超過 30 req/s——退避後重試。

500

伺服端錯誤

依下方重試策略處理。

50001

MP 業務錯誤

被業務層拒絕——查閱 description。

501

未實作

目前不支援該方法(見方法矩陣)。

鑑權有效時,未知 API 方法會回傳 JSON 404,已知介面使用不支援的 HTTP 請求方式會回傳 JSON 405。鑑權和限流可能先回傳 401 或 429。

處理 409

呼叫 getWebhookInfo 確認 Webhook 配置。請勿自行執行 deleteWebhook——它是高危受控操作。請聯絡維護者處理衝突。

錯誤處理範例

async function readBotResponse(res) {
const data = await res.json().catch(() => null);
if (!res.ok || data?.ok !== true) {
const error = new Error("MPChat Bot API request failed");
error.httpStatus = res.status;
error.apiCode = data?.error_code;
throw error;
}
return data.result;
}

重試策略

  • 遇到 429 時先降低請求速率,再依有上限的指數退避重試。若回應提供等待時間,依該時間等候。

  • 請求逾時、連線中斷或回傳 5xx 後,傳送操作可能已經成功。重送寫入請求前先用自己的操作記錄核對結果。重複呼叫 sendMessage 可能送出兩則訊息。

  • 遇到 400、401、403,先修正參數、憑證或權限。

  • 遇到 409,依下方的輪詢與 Webhook 指南檢查目前的投遞模式。

相關文章

錯誤上報中絕不記錄完整 token 或敏感欄位。脫敏規則見生產檢查清單。

是否回答了您的問題?