Виджеты в Telegram-боте: карточка заказа прямо в чате | CrmAI

Виджеты в Telegram-боте: карточка заказа прямо в чате

Telegram 9 ноября открыл ботам виджеты – живые карточки внутри сообщения. Разбираем, где они удобнее кнопок и Mini App, какие у них пределы и что подготовить в CRM.

Окно чата в смартфоне с карточкой заказа внутри сообщения: список товаров и полоса статуса доставки, рядом менеджеры с CRM

Покупательница заказала через бота цветочного магазина в Алматы букет к семи вечера. Бот прислал «Заказ принят», потом «Собираем», потом «Курьер выехал», потом номер курьера. Четыре сообщения подряд, и чтобы понять, что с заказом сейчас, ей приходится листать переписку вверх. Менеджер в это время отвечает на вопрос «а где мой букет?», хотя ответ уже лежит в чате.

Виджеты в Telegram-боте решают именно эту проблему. 9 ноября 2026 года Telegram выпустил Bot API 10.4, и бот теперь может прислать не текст с кнопками, а маленькую живую карточку прямо внутри сообщения: состав заказа, сумма, полоса статуса. Статус меняется в той же карточке, без новых сообщений. Звучит как Mini App, но устроено иначе, и у этого «иначе» есть жёсткие пределы.

Главное за минуту

Что это

Один HTML-документ со встроенными стилями и JavaScript, который Telegram рисует внутри пузыря сообщения в цветах чата.

Где работает

В рабочей среде – только в личном чате с ботом. Группы, пересылка и inline-режим пока доступны лишь на тестовом сервере.

Чего в нём нет

Сети и полей ввода. Виджет не ходит в интернет и не принимает текст – только нажатия.

Как он меняется

Код виджета после отправки неизменен. Бот обновляет только его данные – до 1024 байт, тихо, без уведомления клиенту.

Как устроены виджеты в Telegram-боте

Бот вызывает новый метод sendWidget и передаёт HTML: от 1 до 32 768 байт, а после сжатия – не больше 4096. Это немного. Хватит на аккуратную карточку с таблицей, парой кнопок и небольшим скриптом, но не на каталог с картинками. Ширина пузыря – от 200 до 600 пикселей, высота – от 50 до 600. Всё, что не влезло по высоте, обрезается, прокрутки нет.

Дальше начинается главное отличие от веб-страницы. Код, однажды отправленный, больше не меняется: метода, который заменил бы HTML готового виджета, нет. Меняется только состояние – короткий текст до 1024 байт, который пишет бот. Таких состояний два: данные конкретного сообщения (chat_data, метод editMessageWidgetData) и общие данные виджета, который разослан многим (public_data, метод editSharedWidgetData). Виджет читает состояние и перерисовывает себя.

Обратная связь тоже узкая. Нажатие внутри виджета может отправить боту запрос – как callback-кнопка, только с данными от 1 до 64 байт. Бот обязан ответить методом answerWidgetQuery за 15 секунд, иначе виджет получит ошибку TIMEOUT. На запросы есть лимит: не больше пяти за пять секунд от одного пользователя ко всем виджетам бота. И запросы вообще работают, только если при отправке указан allow_queries.

Сам код исполняется на устройстве клиента в песочнице. Telegram прямо пишет, что сетевого доступа у виджета нет совсем: fetch, XMLHttpRequest и WebSocket выбрасывают ошибку, внешние скрипты, шрифты и картинки не загружаются. Выйти наружу можно только через openLink – по нажатию и после подтверждения пользователя, ссылка https до 256 символов.

Кнопки, виджет или Mini App: что когда выбирать

У продающего бота в Telegram теперь три способа показать клиенту что-то сложнее текста. Их легко перепутать, поэтому сведём различия в одну таблицу.

Inline-кнопки Виджет Mini App
Где живёт Под сообщением Внутри сообщения Отдельное окно, страница на вашем сервере
Ввод текста Нет Нет, только нажатия Да, любые формы
Свежие данные Бот правит сообщение Бот пишет состояние до 1024 байт Страница сама запрашивает ваш сервер
Виден в чате без открытия Да Да Нет
Объём разработки Минимальный Небольшой, но нужен фронтенд в 4 КБ Полноценное веб-приложение

Наше мнение: виджет не заменяет ни кнопки, ни Mini App, а закрывает дыру между ними. Кнопки хороши для выбора из трёх вариантов. Mini App – для магазина с корзиной и формой доставки, как мы описывали в материале «Telegram WebApp + бот: как запустить магазин внутри мессенджера». А виджет – для того, что клиент должен видеть в переписке постоянно и в актуальном виде, не открывая ничего.

Где виджет окупается в продажах и сервисе

Лучшие сценарии – те, где нужно показать небольшой объём данных, которые меняются со временем, а ответ клиента сводится к нажатию.

Карточка заказа со статусом

Самый очевидный случай, и сам Telegram в справке рисует именно его: номер заказа, позиции, итог и кнопка отслеживания. Бот отправляет карточку при оформлении, а потом CRM на каждой смене стадии вызывает editMessageWidgetData и пишет в состояние новый статус и время. Клиент видит одну карточку, которая сама обновилась с «Собираем» на «Курьер выехал, 18:40». Сумма – в тенге, ссылка на трекинг службы доставки – через openLink.

Выбор слота и подтверждение записи

Салон в Шымкенте предлагает окна на завтра. Восемь-десять слотов в формате «10:30 Айгерим» спокойно помещаются в 1024 байта состояния. Клиентка нажимает на слот, виджет шлёт запрос, бот за секунду проверяет расписание в CRM, бронирует и отвечает. Занятые слоты бот вычёркивает, обновив состояние. Если CRM думает дольше, лучше сразу ответить «принято, проверяем», а подтверждение дописать в состояние следом – 15 секунд на ответ проходят быстро.

Опрос после покупки

Оценка доставки от одного до пяти, шкала NPS, выбор «что улучшить» из готовых вариантов. Нажатие уходит боту, бот кладёт оценку в карточку клиента. Свободный комментарий виджет не примет – за ним бот попросит обычное сообщение.

Покажем карточку заказа на вашей воронке

Возьмём ваши стадии сделки и соберём прототип виджета, который обновляется из CRM, – чтобы оценить пользу до разработки.

Хочу прототип

Что поменять в CRM и боте под виджеты

Сам виджет – это фронтенд на пару килобайт. Основная работа – на стороне CRM и интеграции, и её легко недооценить.

  • Хранить идентификатор сообщения. Чтобы обновить карточку, нужны чат и message_id. Если бот их не сохраняет в сделке, обновлять будет нечего.
  • Привязать статусы к событиям сделки. Каждая смена стадии должна вызывать обновление состояния, а не только письмо менеджеру.
  • Разделить тихое и громкое. Telegram подчёркивает: правка состояния проходит без пометки «изменено» и без уведомления. Для «Курьер у двери» этого мало – такой статус нужно продублировать обычным сообщением.
  • Всегда отправлять подпись. Приложения без поддержки виджетов показывают сообщение как неподдерживаемое вложение с подписью. Подпись «Заказ № 1042 – 23 500 тенге» – единственное, что увидит клиент со старой версией Telegram.
  • Не складывать в состояние лишнее. ИИН, телефон и адрес в карточке не нужны. Хватит номера заказа, позиций и статуса.

Последний пункт – не только про объём. Чем меньше персональных данных уходит через стороннюю платформу, тем проще потом отвечать на вопросы о том, где и как вы их обрабатываете.

Чего от виджетов ждать не стоит

Функция свежая, и часть её возможностей пока существует только в документации для тестового сервера. Лучше знать границы до того, как обещать клиенту «новый интерфейс».

Ограничения на 9 ноября

  • Групп нет. В рабочей среде виджет работает только в личном чате с ботом, каналы его не принимают вовсе.
  • Переслать нельзя. Отправленный виджет автоматически защищён: клиентка не перешлёт карточку мужу, а бот не скопирует её через copyMessage.
  • Оплаты в тенге внутри нет. Единственный платёжный сценарий в документации – кошелёк TON. Для Kaspi и банковских ссылок остаётся openLink или привычный путь, который мы разбирали в статье «Оплата в мессенджере: как собрать flow «чат → ссылка → оплата → подтверждение → чек»».
  • Форм нет. Поля ввода, списки и textarea из виджета вырезаются. Адрес и комментарий собирает бот обычным диалогом.
  • Свежих цен нет. Без сети виджет знает только то, что лежит в его коде и состоянии. Прайс на сто позиций в 1024 байта не уложить.
  • Не у всех сразу. Telegram пишет, что виджеты выкатываются поэтапно, и у части клиентов вместо карточки будет подпись.

Ещё одна практическая деталь: библиотеки для ботов догоняют новую версию API не в день выхода. Если ваш бот написан на популярном фреймворке, проверьте, есть ли в нём sendWidget. Если нет – метод можно вызвать обычным HTTP-запросом к Bot API, не дожидаясь обновления.

В той же версии 10.4 Telegram расширил и ephemeral-сообщения: приватный ответ на нажатие кнопки теперь работает в любом чате, кроме чатов личных сообщений каналов. Зачем такие ответы нужны в общих чатах с клиентами, мы писали в материале «Telegram-бот печатает на глазах: стриминг и rich-сообщения».

Чек-лист перед запуском виджета

Если решили пробовать, начните с одного сценария и одного типа виджета. Этот список поможет не забыть мелочи, на которых обычно спотыкаются.

  • Выбрать сценарий, где клиенту нужно видеть меняющиеся данные: статус заказа, запись, опрос.
  • Уложить вёрстку в 32 КБ и 4 КБ после сжатия, проверить на светлой и тёмной теме чата.
  • Сохранять в сделке чат и message_id каждой отправленной карточки.
  • Описать, какие стадии обновляют карточку тихо, а какие дублируются сообщением.
  • Отвечать на запросы виджета за секунды, тяжёлые операции доводить уже после ответа.
  • Написать подпись, понятную без виджета.
  • Прогнать сценарий на тестовом сервере Telegram, прежде чем включать его клиентам.

Связанные материалы

Добавим виджет в вашего Telegram-бота

Расскажите, какой статус клиенты спрашивают чаще всего. За неделю соберём карточку, свяжем её со стадиями сделки в CRM и проверим на тестовом сервере.

Обсудить виджет
Решения CrmAI по теме статьи

Хотите так же у себя?

Выберите услугу или опишите задачу в чате — подскажем, с чего начать в вашем бизнесе.