Хороший Telegram-бот не выглядит «технологичным» — он выглядит понятным. Пользователь приходит с задачей и должен понять, что делать, за пару секунд. Дизайн диалога — это и про тексты, и про порядок шагов, и про кнопки, и про то, как бот реагирует, когда что-то идёт не так. Разберём принципы, которые работают на проектах любого масштаба — от записи к мастеру до B2B-кабинета продавца на маркетплейсе.
Чат — это не сайт и не мобильное приложение. У вас нет шапки, навигации, сайдбара, хлебных крошек. Есть только лента сообщений и клавиатура снизу. Любая ошибка дизайна сразу бьёт в воронку: пользователь либо нажимает не туда, либо вообще закрывает чат и больше не возвращается. Поэтому решения принимаются в формате «быстро понятно — или провал».
Принцип короткого экрана
Пользователь читает сообщение бота как push-уведомление: 2–3 секунды максимум. Если в сообщении больше 3–4 строк, его не дочитывают. Длинные простыни с подробным объяснением «почему мы спрашиваем» работают на лендинге, но не в чате — там читатель просто скроллит дальше или закрывает диалог.
Правила:
- Один шаг — одно сообщение.
- Максимум 50–80 слов в одном сообщении.
- Ключевую мысль — в первой строке. Подробности — потом, по запросу.
- Списки длиной 7+ вариантов ломают восприятие; разбейте на категории.
- Длинные тексты — паджинация по 5 элементов или сворачивание под кнопку «Подробнее».
Пример «до/после»:
До: «Здравствуйте! Мы рады приветствовать вас в нашем сервисе записи. Чтобы мы могли подобрать удобное время, пожалуйста, выберите услугу из списка ниже, а затем мы предложим доступные даты и времена…»
После: «Привет! На какую услугу записать? [Маникюр] [Педикюр] [Стрижка]»
Второй вариант пользователь поймёт за секунду. Первый — пролистает.
Тон голоса
Бот должен говорить на языке аудитории. Молодой сервис может быть на «ты», корпоративный — только на «вы». Главное — выдерживать стиль на всех экранах: ошибки, подтверждения, рассылки, FAQ. Если приветствие на «ты», а письмо об оплате на «уважаемый клиент» — у пользователя ощущение, что с ним говорят два разных бота.
Хорошие правила:
- Без приветствий вроде «Здравствуйте, дорогой друг!». Сразу к делу.
- Без жаргона разработчика («ID не валиден», «токен истёк»). Замените на бытовой язык.
- Без излишней фамильярности. «Эй!», «Йоу!» уместны редко.
- Без бесконечных смайлов. Один уместный лучше трёх случайных.
- Эмпатия в ошибках: «Понимаю, давайте разберёмся», «Извините за задержку».
Сравнение тонов:
| Тон | Аудитория | Пример приветствия | Пример ошибки |
|---|---|---|---|
| Дружеский | B2C, молодёжь | «Привет! Чем помочь?» | «Упс, не нашёл такой город. Попробуй ещё раз?» |
| Деловой | Корпоративные клиенты | «Здравствуйте. Выберите раздел» | «Не удалось найти город. Уточните название» |
| Сервисный | Запись, поддержка | «Добрый день! Запишем к мастеру?» | «К сожалению, такого города нет в базе. Напишите ближайший крупный» |
| Технический | Разработчикам | «Привет, dev. Что задеплоить?» | Error: city not found. Try /list |
Тон выбирается на этапе ТЗ и фиксируется в гайдлайнах копирайтинга — иначе через полгода новый человек добавит сообщение «уважаемый клиент компании» в дружеский бот, и фокус потеряется.
Onboarding в первых 3 сообщениях
Первый контакт решает, останется ли пользователь. Правило трёх сообщений:
- Что я умею — одно предложение, без списков фич. «Я помогу записаться к мастеру, посмотреть свободное время и оплатить услугу».
- Быстрый wow — предложите попробовать. «Хотите выбрать время прямо сейчас?» с кнопкой [Да].
- Согласие/контакт — попросите минимум данных. Телефон не на старте, а в момент, когда он реально нужен.
Антипаттерн — выкатить простыню: «Привет! Я бот. Я могу: 1) записать… 2) отменить… 3) напомнить… 4) показать… 5) оплатить… 6) вернуть… Чтобы начать, напишите /start или нажмите кнопку меню снизу или /help для справки». Никто это не дочитает.
Кнопки vs текст
Если у пользователя есть выбор между «нажать кнопку» и «написать текст», большинство выберет кнопку. Это снижает ошибки ввода, ускоряет сценарий и улучшает аналитику.
Правила:
- Любой типовой ответ — кнопка.
- Кнопок в одном сообщении — не больше 4–6.
- Длина текста кнопки — до 20 символов, иначе ломается на узких экранах.
- Inline-клавиатура для одноразовых действий (выбор слота). Reply-клавиатура для постоянных команд (главное меню).
- Кнопка «Назад» обязательна на любом шаге глубже первого.
Сравнение типов клавиатур:
| Тип | Когда использовать | Плюсы | Минусы |
|---|---|---|---|
| Inline-клавиатура | Выбор слота, оплата, подтверждение | Привязана к сообщению, не засоряет ввод | Исчезает при пересылке |
| Reply-keyboard | Главное меню, частые команды | Всегда видна, как нативные кнопки | Занимает место под полем ввода |
| Свободный текст | Имя, телефон, адрес, описание | Любые данные | Ошибки ввода, нужна валидация |
Команды (/cancel, /menu) | Глобальные действия | Доступны всегда | Нужно знать заранее |
Команды /menu, /cancel, /help должны работать всегда — на любом шаге, в любом состоянии. Это «аварийный выход».
Прогрессивное раскрытие
Не вываливайте 10 опций сразу. Покажите 2–3 главных и кнопку «Ещё». Пример: меню записи показывает «Маникюр», «Педикюр», «Стрижка» и «Все услуги». Под «Все услуги» — полный список с категориями.
Это работает потому, что 80% пользователей выберут одно из топ-3 предложений. Остальные 20% доберутся до полного списка через одно дополнительное нажатие. Зато «топ-3» не теряются в шуме.
Свободный ввод и подтверждения
Если без свободного ввода не обойтись — телефон, имя, описание заказа — добавьте подсказку формата прямо в подзапросе:
Введите телефон в формате +7 999 123-45-67
После ввода — подтверждение:
Записываю телефон +7 999 123-45-67. Всё верно? [Да] [Изменить]
Деструктивные действия — отмена записи, удаление аккаунта, возврат — всегда через двойное подтверждение:
Точно отменить запись на 15 марта в 14:00? [Да, отменить] [Нет, оставить]
Без подтверждения один случайный тап превращается в потерю клиента и негативный отзыв.
Эмодзи и форматирование
Эмодзи — акцент, не декорация. Один в начале сообщения для эмоции (✅ Готово, ⚠️ Внимание, 💳 Оплата), один в конце для завершения. Три подряд — перебор.
Telegram поддерживает MarkdownV2 и HTML. Что использовать:
| Элемент | Когда |
|---|---|
| Жирный | Главное действие, сумма, дата |
| Курсив | Цитата, второстепенный комментарий |
Моноширинный | Код, ID заказа, телефон для копирования |
| Списки | 3+ однотипных пункта |
| Заголовки | Длинные сообщения с разделами |
Не злоупотребляйте: чат — не статья. Если каждое слово жирное, ничего не выделяется.
Обработка ошибок
Ошибки — самая забытая часть бота. Пользователь ввёл что-то странное, и бот молчит, или говорит «Неизвестная команда».
Минимум:
- На каждый шаг — fallback на свободный ввод. «Не нашёл город. Попробуйте ввести точнее или выберите из списка [Москва] [СПб] [Все города]».
- Тайм-аут на ожидание ответа. Если пользователь молчит 24 часа, отправьте мягкое напоминание.
- На технические ошибки — вежливое сообщение «Что-то пошло не так. Мы уже заметили, попробуйте через минуту» + автоматический алерт в чат поддержки.
- Никогда не показывайте пользователю «Internal Server Error», стек или ID ошибки без контекста.
Антипаттерн «извините, я вас не понял» 5 раз подряд — после двух неудач предложите эскалацию: «Кажется, я не справляюсь. Соединить с менеджером?».
Состояния и контекст
Бот должен помнить, на каком шаге пользователь. Если он начал записываться на услугу, отвлёкся и вернулся через час — спросите: «Продолжим запись на маникюр или начнём заново?». Без этого пользователь повторяет шаги и злится.
Технически — FSM (StatesGroup в aiogram, dialogue в teloxide, conversations в grammY) + хранилище (Redis, Postgres). Никаких глобальных переменных в коде — у вас всегда несколько пользователей одновременно.
Скорость ответа
Если действие занимает больше 2 секунд, бот должен показать индикатор:
chat.sendChatAction("typing")— для текстового ответа.upload_photo/upload_document— для медиа.- Сообщение «Обрабатываю…» с обновлением через
editMessageText, когда готово. - Для долгих операций (10+ секунд) — частичный ответ: «Ищу подходящие слоты, это займёт около 15 секунд…».
Без индикатора пользователь решит, что бот сломался, и начнёт писать снова. Дублей сообщений становится больше, очередь растёт, бот реально ломается.
Платёжные сценарии
В платежах ставки выше: ошибка стоит денег и доверия. Минимум:
- На экране подтверждения — итоговая сумма, состав, кнопка «Изменить».
- После оплаты — мгновенное подтверждение и чек.
- Если оплата не прошла, объясните почему и предложите попробовать снова.
- Поддержка возвратов в один клик из чата с ботом.
Локализация и эскалация на человека
Если бот работает на нескольких языках — RU/EN/UZ — учитывайте не только перевод, но и тон. В RU допустимо «ты» для молодёжного сервиса, в EN формальность нейтральнее, в UZ — обращение на «вы» по умолчанию. Форматы дат, валют, чисел тоже локализуются: 1 000,00 ₽ vs $1,000.00 vs 1.000,00 so'm.
Эскалация на человека — обязательная функция любого сервисного бота. Критерии:
- Пользователь явно попросил («менеджер», «человек», «оператор»).
- 3 неудачных fallback подряд.
- Обнаружено ключевое слово (жалоба, возврат, юрист).
- Сложный кейс, который не описан в сценариях.
Кнопка «Соединить с менеджером» должна быть видна в FAQ, в ошибках и в главном меню.
A/B-тесты копирайта
Копирайт в боте — гипотеза, а не догма. Что стоит тестировать:
| Что | Метрика | Пример |
|---|---|---|
| Первое сообщение | Конверсия в первый клик | «Привет!» vs «Запишем к мастеру?» |
| Кнопка CTA | Клики | «Записаться» vs «Выбрать время» |
| Текст ошибки | Восстановление сценария | «Не понял» vs «Уточните, пожалуйста» |
| Подтверждение | Завершение оплаты | «Оплатить 1500 ₽» vs «К оплате» |
Делите аудиторию по user_id % 2 и логируйте вариант — этого хватит для базового сравнения. Точные значения подбираются по конкретному проекту.
Главное меню и доступность
Главное меню — точка возврата. Команда /menu, постоянная reply-клавиатура или кнопка «Меню» в каждом ответе. Пользователь должен иметь возможность выйти из любого тупика в одно нажатие.
Telegram читают и через скринридеры. Основные правила:
- Не передавайте смысл только через эмодзи. «✅ Готово» или «Готово ✅» с текстом — ок. «✅» одиноко — нет.
- Не злоупотребляйте картинками без описаний. Если бот шлёт схему, продублируйте текстом.
- Кнопки называйте действием, а не «Кнопка 1». «Записаться», «Отменить», «Подробнее».
- Контрастность важна для Mini App, для бота — нет.
Тестирование на людях
5 пользователей вне команды найдут больше проблем, чем 50 ревью внутри. Дайте им конкретную задачу: «запишись на услугу за 1000 ₽», «верни деньги за заказ». Запишите экран и реакцию. Каждая фрустрация — пункт для редизайна.
Чек-лист проверки диалога перед запуском:
| Проверка | Что смотрим |
|---|---|
| Длина сообщений | Не больше 3–4 строк |
| Кнопки | До 6 в сообщении, до 20 символов |
| Главное меню | Доступно с любого шага |
| Команды | /start, /menu, /cancel, /help работают везде |
| Ошибки | На каждый ввод есть fallback |
| Подтверждения | Деструктивные действия требуют двойного клика |
| Индикаторы | Долгие операции показывают typing |
| Эскалация | Кнопка «менеджер» видна в FAQ и ошибках |
| Эмодзи | Не несут уникального смысла |
| Тон | Единый во всех сообщениях |
Антипаттерны
Список вещей, которые ломают любой бот:
- «Приветствую вас, уважаемый клиент компании X» — сразу мимо, на шапку никто не смотрит.
- Навязчивые рассылки чаще раза в неделю без явного согласия — мьют, а потом блок.
- «Извините, я вас не понял» 5 раз подряд — пользователь уходит и не возвращается.
- Тупиковые ветки без
/menuи кнопки «назад» — фрустрация, особенно на мобильном. - Сообщения длиннее экрана — пользователь видит первое предложение и закрывает.
- Кнопки с непонятными названиями («Опция 1», «Далее»), не описывающими действие.
- Эмодзи как единственный носитель смысла — теряется в скринридере и при копировании.
- Подтверждение оплаты без итоговой суммы — нет доверия.
- Технические тексты ошибок («Bad Request 400», «null reference») — пугают и не помогают.
Если в боте есть хотя бы три пункта из списка — пора садиться за редизайн диалогов.
Кейс редизайна: до и после
Реальный пример из практики. Бот записи в барбершоп, конверсия из /start в запись была 18%.
До редизайна:
- Первое сообщение — 12 строк с описанием всех услуг.
- Главное меню только через
/menu, кнопки нет. - Свободный ввод имени, телефона, услуги, времени — всё подряд.
- Ошибка «не понял» без подсказки.
После редизайна:
- Первое сообщение — 2 строки + 3 кнопки топ-услуг.
- Reply-keyboard с «Меню», «Мои записи», «Помощь» постоянно снизу.
- Кнопки выбора услуги/мастера/слота, телефон только перед оплатой.
- Ошибка с подсказкой и кнопкой «Соединить с мастером».
Конверсия выросла до 41%, среднее время записи сократилось с 4 минут до 1:20. Никакого нового функционала не добавляли — только переписали диалоги и расставили кнопки.
Итого
Дизайн диалога — это короткие сообщения, понятный тон, кнопки вместо свободного ввода, явные состояния и индикаторы скорости. Главное меню всегда доступно, ошибки имеют чёткий выход, платёжные шаги подтверждаются. Тестируйте на живых пользователях — это самая дешёвая инвестиция в качество. Хороший бот не тот, который умеет всё, а тот, в котором не теряются.
Частые вопросы
Какой длины должны быть сообщения Telegram-бота?
Пользователь читает сообщение бота как push-уведомление: 2–3 секунды максимум. Если в сообщении больше 3–4 строк, его не дочитывают. Правила: один шаг — одно сообщение; максимум 50–80 слов в одном сообщении; ключевую мысль — в первой строке; подробности потом, по запросу; списки длиной 7+ вариантов ломают восприятие, разбейте на категории. Это сильно отличается от сайта, где можно скроллить и читать длинные тексты — в чате нет места для лонгридов, и пользователь автоматом игнорирует длинные простыни.
Как выбрать тон голоса для Telegram-бота?
Бот должен говорить на языке аудитории. Молодой сервис может быть на «ты», корпоративный — только на «вы». Главное — выдерживать стиль на всех экранах. Хорошие правила. Без приветствий вроде «Здравствуйте, дорогой друг!». Сразу к делу. Без жаргона разработчика («ID не валиден», «токен истёк») — замените на бытовой язык. Без излишней фамильярности («Эй!», «Йоу!» уместны редко). Без бесконечных смайлов — один уместный лучше трёх случайных. Тон фиксируется в гайдлайнах копирайтинга на этапе ТЗ.
Когда использовать кнопки, а когда свободный ввод?
Если у пользователя есть выбор между «нажать кнопку» и «написать текст», большинство выберет кнопку. Это снижает ошибки ввода, ускоряет сценарий и улучшает аналитику. Правила: любой типовой ответ — кнопка; кнопок в одном сообщении не больше 4–6; длина текста кнопки до 20 символов; inline-клавиатура для одноразовых действий, reply-клавиатура для постоянных команд; кнопка «Назад» обязательна на любом шаге глубже первого. Свободный ввод оставляйте только для уникальных данных (телефон, имя, описание заказа) с подсказкой формата.
Как обрабатывать ошибки и непонятный ввод в боте?
Ошибки — самая забытая часть бота. Пользователь ввёл что-то странное, и бот молчит, или говорит «Неизвестная команда». Минимум: на каждый шаг — fallback на свободный ввод («Не понял ваш ответ. Выберите вариант ниже или напишите /menu»); тайм-аут на ожидание ответа (если пользователь молчит 24 часа, отправьте мягкое напоминание); на технические ошибки — вежливое сообщение «Что-то пошло не так. Мы уже заметили, попробуйте через минуту» + автоматический алерт в чат поддержки. Главное меню (/menu) всегда доступно — пользователь должен иметь возможность выйти из тупика. После двух неудач подряд предложите эскалацию на менеджера.
Зачем боту индикаторы скорости и как их использовать?
Если действие занимает больше 2 секунд, бот должен показать индикатор. chat.sendChatAction("typing") — для текстового ответа. upload_photo / upload_document — для медиа. Сообщение «Обрабатываю…» с обновлением через editMessageText, когда готово. Без индикатора пользователь решит, что бот сломался, и начнёт писать снова. Дублей сообщений становится больше, очередь растёт, бот реально ломается. Это типичная цепная реакция: один долгий ответ → пользователи дублируют → нагрузка растёт → ответы ещё дольше → пользователи злятся.
Когда подключать живого менеджера и как это сделать?
Эскалация на человека — обязательная функция любого сервисного бота. Критерии: пользователь явно попросил («менеджер», «человек», «оператор»); 3 неудачных fallback подряд; обнаружено ключевое слово (жалоба, возврат, юрист); сложный кейс, который не описан в сценариях. Кнопка «Соединить с менеджером» должна быть видна в FAQ, в ошибках и в главном меню. Технически это либо переадресация в отдельный чат поддержки (Telegram-группа с операторами), либо передача диалога в helpdesk-систему через webhook. Главное — не делать «тупиковых» сценариев, где пользователь упирается в стену без выхода.
Как тестировать дизайн диалога Telegram-бота на пользователях?
5 пользователей вне команды найдут больше проблем, чем 50 ревью внутри. Дайте им конкретную задачу: «запишись на услугу за 1000 ₽», «верни деньги за заказ». Запишите экран и реакцию. Каждая фрустрация — пункт для редизайна. Также важна доступность: не передавайте смысл только через эмодзи (✅ Готово ок, одинокая ✅ нет), не злоупотребляйте картинками без описаний. Telegram читают и через скринридеры. Тестирование на живых пользователях — самая дешёвая инвестиция в качество, которая ловит проблемы, незаметные команде разработки.