Первую ИИ-генерацию оплачивает BotMix

Опишите идею — ИИ сгенерирует Telegram-бота, сам установит и настроит. Бот сразу готов к работе, обычно за минуты.

Для запуска нужен баланс от стоимости минимального тарифа. Деньги останутся на балансе и пойдут на продление бота. Предложение действует до конца сегодняшнего дня. ⓘБот работает в Telegram для всех ваших клиентов. Не сделает: чужие компьютеры и серверы, программы не из списка, личный кабинет, невозможное и незаконное. Сделает: курсы с оплатой, калории по фото, конкурсы, платный канал, запись на услуги, бот-подарок.

Telegram Serverless: как запустить бота без сервера

Средний уровень ⏱ 9 мин чтения

Полный мануал на русском: что такое Telegram Serverless, как включить его в BotFather, задеплоить бота через tgcloud и понять, где этой среды хватает, а где нужен обычный Python-бот на хостинге.

Что есть в этом гайде

  • Как устроен Telegram Serverless: handlers, lib, schema, SDK
  • Пошаговая настройка: BotFather, CLI-токен, npx tgcloud push
  • Рабочий пример бота, который отвечает на /start
  • Ограничения: только JS, без npm, без диска, без фоновых задач
  • Сравнение с Python-хостингом и ИИ-генератором ботов

Что такое Telegram Serverless

Telegram Serverless — среда, в которой код бота и бэкенда Mini App выполняется на инфраструктуре Telegram. Вы пишете модули на JavaScript, отправляете их одной командой, и Telegram запускает их в изолированной песочнице V8 рядом с Bot API и встроенной базой.

Раньше даже эхо-боту нужен был компьютер, который всегда онлайн: VPS, Docker, панель хостинга или облачная функция. Serverless убирает этот слой для узкого класса задач. Пришло обновление — вызвался файл-обработчик — он ответил через API — процесс закончился.

В проекте три места, и они совпадают между собой:

  • Папка на компьютере — JavaScript-модули под git
  • Облако Telegram — задеплоенная копия плюс база бота
  • CLI tgcloud — мост: показывает разницу и синхронизирует

SSH никуда не нужен. Webhook платформа ведёт сама: вы не указываете URL своего сервера. База переживает отдельные вызовы, хотя сам обработчик живёт коротко.

Зачем Telegram это сделал

Большая часть ботов в документации — программы, которые реагируют на апдейт. Сообщение, нажатие кнопки, inline-запрос. Для этого не обязателен сервер, который крутится сутками и ждёт getUpdates.

По словам Telegram, у среды четыре свойства:

  • Нет своей инфраструктуры. Не арендуете машину, не патчите систему, не следите за диском.
  • Сразу есть Bot API, SQLite и исходящий HTTP. Ставить пакеты и прописывать секреты API не нужно.
  • Изолированный V8. Каждый вызов — отдельная песочница рядом с системами Telegram.
  • Привычный цикл разработчика. Файлы, git, атомарный деплой, миграции схемы отдельно от кода.

Это инструмент программиста. С телефона можно править файлы в BotFather, с компьютера — через CLI. Конструктора «кнопками без кода» здесь нет. ИИ в экосистеме Serverless — файлы AGENTS.md и docs/tgcloud-sdk.md для Cursor, Claude Code и похожих агентов: ассистент пишет JS, человек проверяет и пушит.

Как устроен проект: handlers, lib, schema

После npm create @tgcloud/bot папка выглядит так:

Структура проекта Telegram Serverless
my-bot/
├─ docs/
│  └─ tgcloud-sdk.md
├─ handlers/
│  └─ message.js
├─ lib/
├─ AGENTS.md
├─ package.json
└─ schema.js

В облако уходят только schema.js и .js из handlers/ и lib/. Markdown, конфиги и папка .tgcloud/ остаются у вас.

Обработчики: один файл на тип апдейта

Платформа смотрит на имя файла. Пришло сообщение — вызывается handlers/message.js. Нажали кнопку — handlers/callback_query.js. Inline — handlers/inline_query.js. Подкаталогов в handlers/ нет.

Если файла нет или он пустой, апдейт этого типа игнорируется. Держите только нужные обработчики: лишний файл — лишний запуск кода.

Функция по умолчанию получает уже «развёрнутый» объект: в message.js это Message, не весь Update. Второй аргумент — ctx, там сырой ctx.update, если нужен update_id.

lib/ и schema.js

В lib/ кладут общее: форматирование, работа с таблицами, запросы к внешнему API. Подпапки разрешены, например lib/internal/util.js. Сама платформа эти файлы не вызывает — их импортируют обработчики.

schema.js в корне описывает таблицы. Задеплоить схему и применить её к базе — разные шаги. push код заливает, migrate меняет таблицы. Случайно снести данные деплоем нельзя.

Импорты: только голые имена

В рантайме модуль видит SDK и другие модули проекта. npm, файловая система и относительные пути ./schema не работают. Пишут так:

Правильные импорты
import { users } from 'schema';
import { addItem } from 'lib/cart';
import { db, api, fetch } from 'sdk';

Расширение .js в импорте тоже ломает сборку. Это частая ошибка, если копировать привычку из Node.

Что Serverless хорошо закрывает

Для простого бота среды хватает. Человек нажал Start — бот поздоровался, запомнил chat id в SQLite, ответил на текст. Счётчик сообщений, туду-лист, викторина, таблица лидеров, бэкенд Mini App, который кладёт данные пользователя в базу, — это как раз тот контур, который описан в доке Telegram.

Типичные сценарии:

  • Ответ на /start и несколько команд
  • FAQ из заранее известных фраз
  • Состояние пользователя в SQLite: список дел, прогресс квиза
  • Кнопки callback и правка сообщения
  • Запрос к внешнему HTTP API через fetch и ответ в чат
  • Бэкенд Mini App без своего сервера

Если задача — «пусть бот живёт и отвечает», Serverless снимает аренду VPS. Если задача — магазин, курс с оплатой, рассылка по расписанию, разбор фото или готовый бот без Cursor, этой среды уже мало. Об этом ниже, после настройки.

Ограничения Telegram Serverless

Песочница специально узкая: так модули быстро грузятся и безопаснее исполняются. Перед тем как переносить магазин или ИИ-бота, посмотрите на потолок.

Чего в рантайме нет

  • Только JavaScript. Python, PHP, Go — нельзя.
  • Нет npm и node_modules в облаке. Сторонние пакеты не ставятся.
  • Нет файловой системы. Картинки, видео, ffmpeg, FTP — некуда класть.
  • Нет долгоживущего процесса. Планировщик, очередь рассылок, job_queue как в python-telegram-bot — не из этой модели.
  • В SQLite внешние ключи запрещены: .references() при деплое падает.
  • Скачать файл из Telegram через SDK — до 20 МБ. Ответ fetch — до 30 МБ.
  • Загрузить файл в Bot API — до 50 МБ, фото — до 10 МБ (лимиты Bot API).

Исходящий HTTP есть: можно дернуть платёжный шлюз или модель ИИ. Но крутить тяжёлую обработку медиа, ставить pip-зависимости и держать бота «всегда включённым» платформа не обещает. Тарифы, квоты CPU и размер базы в публичной доке на сентябрь 2026 не указаны — это стоит закладывать как риск для продакшена.

Как включить Telegram Serverless в BotFather

Без этого шага CLI не привяжется к боту.

1
Откройте бота в @BotFather

Если бота ещё нет — создайте его командой /newbot. Как получить токен API и задать имя, разобрано в гайде настройка бота через BotFather. API-токен для Serverless-деплоя не используют.

2
Включите Serverless

В карточке бота откройте раздел Serverless и включите функцию. Появятся обработчики, библиотека, база и доступ CLI.

3
Скопируйте CLI Access token

Serverless → CLI Access → Access token. Формат app<id>:<secret>. Это отдельный секрет. Публичная часть app… может светиться в логах, секрет — нет. В git его не кладут: CLI пишет его в .tgcloud/, папка в gitignore.

С этого момента тот же проект можно править с телефона в BotFather: хендлеры, lib/, schema.js, прогон обработчика с выводом console.

Как создать проект и задеплоить бота через tgcloud

Нужен Node.js 18 или новее. CLI ставят вместе с проектом, глобально ставить не обязательно.

1. Скаффолд

Создание проекта
npm create @tgcloud/bot my-bot
cd my-bot

Аргумент — папка. Точка . скаффолдит в текущую. Существующие файлы создатель не затирает. CLI окажется локальной dev-зависимостью, команды запускают через npx tgcloud … или npm-скрипты вроде npm run deploy.

Глобально: npm install -g @tgcloud/cli, затем tgcloud init. Глобальная установка нужна ещё и для tab-completion в shell.

2. Логин

Привязка бота
npx tgcloud login

Вставьте CLI-токен. Для CI токен дают переменной TGCLOUD_TOKEN, на диск его тогда не пишут. Команды посреди работы токен не спрашивают: нет терминала — нет зависания в пайплайне.

3. Посмотреть состояние

Что изменилось локально
npx tgcloud status
npx tgcloud diff

Обе команды офлайн: сравнивают папку с локальным снимком в .tgcloud/. Сразу после init всё новое, в облаке ещё пусто.

4. Деплой

Отправка модулей
npx tgcloud push

Заливается атомарный набор модулей. Удалённый локально файл пропадёт и в облаке. После push стартовый handlers/message.js уже отвечает в Telegram — обычно эхом текста. Базу push не меняет, даже если вы правили schema.js.

5. Прогон без публикации

Тест обработчика на платформе
npx tgcloud run handlers/message '{ chat: { id: 1 }, text: "/start" }'

Выполняется облачный рантайм, но файлы берутся с вашего диска. В ответ — логи console.*, возвращаемое значение и время. Payload — JSON5, кавычки у ключей можно не ставить. Контекст вторым аргументом: --ctx '{ update: { update_id: 1 } }'.

Пример: бот, который отвечает на /start

Стартовый обработчик из скаффолда обычно повторяет текст. Ниже — явный ответ на команду Start и эхо остального. Это тот объём, под который Serverless заточен.

handlers/message.js
import { api } from 'sdk';

export default async function (message) {
  const chatId = message.chat.id;
  const text = message.text ?? '';

  if (text === '/start') {
    await api.sendMessage({
      chat_id: chatId,
      text: 'Привет! Я простой serverless-бот. Напишите что-нибудь — повторю.',
    });
    return;
  }

  await api.sendMessage({
    chat_id: chatId,
    text: `Вы написали: ${text || '(нет текста)'}`,
  });
}

Параметры Bot API — в snake_case, как в документации: chat_id, reply_markup. Обёртку { ok: true, result } SDK снимает сам: api.getMe() сразу отдаёт объект пользователя. Ошибка API бросает BotApiError с полями code, description, method, parameters.

Залейте файл и откройте бота:

Публикация обработчика
npx tgcloud push

Если после добавления нового типа апдейта сообщения не доходят, проверьте webhook: npx tgcloud webhook и при необходимости npx tgcloud webhook sync. Платформа сама держит URL, но список allowed_updates должен совпасть с файлами в handlers/.

Как добавить базу SQLite

У каждого бота своя база. DSL и построитель запросов близки к Drizzle ORM: table(), select().from().where(), onConflictDoUpdate, тег sql. Импорт — из sdk/db. Каждый запрос асинхронный, терминальные методы нужно await.

schema.js — счётчик сообщений по чату
import { table, integer } from 'sdk/db';

export const counters = table('counters', {
  chatId: integer('chat_id').primaryKey(),
  seen:   integer('seen').notNull().default(0),
});
handlers/message.js — записать и ответить
import { api, db } from 'sdk';
import { counters } from 'schema';
import { sql } from 'sdk/db';

export default async function (message) {
  const chatId = message.chat.id;

  const [row] = await db.insert(counters)
    .values({ chatId, seen: 1 })
    .onConflictDoUpdate({
      target: counters.chatId,
      set: { seen: sql`${counters.seen} + 1` },
    })
    .returning()
    .run();

  await api.sendMessage({
    chat_id: chatId,
    text: `Привет! Я уже видел ${row.seen} сообщений от вас.`,
  });
}
Сначала код, потом миграция
npx tgcloud push
npx tgcloud migrate

migrate показывает, что изменится, и спрашивает подтверждение. Безопасные добавления (новая таблица, колонка, индекс) идут пачкой. Удаления и тяжёлые операции подтверждают по одной. Сменить тип колонки автоматически нельзя — это ручной SQL. Удалить таблицу «просто стёрли из schema.js» тоже нельзя: сначала помечают .deprecated('причина'), затем подтверждают drop.

Связи моделируйте обычными колонками вроде userId. Целостность — в коде: сначала родитель, потом дети; при удалении — наоборот.

Справочник команд tgcloud

Команда ищется вверх по дереву до ближайшей .tgcloud/, из подпапки проекта тоже работает.

Команда
Зачем
npx tgcloud initСкаффолд в текущей папке
npx tgcloud add handlers/callback_queryНовый обработчик или модуль lib
npx tgcloud loginСохранить CLI-токен
npx tgcloud status / diffЧто изменилось
npx tgcloud pushЗадеплоить модули
npx tgcloud migrateПрименить schema.js к базе
npx tgcloud run …Прогнать хендлер без публикации
npx tgcloud pull / fetchПодтянуть облако; fetch не трогает рабочие файлы
npx tgcloud resetОтбросить локальные правки
npx tgcloud webhook syncСнова выставить webhook под хендлеры

Если с другого компьютера уже залили ревизию, push остановится, а не затрёт чужое. Дальше fetch, pull или осознанный push --force.

Правки с телефона в BotFather

Тот же облачный проект открывается в @BotFather → бот → Serverless. Можно создать и прогнать обработчик, править lib/, менять схему и применять миграции. Save деплоит. Логи console видны в чате, как у npx tgcloud run.

Начали хендлер в метро — дома npx tgcloud pull заберёт его на ноутбук. Двух разных «источников правды» нет.

Частые ошибки при настройке Telegram Serverless

🐍

Ищут Python в Serverless

Рантайм — V8 и JavaScript. Перенести bot.py на python-telegram-bot сюда нельзя. Python-бота ставят на хостинг, см. как установить бота на хостинг.

📦

Ставят npm-пакет в надежде, что он уедет в облако

Локальный node_modules нужен только CLI. В рантайме есть sdk и ваши модули. HTTP к внешнему API — через fetch из SDK.

📂

Импорт через ./schema.js

Только голое имя: from 'schema', from 'lib/cart'. Относительные пути и суффикс .js не компилируются.

🗄️

Забыли migrate

После правки schema.js таблиц в базе ещё нет. Push об этом напишет, применит изменения только npx tgcloud migrate.

📡

Webhook «отстал» от хендлеров

Добавили callback_query.js, а кнопки молчат. npx tgcloud status покажет рассинхрон, чинится webhook sync. Про разницу webhook и polling — в отдельном сравнении.

🔑

В login вставили API-токен бота

Нужен CLI Access token из раздела Serverless, формат app…:…. Токен вида 123456:AAF… — это Bot API, CLI его не примет.

Telegram Serverless vs Python-хостинг: что выбрать

Serverless закрывает «ответить на апдейт без машины». Хостинг закрывает бота, который живёт сутками: пакеты, файлы, база MySQL, платежи, правки без IDE. Ниже — сравнение по критериям, которые обычно ломают проект через месяц после запуска.

Критерий
Telegram Serverless
Хостинг + ИИ-генератор

Кому подходит

JS-разработчик

Человек, который готов править файлы в CLI или BotFather

Без кода и с кодом

Описать идею в панели — или загрузить готовый Python

Язык и библиотеки

Только JS

Без npm в рантайме. python-telegram-bot и pip недоступны

Python

requirements.txt, пакеты, привычный bot.py

Сервер

Не нужен

Код крутится у Telegram, масштабирование на их стороне

Контейнер

Процесс всегда включён: Docker, автозапуск, консоль

База данных

SQLite

Встроенная, без внешних ключей, миграции через CLI

MySQL

Привычные таблицы, доступ к данным из панели

Фон и рассылки

Нет процесса

Нет планировщика «каждое утро в 10:00» внутри рантайма

Есть

Очереди, job_queue, массовые рассылки по таймеру

Файлы и медиа

Без диска

Нет ffmpeg, FTP, длительной обработки видео

Файлы есть

Файлы через панель управления или FTP: фото, видео, документы

Оплаты

Через fetch

Шлюз можно дернуть HTTP, всё пишете сами

Из коробки

Карты РФ и Telegram Stars в готовых сценариях генератора и каталога

ИИ без IDE

AGENTS.md

Ассистент пишет JS в Cursor. Деплой и проверка — на вас

Генератор в панели

Описали бота по-русски — код ставится и запускается сам

Сайт и Mini App

Только бэкенд

Хостинг страницы Mini App Serverless не заменяет

Боты и сайты

Тот же кабинет: Telegram-бот и веб-страница

Владение кодом

Ваши модули

Файлы в git, деплой атомарный, можно pull с облака

Исходники и БД

Полный доступ к bot.py, requirements и MySQL

Колонка справа — то, как устроен BotMix: Python-бот в контейнере, каталог готовых решений и ИИ-генератор, который собирает бота из текстового описания. Serverless у Telegram эту связку не повторяет и не обязан: у продуктов разная работа.

Когда хватит Serverless, а когда нужен полноценный бот

Берите Serverless, если вы пишете на JS, бот отвечает на события и состояние умещается в SQLite. Эхо на /start, учёт очков, бэкенд Mini App, тонкая интеграция «пришло сообщение — дернули API».

Переходите на хостинг, когда появляется любая из этих вещей: оплата картами, доступ в канал по подписке, магазин, рассылка базе, разбор фото, видео, свой планировщик, чужие Python-библиотеки, сайт рядом с ботом, правки человеком без Cursor. Такие сценарии разобраны отдельно: магазин в Telegram, бот для рассылок, доступ к каналу за подписку, личный ИИ-ассистент.

Если кода нет и не будет, Serverless всё равно потребует файлы и деплой. В панели BotMix тот же запрос звучит иначе: описали, что бот должен делать, генератор собирает Python, ставит зависимости и запускает контейнер. Каталог закрывает типовые задачи без генерации.

Частые вопросы про Telegram Serverless

Telegram Serverless — это конструктор ботов?

Нет. Нет визуальных блоков и шаблонов «накликал меню». Есть папка с JS, CLI и редактор в BotFather. Сравнение конструкторов и хостинга — в гайде конструктор vs хостинг.

Нужен ли VPS?

Для самого Serverless — нет. Для Python-бота, pip, ffmpeg и круглосуточных рассылок VPS или хостинг для ботов по-прежнему нужен.

Можно ли совместить Mini App и Serverless?

Да: Telegram прямо называет среду бэкендом для ботов и Mini Apps. Саму веб-страницу приложения всё равно где-то хостить. Serverless хранит данные и отвечает Bot API.

Сколько это стоит?

На странице core.telegram.org/bots/serverless нет прайса, бесплатного пакета и лимитов CPU. Перед боевой нагрузкой смотрите BotFather и свежую справку Telegram: условия могут появиться позже запуска.

Безопасны ли токены?

CLI-токен не должен попадать в git и в чаты. API-токен бота в Serverless-проект не кладут: вызовы api.* идут с платформенными правами. Для CI — переменная окружения TGCLOUD_TOKEN.

Что делать дальше

Если цель — понять фичу Telegram и поднять эхо-бота, этого мануала достаточно: включили Serverless, создали проект, залогинились, написали handlers/message.js, сделали push.

Если нужен бот, который продаёт, принимает оплату, ходит в ИИ-модели, работает с фото и живёт месяцами без вашего ноутбука — соберите его на Python-хостинге. В BotMix это либо готовый бот из каталога, либо описание своими словами в ИИ-генераторе.

Попробовать оба пути

JS без сервера — по шагам выше. Python с генератором и каталогом — панель BotMix. По промокоду GUIDE скидка 15% на заказ бота.