Телеграм-бот: решение по архитектуре
Бот — второй интерфейс к существующей Морковке, а не новый продукт
Своего биллинга, своих пользователей, своих цен и своих кабинетов у него нет и не будет. Он дёргает готовые вызовы, показывает результат и уведомляет. Отсюда следует всё: и то, что список его действий равен списку услуг Морковки, и то, что он физически не может пообещать несуществующего.
Уведомления уже считаются и уходят в никуда
У Морковки есть таблица WatchEvent и семь типов событий: залетел ролик у отслеживаемого, резкий прирост, просадка, новый пост, сменил шапку, удалил пост, сводка недели. Всё это уже вычисляется и пишется в базу. Доставка — настройка из трёх значений: в интерфейс, в интерфейс с письмом, никуда.
Первые три события обесцениваются за часы. Про залетевший у конкурента ролик надо знать сегодня, а не в понедельник письмом. Сейчас они ложатся в колокольчик, куда человек заходит, когда сам вспомнит.
Правка минимальная: настройка получает четвёртое значение, а рядом с веткой «отправить письмо» появляется ветка «отправить в телеграм». Ни события, ни наблюдение, ни биллинг не трогаются.
Раздел наблюдения в их кабинетеСемь действий — это и есть весь бот
Список действий равен списку услуг Морковки. Поэтому бот не может пообещать несуществующего: обещать нечем.
| Действие | Что вводят | Кредитов | Сколько ждать |
|---|---|---|---|
| Разбор аккаунта | ник | 48 | 4–7 минут |
| Тридцать похожих | ник | 9 | около минуты |
| Разбор своего контента | свой ник и брифинг | 31 | 4–7 минут |
| Поставить на наблюдение | ник | 25 | сразу |
| Отчёт по наблюдаемому | выбор из своих | 11 | около минуты |
| Разбор чужого ролика | ссылка | 5 | около минуты |
| Сценарий по мотивам | ссылка | 3 | около минуты |
Что где живёт
Это нужно переслать клиенту? → в чат
Здесь нужно листать, фильтровать и возвращаться назад? → в кабинет
Сайт, свой домен
Оффер, примеры, цены, оферта, касса, веб-кабинет
Здесь то, что читают до доверия. И здесь рубли, чек и счёт юрлицу — в Телеграме их быть не может.
Чат бота
Ввод, запуск любого действия, прогресс, отчёт, уведомления, чек об оплате
Отчёт из чата пересылается клиенту одним касанием, ищется поиском и остаётся в истории. Для SMM-специалиста это не удобство, а часть работы: он продаёт этот разбор как свою.
Mini App, не в первой версии
История отчётов с фильтрами, слоты наблюдения, баланс, брифинг для разбора своего контента, пакетные операции
Списки и переключатели: в чате они вырождаются в лестницу кнопок. Но пока показывать там нечего.
Форма поверх чата или сообщение в чат
Сообщение. Формы в запуске задач нет вовсе.
Ник приходит из буфера обмена и системного «Поделиться». Форма в «Поделиться» не появляется в принципе. Вставить в поле чата — одно действие. Через форму — пять: кнопка, полторы секунды загрузки, тап в поле, вставка, отправка. И ломается она ровно там, где чат работает: слабый Android, старый вебвью, десктоп.
Признак не «сколько полей», а откуда берётся значение. Значение, которое ВСТАВЛЯЮТ, — в чат. Значение, которое СОЧИНЯЮТ ГЛАЗАМИ (ниша, стоп-темы, список из тридцати строк, сетка порогов), — в форму.
По этому признаку форма нужна ровно в трёх местах, и все три редкие: брифинг для разбора своего контента, пакетный подбор, пакетная настройка наблюдения. В первой версии их нет.
Что нового в Telegram и что из этого берём
Перелом случился в 2026 году — пять релизов за семь месяцев. Версии сверены по журналу изменений вручную: в разведке одну назвали неверно.
Цвет кнопок
поле style у InlineKeyboardButtonберёмBot API 9.4 · 9 февраля 2026
Было: Все кнопки одинаковые серые, иерархию рисовали эмодзи в подписи: «✅ Запустить», «❌ Отмена»
Стало: Главное действие видно, не читая текст
Сообщение как свёрстанный документ
sendRichMessageберёмBot API 10.1 · 11 июня 2026
Было: Таблицы рисовали моноширинным текстом, отчёт резали на четыре сообщения или отдавали картинкой
Стало: Отчёт до 32 тысяч знаков одним пересылаемым объектом: заголовки, таблицы, сворачиваемые блоки
Текст печатается на глазах
sendMessageDraftво вторую очередьBot API 9.5 · март 2026
Было: Только «печатает…», который живёт пять секунд и ничего не сообщает о ходе дела
Стало: Тот ритм, к которому все привыкли по ИИ-чатам
Кнопки внутри текста и нативно погашенные
RichBlockButtons, поле disabledберёмBot API 10.3 · 24 августа 2026
Было: Только полоса кнопок внизу; погашенную изображали заглушкой, которая выглядела рабочей
Стало: «Выгрузить» под таблицей, «Обновить» рядом с датой — отчёт сам становится интерфейсом
Темы прямо в личной переписке
createForumTopic в личных чатахво вторую очередьBot API 9.3 · декабрь 2025, бот создаёт сам — 9.4
Было: Одна плоская лента, где семь функций и десятки отчётов вперемешку
Стало: Один запуск — одна тема со своим названием. Ответ на «простыню» на уровне платформы
По чему видно, что бота делали всерьёз
Признаки дорогого
- Ровно одно акцентное действие цветом на экран, остальное нейтральное
- Отчёт — одно сообщение, а не четыре подряд
- Дата сущностью, которую клиент рисует в часовом поясе читателя, а не строкой «26.08.2026 (МСК)»
- На одно действие — одно сообщение; статус живёт в одном месте, а не приходит цепочкой «Принял / Ищу / Почти»
- Ник копируется кнопкой, а не выделяется пальцем
- Недоступный шаг — погашенная кнопка на своём месте, а не исчезнувшая клавиатура
Признаки обратного
- Псевдотаблицы из чёрточек и «▬▬▬▬» вместо разделителей
- ✅❌🔥 в подписях кнопок вместо цвета — верный признак, что бота делали до февраля
- Семь действий столбиком по одной кнопке в ряд на первом экране
- «Загрузка… ⏳», навсегда оставшаяся в истории
- Кнопка «Назад», которая шлёт новое сообщение вместо перерисовки — и в ленте пять копий меню
Как бот понимает, чего от него хотят
Первый эшелон — без модели, мгновенно и бесплатно
Разбор строки по форме: ссылка на ролик, ссылка на профиль, ник с собакой, голый ник. Срезаются хвосты вроде ?igsh=, регистр вниз, получается канонический ключ. Сюда же приходят пересылки: из текста и вложений вытаскивается первая ссылка на Instagram.
Прислали просто ссылку без слов — самый частый вход
Модель не зовём вовсе. Бесплатно подтягиваем шапку профиля и отвечаем карточкой: кто это, сколько подписчиков, когда последний пост, и две-три кнопки с ценой прямо на кнопке.
Второй эшелон — модель, только если в сообщении есть слова
Один вызов дешёвой модели со строгой схемой на выходе. Семь услуг — это классификация, а не планирование: никаких агентных цепочек.
Похожие намерения не разводим переспросом
«Разбери аккаунт», «проверь блогера перед рекламой», «глянь конкурента» — это один и тот же вызов. Разница уезжает в шапку отчёта, а не в вопрос человеку. Правило в коде: если две ветки дают один вызов с теми же параметрами — не спрашиваем ничего.
Ожидание, падение, выдача
Пока считается
- Прогресс — правкой одного сообщения и без звука. Финал — новым сообщением со звуком: правка не создаёт уведомления, и половина людей его просто не увидит.
- Стадии вместо процентов: «собираю посты, 62 из 180» → «считаю метрики» → «свожу выводы». Правка не чаще раза в пять секунд.
- В статусе — номер задачи и честное время именно этой услуги. Единое «до десяти минут» на всё — враньё в обе стороны.
- «Можно закрыть чат — пришлю сюда, когда будет готово» стоит в первом же статусе.
Если упало
- Первая строка всегда снимает главный страх: «Кредиты не списаны — 48 на месте».
- Вторая — причина по-человечески. Третья — ровно одно действие и код обращения.
- Ошибка на нашей стороне даёт кнопку «Повторить бесплатно», ошибка во вводе — «Другой аккаунт».
Как отдаём
- Отчёт — одно самодостаточное сообщение с шапкой «@ник · разбор аккаунта · период · Морковка». Всё, что должно пережить пересылку, лежит внутри него.
- Внутри отчёта нет обращения на «ты», остатка кредитов, цен и внутренних названий услуг: его читает клиент SMM-специалиста, который к боту отношения не имеет.
- Служебные кнопки — следующим сообщением, чтобы не уехали вместе с отчётом.
- Две разные кнопки «поделиться»: «Переслать» оставляет шапку «Переслано из…», а «Отправить клиенту» отправляет от имени человека, без следов инструмента. Фрилансеру, который продаёт этот разбор как свою работу, важнее вторая.
- Повторная выдача уже готового отчёта — всегда бесплатно и без пересчёта.
Пять мест, где это сломается
Разбор присланной строки
Прилетит всё: ник с большой буквы, ссылка с хвостом, ссылка на сторис, ник из подписи к скриншоту, ссылка внутри пересланного поста, голосовое. Плохой разборщик выглядит ровно как «бот не работает» и обесценивает весь замысел.
Что делаем: Тестовый набор из полусотни реальных форм. При неудаче не молчать: «Прочитал так: @nike. Не то?»
Двойное списание
Двойной тап по кнопке — штатное поведение клиента, событие приходит дважды. Плюс человек проматывает наверх и жмёт кнопку под позавчерашней карточкой. Это самая дорогая жалоба, которую можно получить.
Что делаем: Ключ задачи из пользователя, услуги и аккаунта: повторный запрос не создаёт вторую задачу, а подписывает на существующую. Кнопки снимаются правкой сразу.
Ограничение частоты бьёт по всем
Отказ по превышению блокирует все вызовы бота, а не только этот чат. Один шумный прогресс-бар роняет доставку отчётов всей очереди.
Что делаем: Единая очередь исходящих с общим ограничителем. Воркеры не пишут в Telegram напрямую.
Наблюдение убивает доставку всего остального
Восемь аккаунтов по три-четыре события в неделю — и бот в муте, а потом в блоке. После этого не долетают и отчёты за 48 кредитов.
Что делаем: Сводка по расписанию вместо сообщения на каждое изменение, частота настраивается при постановке, отписка кнопкой под самим уведомлением.
Свежие возможности на несвежих клиентах
Цвет кнопок работает с февраля, свёрстанные сообщения с июня, кнопки внутри текста с 24 августа. Заметная часть аудитории увидит деградацию.
Что делаем: Ни один смысл не держится на цвете и на вёрстке. Главная кнопка главная позицией и формулировкой, отчёт обязан читаться простым текстом.
Первая версия
Делаем
- Четыре услуги из семи: разбор аккаунта, тридцать похожих, разбор ролика, сценарий. Есть дорогое ядро и есть дешёвая проба за три кредита.
- Разбор присланной строки и приём пересылок. Ответ всегда ответом на исходное сообщение.
- Карточка по типу ввода с ценой на самой кнопке. Подтверждение перед дорогим действием.
- Защита от двойного списания — условие выхода, а не «потом».
- Один статусный пузырь со стадиями, финал новым сообщением со звуком.
- Отчёт одним сообщением, кнопка «Отправить клиенту».
- Три экрана ошибки, каждый начинается с «кредиты не списаны».
- Шесть команд, описание бота, история последних десяти отчётов простым списком.
Откладываем сознательно
- Наблюдение и отчёты по нему — тянут планировщик, регулярные пуши и риск мьюта, то есть отдельный продукт внутри продукта.
- Разбор своего контента — без брифинга это мусор за 31 кредит, а брифинг тянет весь контур форм.
- Mini App целиком: пока нет объёма, список сообщением дешевле и находимее.
- PDF — добавляем, когда увидим, что отчёты действительно пересылают, а не читают сами.
- Модель в роутере — в первой версии работает только разбор строки: ссылка и ник покрывают почти весь вход.
- Темы в личной переписке и стриминг — усиления, ни одно не является условием пользы.
Что не проверено и на это нельзя ставить
- Правило Telegram 6.2 про цифровые услуги — юристу. Мы платёжные методы Telegram не подключаем, ссылка на свою кассу в веб-окне — обычная практика, но формулировку стоит прочитать своими глазами.
- Чеки, касса и порог самозанятого — бухгалтеру, до первой выручки, а не после.
- Всё, что касается Mini App и эфемерных сообщений, через перепроверку по журналу изменений не проходило и в ТЗ без сверки не идёт.
Привязка телеграма к аккаунту, все шесть путей входа и правило, когда спрашивать код на почту, — в постановке для их команды: docs/integration/identity.md. Доставка уведомлений — notifications.md. Что какой вызов дёргает и почём — one-off-payments.md.