Поиск chat ID в Telegram
Chat ID в Telegram — это число, которым Bot API адресует чат, и это не имя пользователя. По его форме видно тип чата. Пользователь — положительное число, старая группа — отрицательное, а супергруппа или канал — отрицательное с 100 сразу после минуса, так что канал выглядит как −1001006503122. Вставьте любой публичный @username выше и получите это число сразу в двух ходовых формах. Чего не может ни один инструмент, так это превратить имя человека в его user ID. Telegram не даст боту определить того, с кем тот никогда не общался, какой бы токен у бота ни был. Мы проверили это сами, прежде чем строить, поэтому страница объясняет такой случай ниже, а не показывает его как сбой.
- Обе формы ID. Число для Bot API и тот же ID без префикса
−100. Инструментам MTProto нужен второй, и путаница между ними — обычная причина загадочного chat not found. - Никакого токена. Поиск работает на нашем собственном одноразовом боте. Токен — полный контроль над вашим ботом, а здесь ничего вашего для работы не нужно.
- Честный ответ по остальному. Приватные чаты и личные аккаунты не определит никто. Путь, который действительно работает, расписан ниже.
Узнать chat id в Telegram
Публичные каналы, публичные группы и боты. Токен вашего бота не нужен — запрос идёт через наш.
Что определяется, а что нет
Этот поиск ID определяет то, что готов определить Bot API, и мы измерили эти случаи на живом API, а не угадали. Бот, не состоящий ни в одном чате, по одному только имени определяет публичный канал, публичную супергруппу и другого бота. Так @durov становится −1001006503122, @python — супергруппой, а @BotFather — 93372553. Аккаунты реальных людей возвращают chat not found каждый раз, каким бы публичным ни было их имя. Это осознанная граница приватности внутри Telegram, и её не сдвинет ни токен, ни сервис, ни хитрость. Всё, что утверждает обратное, либо парсит что-то другое, либо продаёт вам ложь.
Как получить ID приватного чата — а это случай большинства
У приватного чата, приватной группы и вашей собственной переписки с ботом нет имени, которое можно определить. До них не дотянется ни один поиск, включая этот. Путь, который работает, занимает около минуты и требует собственного бота.
- 1Создайте бота и скопируйте его токен. Откройте @BotFather в Telegram, отправьте /newbot и скопируйте выданный токен. Держите его в секрете — это полный контроль над этим ботом.
- 2Добавьте бота в чат, ID которого нужен. Для группы или канала добавьте бота участником. Для личной переписки откройте чат с ботом и нажмите «Начать».
- 3Отправьте туда одно сообщение. Подойдёт любое. ID несёт именно то обновление, которое получит ваш бот.
- 4Прочитайте ID из getUpdates. Вызовите https://api.telegram.org/bot<TOKEN>/getUpdates и прочитайте message.chat.id для чата или message.from.id для пользователя. Учтите: пока установлен вебхук, getUpdates не возвращает ничего — сначала удалите вебхук или читайте ID прямо в своём обработчике вебхука.
Если ваш бот ещё не запущен, последний шаг делается одним вызовом:
curl "https://api.telegram.org/bot$BOT_TOKEN/getUpdates" \
| python3 -c "import sys,json; [print(u['message']['chat']['id'], u['message']['chat'].get('title') or u['message']['chat'].get('username','')) for u in json.load(sys.stdin)['result'] if 'message' in u]"Запускайте это со своим токеном и в своём терминале. Токен не покидает вашу машину. Есть публичные боты, которые возвращают ID, и они работают, но попутно узнают ID вашего аккаунта. Ваш собственный бот — нет.
Почему у одного ID две формы
Внутренний протокол Telegram и Bot API нумеруют один и тот же канал по-разному. Внутри канал — положительный ID вроде 1006503122; Bot API добавляет к нему префикс −100, чтобы одно пространство номеров вмещало пользователей, группы и каналы без коллизий. В природе встречаются обе формы. Экспорты чатов, библиотеки MTProto вроде Telethon и Pyrogram и часть SMM-панелей используют голое число. Подстановка не той формы даёт ошибку, которая не называет ни ту ни другую, поэтому мы показываем обе, и вопрос не возникает.
Chat ID в Telegram — вопросы
- Что такое chat ID?
- Chat ID — это число, которым Telegram Bot API адресует диалог. Это не имя пользователя и не отображаемое имя. Это стабильный числовой идентификатор, который для конкретного чата не меняется никогда. Его форма кодирует тип чата. Пользователь — положительное число, старая обычная группа — отрицательное, супергруппа или канал — отрицательное со 100 сразу после минуса. Этот номер принимает каждый вызов Bot API, который что-то отправляет в чат, поэтому его и спрашивает любая инструкция по интеграции.
- Что можно сделать, зная Telegram ID?
- Очень немногое, и это стоит сказать прямо, потому что спрашивают обычно от беспокойства. Chat ID — это адрес, а не ключ доступа. Он позволяет боту, которому вы уже дали разрешение, отправить сообщение в этот чат, и больше ничего. Знание вашего ID не даёт постороннему написать вам, что-то прочитать, увидеть ваш номер телефона или найти аккаунт. Бот вообще может писать только тому, кто сам обратился к нему первым. По-настоящему важен токен бота: утёкший токен — это полный контроль над ботом.
- Можно ли отследить человека по Telegram ID?
- До человека — нет, ни у кого за пределами Telegram. ID это внутренний идентификатор, к которому не привязаны ни имя, ни телефон, ни местоположение, и публичного справочника, сопоставляющего ID с аккаунтами, не существует. Поэтому бот и не может в принципе получить ID человека по его имени. Что ID действительно выдаёт, так это тип чата и примерный возраст аккаунта, потому что ID раздаются по возрастанию. Сервисы, обещающие «пробить» Telegram ID до личности, либо используют данные, полученные как-то иначе, либо продают пустоту.
- Как узнать chat ID в Telegram?
- Для всего публичного вставьте @username выше и сразу получите числовой ID. Для приватного чата, приватной группы или вашей собственной переписки с ботом никакого поиска нет. Отправьте боту любое сообщение и прочитайте chat.id из полученного обновления. Для приватных чатов существует только этот путь. Он же объясняет, почему в большинстве ответов на эту тему советуют добавить бота, а не отправляют к инструменту.
- Почему ID моей группы отрицательный и что за префикс −100?
- Telegram различает типы чатов знаком и формой ID. Пользователь — положительное число. Старая обычная группа — отрицательное. Супергруппа или канал — отрицательное, со 100 сразу после минуса. Так канал с внутренним ID 1006503122 виден Bot API как -1001006503122. В ходу обе формы. Библиотеки MTProto, экспорты чатов и часть панелей используют голое число, а Bot API хочет вариант с префиксом. Подстановка одного вместо другого даёт «chat not found» в боте, который в остальном настроен правильно, — поэтому мы показываем обе формы выше.
- Можно ли получить user ID по имени пользователя?
- Нет, и ни один инструмент этого не может. Мы это измерили, а не предположили. Бот, вызывающий getChat для публичного имени реального человека, получает «chat not found» каждый раз: Telegram не даёт ботам определять людей, которые с ними не взаимодействовали. Это граница приватности, а не ограничение этого инструмента, и дело не в «правильном» токене. Если нужен ID пользователя, пусть он напишет вашему боту, а вы прочитаете message.from.id из обновления. Инлайн-кнопка тоже подойдёт: нажатие присылает callback query с тем же полем.
- Нужно ли отдавать вам токен бота?
- Нет, и относитесь с подозрением ко всему, что его просит. Токен бота — полный контроль над ботом. Тот, у кого он есть, читает каждое полученное ботом сообщение, пишет от его имени и меняет его настройки. Наш поиск работает на нашем собственном одноразовом боте, который никуда не входит и ничего не может сделать с именами, которые определяет. На каждой коммерческой странице сайта написано, что мы не просим логин. Бесплатный инструмент, который просит токен, делал бы это утверждение ложью.
- Почему пишет «chat not found» для имени, которое я вижу в приложении?
- Один и тот же ответ дают три случая, и Telegram их не различает. Имя принадлежит человеку, а человека бот определить не может. Имени не существует — возможно, его освободили или сменили, ведь имена в Telegram не вечны. Или канал приватный, и определять там нечего: единственный вход — пригласительная ссылка. Если в приложении вы его открываете, а поиск не находит, почти наверняка это первый случай.
- Как получить chat ID и токен бота?
- Они берутся в двух разных местах — поэтому эта пара и путает. Токен бота выдаёт @BotFather: отправьте /newbot, ответьте на два вопроса, и он вернёт строку вида 123456:AA… Относитесь к ней как к паролю, потому что это полный контроль над ботом. Chat ID берётся из самого чата. Для публичного канала, группы или бота вставьте @username выше. Для чего угодно приватного добавьте своего бота в чат, отправьте одно сообщение и прочитайте message.chat.id из getUpdates. Токен определяет вашего бота. ID группы или канала определяет, куда он должен отправлять.
- Chat ID одинаковый для всех?
- Для канала, супергруппы или бота — да. ID идентифицирует сам чат, поэтому все боты видят одно и то же число, и оно не меняется. С личной перепиской пользователя и бота иначе: там ID это собственный ID пользователя, тоже стабильный, но получить его может только ваш бот и только после того, как пользователь с ним связался. Ничего секретного в ID нет. Это адрес, а не ключ доступа.
- Как узнать свой собственный Telegram user ID?
- Напишите любому боту, который его возвращает, или напишите своему боту и прочитайте message.from.id из обновления. Определить его по имени нельзя нигде, включая эту страницу, по описанной выше причине. Если вы строите что-то, где нужен ID пользователя, проектируйте сценарий так, чтобы пользователь обратился к боту первым. ID приходит с этим первым сообщением и дальше не меняется.
Дальше отправляете в этот чат? Форматтер берёт на себя экранирование. Нужны не ID, а цифры аудитории канала? Проверка канала читает их. Всё остальное — в каталоге инструментов.