Поиск 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. 1Создайте бота и скопируйте его токен. Откройте @BotFather в Telegram, отправьте /newbot и скопируйте выданный токен. Держите его в секрете — это полный контроль над этим ботом.
  2. 2Добавьте бота в чат, ID которого нужен. Для группы или канала добавьте бота участником. Для личной переписки откройте чат с ботом и нажмите «Начать».
  3. 3Отправьте туда одно сообщение. Подойдёт любое. ID несёт именно то обновление, которое получит ваш бот.
  4. 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, а цифры аудитории канала? Проверка канала читает их. Всё остальное — в каталоге инструментов.