Как узнать chat id в Telegram-боте
Что такое chat id, чем он отличается от идентификатора пользователя, как его получить для личного чата, группы и канала, и почему у супергрупп он выглядит иначе.
Все статьи гида Telegram-боты · 13
Идентификатор чата нужен всегда, когда бот пишет первым: уведомления, рассылки, отправка в канал. Разберём, что это и как его получить.
Что такое chat id
Это числовой идентификатор диалога, в который бот отправляет сообщение. Не имя, не адрес, не ссылка - именно число.
Виды и как они выглядят:
- Личный чат. Положительное число, совпадает с идентификатором пользователя.
- Обычная группа. Отрицательное число.
- Супергруппа и канал. Отрицательное число с длинным префиксом. Выглядит непривычно, но это нормальный формат.
Практическая деталь: у публичного канала вместо числа можно использовать его адрес вида @channel. Для приватного - только число.
Как получить
Способ, который работает всегда:
- Начните диалог с ботом или добавьте его в нужный чат.
- Отправьте туда любое сообщение. Для канала - опубликуйте пост, а бот должен быть администратором.
- Посмотрите обновления бота - идентификатор чата придёт вместе с сообщением.
В коде идентификатор доступен в каждом входящем событии, и в обработчике его можно просто взять и записать. Для рассылок это единственный правильный способ: сохраняйте идентификатор при первом контакте, а не собирайте потом вручную.
Сторонние боты-помощники, показывающие идентификатор, существуют, и для разового получения ими пользуются. Помните, что вы пересылаете сообщение чужому боту: для рабочих чатов это стоит учитывать.
Отличие от user id
В личной переписке они совпадают - и именно поэтому путаница обнаруживается только в группе.
Идентификатор пользователя принадлежит человеку и постоянен. По нему вы узнаёте, кто нажал кнопку, кто отправил сообщение, чьи это заказы.
Идентификатор чата принадлежит диалогу. По нему вы отправляете сообщение.
В группе один чат и много пользователей. Типовая ошибка: ответить пользователю по идентификатору чата - и личный ответ уходит в группу, где его видят все.
Правило: проверяйте права по идентификатору пользователя, отправляйте по идентификатору чата.
Группы и каналы
Бот в группе видит не все сообщения. По умолчанию включён режим приватности: он получает только адресованные ему сообщения и команды. Если бот должен читать всё, режим выключается у BotFather осознанно - см. токен и настройки.
В канал бот пишет только как администратор. Без прав администратора отправка не пройдёт.
Идентификатор группы меняется при переходе в супергруппу. Это самая коварная ловушка: бот годами писал в группу, группа выросла и стала супергруппой, идентификатор изменился, отправка перестала работать. Если бот внезапно перестал писать в чат - проверьте это первым делом.
Практические выводы
- Сохраняйте идентификатор при первом контакте в базу. Собирать его потом руками - лишняя работа.
- Не храните идентификаторы в коде. Они меняются, и правка кода ради этого - плохая схема.
- Обрабатывайте ошибку отправки. Пользователь мог заблокировать бота, бота могли удалить из группы. Необработанная ошибка в рассылке останавливает всю рассылку.
- Проверяйте права по пользователю, а не по факту, что сообщение пришло из нужного чата.
Обзор - гид по Telegram-ботам.
Вопросы и ответы
Как узнать chat id группы или канала?
Добавьте бота в группу или канал, отправьте туда любое сообщение и посмотрите обновления бота: в них придёт идентификатор чата. У супергрупп и каналов он отрицательный и начинается с длинного префикса - это нормально, так и должно быть.
Чем chat id отличается от user id?
В личной переписке они совпадают: чат с человеком и есть человек. В группе они разные: идентификатор чата принадлежит группе, а идентификатор пользователя - конкретному участнику. Путаница между ними - причина ошибок вида «сообщение ушло не туда».
Может ли chat id измениться?
Идентификатор пользователя постоянен. Идентификатор группы меняется при преобразовании обычной группы в супергруппу: это разные объекты, и старый идентификатор перестаёт работать. Если бот вдруг перестал писать в группу, проверьте это в первую очередь.
Ещё по теме
- Telegram-боты на Python: полный практический гидГид
- Кнопки в Telegram-боте: обычные и инлайнЧем обычная клавиатура отличается от инлайн-кнопок, когда какая нужна, как обрабатывать нажатия и почему обязательно подтверждать callback.
- Конструкторы Telegram-ботов против кода: что выбратьКакие задачи закрывают конструкторы ботов, где они упираются в потолок, из чего складывается стоимость владения и как выбрать между конструктором и кодом.
- Оплата в Telegram-боте: приём платежей по шагамКакие есть способы принимать оплату в боте, чем они отличаются, как обрабатывать подтверждение платежа и почему идемпотентность здесь обязательна.
Сделаю под ключ
Сделаю Telegram-бота под ваш процесс
Заявки, оплата, выдача доступа, рассылки и воронка в одном боте, с админкой для вас.
от 300 $ · 3-7 дней
«Действительно гуру своего дела. Узнал массу новой и полезной информации по телеграм рассылкам. До этого сжег очень много денег на оплате услуг посредников, но после общения с исполнителем буду делать все сам)»