Skip to content

Native Rich DSL выходит в GramIO 0.15

10 сентября 2026

Этот точечный релиз делает структурированные Rich Messages Telegram удобными для сборки и безопасными для отправки. Markdown-ветка остаётся на месте, а native-ветка теперь покрывает таблицы, медиа, кнопки и вложенные контейнеры.

Статус релиза

Линейка опубликована в npm и GitHub в порядке зависимостей. Примеры документации и smoke-suite опубликованных пакетов используют версии из таблицы ниже.

Релизная линейка

ПорядокПакетВерсияСтатус
1@gramio/contexts0.12.0Опубликован
1@gramio/format0.12.1Опубликован
1@gramio/files0.8.1Опубликован
2gramio0.15.1Опубликован

@gramio/format 0.12 — две явные ветки Rich Messages

Старый Markdown-сериализатор таблиц теперь называется markdownTable(). Функция table() создаёт native InputRichBlockTable, а blocks([...]) собирает native-блоки в InputRichMessage:

ts
import { blocks, markdownTable, table } from "gramio/rich";

const native = blocks([
  table([
    ["Package", "Version"],
    ["gramio", "0.15.1"],
  ]),
]);

const markdown = markdownTable([
  ["Package", "Version"],
  ["gramio", "0.15.1"],
]);

Это намеренное breaking-изменение после @gramio/format 0.11: вызовы, которым от table() нужна Markdown-строка, надо заменить на markdownTable(), а native-результат отправлять через blocks(). Native media-хелперы принимают URL/file ID, Blob/File и полный InputMedia*. Результат MediaUpload нужно дождаться через await, а видимый caption передавать в options хелпера. Версия 0.12.1 также исправляет обёртку прямых Blob/File в native InputMedia*.

@gramio/contexts 0.12 — native-значения маршрутизируются автоматически

ctx.send(), ctx.reply() и ctx.editText() принимают и Markdown rich values, и native структурированные значения. Брендированные значения уходят в sendRichMessage/editMessageText с правильным полем rich_message, а обычные строки по-прежнему используют обычные методы Bot API.

streamRichMessage() остаётся только Markdown-потоком: Telegram draft принимает Markdown chunks. Передача native-значения теперь завершается явной ошибкой, а не молча теряет блоки.

@gramio/files 0.8.1 — вложенные загрузки определяются надёжно

Multipart-детектор теперь находит Blob, File и MediaUpload на любой глубине Rich Messages, включая blockquote, list, collage, slideshow, details, thumbnail и cover. У sendRichMessageDraft загрузки по-прежнему отключены по контракту Telegram.

Чеклист обновления

  1. Markdown-вызовы table() заменить на markdownTable().
  2. Для структурированных Rich Messages использовать blocks([ ... ]) и native table().
  3. Перед передачей файла в native media-хелпер делать await MediaUpload.path(...) (или другого upload-хелпера).
  4. Новые загрузки оставлять для обычных отправок/редактирований; rich-контент inline-результата и редактирование по inline_message_id требуют уже существующий Telegram file_id.

Полные примеры есть в гайде Rich Messages и английской версии.