6 октября Telegram обновил Serverless, свою платформу для кода ботов. Теперь она размещает и фронтенд мини-приложения: сборка уезжает вместе с ботом одной командой и открывается по адресу вида app<id>.tgcloud.ai. У мини-приложения появились серверные функции, которые оно вызывает из telegram-web-app.js. Обновление касается всех, кто держит бэкенд бота или мини-приложения на своём сервере, и тех, кто уже перенёс бота на Serverless в июле: старый проект нужно один раз перевести на новую раскладку папок.

Блок Recent changes в документации Telegram Serverless от 6 октября 2026 года

Serverless — бэкенд для ботов, который Telegram запускает у себя. Код пишется обычными модулями на JavaScript и исполняется в изолятах V8, то есть в лёгких песочницах внутри одного процесса, рядом с Bot API. К коду прилагается база на SQLite и исходящий HTTP. Своих серверов, контейнеров и вебхуков не нужно. Первая версия консольной утилиты @tgcloud/cli вышла в npm 12 июля, страница документации появилась в веб-архиве 13 июля. Тогда платформа умела только отвечать на апдейты бота: в июльской версии документации нет ни раздела про фронтенд, ни слова «endpoint».

Что изменилось 6 октября

ЧтоКак устроено
Хостинг мини-приложенияПапка сборки (dist у Vite) выгружается вместе с кодом бота и отдаётся с https://app<app_id>.tgcloud.ai/
ЭндпоинтыФайл tgcloud/endpoints/<name>.js становится функцией, которую мини-приложение вызывает по имени
Утилита 0.2.0Опубликована в npm 6 октября в 10:52 UTC
tgcloud.jsoncКонфиг проекта в корне: папка сборки, режим SPA, кэш, заголовки, редиректы
Импорт по относительному пути../schema.js вместо имени модуля, с обязательным .js, поэтому редактор понимает переходы к определению
Папка tgcloud/schema.js, lib/, handlers/ и endpoints/ переехали из корня в неё, корень свободен под фронтенд

Мини-приложение больше не требует отдельного хостинга, сертификата и сервера с API. Фронтенд собирается любым бандлером, утилита сравнивает файлы по хешам и выгружает только изменённые. Адрес, который печатает push, вписывается в @BotFather как адрес мини-приложения.

Что делать с проектом на версии 0.1

Утилита 0.2.0 откажется работать со старой раскладкой, пока проект не переведён на новую. Перевод одной командой:

  • npx tgcloud upgrade переносит schema.js, lib/ и handlers/ в папку tgcloud/. Имена модулей (lib/cart, handlers/message) не меняются.
  • Импорты по имени модуля продолжают работать, но документация советует перейти на относительные пути с .js.

Для тех, кто подключает мини-приложение:

  • push выгружает папку сборки как есть и сам ничего не собирает. Если выполнить его после правки фронтенда без сборки, на прод уедет предыдущая версия. Скрипт npm run deploy, который добавляет заготовка проекта, сначала собирает, потом выгружает.
  • Telegram Web открывает мини-приложения во фрейме, поэтому заголовок X-Frame-Options и строгий frame-ancestors ставить нельзя.
  • Путь /api/ на том же адресе занят эндпоинтами, свои файлы туда класть не стоит.
  • immutable в конфиге — только для файлов с хешем в имени. Остальные браузер продержит в кэше год, и отозвать их будет нечем.
  • Next.js, Nuxt, SvelteKit и Angular утилита не распознаёт сама: сначала нужно настроить статический экспорт и вписать его папку в "source" вручную.

Как мини-приложение вызывает свой бэкенд

В тот же день, в 09:27 UTC, Telegram обновил telegram-web-app.js, скрипт, который подключает любое мини-приложение. В нём появился объект Telegram.WebApp.Serverless с единственным методом call. Метод делает POST на относительный адрес /api/<name>, то есть на тот же хост, с которого открыто приложение. Поэтому вызов работает только у мини-приложения, размещённого на tgcloud.ai: с собственного домена запрос уйдёт на собственный сервер.

В заголовок Authorization скрипт кладёт строку TMA и initData в base64. initData — подписанный Telegram набор полей о пользователе и чате, с которым клиент открывает мини-приложение. Платформа проверяет подпись до запуска кода, и без неё запрос получает 401. Эндпоинт получает уже проверенного пользователя в ctx.initData.user. Проверять подпись initData вручную, как приходится на своём сервере, больше не нужно, и открытого API, который надо защищать, у такого бэкенда нет.

Ошибки делятся на два вида. EndpointError, выброшенный кодом намеренно, доходит до клиента с текстом и параметрами, по которым фронтенд может ветвиться. Любое другое исключение клиент видит как внутреннюю ошибку, а настоящий текст остаётся в логах, чтобы устройство бэкенда не утекало наружу.

Что сервер сообщает о себе без токена

Утилита обращается к API на cloud.telegram.org. Один из его методов, /capabilities, отвечает без авторизации: он описывает раскладку проекта, шаблоны AGENTS.md и docs/tgcloud-sdk.md и список типов апдейтов, на которые можно повесить обработчик. Таких типов 27. Утилита сверяет с этим ответом номер схемы проекта и предупреждает, если сервер уже знает папки, о которых она ещё не знает. В коде утилиты есть и переключатель TGCLOUD_BETA=1, который направляет запросы на /beta. На 6 октября бета-ответ совпадает с основным.

Почему домен называется .ai

Домен tgcloud.ai зарегистрирован 11 сентября 2026 года через GoDaddy. В тот же день на него выпущен сертификат *.tgcloud.ai, один на все поддомены вида app<id>. Адрес домена, 149.154.166.100, лежит в сети Telegram_Messenger_Network (AS62041). Корень домена отдаёт пустую 404: витрины у платформы нет, только поддомены приложений.

Само окончание ещё ничего не доказывает: .ai — национальный домен Ангильи, который давно берут технологические проекты. А tgcloud.com занят с 2011 года посторонним владельцем, так что выбор мог быть простым вопросом свободного имени.

Но платформа с первого дня строилась вокруг ИИ-агентов, которые пишут код, и вокруг ботов, которые генерируют ответы.

  • Код пишет агент. Раздел «Building with AI» есть в документации с июля. Каждый новый проект получает AGENTS.md, который, по словам самого шаблона, автоматически читают Claude Code, Cursor и подобные инструменты, и справочник SDK в docs/. Документация предлагает открыть проект в агенте и описать бота словами, а сам шаг называет первым.
  • Окружение рассчитано на сгенерированный код. Никаких npm-пакетов, один SDK, жёсткие правила вроде одного файла на тип апдейта. Чем меньше вариантов, тем реже агент ошибается, и документация прямо перечисляет соглашения, которые «обычная кодогенерация» пропускает.
  • Бот, который генерирует ответ. Среди 27 типов апдейтов, которые принимает Serverless, есть stopped_message_generation и guest_message. Оба появились в Bot API весной и летом вместе с остальными функциями для ботов на языковых моделях.
ДатаВерсия Bot APIЧто появилось
31 декабря 20259.3sendMessageDraft: ответ показывается пользователю по мере генерации
8 мая 202610.0Гостевой режим: в одном сообщении можно позвать до трёх ботов, которых нет в чате
24 августа 202610.3Пользователь может остановить генерацию, бот получает об этом апдейт
6 октября 2026ServerlessМини-приложение и его бэкенд на одной платформе, AGENTS.md в каждом проекте

Чего в Serverless пока нет — самой модели. SDK состоит из трёх частей: база (sdk/db), Bot API (sdk/api) и fetch. Чтобы бот на Serverless ответил текстом от языковой модели, он идёт через fetch во внешний API со своим ключом. Документация fetch отдельно оговаривает потоковое чтение ответа как способ принимать вывод ИИ-API по токенам.

Свои мощности под нейросети у Telegram есть. Cocoon, сеть конфиденциальных вычислений на GPU с оплатой в TON, Дуров представил на Blockchain Life 2025, и её сайт обслуживается с того же адреса в сети Telegram, что и telegram.org. Отсюда гипотеза: следующей частью SDK может стать встроенный вызов модели, без внешнего ключа и с оплатой через Telegram. Вторая гипотеза касается @BotFather: редактор обработчиков, базы и файлов мини-приложения уже живёт в нём на телефоне, и описание бота словами вместо кода выглядит для такого редактора следующим шагом. Ни одна из гипотез ничем, кроме домена и направления последних обновлений, пока не подтверждена: в документации, утилите и ответе /capabilities от 6 октября модуля для нейросетей нет.