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-специфики или брать мультиплатформенный фреймворк.

Вывод по сценариям — куда идти

Рекомендую к прочтению следующие статьи:

Сколько стоит разработка навыка для Алисы в 2026 году

Сколько стоит разработка навыка для Алисы в 2026 году

Сколько стоит навык для Алисы: цены от 5 000 ₽, что влияет на стоимость, три уровня сложности, доли бюджета по этапам и как сэкономить без потери качества.

Читать статью

Конструктор навыков Алисы или разработка на фреймворке: что выбрать

Конструктор навыков Алисы или разработка на фреймворке: что выбрать

Когда хватит конструктора навыков для Алисы без программирования, а когда нужны фреймворк и разработчик: потолок конструкторов, логика и владение продуктом.

Читать статью

Навык для Алисы без своего сервера: serverless на Yandex Cloud

Навык для Алисы без своего сервера: serverless на Yandex Cloud

Как запустить навык Алисы в Yandex Cloud Functions без своего сервера: генерация serverless-проекта через CLI umbot, деплой, публичный вызов и лимиты.

Читать статью

Бот для мессенджера MAX: создание на typescript и Node.js

Бот для мессенджера MAX: создание на typescript и Node.js

Создание бота для мессенджера MAX на Node.js: регистрация, подключение вебхука, отличия API от Telegram и VK, лимиты отправки и пример бота на фреймворке umbot.

Читать статью

Как тестировать навык Алисы без публикации: BotTest и Jest

Как тестировать навык Алисы без публикации: BotTest и Jest

Локальное тестирование навыка Яндекс.Алисы без публикации: диалог в консоли через BotTest, автотесты на Jest с сохранением состояния и проверка вебхука.

Читать статью

Комментарии

Оставить комментарий

Как со мной связаться?

Свяжитесь со мной по любому поводу!
Я с радостью отвечу на все вопросы!

Телефон:

+7(909) 281 35-20

Дополнительная почта:

info@maxim-m.ru

Я в социальных сетях:

ВверхВверх 👆