Привет, Хабр.

Каждый, кто писал более-менее сложного бота для Telegram, знаком с циклом «слепого» дебага. Допустим, вам нужно обработать специфический кейс: invoice от платежной системы, сообщение из топика супергруппы или хитрый форвард со скрытым отправителем.

Документация Telegram API обширна, но не всегда дает наглядное представление о том, что конкретно прилетит в вебхук. Обычно мы делаем так:

  1. Пишем хендлер.

  2. Ставим print(message) или logger.info(update).

  3. Деплоим/перезапускаем.

  4. Триггерим событие.

  5. Лезем в stdout или log-файл, копируем JSON, идем в форматтер...

Это долго. Чтобы сократить этот цикл, я написал утилиту - @re_GetMyIDBot.

По сути, это сниффер, который принимает любое входящее сообщение (текст, медиа, форвард, сервисные сообщения) и отдает вам его сырую структуру.

Кнопка «Get JSON»

Большинство ID-ботов в Телеграме умеют только одну вещь: отдавать chat_id. Мой кейс был шире - мне нужно видеть полный объект Message или Update, чтобы понимать иерархию полей.

Как это работает:

  1. Вы пересылаете боту сообщение (или пишете в него, добавляете в группу/канал).

  2. Бот отдает основные ID.

  3. Нажимаете инлайн-кнопку Get JSON.

  4. Получаете полный дамп апдейта.

Пример выхлопа

Бот присылает отформатированный 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).

  1. Моноширинный шрифт. Все ID (User ID, Chat ID, Channel ID) приходят в формате Code (моноширина). Кликнул - скопировал.

  2. Получение ID канала. Вечная боль админов - узнать ID канала (который начинается на -100). Обычно приходится гуглить сторонние сервисы. Тут достаточно переслать пост из канала боту - он распарсит forward_from_chat и выдаст ID.

  3. Чистота. Никакой воды, приветственных сообщений на пол-экрана и эмодзи-спама.

Монетизация? Нет.

Это инструмент, а не стартап.

  • Нет рекламы.

  • Нет рассылок.

  • Бесплатно.

Я использую его ежедневно при настройке CI/CD пайплайнов (когда нужно быстро прописать ID админа или чата для алертов) и при разработке новых фич, чтобы свериться со структурой API.

Итог

Если вы устали гадать, в каком поле лежит ID стикер-пака или как выглядит JSON при оплате через Telegram Stars - пользуйтесь.

Бот: https://t.me/re_GetMyIDBot

Буду рад, если инструмент сэкономит вам пару часов жизни. Фидбек и feature requests в комментариях приветствуются.