ГлавнаяБлогНе приходит код
🔑 Авторизация · разбор

Не приходит код в Telegram: что отвечает сервер

У Telegram одиннадцать способов доставить код входа, и выбирает из них сервер, а не ты. В документации прямым текстом сказано: при некоторых условиях получить код по SMS или звонку могут только официальные приложения — потому что этот способ требует проверки целостности устройства. Отсюда и вечная история «в официальном клиенте код пришёл, а в Telethon нет». Ниже — все одиннадцать типов доставки, расшифровка ошибок вида PHONE_NUMBER_BANNED и отдельно про то, почему код может сгореть до того, как ты его введёшь. Всё сверено с первоисточником 13 августа 2026 года.

Кто вообще решает, как придёт код

Клиент вызывает метод 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-токена.

Что остаётся стороннему приложению. Документация перечисляет: код Telegram в уже открытую сессию, коды Fragment, коды на почту, future auth tokens, вход по QR-коду и passkeys. А тем разработчикам, кому нужна именно SMS-авторизация, предлагают написать на 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). Ориентироваться стоит на них. А то, что дешёвые перепродаваемые номера ловят эти ошибки чаще остальных, — наблюдение практиков, включая нас, а не пункт правил. Экономику этого выбора мы разбирали в статье виртуальный номер или готовый аккаунт.

Вход вообще без кода: три легальных способа

  1. Future auth tokens. При выходе из сессии сервер может вернуть future_auth_token. Клиент хранит их локально (документация ограничивает базу двадцатью токенами, старые вытесняются) и передаёт при следующем auth.sendCode. Если токен подошёл и облачного пароля нет — прилетает auth.sentCodeSuccess и сессия сразу авторизована. Никакого кода.
  2. QR-логин. В конфиге Telegram параметр qr_login_code сейчас стоит в значении "primary" — то есть вход по QR предлагается как основной способ, а не как запасной.
  3. Passkeys. В списке методов, доступных без авторизации, есть auth.initPasskeyLogin и auth.finishPasskeyLogin.
Нюанс про 2FA. Если токен совпал, но на аккаунте включён облачный пароль, сервер вернёт ошибку SESSION_PASSWORD_NEEDED — и никакого кода при этом не отправит. Знание этой детали экономит час поисков «почему сервер молчит».

Новая сессия и семь дней, о которых мало кто знает

Когда кто-то входит в аккаунт, остальные сессии получают апдейт updateNewAuthorization. Если у него выставлен флаг unconfirmed, клиент показывает вопрос «это ты?». Ответ «нет» вызывает account.resetAuthorization — сессию выкидывает.

А вот если не сделать ничего, сессия подтвердится сама. Через сколько — написано в конфиге: authorization_autoconfirm_period равен 604 800 секундам, это ровно семь суток (значение снято 13 августа 2026). Плюс отдельное правило рядом: FRESH_CHANGE_PHONE_FORBIDDEN запрещает менять номер в первые 24 часа после входа.

Для покупателя аккаунтов это самая практичная цифра во всей статье. Окно, в котором прежний владелец видит чужой вход и может его снести, — неделя. Именно поэтому мы проверяем каждый аккаунт живым коннектом в момент выдачи, а не заранее.

Что делать, если код не приходит

  1. Посмотри, что ответил сервер. Не «не приходит», а конкретный код ошибки. Половина случаев закрывается прямо здесь: PHONE_NUMBER_BANNED и PHONE_NUMBER_INVALID означают, что ждать нечего.
  2. Проверь тип доставки в ответе. Возможно, код уже прилетел — в другую сессию, на почту или сброшенным звонком.
  3. Дай отработать таймауту и вызови resendCode. Следующий способ лежит в next_type. Если и он кончился, придёт SEND_CODE_UNAVAILABLE.
  4. Не долби sendCode в цикле. Так получают PHONE_NUMBER_FLOOD и PHONE_PASSWORD_FLOOD, а сроков ожидания по ним документация не публикует.
  5. Не пересылай код никому. Даже себе в «Избранное» — сервер аннулирует его при отправке в чат.
  6. Если задача не в регистрации, а в работе — не воюй с кодами. Готовый аккаунт приходит уже авторизованным.

Когда номер вообще не нужен

Стоит отделять две задачи. Первая — завести личный аккаунт: тут через регистрацию придётся пройти, других вариантов нет. Вторая — получить рабочий инструмент для сбора аудитории, рассылок или инвайтинга. Во второй задаче номер сам по себе никому не нужен, нужна рабочая сессия.

У нас аккаунты отдаются в формате 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-режима — мы об этом сказали прямо, а не подставили правдоподобную цифру.

Не воюй с кодами — бери аккаунт, который уже вошёл

session+json или TDATA, живая проверка коннектом в момент выдачи, резидентные прокси рядом. От 135 ₽.