Дата публикации:
Почему возникает вопрос?
В Telegram‑сообщениях часто встречаются такие случаи, когда отправитель скрыт:
- сообщения от имени канала;
- анонимные сообщения администраторов групп;
- сообщения, пересланные через ботов‑посредников.
Для разработчиков ботов и администраторов групп важно понять, кто именно стоит за тем или иным сообщением, чтобы правильно обрабатывать команды, вести статистику или соблюдать правила сообщества.
Техническая сторона: как Telegram помечает сообщения
Основные поля объекта Message
В официальном Telegram Bot API объект Message содержит несколько полей, позволяющих определить источник:
from– объектUser. Заполняется, если сообщение отправлено обычным пользователем.sender_chat– объектChat. Заполняется, если сообщение пришло от имени канала или анонимного администратора группы.forward_from,forward_from_chat,forward_sender_name– данные о пересланных сообщениях.
Что происходит, когда отправитель скрыт?
Если пользователь включил «Анонимный администратор» в группе, то вместо from будет заполнено поле sender_chat с ID группы. Аналогично, сообщения от каналов всегда приходят с sender_chat.id, где id – это channel_id.
Что может дать Telegram Bot API
Для получения информации о скрытом отправителе необходимо:
- Обработать входящее событие
Messageв webhook или long‑polling‑режиме. - Проверить наличие полей
fromиsender_chat. - При необходимости запросить дополнительные данные через методы
getChatиgetChatMember.
Как определить отправителя в разных сценариях
| Сценарий | Что проверяем | Как интерпретировать |
|---|---|---|
| Обычное личное сообщение | message.from существует | Отправитель – пользователь с id = message.from.id |
| Сообщение от канала | message.sender_chat && message.sender_chat.type == "channel" | Отправитель – канал, ID берём из message.sender_chat.id |
| Анонимный администратор группы | message.sender_chat && message.sender_chat.type == "group" (или «supergroup») | Отправитель – группа, ID = message.sender_chat.id. Чтобы узнать реального админа, нужно запросить getChatAdministrators и сравнить время отправки. |
| Пересланное сообщение | Наличие forward_from / forward_from_chat | Исходный отправитель хранится в соответствующем поле. |
| Ответ на сообщение бота | Поле reply_to_message | Можно «прокрутить» цепочку до оригинального отправителя. |
Ограничения и юридические аспекты
- Конфиденциальность. Telegram специально скрывает реального автора анонимных сообщений; Боты не могут «взломать» эту защиту без согласия пользователя.
- Политика Telegram. Попытки получения личных данных без согласия могут привести к блокировке бота.
- Законодательство. В разных странах сбор персональных данных регулируется законами (GDPR, РФ‑152‑ФЗ и т.д.). Всегда информируйте пользователей о том, какие данные вы собираете.
Практический пример на Python (aiogram 3.x)
from aiogram import Bot, Dispatcher, types
from aiogram.utils import executor
API_TOKEN = "YOUR_BOT_TOKEN"
bot = Bot(token=API_TOKEN)
dp = Dispatcher
@dp.message
async def handle_message(msg: types.Message):
# 1. Обычный пользователь
if msg.from_user:
sender = f"Пользователь: {msg.from_user.full_name} (id={msg.from_user.id})"
# 2. Анонимный администратор или канал
elif msg.sender_chat:
chat_type = msg.sender_chat.type
if chat_type in ("group", "supergroup"):
sender = f"Анонимный администратор группы (id={msg.sender_chat.id})"
elif chat_type == "channel":
sender = f"Канал (id={msg.sender_chat.id})"
else:
sender = f"Неизвестный чат (type={chat_type})"
else:
sender = "Не удалось определить отправителя"
# 3. Пересланные сообщения
if msg.forward_from or msg.forward_from_chat:
forward = "Переслано"
else:
forward = ""
await msg.reply(f"{forward}{sender}")
if __name__ == "__main__":
executor.start_polling(dp, skip_updates=True)
В этом примере бот выводит в ответе, от кого пришло сообщение, учитывая все основные варианты.
Часто задаваемые вопросы (FAQ)
Можно ли узнать реального человека за анонимным администратором?
Стандартными средствами API – нет. Единственный способ – запросить список администраторов группы (getChatAdministrators) и сопоставить время отправки сообщения с временем последнего сообщения каждого админа. Это лишь эвристика и не гарантирует 100% точности.
Что делать, если в поле sender_chat стоит ID бота‑пустышки GroupAnonymousBot?
Это «заполнитель», который Telegram использует для анонимных сообщений. Реальный ID группы хранится в том же поле, просто в виде отрицательного числа (например, -1001234567890). Его можно передать в getChat для получения названия группы.
Как отследить, кто переслал сообщение из канала в личный чат?
Пересланные сообщения содержат forward_from_chat (для каналов) и forward_signature (если администратор подписал сообщение). При наличии этих полей можно отобразить оригинальный канал и, при желании, ссылку на него.
Можно ли полностью скрыть отправителя от ботов?
Да. Если пользователь отправляет сообщение через Telegram Premium в режиме «Отправить анонимно», бот получит только sender_chat без информации о реальном пользователе. Это поведение не меняется.
Определить, от кого пришла телеграмма, возможно в большинстве случаев, используя поля from и sender_chat объекта Message. Однако полная анонимность, предоставляемая Telegram, остаётся надёжной защитой: реального человека за анонимным администратором или за бот‑пустышкой узнать нельзя без дополнительных действий со стороны администраторов группы или официальных запросов в Telegram.
Для разработчиков главное – правильно обрабатывать полученные данные, уважать конфиденциальность пользователей и соблюдать правила платформы.
Статья подготовлена автоматически на основе публичных материалов и официальной документации Telegram Bot API.