Кто вообще решает, как придёт код
Клиент вызывает метод auth.sendCode и передаёт номер плюс объект codeSettings — набор флагов вроде «я умею принимать сброшенные звонки» или «я умею в Firebase». Дальше решает сервер. В ответ прилетает auth.sentCode, где лежит тип доставки, время ожидания timeout и next_type — способ, которым код придёт на следующей попытке, если этот не сработал.
То есть выбора у тебя нет. Есть только заявка о своих возможностях и ответ сервера. Если сервер решил слать через Firebase, а твой софт так не умеет — код не придёт, и это не баг софта.
Одиннадцать типов доставки кода
Полный список конструкторов auth.SentCodeType из схемы. Половину из них среднестатистический пользователь никогда не видел.
Код в Telegram
sentCodeTypeApp
Служебное сообщение во все остальные залогиненные сессии. Самый частый тип, если аккаунт уже где-то открыт.
Обычная SMS
sentCodeTypeSms
Цифры в текстовом сообщении на номер.
SMS со словом
sentCodeTypeSmsWord
Кодом является слово целиком, а не цифры. В поле beginning может прийти первая буква этого слова.
SMS с фразой
sentCodeTypeSmsPhrase
Код — фраза из нескольких слов. В beginning приходит первое слово.
Голосовой звонок
sentCodeTypeCall
Синтезированный голос диктует код в трубку.
Сброшенный звонок
sentCodeTypeFlashCall
Звонок сбрасывается сразу, а кодом становится сам номер, с которого звонили.
Пропущенный звонок
sentCodeTypeMissedCall
Код — последние цифры звонившего номера, их вводят руками.
Код на почту
sentCodeTypeEmailCode
Уходит на привязанный login email.
Требуется привязать почту
sentCodeTypeSetUpEmailRequired
Кода не будет, пока не подтвердишь email. Приходит, если пользователь логинится слишком часто.
Код через Fragment
sentCodeTypeFragmentSms
Для номеров, купленных на fragment.com: в ответе лежит url, код смотрят в кабинете Fragment после входа кошельком.
Firebase SMS
sentCodeTypeFirebaseSms
Отдельный флоу с проверкой целостности устройства через Google Play Integrity или Apple Push. Доступен только официальным мобильным приложениям.
Отдельно стоит запомнить два экзотических: во FlashCall кодом является сам номер, с которого позвонили, а в MissedCall — его последние цифры. Люди ждут SMS, видят пропущенный вызов с незнакомого номера, сбрасывают его как спам и потом ищут, почему код не пришёл.
Почему код не приходит в Telethon и другой сторонний софт
Вот ключевой абзац документации, ради которого стоит читать первоисточник, а не форумы: при некоторых условиях для входа и регистрации может быть использован только тип Firebase SMS, а пользоваться им умеют исключительно официальные мобильные приложения. Значит при этих условиях только официальные приложения и получат код по SMS или звонку.
Почему так — понятно из механики. На Android клиент должен скормить полученный nonce в Google Play Integrity API и отправить обратно подписанный объект. На iOS — принять пуш на токен Apple Push и вернуть секрет из этого пуша. Скрипт на Telethon не сделает ни того, ни другого: у него нет ни устройства, прошедшего аттестацию, ни APNs-токена.
sms@telegram.org, указав #enableSMS в теме письма.Практический вывод простой. Если у тебя на руках только номер и скрипт — ты в самом неудобном положении из возможных. Если на руках готовая сессия, вопрос отпадает вовсе: авторизация уже произошла, код никому не нужен. Про разницу форматов написано в разборе TDATA против session+json.
Даже пожаловаться может не каждый
В API есть метод auth.reportMissingCode — сообщить, что SMS с кодом не дошла. У него в описании стоит пометка «only official apps». Даже сигнал «код не пришёл» отправить из стороннего клиента нельзя.
Почему код перестаёт работать до того, как ты его ввёл
Отдельная история, из-за которой люди уверены, что «телеграмм присылает битые коды». Серверы Telegram сами аннулируют код входа, если пользователь переслал его в другой чат или вставил внутрь сообщения. Логика понятная: так работает самая массовая схема угона аккаунтов — «пришли мне код, я тебя добавлю в чат».
Больше того, клиент обязан аннулировать код сам. Условия в документации расписаны буквально по пунктам: сообщение пришло от служебного аккаунта с ID 777000, это текст, а не медиа, и внутри есть последовательность из 5–7 цифр, возможно с дефисами. Если такое сообщение пользователь заскриншотил или переслал — клиент вызывает account.invalidateSignInCodes и код умирает.
Так что «код неверный» после того, как ты скинул его коллеге в переписку, — это не сбой. Это штатное поведение, описанное в документации.
Когда Telegram просит купить Premium, чтобы войти
Малоизвестный раздел про платную авторизацию. Официальное приложение может получить в ответ не код, а конструктор auth.sentCodePaymentRequired. Формулировка документации: из-за высокой стоимости SMS-кодов для страны или оператора пользователя ему нужно купить подписку Telegram Premium, чтобы продолжить вход или регистрацию. Флоу оплаты доступен только официальным клиентам.
Внутри конструктора лежат store_product, premium_days, currency и amount, а проверить статус оплаты можно методом auth.checkPaidAuth. Список стран и операторов, для которых это включается, Telegram не публикует — в документации сказано только «из-за высокой стоимости SMS».
А ещё может потребовать почту
Если пользователь логинится достаточно часто, сервер отдаёт тип sentCodeTypeSetUpEmailRequired: кода не будет, пока не подтвердишь email. В конфиге есть две подсказки на эту тему — SETUP_LOGIN_EMAIL, которую можно пропустить, и SETUP_LOGIN_EMAIL_NOSKIP, которую нельзя. Вторая, по описанию из документации, показывается несмахиваемым полноэкранным окном и полностью блокирует работу приложения, пока login email не настроен.
Расшифровка ошибок: что на самом деле ответил сервер
Пользователь видит «Что-то пошло не так», софт — конкретный код. Ниже дословные описания из машиночитаемого файла ошибок Telegram (на 13 августа 2026 он отдаёт Layer 227).
| Ошибка | HTTP | Что это значит |
|---|---|---|
PHONE_NUMBER_BANNED«The provided phone number is banned from telegram» | 400 | Номер забанен на стороне Telegram. Приходит в ответ на auth.sendCode, auth.checkPhone и на попытку привязать этот номер к другому аккаунту. Кода не будет никогда — ни в каком клиенте. |
PHONE_NUMBER_FLOOD«You asked for the code too many times» | 400 | Слишком много запросов кода на этот номер. Сколько ждать — в документации не указано. |
PHONE_PASSWORD_FLOOD«You have tried logging in too many times» | 406 | Тот же перебор, но по попыткам входа. Отдаётся на auth.sendCode. |
SEND_CODE_UNAVAILABLE«Returned when all available options for this type of number were already used» | 406 | Способы доставки для этого номера кончились: попробовали сброшенный звонок, потом SMS — и всё. Приходит на auth.resendCode. |
PHONE_NUMBER_APP_SIGNUP_FORBIDDEN«You can't sign up using this app» | 400 | Регистрация нового аккаунта из этого приложения запрещена. Отдаётся только на auth.sendCode. |
SMS_CODE_CREATE_FAILED«An error occurred while creating the SMS code» | 400 | Сервер не смог создать SMS-код. Причину не сообщает. |
PHONE_NUMBER_INVALID«The phone number is invalid» | 400 / 406 | Самая частая и самая скучная ошибка: номер не в том формате или такого номера не существует. Встречается у 16 методов сразу. |
PHONE_CODE_EXPIRED«The phone code you provided has expired» | 400 | Код протух или был аннулирован. Про аннулирование — отдельный раздел ниже. |
PHONE_NUMBER_UNOCCUPIED«The phone number is not yet being used» | 400 | Аккаунта на этом номере нет. Вход невозможен, нужна регистрация. |
FRESH_CHANGE_PHONE_FORBIDDEN«You can't change phone number right after logging in, please wait at least 24 hours» | 406 | Сменить номер сразу после входа нельзя — минимум сутки. |
Важная развилка проходит между PHONE_NUMBER_BANNED и всем остальным. Бан номера не лечится ни сменой клиента, ни прокси, ни повторными попытками: решение принято по номеру. Про то, за что вообще прилетают ограничения, есть отдельный разбор — за что Telegram банит аккаунты, а про состояние, когда аккаунт жив, но частично обездвижен, — в материале про заморозку.
Про VoIP и виртуальные номера — честно
Самая тиражируемая формулировка в нише звучит так: «Telegram блокирует VoIP-номера». Мы прогнали по документации весь блок авторизации, конфиг и файл ошибок. Правила с таким текстом там нет. Слово VoIP встречается только в описании голосовых звонков — это про протокол связи, а не про тип номера. Списка разрешённых или запрещённых операторов Telegram тоже нигде не публикует.
Что действительно задокументировано — это ответы сервера. Номер либо забанен (PHONE_NUMBER_BANNED), либо невалиден (PHONE_NUMBER_INVALID), либо код не создался (SMS_CODE_CREATE_FAILED). Ориентироваться стоит на них. А то, что дешёвые перепродаваемые номера ловят эти ошибки чаще остальных, — наблюдение практиков, включая нас, а не пункт правил. Экономику этого выбора мы разбирали в статье виртуальный номер или готовый аккаунт.
Вход вообще без кода: три легальных способа
- Future auth tokens. При выходе из сессии сервер может вернуть
future_auth_token. Клиент хранит их локально (документация ограничивает базу двадцатью токенами, старые вытесняются) и передаёт при следующемauth.sendCode. Если токен подошёл и облачного пароля нет — прилетаетauth.sentCodeSuccessи сессия сразу авторизована. Никакого кода. - QR-логин. В конфиге Telegram параметр
qr_login_codeсейчас стоит в значении"primary"— то есть вход по QR предлагается как основной способ, а не как запасной. - Passkeys. В списке методов, доступных без авторизации, есть
auth.initPasskeyLoginиauth.finishPasskeyLogin.
SESSION_PASSWORD_NEEDED — и никакого кода при этом не отправит. Знание этой детали экономит час поисков «почему сервер молчит».Новая сессия и семь дней, о которых мало кто знает
Когда кто-то входит в аккаунт, остальные сессии получают апдейт updateNewAuthorization. Если у него выставлен флаг unconfirmed, клиент показывает вопрос «это ты?». Ответ «нет» вызывает account.resetAuthorization — сессию выкидывает.
А вот если не сделать ничего, сессия подтвердится сама. Через сколько — написано в конфиге: authorization_autoconfirm_period равен 604 800 секундам, это ровно семь суток (значение снято 13 августа 2026). Плюс отдельное правило рядом: FRESH_CHANGE_PHONE_FORBIDDEN запрещает менять номер в первые 24 часа после входа.
Для покупателя аккаунтов это самая практичная цифра во всей статье. Окно, в котором прежний владелец видит чужой вход и может его снести, — неделя. Именно поэтому мы проверяем каждый аккаунт живым коннектом в момент выдачи, а не заранее.
Что делать, если код не приходит
- Посмотри, что ответил сервер. Не «не приходит», а конкретный код ошибки. Половина случаев закрывается прямо здесь:
PHONE_NUMBER_BANNEDиPHONE_NUMBER_INVALIDозначают, что ждать нечего. - Проверь тип доставки в ответе. Возможно, код уже прилетел — в другую сессию, на почту или сброшенным звонком.
- Дай отработать таймауту и вызови resendCode. Следующий способ лежит в
next_type. Если и он кончился, придётSEND_CODE_UNAVAILABLE. - Не долби sendCode в цикле. Так получают
PHONE_NUMBER_FLOODиPHONE_PASSWORD_FLOOD, а сроков ожидания по ним документация не публикует. - Не пересылай код никому. Даже себе в «Избранное» — сервер аннулирует его при отправке в чат.
- Если задача не в регистрации, а в работе — не воюй с кодами. Готовый аккаунт приходит уже авторизованным.
Когда номер вообще не нужен
Стоит отделять две задачи. Первая — завести личный аккаунт: тут через регистрацию придётся пройти, других вариантов нет. Вторая — получить рабочий инструмент для сбора аудитории, рассылок или инвайтинга. Во второй задаче номер сам по себе никому не нужен, нужна рабочая сессия.
У нас аккаунты отдаются в формате session+json или TDATA и проверяются вживую в момент выдачи. Рядом — резидентные прокси, потому что вход с чужого IP это как раз тот случай, когда прежний владелец получает уведомление о новой сессии.
Дальше аккаунт идёт в работу: собрать участников чата, вытащить тех, кто реально пишет, или взять комментаторов канала, если подписчики закрыты. Все шесть режимов — на странице парсера.
Частые вопросы
Почему не приходит код в Telegram при регистрации?
Сервер сам выбирает, каким из одиннадцати способов доставить код, и в некоторых условиях выбирает Firebase SMS. Документация Telegram говорит прямо: этим способом могут пользоваться только официальные мобильные приложения, а значит в такой ситуации только они и получат код по SMS или звонку. Второй частый вариант — сервер вообще не дошёл до отправки и вернул ошибку: номер забанен, номер невалидный или запросов было слишком много.
Почему в Telethon или Pyrogram не приходит код?
Потому что сторонняя библиотека — это стороннее приложение. Firebase-флоу требует проверки целостности устройства через Google Play Integrity или Apple Push, и пройти её из скрипта нельзя. Сторонним приложениям документация оставляет другие пути: код Telegram в уже открытую сессию, код Fragment, код на почту, future auth tokens, вход по QR и passkeys. Разработчикам, которым нужна именно SMS-авторизация, Telegram предлагает написать на sms@telegram.org с пометкой #enableSMS в теме письма.
Код пришёл, но Telegram пишет, что он неверный. Почему?
Скорее всего код сгорел. Серверы Telegram автоматически аннулируют код входа, если пользователь переслал его в другой чат или отправил внутри сообщения. Клиент обязан аннулировать код и в том случае, если сообщение от служебного аккаунта 777000 попало в скриншот. Кодом считается последовательность из 5–7 цифр, возможно с дефисами.
Что значит PHONE_NUMBER_BANNED?
Дословно из документации — «номер забанен в телеграм». Ошибка 400, приходит на auth.sendCode и auth.checkPhone. Никакой смены клиента, прокси или библиотеки это не лечит: решение принято на стороне номера, а не сессии.
Правда ли, что Telegram не пускает виртуальные и VoIP-номера?
В открытой документации Telegram такого правила нет. Слово VoIP там встречается только в описании голосовых звонков, а список разрешённых или запрещённых операторов нигде не публикуется. Что документировано — это ответы сервера: PHONE_NUMBER_BANNED, PHONE_NUMBER_INVALID, SMS_CODE_CREATE_FAILED. По ним и стоит ориентироваться, а не по слухам с форумов.
Может ли Telegram потребовать деньги за вход?
Да, и это описано в документации. Официальное приложение может получить ответ auth.sentCodePaymentRequired: из-за высокой стоимости SMS для конкретной страны или оператора пользователю предлагают купить подписку Telegram Premium, чтобы продолжить вход или регистрацию. Флоу доступен только официальным клиентам.
Все факты и цитаты — из документации Telegram, снято 13 августа 2026: авторизация, машиночитаемый список ошибок (Layer 227), клиентский конфиг и auth.reportMissingCode. Где документация молчит — сроки флуд-ожидания, список стран для платной авторизации, условия включения Firebase-режима — мы об этом сказали прямо, а не подставили правдоподобную цифру.