Как узнать chat id в Telegram: пользователь, группа, канал и тема форума
Чтобы узнать chat id в Telegram, напишите что-нибудь своему боту и вызовите метод getUpdates: идентификатор чата лежит в поле message.chat.id. С группой то же самое, только бота сначала нужно добавить в чат, а в канале — сделать администратором. Ниже — пошагово для личного чата, группы, супергруппы, канала и темы форума, а также что делать, если getUpdates возвращает пустой result или 409 Conflict.
Что такое chat id и как он выглядит
chat_id — уникальный идентификатор чата, обязательный параметр sendMessage и почти всех методов отправки. По знаку и префиксу сразу видно тип чата:
| Чат | chat.type | Пример id |
|---|---|---|
| Личный чат с пользователем | private | 123456789 — положительный, совпадает с id пользователя |
| Обычная группа | group | -987654321 — отрицательный |
| Супергруппа, в том числе форум | supergroup | -1001234567890 |
| Канал | channel | -1009876543210 |
- Минус и префикс
-100— часть id. Если их отрезать, API ответит400 Bad Request: chat not found. - Id бывает длиннее 32 бит: храните его в BIGINT или int64.
- Для публичных каналов и супергрупп вместо числа можно передать
@username. Для пользователей так нельзя — только числовой id. - Число до двоеточия в токене — это id самого бота, а не ваш chat id.
Как узнать chat id телеграм-бота в личном чате
- Откройте своего бота и нажмите «Запустить» или отправьте любое сообщение.
- Вызовите
getUpdates— через curl или в Bot API Tester на методе getUpdates. - Найдите в ответе
message.chat.id.
export BOT_TOKEN="123456789:AAEexampleTokenReplaceWithYours"
curl -s "https://api.telegram.org/bot$BOT_TOKEN/getUpdates"
{
"ok": true,
"result": [
{
"update_id": 851234567,
"message": {
"message_id": 15,
"from": {"id": 123456789, "is_bot": false, "first_name": "Иван", "username": "ivan_dev"},
"chat": {"id": 123456789, "first_name": "Иван", "username": "ivan_dev", "type": "private"},
"date": 1793275200,
"text": "привет"
}
}
]
}
В личном чате chat.id совпадает с from.id. Если апдейтов много, удобнее сразу вывести список чатов. С утилитой jq это одна строка:
curl -s "https://api.telegram.org/bot$BOT_TOKEN/getUpdates" \
| jq '.result[] | (.message // .channel_post // .my_chat_member // empty) | .chat | {id, type, title, username}'
То же на Python:
import os
import requests
token = os.environ["BOT_TOKEN"]
updates = requests.get(f"https://api.telegram.org/bot{token}/getUpdates", timeout=10).json()["result"]
for update in updates:
item = update.get("message") or update.get("channel_post") or update.get("my_chat_member") or {}
chat = item.get("chat")
if chat:
print(chat["id"], chat["type"], chat.get("title") or chat.get("first_name"))
Как узнать chat id группы
- Добавьте бота в группу как обычного участника. Если бот не находится или не добавляется, проверьте
/setjoingroupsв @BotFather. - Отправьте в группе команду с username бота:
/start@your_bot. - Вызовите
getUpdatesи возьмитеmessage.chat.id— отрицательное число, аchat.titleподскажет, та ли это группа.
Почему именно команда с @username: по умолчанию у ботов включён privacy mode. В группе бот получает только команды, адресованные ему (/command@your_bot), ответы на свои сообщения, сообщения, отправленные через него, и служебные сообщения. Обычное «привет» в группе до бота не дойдёт. Служебные сообщения приходят всегда, поэтому id часто виден сразу после добавления бота: в апдейте my_chat_member и в сообщении с new_chat_members.
Включён ли privacy mode, видно в ответе getMe: "can_read_all_group_messages": false означает, что включён. Чтобы бот видел все сообщения, сделайте его администратором группы или отключите режим командой /setprivacy — после этого бота нужно удалить из группы и добавить заново.
Группа стала супергруппой. Telegram превращает обычную группу в супергруппу при некоторых изменениях настроек, например при включении тем. Id при этом меняется: бот получит служебное сообщение с migrate_to_chat_id, а отправка по старому id вернёт ошибку с новым id в parameters:
{
"ok": false,
"error_code": 400,
"description": "Bad Request: group chat was upgraded to a supergroup chat",
"parameters": {"migrate_to_chat_id": -1001234567890}
}
Chat id канала: публичного и приватного
Публичный канал. Числовой id можно вообще не искать: в chat_id подходит @channelusername. Публиковать сообщения бот всё равно сможет, только если он администратор канала с правом публикации. Если для интеграции нужно именно число, вызовите getChat:
curl -s "https://api.telegram.org/bot$BOT_TOKEN/getChat?chat_id=@my_channel"
# в ответе: "result": {"id": -1001234567890, "title": "...", "type": "channel", ...}
Приватный канал.
- Добавьте бота в администраторы канала.
- Опубликуйте в канале любой пост.
- Вызовите
getUpdates— придёт апдейтchannel_post, id канала вchannel_post.chat.id.
{
"update_id": 851234570,
"channel_post": {
"message_id": 7,
"sender_chat": {"id": -1009876543210, "title": "Закрытый канал", "type": "channel"},
"chat": {"id": -1009876543210, "title": "Закрытый канал", "type": "channel"},
"date": 1793275500,
"text": "Тестовый пост"
}
}
Альтернатива — перешлите любой пост из канала боту в личный чат: в апдейте будет message.forward_origin с типом channel, а id канала — в forward_origin.chat.id.
Темы форума: message_thread_id
В супергруппе с темами ("is_forum": true) chat id один на весь форум, а конкретную тему задаёт message_thread_id. Чтобы его узнать, отправьте в нужной теме команду /start@your_bot и вызовите getUpdates: у сообщения будут поля message_thread_id и "is_topic_message": true. Если тему создаёт сам бот методом createForumTopic, id придёт в ответе в поле message_thread_id.
curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" \
-H "Content-Type: application/json" \
-d '{"chat_id": -1001234567890, "message_thread_id": 42, "text": "Сообщение в нужную тему"}'
Темы бывают и в личных чатах с ботом, если для него включён этот режим, — message_thread_id работает там так же.
Пустой result и 409 Conflict: что делать
Ответ {"ok": true, "result": []} — запрос прошёл, но новых апдейтов нет. Причины:
- боту ничего не писали после последней проверки — в группе помните про privacy mode и пишите команду с
@username; - сообщению больше 24 часов — Telegram хранит апдейты не дольше суток;
- апдейты уже забрал другой процесс с тем же токеном — ваш запущенный бот, n8n или старый скрипт подтвердил их через
offset. Остановите его или ищите chat id в его логах.
Ошибка 409 Conflict: can't use getUpdates method while webhook is active; use deleteWebhook to delete the webhook first — у бота установлен вебхук, например его поставил n8n или фреймворк. Пока вебхук активен, getUpdates не работает. Удалите вебхук — без drop_pending_updates накопленные апдейты сохранятся:
curl -s "https://api.telegram.org/bot$BOT_TOKEN/deleteWebhook"
Если бот в продакшене работает на вебхуке, после этого установите его заново. В Bot API Tester кнопка «Старт» в панели обновлений сама вызывает deleteWebhook перед запуском long polling, а новые апдейты сразу появляются в истории.
Ошибка 409 Conflict: terminated by other getUpdates request — тот же токен одновременно опрашивают два процесса. Оставьте один.
Где пригодится chat id
- Уведомления из скриптов, CI/CD и мониторинга: один вызов
sendMessageс вашим chat id. - n8n и другие сервисы автоматизации: чтобы отправить сообщение, нужен chat id чата или канала.
- ИИ-ассистенты, подключённые к Telegram (например, OpenClaw), обычно просят токен бота и chat id, чтобы знать, с каким чатом работать.
curl -s "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" \
-d chat_id=123456789 \
--data-urlencode "text=Деплой завершён успешно"
Токен для таких интеграций — в гайде как получить токен бота, а форматирование, кнопки и разбор ошибок отправки — в гайде как отправить сообщение через бота. Если бот ещё не создан, начните с инструкции как создать бота в Телеграм.
Частые вопросы
Почему chat id группы отрицательный?
Так Bot API отличает чаты от пользователей: у пользователей id положительный, у обычных групп — отрицательный, а у супергрупп и каналов начинается с -100. Минус и -100 — часть id, передавайте число целиком.
Можно ли узнать chat id пользователя по username?
Нет. В chat_id можно передать @username только канала, супергруппы или бота. Числовой id пользователя бот узнаёт, когда тот сам ему пишет: он приходит в message.from.id и message.chat.id.
Почему getUpdates возвращает пустой result?
Новых апдейтов нет: боту ничего не писали, апдейты старше 24 часов удалены или их уже забрал другой процесс с тем же токеном. Если установлен вебхук, вместо пустого списка придёт 409 Conflict — сначала вызовите deleteWebhook.
Как узнать chat id приватного канала?
Добавьте бота в канал администратором, опубликуйте пост и вызовите getUpdates: id будет в channel_post.chat.id и начнётся с -100. Второй способ — переслать пост из канала боту и взять forward_origin.chat.id.
Может ли chat id группы измениться?
Да, когда обычную группу преобразуют в супергруппу. Новый id вида -100… приходит в поле migrate_to_chat_id, а старый перестаёт работать.
В каком типе данных хранить chat id?
В 64-битном целом (BIGINT, int64). Id может занимать больше 32 бит, но не больше 52 значащих, поэтому int32 не подходит, а int64 и double — подходят.
Читайте также
Как создать бота в Телеграм: от @BotFather до первого сообщения
Как создать бота в Телеграм: регистрация в @BotFather, токен, проверка через getMe, первое сообщение на curl и Python, команды и описание бота.
Что нового в Telegram Bot API 10.0–10.3: rich-сообщения, эфемерные сообщения и гостевой режим
Что нового в Telegram Bot API 10.0–10.3: rich-сообщения, эфемерные сообщения, гостевой режим, заявки на вступление — с примерами и чек-листом миграции.
Лимиты Telegram Bot API: сообщения в секунду, ошибка 429 и размеры файлов
Все лимиты Telegram Bot API в одном месте: сообщения в секунду, ошибка 429 и retry_after, платные рассылки, размеры файлов, длина текста и подписи.
Как отправить сообщение через бота Telegram: sendMessage, разметка и кнопки
Как отправить сообщение через бота Telegram: sendMessage на curl, Python и JavaScript, parse_mode HTML и MarkdownV2, кнопки и ошибки 400, 403, 429.
Токен бота Telegram: как получить, где найти, как проверить и отозвать
Как получить токен бота Телеграм в @BotFather, где взять токен уже созданного бота, как проверить его через getMe и что делать, если токен утёк.
Вебхук для Telegram-бота: настройка setWebhook, проверка и удаление
Как настроить вебхук Телеграм-бота: требования к HTTPS и портам, setWebhook с secret_token, проверка через getWebhookInfo, удаление и частые ошибки.
Тестирование Telegram Mini App: от браузера до отладки на телефоне
Тестирование Telegram Mini App по шагам: mock-режим в браузере, HTTPS-туннель для localhost, тестовая среда, DevTools на телефоне и проверка initData.