Telegraf или grammY — что выбрать для Telegram-бота в 2026?
Честное сравнение Telegraf и grammY с примерами кода и таблицей: типы, плагины, вебхуки — и когда вместо библиотеки нужен мультиплатформенный фреймворк.
Telegraf или grammY — что выбрать для Telegram-бота в 2026?
26 Сентября, 2026 Автор: Максим МTelegraf или grammY — что выбрать для Telegram-бота в 2026?
Сравниваем две главные библиотеки по коду и критериям реального проекта — и разбираем третий сценарий, о котором вспоминают слишком поздно.
Первое решение при старте Telegram-бота на Node.js — какую библиотеку взять. Везде, где этот вопрос обсуждают, спорят два лагеря: Telegraf и grammY, и у каждого есть аргументы. В статье — сравнение по критериям, которые решают выбор в реальном проекте, одинаковый бот на каждой библиотеке, чтобы почувствовать эргономику, и разбор сценария, в котором правильный ответ — не библиотека вовсе.
Коротко: что выбрать
- Новый бот только для Telegram — grammY.
- Уже есть проект или команда с опытом на Telegraf — оставайтесь на Telegraf, переезд ради переезда не окупится.
- Бот нужен не только в Telegram, но и в Алисе, VK, MAX — мультиплатформенный фреймворк, подробности ниже.
Telegraf
Старейшая и самая известная библиотека для Telegram-ботов на Node.js. Аргументы «за»: проекту много лет, он пережил несколько поколений ботов; middleware в духе Koa; встроенные сцены для многошаговых диалогов; огромное количество примеров и ответов на Stack Overflow. Честные минусы: разработка местами двигалась неравномерно, типы TypeScript долго были слабым местом (после переписывания на TypeScript в 4-й версии стало заметно лучше), а многие примеры в интернете написаны под старые версии API и не компилируются без правок. Выбирая Telegraf, закладывайте время на сверку примеров с текущей документацией.
import { Telegraf } from 'telegraf';
import { message } from 'telegraf/filters';
const bot = new Telegraf(process.env.BOT_TOKEN!);
bot.start((ctx) => ctx.reply('Привет! Я бот на Telegraf'));
bot.on(message('text'), (ctx) => ctx.reply(`Вы сказали: ${ctx.message.text}`));
bot.launch();
Обратите внимание на message('text') из telegraf/filters: в свежих
версиях это рекомендуемый способ фильтровать апдейты. Старый вариант
bot.on('text', ...), который встречается в большинстве туториалов, помечен как
устаревший.
grammY
grammY — более молодая библиотека, созданная с учётом опыта Telegraf (в том числе одним из его бывших контрибьюторов). Ключевые свойства: полное покрытие Telegram Bot API и быстрая поддержка его новых версий; сильные TypeScript-типы, в которых подсказки работают даже для полей конкретного типа апдейта; подробная документация с разделами-гайдами; экосистема официальных плагинов (сессии, диалоги-conversations, меню, ограничение параллелизма, повтор запросов при лимитах). Работает не только в Node.js, но и в Deno, и в serverless-окружениях. Для задачи «только Telegram-бот» grammY сегодня — стандартная рекомендация: меньше сюрпризов с типами и актуальностью API.
import { Bot } from 'grammy';
const bot = new Bot(process.env.BOT_TOKEN!);
bot.command('start', (ctx) => ctx.reply('Привет! Я бот на grammY'));
bot.on('message:text', (ctx) => ctx.reply(`Вы сказали: ${ctx.message.text}`));
bot.start();
Фильтр 'message:text' — фирменная черта grammY: строка-запрос сразу сужает тип
контекста, и TypeScript знает, что ctx.message.text здесь точно есть.
Сравнительная таблица Telegraf и grammY
Состояние — на момент публикации; перед стартом проекта сверьтесь с официальным сравнением на grammy.dev и динамикой загрузок на npmtrends.
| Критерий | Telegraf | grammY |
|---|---|---|
| Покрытие Bot API | Полное, новые версии — с задержкой | Полное, новые версии появляются быстро |
| TypeScript | Написан на TS с 4-й версии, типы заметно улучшились | Сильная сторона: типы сужаются по фильтрам |
| Многошаговые диалоги | Сцены (Scenes, Wizard) | Плагины conversations и сессий |
| Документация | Справочник API, мало гайдов | Подробные гайды и описание плагинов |
| Примеры в интернете | Очень много, часть устарела | Меньше, но свежее |
| Среды выполнения | Node.js | Node.js, Deno, serverless |
| Другие платформы (Алиса, VK, MAX) | Нет | Нет |
Вебхук или long polling
Этот вопрос встаёт при выборе любой библиотеки. Long polling (bot.launch() в
Telegraf, bot.start() в grammY) удобен при разработке: не нужен HTTPS и внешний
адрес, бот сам забирает обновления. Для продакшена обе библиотеки поддерживают вебхук: Telegram
сам присылает обновления на ваш HTTPS-адрес, сервер не держит постоянный опрос, а бота можно
разместить в serverless-функции. Практическое правило: long polling — локально и для небольших
ботов на одном процессе, вебхук — для продакшена и масштабирования.
Когда нужен фреймворк, а не библиотека
Обе библиотеки — про общение с Telegram Bot API. Проблема появляется, когда боту становится
тесно в одном мессенджере: «сделайте такого же навыком Алисы», «добавьте ВК и MAX». Логика,
написанная вокруг Telegram-сущностей (ctx.message, inline-клавиатуры,
callback_query), переиспользуется со скрипом, и проект под новую платформу
фактически пишется заново.
Для этого сценария есть мультиплатформенный фреймворк umbot: логика пишется один раз на TypeScript, а форматы запросов и ответов семи платформ (Алиса, Маруся, Сбер SmartApp, Telegram, VK, MAX, Viber) берут на себя адаптеры. Тот же бот на umbot:
import { Bot, WELCOME_INTENT_NAME, FALLBACK_COMMAND } from 'umbot';
import { fullPlatforms } from 'umbot/plugins';
const bot = new Bot().use(fullPlatforms);
bot.addCommand(WELCOME_INTENT_NAME, ['привет', '/start'], (_, bc) => { // /start — Telegram
bc.text = 'Привет! Работаю в Telegram, Алисе и ещё пяти платформах.';
bc.buttons.addBtn('Помощь');
});
bot.addCommand(FALLBACK_COMMAND, [], (userCommand, bc) => {
// пустая команда — пользователь только что запустил навык
bc.text = userCommand ? `Вы сказали: ${userCommand}` : 'Привет! Скажите «помощь».';
});
bot.start('0.0.0.0', 3000);
Честно про цену вопроса: если вам нужен только Telegram, umbot не даёт преимущества перед grammY
— берите grammY: у него глубже поддержка специфики Telegram. Фреймворк окупается, когда
мультиплатформенность реальна или правдоподобна: единые кнопки и карточки, состояние
пользователя, кэширование медиа, защита от ReDoS и обработка запроса менее 30 мс при 1000 команд
— всё это одинаково для всех платформ. Попробовать — одной командой
npx umbot create my-bot.
Частые вопросы
Стоит ли переписывать бота с Telegraf на grammY? Только если упираетесь в конкретные ограничения — типы, поддержку новых методов Bot API. Работающий бот ради смены библиотеки переписывать не стоит.
Что лучше для новичка? grammY: документация ведёт от первого бота до деплоя, а типы подсказывают, какие поля доступны в каждом обработчике.
Можно ли потом добавить к Telegram-боту навык Алисы? На Telegraf или grammY — только написав навык отдельно. Если такой сценарий вероятен, логику сразу стоит отделять от Telegram-специфики или брать мультиплатформенный фреймворк.
Вывод по сценариям — куда идти
- Нужна тонкая настройка под Telegram Bot API, свежие фичи платформы, строгие типы — grammY.
- Нужен проверенный стек с большим архивом готовых рецептов и сцен — Telegraf.
- Бота когда-нибудь попросят «ещё и в Алисе / VK / MAX» — мультиплатформенный umbot: логика одна, платформы подключаются адаптерами. Как это устроено на практике — в статье бот для Алисы и Телеграма одновременно.
- Проект нужен без собственной разработки — услуга разработки ботов под ключ.
Рекомендую к прочтению следующие статьи:
Сколько стоит разработка навыка для Алисы в 2026 году
Сколько стоит навык для Алисы: цены от 5 000 ₽, что влияет на стоимость, три уровня сложности, доли бюджета по этапам и как сэкономить без потери качества.
Читать статью
Конструктор навыков Алисы или разработка на фреймворке: что выбрать
Когда хватит конструктора навыков для Алисы без программирования, а когда нужны фреймворк и разработчик: потолок конструкторов, логика и владение продуктом.
Читать статью
Навык для Алисы без своего сервера: serverless на Yandex Cloud
Как запустить навык Алисы в Yandex Cloud Functions без своего сервера: генерация serverless-проекта через CLI umbot, деплой, публичный вызов и лимиты.
Читать статью
Бот для мессенджера MAX: создание на typescript и Node.js
Создание бота для мессенджера MAX на Node.js: регистрация, подключение вебхука, отличия API от Telegram и VK, лимиты отправки и пример бота на фреймворке umbot.
Читать статью
Как тестировать навык Алисы без публикации: BotTest и Jest
Локальное тестирование навыка Яндекс.Алисы без публикации: диалог в консоли через BotTest, автотесты на Jest с сохранением состояния и проверка вебхука.
Читать статью
Комментарии
Оставить комментарий
Как со мной связаться?
Свяжитесь со мной по любому поводу!
Я с радостью отвечу на все вопросы!
Телефон:
+7(909) 281 35-20Почта:
maximco36895@yandex.ruДополнительная почта:
info@maxim-m.ruЯ в социальных сетях: