Legan Studio
Все статьи
~ 15 мин чтения

Дизайн диалога Telegram-бота: лучшие практики

Как проектировать диалоги в Telegram-боте, чтобы пользователь не терялся: тон, длина сообщений, кнопки, ошибки и подсказки. Чек-лист на старте проекта.

  • Telegram
  • UX
  • процесс

Хороший Telegram-бот не выглядит «технологичным» — он выглядит понятным. Пользователь приходит с задачей и должен понять, что делать, за пару секунд. Дизайн диалога — это и про тексты, и про порядок шагов, и про кнопки, и про то, как бот реагирует, когда что-то идёт не так. Разберём принципы, которые работают на проектах любого масштаба — от записи к мастеру до B2B-кабинета продавца на маркетплейсе.

Чат — это не сайт и не мобильное приложение. У вас нет шапки, навигации, сайдбара, хлебных крошек. Есть только лента сообщений и клавиатура снизу. Любая ошибка дизайна сразу бьёт в воронку: пользователь либо нажимает не туда, либо вообще закрывает чат и больше не возвращается. Поэтому решения принимаются в формате «быстро понятно — или провал».

Принцип короткого экрана

Пользователь читает сообщение бота как push-уведомление: 2–3 секунды максимум. Если в сообщении больше 3–4 строк, его не дочитывают. Длинные простыни с подробным объяснением «почему мы спрашиваем» работают на лендинге, но не в чате — там читатель просто скроллит дальше или закрывает диалог.

Правила:

  • Один шаг — одно сообщение.
  • Максимум 50–80 слов в одном сообщении.
  • Ключевую мысль — в первой строке. Подробности — потом, по запросу.
  • Списки длиной 7+ вариантов ломают восприятие; разбейте на категории.
  • Длинные тексты — паджинация по 5 элементов или сворачивание под кнопку «Подробнее».

Пример «до/после»:

До: «Здравствуйте! Мы рады приветствовать вас в нашем сервисе записи. Чтобы мы могли подобрать удобное время, пожалуйста, выберите услугу из списка ниже, а затем мы предложим доступные даты и времена…»

После: «Привет! На какую услугу записать? [Маникюр] [Педикюр] [Стрижка]»

Второй вариант пользователь поймёт за секунду. Первый — пролистает.

Тон голоса

Бот должен говорить на языке аудитории. Молодой сервис может быть на «ты», корпоративный — только на «вы». Главное — выдерживать стиль на всех экранах: ошибки, подтверждения, рассылки, FAQ. Если приветствие на «ты», а письмо об оплате на «уважаемый клиент» — у пользователя ощущение, что с ним говорят два разных бота.

Хорошие правила:

  • Без приветствий вроде «Здравствуйте, дорогой друг!». Сразу к делу.
  • Без жаргона разработчика («ID не валиден», «токен истёк»). Замените на бытовой язык.
  • Без излишней фамильярности. «Эй!», «Йоу!» уместны редко.
  • Без бесконечных смайлов. Один уместный лучше трёх случайных.
  • Эмпатия в ошибках: «Понимаю, давайте разберёмся», «Извините за задержку».

Сравнение тонов:

ТонАудиторияПример приветствияПример ошибки
ДружескийB2C, молодёжь«Привет! Чем помочь?»«Упс, не нашёл такой город. Попробуй ещё раз?»
ДеловойКорпоративные клиенты«Здравствуйте. Выберите раздел»«Не удалось найти город. Уточните название»
СервисныйЗапись, поддержка«Добрый день! Запишем к мастеру?»«К сожалению, такого города нет в базе. Напишите ближайший крупный»
ТехническийРазработчикам«Привет, dev. Что задеплоить?»Error: city not found. Try /list

Тон выбирается на этапе ТЗ и фиксируется в гайдлайнах копирайтинга — иначе через полгода новый человек добавит сообщение «уважаемый клиент компании» в дружеский бот, и фокус потеряется.

Onboarding в первых 3 сообщениях

Первый контакт решает, останется ли пользователь. Правило трёх сообщений:

  1. Что я умею — одно предложение, без списков фич. «Я помогу записаться к мастеру, посмотреть свободное время и оплатить услугу».
  2. Быстрый wow — предложите попробовать. «Хотите выбрать время прямо сейчас?» с кнопкой [Да].
  3. Согласие/контакт — попросите минимум данных. Телефон не на старте, а в момент, когда он реально нужен.

Антипаттерн — выкатить простыню: «Привет! Я бот. Я могу: 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 читают и через скринридеры. Тестирование на живых пользователях — самая дешёвая инвестиция в качество, которая ловит проблемы, незаметные команде разработки.