Native Rich DSL выходит в GramIO 0.15
10 сентября 2026
Этот точечный релиз делает структурированные Rich Messages Telegram удобными для сборки и безопасными для отправки. Markdown-ветка остаётся на месте, а native-ветка теперь покрывает таблицы, медиа, кнопки и вложенные контейнеры.
Статус релиза
Линейка опубликована в npm и GitHub в порядке зависимостей. Примеры документации и smoke-suite опубликованных пакетов используют версии из таблицы ниже.
Релизная линейка
| Порядок | Пакет | Версия | Статус |
|---|---|---|---|
| 1 | @gramio/contexts | 0.12.0 | Опубликован |
| 1 | @gramio/format | 0.12.1 | Опубликован |
| 1 | @gramio/files | 0.8.1 | Опубликован |
| 2 | gramio | 0.15.1 | Опубликован |
@gramio/format 0.12 — две явные ветки Rich Messages
Старый Markdown-сериализатор таблиц теперь называется markdownTable(). Функция table() создаёт native InputRichBlockTable, а blocks([...]) собирает native-блоки в InputRichMessage:
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.
Чеклист обновления
- Markdown-вызовы
table()заменить наmarkdownTable(). - Для структурированных Rich Messages использовать
blocks([ ... ])и nativetable(). - Перед передачей файла в native media-хелпер делать
await MediaUpload.path(...)(или другого upload-хелпера). - Новые загрузки оставлять для обычных отправок/редактирований; rich-контент inline-результата и редактирование по
inline_message_idтребуют уже существующий Telegramfile_id.
Полные примеры есть в гайде Rich Messages и английской версии.