错误处理

使用 API 时会有错误,必须在客户端正确处理。
误差由多个参数来表征:

错误代码

数值类似于HTTP状态。包含发生错误类型的信息:例如,数据输入错误、隐私错误或服务器错误。这是必填参数。

错误类型

一个形式的字符串文字,总结了问题。例如, 。这是一个可选参数。/[A-Z_0-9]+/AUTH_KEY_UNREGISTERED

错误数据库

API中所有方法都能返回的完整可读JSON错误列表可在此处找到,以下是其字段的描述:

错误消息和错误描述可能在关键字位置包含占位符,目前仅用于将错误消息中的时长映射到错误描述。printf%d

示例:

{ "errors": { "420": { "2FA_CONFIRM_WAIT_%d": [ "account.deleteAccount" ], "SLOWMODE_WAIT_%d": [ "messages.forwardMessages", "messages.sendInlineBotResult", "messages.sendMedia", "messages.sendMessage", "messages.sendMultiMedia" ] } }, "descriptions": { "2FA_CONFIRM_WAIT_%d": "Since this account is active and protected by a 2FA password, we will delete it in 1 week for security purposes. You can cancel this process at any time, you'll be able to reset your account in %d seconds.", "SLOWMODE_WAIT_%d": "Slowmode is enabled in this chat: wait %d seconds before sending another message to this chat.", "FLOOD_WAIT_%d": "Please wait %d seconds before repeating the action." }, "user_only": [ "account.deleteAccount" ], "bot_only": [ "messages.setInlineBotResults" ], "business_supported": [ "messages.sendMessage" ], "unauthed_allowed": [ "auth.sendCode" ] }

错误构造子

应该有办法处理rpc_error构造器中返回的错误。

以下是错误代码及其含义列表:

303 SEE_OTHER

请求必须重复,但必须指向不同的数据中心。

错误示例:

在所有这些情况下,错误描述的字符串字面量都包含了必须发送该重复查询的数据中心编号(而非X)。关于数据中心间重定向的更多信息 »

400 BAD_REQUEST

查询包含错误。如果请求是通过表单创建且包含用户生成的数据,应通知用户必须在重复查询前修正数据。

错误示例:

401 未授权

曾有未经授权的尝试,试图使用仅授权用户可用的功能。

错误示例:

403 禁止

侵犯隐私。例如,试图给已将当前用户列入黑名单的人发送消息。

404 NOT_FOUND

尝试调用不存在的对象,比如方法。

406 NOT_ACCEPTABLE

类似于400 BAD_REQUEST,但应用必须以稍微不同的方式显示错误信息。接收构造函数时
不要向用户显示任何可见错误:相反,等待 updateServiceNotification 更新,并像往常一样处理。
基本上,更新服务通知更新会在406发出后立即独立发布(即作为内部的更新构造函数,而是普通更新):更新会包含实际的本地化错误信息,通过界面弹窗向用户展示。rpc_errorpopuprpc_resultrpc_error

例外是错误,只有当任何非媒体DC检测到授权会话从两个不同IP地址的两个不同TCP连接并行发送请求时,才会发出错误。
请注意,媒体数据中心仍然允许并建议并行连接。
另外请注意,我们所说的会话是指通过授权构造函数识别的已登录会话,可通过account.getAuthorizations获取,而非MTProto会话。AUTH_KEY_DUPLICATED

如果客户端收到错误,表示会话已被服务器取消,用户必须生成新的认证密钥并重新登录。AUTH_KEY_DUPLICATED

420 洪水

使用给定输入参数调用该方法的最大允许次数已被超过。例如,尝试请求大量短信(SMS)以获取同一电话号码。

错误示例:

500 内部

在请求处理过程中发生了内部服务器错误;例如,访问数据库或文件存储时发生了中断。

如果客户收到500错误,或者您认为该错误不应发生,请尽可能收集有关查询和错误的信息并发送给开发者。

其他错误代码

如果服务器返回的错误代码与上述列出的代码不同,可能被视为与500错误相同,并被视为内部服务器错误。