Клиент просит «просто бота для уведомлений» — а потом выясняется
Месяц назад ко мне обратился клиент с типовой задачей: «Нам нужен Telegram-бот, чтобы слать уведомления о новых заявках из формы на сайте». Минутное дело — webhook с формы, пара строк на Python, готово.
К концу разговора выяснилось, что им ещё нужно: приём заявок прямо в чате с передачей в CRM, автоматические ответы на частые вопросы («когда привезёте», «как статус заказа»), кнопки для менеджеров («взять в работу» / «перенести звонок»), и желательно мини-приложение для просмотра каталога, не выходя из Telegram.
Пять лет назад я бы сказал: «Это уже не бот, это полпроекта». В 2026 году — это вполне себе бот, просто написанный с учётом того, что Telegram Bot API умеет сейчас. За последний год мессенджер накатил столько обновлений для разработчиков, что граница между «ботом» и «приложением» окончательно размылась.
Разберём, что изменилось за последний год, что из этого реально работает, а что — пока шум.
Bot API 10.1: Rich Markdown и нормальный HTML в сообщениях
Версия 10.1 вышла недавно, и главное в ней — новый режим форматирования Rich Markdown. Если вы раньше ломали голову над тем, почему MarkdownV2 требует экранировать каждый символ и ругается на точки, а HTML-режим не давал нормально вложить ссылку в жирный текст — теперь это починили.
Rich Markdown обратно совместим с GitHub Flavored Markdown, и в него легально встраиваются HTML-теги. Практически это значит, что можно отправлять сообщения с нормальной структурой:
await bot.send_message(
chat_id=user_id,
text=(
"*Заявка #1234*\n\n"
"Клиент: [Иван Иванов](tg://user?id=123456789)\n"
"Сумма: **45 000 ₽**\n"
"Статус: ожидает подтверждения\n\n"
"Менеджер: @anna_sales"
),
parse_mode="MarkdownV2"
)
Раньше для подобного сообщения приходилось либо экранировать спецсимволы вручную (точки, дефисы, скобки — все попадали под раздачу), либо использовать только HTML. Сейчас можно смешивать Markdown и HTML в одном сообщении, и это работает.
Для чего это важно на практике: уведомления из CRM в Telegram. Раньше форматирование этих уведомлений было болью — то кавычки не те, то парсер упадёт. Теперь сообщение выглядит аккуратно без танцев с экранированием.
AI-боты и стриминг ответов: sendRichMessageDraft
Самое громкое обновление этого года — инструменты для AI-ботов. Telegram добавил метод sendRichMessageDraft, который позволяет боту «дорисовывать» ответ постепенно, как это делает ChatGPT. Ответ появляется в реальном времени, пользователь видит процесс набора текста.
Зачем это нужно на практике? Клиент хочет бота-помощника для сайта и Telegram одновременно. Раньше AI-ответ приходил одним куском через 5-10 секунд — пользователь успевал подумать, что бот завис. Сейчас ответ стримится прямо в чат.
Ещё одна функция: боты могут создавать других ботов. Звучит как новость для гиков, но на деле это значит, что один мастер-бот может разворачивать специализированных ботов под разные задачи клиента — один для продаж, другой для поддержки, третий для внутренних уведомлений — и управлять ими из единого интерфейса.
Из той же серии — гостевой режим для AI-ботов. Пользователь может написать боту, который использует AI для ответов, без необходимости добавлять его в контакты или стартовать отдельно. Снижает порог входа, особенно для ботов в бизнес-аккаунтах Telegram.
Mini Apps: когда сайт внутри мессенджера лучше, чем сайт
Telegram Mini Apps — это веб-приложения, которые открываются прямо в чате. По сути, обычный React/Vue/Next.js фронтенд, который Telegram заворачивает в нативный WebView и даёт доступ к своим API через window.Telegram.WebApp.
Экосистема к 2026 году — $2.5 млрд, 950 млн активных пользователей. Но разработчика волнует другое: где это реально помогает, а где — лишний слой сложности.
Вот где Mini Apps реально помогают:
- Каталоги и заказы. Клиент-ресторатор хочет, чтобы клиент мог выбрать блюдо и оформить заказ, не выходя из Telegram. Раньше — отдельный сайт или приложение. Сейчас — Mini App, который общается с тем же бэкендом, что и основной сайт.
- Личные кабинеты. Статус заказа, история платежей, настройки подписки — всё это можно сделать как Mini App вместо отдельной страницы на сайте. Пользователю не нужно логиниться — Telegram передаёт данные пользователя автоматически.
- MVP и прототипы. Когда нужно быстро проверить идею, Mini App быстрее в разработке, чем отдельное приложение. React-разработчику ничего нового учить не нужно.
Вот базовая структура инициализации Mini App:
import WebApp from "@twa-dev/sdk";
// Получаем данные пользователя (Telegram передаёт автоматически)
const user = WebApp.initDataUnsafe?.user;
const userId = user?.id;
const userName = user?.first_name;
// Настраиваем тему
WebApp.setHeaderColor("#1a1a2e");
WebApp.setBackgroundColor("#16213e");
// Показываем кнопку подтверждения
WebApp.MainButton.setText("Оформить заказ");
WebApp.MainButton.show();
WebApp.MainButton.onClick(() => {
const orderData = collectOrderData();
// Отправляем данные обратно в бот
WebApp.sendData(JSON.stringify(orderData));
// Или через fetch на свой бэкенд
fetch("https://example.com/api/orders", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${WebApp.initData}`
},
body: JSON.stringify({ ...orderData, userId })
});
});
Обратите внимание на WebApp.initData — это подписанные Telegram данные, которые можно проверить на сервере. Не нужно придумать свою систему авторизации для Mini App.

Когда Mini App — плохая идея? Если вам нужен сложный рендеринг, WebGL в полную силу, или работа в фоне. Mini App живёт только пока открыт. Закрыли чат — приложение выключилось.
Интеграция с CRM: как я её делаю сейчас
Раньше типовая интеграция выглядела так: сайт отправляет лид в CRM, CRM шлёт webhook в бота, бот кидает сообщение менеджеру. Односторонний процесс — уведомление без обратной связи.
Сейчас я строю двустороннюю схему. Бот не просто уведомляет — он даёт менеджеру кнопки для действий, и эти действия возвращаются в CRM.
Архитектура на практике (Python + aiogram 3.x):
from aiogram import Bot, Dispatcher, F
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
from aiogram.filters import CallbackQuery
import httpx
bot = Bot(token="YOUR_BOT_TOKEN")
dp = Dispatcher()
CRM_WEBHOOK_URL = "https://your-crm.ru/api/webhooks/telegram"
# Уведомление о новом лиде с кнопками
async def notify_new_lead(lead_data: dict):
manager_id = lead_data["manager_telegram_id"]
keyboard = InlineKeyboardMarkup(inline_keyboard=[
[
InlineKeyboardButton(
text="✅ Принять",
callback_data=f"lead_accept:{lead_data['id']}"
),
InlineKeyboardButton(
text="📞 Перезвонить",
callback_data=f"lead_callback:{lead_data['id']}"
),
InlineKeyboardButton(
text="❌ Отклонить",
callback_data=f"lead_reject:{lead_data['id']}"
),
]
])
message = (
f"*Новый лид #{lead_data['id']}*\n\n"
f"Имя: {lead_data['name']}\n"
f"Телефон: {lead_data['phone']}\n"
f"Источник: {lead_data['source']}\n"
f"Сумма: {lead_data.get('amount', 'не указана')}"
)
await bot.send_message(
chat_id=manager_id,
text=message,
parse_mode="Markdown",
reply_markup=keyboard
)
# Обработка нажатий на кнопки
@dp.callback_query(F.data.startswith("lead_"))
async def handle_lead_action(callback: CallbackQuery):
action, lead_id = callback.data.split(":")
# Отправляем статус обратно в CRM
async with httpx.AsyncClient() as client:
await client.post(
CRM_WEBHOOK_URL,
json={
"lead_id": lead_id,
"action": action,
"manager_id": callback.from_user.id,
"timestamp": datetime.now().isoformat()
}
)
# Меняем текст сообщения, убираем кнопки
await callback.message.edit_text(
f"{callback.message.text}\n\n"
f"✅ Статус обновлён: {_action_label(action)}",
reply_markup=None
)
await callback.answer()
Это базовая схема. В реальных проектах я добавляю ещё распределение лидов между менеджерами через чат-роутинг, автоматические напоминания о просроченных задачах и синхронизацию статусов обратно из CRM в бот.
Важный момент: данные пользователя. Telegram передаёт from_user.id — это числовой идентификатор, не телефон и не имя. Чтобы сопоставить нажатие кнопки с конкретным менеджером в CRM, нужно при настройке бота один раз привязать Telegram ID к записи сотрудника в CRM. Обычно делается через команду /start с уникальным токеном.
Bot API 9.5: мелочи, которые экономят часы
В марте 2026 года вышел Bot API 9.5, и в нём есть три функции, которые я использую в каждом проекте:
Автоматическое форматирование даты и времени. Раньше приходилось вручную приводить таймстампы к часовому поясу пользователя. Сейчас Telegram сам форматирует дату под часовой пояс получателя, если передать timestamp в правильном формате. Клиент в Иркутске видит время по Иркутску, клиент в Москве — по Москве.
Теги участников чата. В групповых чатах с поддержкой можно тегать роли, а не конкретных людей. Написал @support — уведомление улетело всем, у кого стоит этот тег. Удобно для ботов в рабочих группах.
Потоковая отправка сообщений. Метод позволяет отправлять длинный текст частями, не упираясь в лимит 4096 символов. Для длинных уведомлений (например, ежедневных отчётов) — спасение.
Telegram Business: стоит ли подключать
Telegram Business — это отдельная подписка для компаний, которая добавляет функции поверх обычного аккаунта: рабочие часы, автоматические приветствия, быстрые ответы, чат-боты на личном аккаунте.
Для чего реально полезно: малый бизнес, где один человек общается с клиентами с личного номера. Салон красоты, частный мастер, небольшой магазин. Подключил бизнес-аккаунт — получил автоответы в нерабочее время, приветственное сообщение для новых клиентов, и бота, который прямо в личном чане отвечает на частые вопросы.
Для чего не подходит: средний и крупный бизнес, где нужна командная работа. Telegram Business привязан к одному аккаунту. Если у вас пять менеджеров — им всем нужен CRM-клиент типа Umnico или интеграция через Bot API, а не Telegram Business.
Архитектура современного Telegram-бота для клиента — чеклист
Когда я начинаю новый проект с Telegram-ботом, мой типовой набор выглядит так:
- aiogram 3.x на бэкенде (Python). Асинхронность из коробки, нормальная типизация, активное комьюнити.
- Redis для FSM (машины состояний). Если бот ведёт пользователя по шагам — данные о текущем шаге хранятся в Redis, не в памяти процесса.
- Webhook, не polling. Long polling в продакшене — это боль. Webhook через SSL — стабильнее и быстрее.
- Инлайн-кнопки вместо текстовых команд. Пользователи не любят писать
/status. Кнопка «Проверить статус» работает лучше. - Mini App для всего, что сложнее пары кнопок. Форма заказа, каталог, личный кабинет — это Mini App, не сообщения с кнопками на пять экранов.
- WebApp.initData для авторизации. Не нужно придумывать свою систему токенов для Mini App — Telegram уже всё подписал.
- Часовой пояс пользователя — сразу сохраняю при первом взаимодействии. Пригодится для отложенных сообщений и отчётов.
Итог
Telegram в 2026 году — платформа для бизнес-приложений. Приём заявок в пиццерии, корпоративный CRM-интерфейс, каталог внутри мессенджера — всё это работает на Bot API без костылей. Bot API 10.1 с нормальным форматированием, стриминг ответов для AI-ботов, Mini Apps — рабочие инструменты, не эксперименты.
Главное — не пытаться запихнуть в бота всё подряд. Если задача решается простым уведомлением — не нужен Mini App. Если нужен каталог с фильтрами — не делайте это инлайн-кнопками. Инструментов много, и в этом весь смысл: выбирать тот, который решает задачу, а не тот, который первый пришёл в голову.
А вы сейчас используете Telegram-ботов в проектах? Останавливаетесь на уведомлениях или уже строите что-то сложнее? Поделитесь в комментариях — интересно, у кого как устроено.