Error handling
Cole VarckinВведение
Во время работы с API Telegram могут возникать ошибки и они должны быть правильно обработаны на клиенте.
Ошибки характеризуются несколькими параметрами:
Код Ошибки
Состояние HTTP. Содержит информацию о типе ошибки: например, ошибка ввода данных, ошибка конфиденциальности или ошибка сервера. Это обязательный параметр.
Тип Ошибки
Строковый параметр, в виде /[A-Z_0-9]+/, в котором обобщены проблемы. Например, AUTH_KEY_UNREGISTERED. Это необязательный параметр.
Описание Ошибки
Может содержать более подробные сведения об ошибке и способы ее решения, например: authorization required, используйте auth.* методы. Обратите внимание, что сведения могут меняться, следует избегать сложную логику обработки приложения на эти сообщения. Это необязательный параметр.
Конструктор Ошибок
Здесь должен быть представлен способ обработки ошибок, возвращаемых в rpc_error конструкторах.
Если ошибка конструктора не различает тип и описание, но вместо этого содержит одно поле под названием error_message (как в примере выше), она должна быть разбита на 2 составляющие, например, используя следующее регулярное выражение: /^([A-Z_0-9]+)(: (.+))?/.
Ниже приведен список кодов ошибок и их значения:
303 ERROR_SEE_OTHER
Запрос должен быть повторен, но его направили в другой центр обработки данных.
Примеры ошибок:
FILE_MIGRATE_X: файл будет доступен в настоящее время, но храниться будет в другом центре обработки данных.
PHONE_MIGRATE_X: номер телефона пользователь пытается использовать для авторизации с разных центров обработки данных.
NETWORK_MIGRATE_X: исходный IP-адрес связан с различными центрами обработки данных (для регистрации).
USER_MIGRATE_X: пользователь, чьи данные используются для выполнения запросов, связан с другим центром обработки данных (для регистрации).
Во всех этих случаях описания ошибок строковый параметр содержит номер центра обработки данных (вместо X), для которых должен будет отправлен повторный запрос.
Подробнее о переадресации между центрами обработки данных.
400 BAD_REQUEST
В случае, если запрос создается через форму и содержит пользовательские данные, пользователь должен быть уведомлен, что данные должны быть исправлены, прежде чем запрос повторится.
Примеры ошибок:
FIRSTNAME_INVALID: первое имя является недействительным.
LASTNAME_INVALID: второе имя является недействительным.
PHONE_NUMBER_INVALID: номер телефона недействителен.
PHONE_CODE_HASH_EMPTY: phone_code_hash отсутствует.
PHONE_CODE_EMPTY: phone_code отсутствует.
PHONE_CODE_EXPIRED: время кода подтверждения истекло.
API_ID_INVALID: в api_id комбинированные api_hash являются недействительными.
PHONE_NUMBER_OCCUPIED: номер телефона уже используется.
PHONE_NUMBER_UNOCCUPIED: номер телефона не используется.
USERS_TOO_FEW: недостаточно пользователей (например: для создания чата).
USERS_TOO_MUCH: максимальное количество пользователей превышено (например: для создания чата).
TYPE_CONSTRUCTOR_INVALID: конструктор Type является недействительным.
FILE_PART_INVALID: часть номера файла является недопустимым.
FILE_PARTS_INVALID: количество частей файла является недопустимым.
FILE_PART_X_MISSING: часть x (где x — номер) файла отсутствует в хранилище.
MD5_CHECKSUM_INVALID: Контрольные суммы MD5 не совпадают.
PHOTO_INVALID_DIMENSIONS: размер фотографии, является недействительными.
FIELD_NAME_INVALID: поле FIELD_NAME является недействительным.
FIELD_NAME_EMPTY: поле с именем FIELD_NAME отсутствует.
MSG_WAIT_FAILED: ожидание вызова вернул ошибку.
401 UNAUTHORIZED
Была попытка использовать функциональные возможности, которые доступны только для авторизованных пользователей.
Примеры ошибок:
AUTH_KEY_UNREGISTERED: ключ не зарегистрирован в системе.
AUTH_KEY_INVALID: ключ недействителен.
USER_DEACTIVATED: пользователь удален/деактивирован.
SESSION_REVOKED: авторизованная сессия была признана недействительной из-за прекращения всех сеансов.
SESSION_EXPIRED: авторизованная сессия истекла.
ACTIVE_USER_REQUIRED: метод доступен только авторизованным пользователям.
AUTH_KEY_PERM_EMPTY: метод unavailble временного ключа авторизации не привязан к постоянному ключу авторизации.
403 FORBIDDEN
Нарушение конфиденциальности. Например, попытка написать сообщение тому, кто внес в черный список текущего пользователя.
404 NOT_FOUND
Попытка вызвать несуществующий объект, например: метод.
420 FLOOD
Максимально допустимое количество попыток вызова данного метода с учетом входных параметров был превышен. Например, в попытке запросить большое количество текстовых сообщений (SMS) на один и тот же номер телефона.
Пример ошибки: FLOOD_WAIT_X: требуется подождать x секунд (где x — число)
500 INTERNAL
Произошла внутренняя ошибка сервера при обработке запроса: например, перебои при доступе к базе данных или файловому хранилищу.
Если клиент получает 500 INTERNAL, или вы считаете, что этой ошибки не должно было произойти, пожалуйста, соберите как можно больше информации о запросе и об ошибках и отправьте, пожалуйста, его разработчикам.
Other Error Codes
Если сервер возвращает ошибку с кодом, отличным от перечисленных выше, это может рассматриваться как ошибка 500 и как внутренняя ошибка сервера.
Источник: core.telegram.org