Bot API закрывает 90% сценариев, но иногда упирается в потолок: нужно прочитать историю чата, написать первым в личку, парсить публичные каналы, работать с приватной группой как «человек». Здесь приходят user-боты на MTProto через Pyrogram или Telethon — клиентские библиотеки, которые подключаются к Telegram как обычный аккаунт.
Разберём, чем user-бот отличается от Bot API, какие задачи решает, какие риски несёт и как использовать гибридную архитектуру.
Что такое user-бот
User-бот — это программа, авторизующаяся в Telegram через ваш номер телефона и код подтверждения, как обычный клиент (Telegram Desktop, iPhone). С точки зрения серверов Telegram это полноценный пользователь, не отличимый от живого человека.
Доступ ко всем методам MTProto: полная история чатов, поиск по сообщениям, создание групп, управление контактами, любые действия от имени аккаунта.
Сравнение Bot API и MTProto
| Возможность | Bot API | MTProto (user) |
|---|---|---|
| Написать первым в DM | только если /start был | можно любому |
| Читать историю чата | только новые апдейты | вся история |
| Парсинг публичных каналов | только участником | да, без подписки |
| Лимит сообщений | 30/сек | ~30/мин (riskier) |
| Создание групп/каналов | нет | да |
| Управление контактами | нет | да |
| Войти в приватную группу по ссылке | нет | да |
| Файлы > 50 МБ | нужен self-hosted | до 2 ГБ нативно |
| Риск бана | низкий | средний-высокий |
| Юридический статус | разрешено | серая зона ToS |
Когда нужен user-бот
Реальные сценарии:
- Парсинг каналов конкурентов для аналитики.
- Сбор истории чата сообщества для индексации поиском.
- Массовая отправка контактам по списку телефонов.
- Авто-приглашение в свою группу/канал (с осторожностью).
- Архивация группы перед удалением.
- Мониторинг упоминаний бренда в публичных каналах.
- Реакции и просмотр накруткой (не рекомендуем — против ToS).
Pyrogram: минимальный пример
from pyrogram import Client, filters
app = Client(
"userbot_session",
api_id=API_ID,
api_hash=API_HASH,
phone_number=PHONE,
)
@app.on_message(filters.chat("durov"))
async def parse(_, msg):
print(msg.text)
app.run()
api_id и api_hash получаются на my.telegram.org для вашего аккаунта. После первого запуска создаётся userbot_session.session — файл с криптоключами, его нельзя терять и нельзя коммитить.
Telethon: альтернатива
from telethon import TelegramClient, events
client = TelegramClient("session", API_ID, API_HASH)
@client.on(events.NewMessage(chats="durov"))
async def handler(event):
print(event.message.text)
client.start(phone=PHONE)
client.run_until_disconnected()
Telethon чуть старее и стабильнее, Pyrogram быстрее и с более «питоническим» API. Оба покрывают 99% MTProto.
Получение истории чата
async for message in app.get_chat_history("durov", limit=1000):
print(message.date, message.text)
Bot API такого не даёт — только апдейты после подключения. User-бот видит всё.
Парсинг публичных каналов
async def parse_channel(username: str, days: int = 30):
cutoff = datetime.now() - timedelta(days=days)
posts = []
async for msg in app.get_chat_history(username):
if msg.date < cutoff:
break
posts.append({
"id": msg.id,
"text": msg.text or msg.caption,
"views": msg.views,
"date": msg.date,
})
return posts
Параметр views отдаёт количество просмотров поста — must для аналитики.
Гибрид: bot + userbot
Часто оптимально держать оба:
- Bot — для коммуникации с юзерами (быстро, безопасно, бесконечно масштабируется).
- Userbot — для backend-задач (парсинг, история, приглашения).
[Пользователь] → [Bot @official_bot] → [Backend]
↓
[Userbot] → [Telegram MTProto]
(для парсинга, истории и т.п.)
Риски бана
Telegram активно банит userботы за:
- Массовые рассылки (особенно >50 в день незнакомым).
- Создание групп пачкой.
- Автодобавление контактов в группы.
- Реакции/просмотры с одного IP на сотни постов.
- Использование с серверов хостингов (Hetzner, Selectel флагает).
Меры снижения риска:
| Мера | Эффект |
|---|---|
| Использовать резидентский прокси | критично — Telegram любит флагать датацентровые IP |
| Прогрев аккаунта 2–4 недели как «живой» | сильно |
| Не более 30 действий в час | сильно |
| Случайные паузы между действиями (5–60 сек) | средне |
| Не палить аккаунт на разных проектах | средне |
Бан = потеря номера. Используйте отдельные SIM, не основные.
Юридика
Telegram ToS прямо запрещают массовые рассылки, парсинг для перепродажи, накрутку. Парсинг для собственной аналитики — серая зона. Авто-добавление контактов в чужие группы — нарушение.
Прежде чем строить бизнес на userботах, оцените риск. Часто Bot API + публичный RSS-фид канала + ручной экспорт через Telegram Desktop закрывают задачу легально.
Топ-5 ошибок
- Коммитят
.sessionв репозиторий → угоняют аккаунт. - Запускают userbot из Hetzner без прокси → бан в первые 24 часа.
- Делают рассылку на 500 контактов с нового аккаунта → бан моментально.
- Используют MTProto, когда Bot API справился бы — лишний риск без причины.
- Не делают backup .session — теряют доступ при ребуте сервера.
Итого
Userботы — мощный инструмент для backend-автоматизации в Telegram, но с реальными рисками. Bot API оставляет на столе только узкий набор сценариев: парсинг истории, чтение публичных каналов, работа с приватными группами как пользователь. Для них Pyrogram/Telethon — единственный путь. Используйте только для своих аккаунтов, через резидентский прокси, с прогревом и щадящим ритмом действий. Лучше совместить bot (для UX) и userbot (для backend) — так получаете и стабильность, и расширенные возможности.
Частые вопросы
Pyrogram или Telethon — что выбрать?
Pyrogram — современнее, быстрее, идиоматичнее на Python 3.10+. Telethon — старше, больше материалов в сети, лучше работает с устаревшими сценариями (старые версии MTProto). Для новых проектов 2026 года — Pyrogram. Для миграции старого кода — Telethon, чтобы не переписывать.
Можно ли использовать userbot для коммерческой рассылки?
Технически — да, юридически и по ToS — нет. Telegram банит за массовую рассылку, особенно «холодную». Для рассылок есть Bot API + paid broadcasts (от 2025) и канал как broadcast-инструмент. Userbot оставьте для парсинга и backend-задач.
Как защитить .session?
Шифруйте на диске (например, cryptography.Fernet с ключом из ENV), храните в защищённом каталоге (chmod 600, owner — отдельный пользователь). Никогда не коммитьте. Бэкап — в зашифрованное облако (Backblaze B2, Yandex Cloud). При угоне session злоумышленник получает полный доступ к аккаунту.
Что делать, если userbot забанили?
Восстановить аккаунт через support@telegram.org — успех 30–50% при первом обращении. Если бан повторный или за серьёзное нарушение — навсегда. Поэтому держите userботы на отдельных номерах, не привязанных к личному. Бан одного — не катастрофа, бан основного — болезненно.
Можно ли запустить userbot в Docker?
Да, стандартная практика. Образ на python:3.12-slim с pyrogram, volume для .session, переменные окружения с api_id/api_hash. Прокси через переменную HTTP_PROXY или MTProto-прокси прямо в Client(proxy=...). Healthcheck — попытка get_me.
Какие лимиты на скорость в MTProto?
Жёстких лимитов на чтение нет, но getHistory с шагом >100 за раз может вернуть FloodWait на минуты. На запись — лимит мягкий, около 20 сообщений в минуту в один чат, 30 действий в минуту суммарно. Превышение — FLOOD_WAIT_X секунд, надо честно ждать.
Можно ли использовать один userbot для нескольких задач?
Можно, но рискованно. Если задача упадёт под бан, потеряете все сразу. Лучше разделять по аккаунтам: один для парсинга, другой для управления группами, третий для тестов. Это и аудит логичнее, и проблема одного не убивает все.