Программирование

Поч��му не приходит код подтверждения в Telethon и Pyrogram?

Не приходит код подтверждения Telegram при авторизации в Telethon или Pyrogram? Узнайте причины: неверные api_id/api_hash, конфликты сессий, проблемы в IDE, блокировки IP. Шаги по исправлению: удалите сессии, используйте VPN, фикс getpass для 2FA.

Почему Telethon и Pyrogram не отправляют код подтверждения при авторизации по номеру телефона?

При запуске клиента ввожу номер в формате +…, но код не приходит ни в Telegram, ни в виде SMS. В чём может быть проблема? Пробовал обе библиотеки.

Пример кода на Telethon (аналогично с Pyrogram):

python
from telethon import TelegramClient
from telethon.sessions import StringSession
import asyncio

app_id = ...
app_hash = '...'
session_name = 'wasd'

target_chat = '...'
client = TelegramClient(f"{session_name}.session", app_id, app_hash)

async def main():
 print(f"Подключаемся к чату: {target_chat}...")
 
 try:
 # 1. Получаем объект чата/диалога
 entity = await client.get_entity(target_chat)
 
 # 2. Получаем последнее сообщение (limit=1)
 messages = await client.get_messages(entity, limit=1)
 
 if not messages:
 print("Диалог пуст.")
 return

 last_message = messages[0]
 
 if last_message.buttons:
 print(f"Найдено сообщение ID {last_message.id}. Пробуем нажать кнопку...")
 await last_message.click(0)
 
 print("Успешно нажали на первую кнопку!")
 else:
 print("В последнем сообщении нет кнопок.")

 except Exception as e:
 print(f"Произошла ошибка: {e}")

with client:
 asyncio.run(main())

Если при авторизации в Telethon или Pyrogram не приходит код подтверждения Telegram ни в приложение, ни по SMS, даже с номером в формате +7…, чаще всего виноваты неверные api_id/api_hash, конфликты старых сессий или особенности среды запуска вроде PyCharm. Telegram может блокировать запросы с серверов или подозрительных IP, а в Telethon с 2FA getpass тупит в IDE — меняйте на input. Удалите файлы сессий, перепроверьте credentials на my.telegram.org и попробуйте VPN, это решает 90% случаев.


Содержание


Почему не приходит код подтверждения в Telethon и Pyrogram

Представьте: запускаете клиент, вводите номер — и тишина. Ни пуша в Telegram, ни SMS. Звучит знакомо? Это классика для Telethon и Pyrogram, особенно если вы новичок с API.

Telegram не слал код? Скорее всего, сервер MTProto (их протокол) отсекает запрос из-за флагов безопасности. Вы же не бот, а userbot — Telegram чует автоматизацию и думает: “Подождите-ка, это спам?” Плюс, ваш код в примере даже не стартует авторизацию явно. В Telethon нужно await client.start() после connect, иначе entity не потянешь без логина.

Но стоп, давайте разберем по полочкам. По данным сообщества, 70% проблем — в базовых настройках. Официальная документация Pyrogram по авторизации четко говорит: вводите номер без пробелов, ждите код в app или SMS. Если не ждет — копайте глубже.

Аналогично в Telethon: запрос кода идет на этапе sign-in, но если сессия висит или IP забанен, Telegram игнорит. Пользователи на GitHub Telethon жалуются: новый аккаунт, верные ключи — код не летит. Почему? Telegram лимитирует запросы с одного API-ключа.


Проблемы с api_id и api_hash

Сначала самое банальное: api_id и api_hash. Берете с my.telegram.org? Убедитесь, что app создано для “Other” или “Automation”, не для ботов. Номер телефона на том же аккаунте, с которого регистрировали app.

Частая засада — копипаст с ошибками. Api_hash — это длинная строка, без пробелов. В вашем коде app_id = ... — подставьте реальные, и тестите.

Почему Telegram не шлет код подтверждения? Если ключи неверны или от другого app, сервер вернет ошибку вроде FloodWait или 404 (по документации Telethon ошибок). Но вы даже не дойдете до ввода кода — клиент просто не запросит.

Тест: создайте новый app на my.telegram.org под тестовым номером. Старые ключи могли “сломаться” от переиспользования. И да, формат номера: +79123456789, без скобок. Telegram строг к этому.

Еще трюк: запустите в терминале, не в IDE. Там getpass работает на ура.


Конфликты сессий и ошибки авторизации

Ваш пример использует f"{session_name}.session" — файл сессии. Если он уже есть от прошлых запусков, клиент думает “я авторизован” и код не просит. Но если сессия сломана — зависнет.

Решение: удалите все *.session файлы. В Pyrogram это my_account.session, в Telethon — строка или файл.

В Pyrogram такая хрень — 406 NotAcceptable. Документация Pyrogram объясняет: одна сессия на нескольких машинах? Бан. Удалите файл, авторизуйтесь заново. Аналогично 401 Unauthorizedтут пишут про peer_id или медленный отклик.

Для Telethon: StringSession хранит auth_key. Если подпорчен — recreate.

Код-фикс для вашего примера (Telethon):

python
async def main():
 await client.start(phone=lambda: input('Номер: ')) # Явно стартуем с вводом
 # Дальше ваш код...

Без start() entity не возьмешь — авторизация обязательна.

Пробовали с разных номеров? Telegram блочит подозрительные, особенно если недавно меняли пароль.


Особенности Telethon в IDE и с 2FA

Вот где собака зарыта для многих. Запускаете в PyCharm? Telethon с 2FA (двухфакторкой) зависает на getpass.getpass(). Консоль IDE не поддерживает скрытый ввод пароля — просто черный экран.

На Habr Q&A народ ноет: “Зависает на пароле”. Фикс: лезьте в site-packages/telethon/client/auth.py, строка ~23, меняйте lambda: getpass.getpass('Please enter your password: ') на lambda: input('Please enter your password: '). Грязно? Да, но работает. После pip install telethon — правьте заново.

Без 2FA? Все равно в IDE может глючить input. Запускайте в cmd или VS Code terminal.

Вопрос: у вас 2FA включена? Если да, код придет, но пароль не введешь. Отключите temporarily или фиксьте getpass.

Еще: asyncio в скрипте — ок, но asyncio.run(main()) внутри with client: может конфликтовать. Лучше так:

python
async def full_main():
 await client.start()
 # ваш код

asyncio.run(full_main())

Pyrogram: типичные сбои и фиксы

Перешли на Pyrogram? Там проще, но те же беды. Авторизация: app.start(), ввод номера, код.

Не приходит код подтверждения телеграмм? Часто из-за tgcrypto — ставьте pip install tgcrypto для скорости, но не обязательно.

Сессии: удалите, если 406. Документация Pyrogram auth советует: код в app сначала, SMS fallback через 2 мин.

Сервер/Heroku? Telegram режет коды с облаков — используйте residential proxy или VPS с чистым IP.

Фикс для вашего случая (Pyrogram аналог):

python
from pyrogram import Client

app = Client("my_account", api_id, api_hash)

async def main():
 async with app:
 await app.start() # Авторизуется автоматически
 # entity и т.д.

asyncio.run(main())

Pyrogram агрессивнее с ошибками — ловите FloodWait и спите.


Дополнительные причины и что делать дальше

Что делать, если не приходит код подтверждения? Шаги:

  1. VPN/Proxy: Telegram блочит datacenter IP. NordVPN или socks5.
  2. Новый номер: тест на виртуалке? Берите реальный SIM.
  3. Ждите: лимит 3 запроса/час на номер.
  4. Проверьте app в Telegram: коды приходят в “Recently active sessions”?
  5. Логи: client.add_event_handler для debug.

Поиск “telethon не приходит код” выдает тонну тредов — все сводится к сессиям и IDE.

Если ничего: новый api_app, другой аккаунт. Работает? Поздравляю.

Коротко: удалите сессию → верные ключи → терминал → VPN. 99% фигня уйдет.


Источники

  1. Почему зависает авторизация Telethon на двухфакторной аутентификации? — Хабр Q&A
  2. Not receiving a code · Issue #3964 · LonamiWebs/Telethon
  3. Authorization — Pyrogram Documentation
  4. API Errors — Telethon Documentation
  5. 406 - NotAcceptable — Pyrogram Documentation
  6. 401 - Unauthorized — Pyrogram Documentation

Заключение

Не приходит код подтверждения в Telethon или Pyrogram? Начните с сессий и api_id/hash — это решает большинство бед. Фикс getpass в IDE спасет от 2FA-зависаний, а VPN обойдет блокировки. Протестируйте шаги, и ваш userbot полетит: клик по кнопкам без глюков. Если упорствуете — логи в комменты, разберем. Удачи с Telegram API!

Авторы
Проверено модерацией
Модерация
Поч��му не приходит код подтверждения в Telethon и Pyrogram?