Хватит дебажить через print(): Инструмент для просмотра сырых Telegram Update’ов
Привет, Хабр.
Каждый, кто писал более-менее сложного бота для Telegram, знаком с циклом «слепого» дебага. Допустим, вам нужно обработать специфический кейс: invoice от платежной системы, сообщение из топика супергруппы или хитрый форвард со скрытым отправителем.
Документация Telegram API обширна, но не всегда дает наглядное представление о том, что конкретно прилетит в вебхук. Обычно мы делаем так:
Пишем хендлер.
Ставим
print(message)илиlogger.info(update).Деплоим/перезапускаем.
Триггерим событие.
Лезем в stdout или log-файл, копируем JSON, идем в форматтер...
Это долго. Чтобы сократить этот цикл, я написал утилиту - @re_GetMyIDBot.
По сути, это сниффер, который принимает любое входящее сообщение (текст, медиа, форвард, сервисные сообщения) и отдает вам его сырую структуру.
Кнопка «Get JSON»
Большинство ID-ботов в Телеграме умеют только одну вещь: отдавать chat_id. Мой кейс был шире - мне нужно видеть полный объект Message или Update, чтобы понимать иерархию полей.
Как это работает:
Вы пересылаете боту сообщение (или пишете в него, добавляете в группу/канал).
Бот отдает основные ID.
Нажимаете инлайн-кнопку Get JSON.
Получаете полный дамп апдейта.

Пример выхлопа
Бот присылает отформатированный JSON, готовый к анализу:
{
"message_id": 1337,
"from": {
"id": 123456789,
"is_bot": false,
"first_name": "Senior",
"username": "developer",
"language_code": "en",
"is_premium": false
},
"chat": {
"id": 123456789,
"first_name": "Senior",
"username": "developer",
"type": "private"
},
"date": 1706692345,
"forward_origin": {
"type": "user",
"sender_user": {
"id": 123456788,
"is_bot": true,
"first_name": "System_n",
"username": "system_nbot"
},
"date": 1766918438
},
"forward_from": {
"id": 123456788,
"is_bot": true,
"first_name": "System_n",
"username": "system_nbot"
},
"forward_date": 1766918438,
"text": "Test message"
}
Сразу видно структуру новых полей, например, forward_origin, который заменил старые поля форвардов в последних версиях Bot API.
Обработка лимитов (Edge Cases)
Телеграм имеет жесткое ограничение на длину одного сообщения - 4096 символов. Если вы ловите жирный апдейт (например, message с огромным caption, кучей entities или сложной клавиатурой), json.dumps() легко пробивает этот лимит.
В коде бота реализована простая логика:
Если len(json) < 4096 - отправляем текстом с подсветкой синтаксиса.
Если больше - бот молча генерирует
.jsonфайл и присылает его документом.
Никаких обрезанных логов в консоли.
UX для разработчика и DevOps
Инструмент делался для себя, поэтому в приоритете скорость и удобство копирования данных в конфиги (.env, settings.py).
Моноширинный шрифт. Все ID (User ID, Chat ID, Channel ID) приходят в формате
Code(моноширина). Кликнул - скопировал.Получение ID канала. Вечная боль админов - узнать ID канала (который начинается на
-100). Обычно приходится гуглить сторонние сервисы. Тут достаточно переслать пост из канала боту - он распарситforward_from_chatи выдаст ID.Чистота. Никакой воды, приветственных сообщений на пол-экрана и эмодзи-спама.
Монетизация? Нет.
Это инструмент, а не стартап.
Нет рекламы.
Нет рассылок.
Бесплатно.
Я использую его ежедневно при настройке CI/CD пайплайнов (когда нужно быстро прописать ID админа или чата для алертов) и при разработке новых фич, чтобы свериться со структурой API.
Итог
Если вы устали гадать, в каком поле лежит ID стикер-пака или как выглядит JSON при оплате через Telegram Stars - пользуйтесь.
Бот: https://t.me/re_GetMyIDBot
Буду рад, если инструмент сэкономит вам пару часов жизни. Фидбек и feature requests в комментариях приветствуются.