Поч��му не приходит код подтверждения в Telethon и Pyrogram?
Не приходит код подтверждения Telegram при авторизации в Telethon или Pyrogram? Узнайте причины: неверные api_id/api_hash, конфликты сессий, проблемы в IDE, блокировки IP. Шаги по исправлению: удалите сессии, используйте VPN, фикс getpass для 2FA.
Почему Telethon и Pyrogram не отправляют код подтверждения при авторизации по номеру телефона?
При запуске клиента ввожу номер в формате +…, но код не приходит ни в Telegram, ни в виде SMS. В чём может быть проблема? Пробовал обе библиотеки.
Пример кода на Telethon (аналогично с Pyrogram):
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
- Проблемы с api_id и api_hash
- Конфликты сессий и ошибки авторизации
- Особенности Telethon в IDE и с 2FA
- Pyrogram: типичные сбои и фиксы
- Дополнительные причины и что делать дальше
- Источники
- Заключение
Почему не приходит код подтверждения в 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):
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: может конфликтовать. Лучше так:
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 аналог):
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 и спите.
Дополнительные причины и что делать дальше
Что делать, если не приходит код подтверждения? Шаги:
- VPN/Proxy: Telegram блочит datacenter IP. NordVPN или socks5.
- Новый номер: тест на виртуалке? Берите реальный SIM.
- Ждите: лимит 3 запроса/час на номер.
- Проверьте app в Telegram: коды приходят в “Recently active sessions”?
- Логи:
client.add_event_handlerдля debug.
Поиск “telethon не приходит код” выдает тонну тредов — все сводится к сессиям и IDE.
Если ничего: новый api_app, другой аккаунт. Работает? Поздравляю.
Коротко: удалите сессию → верные ключи → терминал → VPN. 99% фигня уйдет.
Источники
- Почему зависает авторизация Telethon на двухфакторной аутентификации? — Хабр Q&A
- Not receiving a code · Issue #3964 · LonamiWebs/Telethon
- Authorization — Pyrogram Documentation
- API Errors — Telethon Documentation
- 406 - NotAcceptable — Pyrogram Documentation
- 401 - Unauthorized — Pyrogram Documentation
Заключение
Не приходит код подтверждения в Telethon или Pyrogram? Начните с сессий и api_id/hash — это решает большинство бед. Фикс getpass в IDE спасет от 2FA-зависаний, а VPN обойдет блокировки. Протестируйте шаги, и ваш userbot полетит: клик по кнопкам без глюков. Если упорствуете — логи в комменты, разберем. Удачи с Telegram API!