Сбор отзывов — недооценённый сценарий для Telegram-ботов. После заказа клиент получает в боте короткую форму, оценивает сервис по NPS-шкале, оставляет комментарий — и бот автоматически публикует положительные отзывы в канал, отрицательные эскалирует руководителю, а нейтральные просит улучшить с конкретикой.
Разберём архитектуру, шаблоны диалога, антиспам и связку с публичными площадками (Яндекс.Карты, 2GIS, Google Maps).
Зачем собирать отзывы через бот
- Конверсия в отзыв х5 против email-рассылки.
- Скорость: отзыв в течение 1–24 часов после услуги, пока эмоции свежи.
- Сегментация на лету: довольные → публикация, недовольные → саппорт.
- Бесплатное распространение — бот сразу шлёт отзыв в Telegram-канал бренда.
- Метрики — NPS, CSAT, доля промоутеров считаются автоматически.
CR в отзыв через бота — 30–50% против 5–8% по email и 1–3% по SMS.
Сценарий диалога: NPS + детали
Бот: Иван, спасибо что выбрали нас!
Оцените, насколько вероятно, что вы порекомендуете нас друзьям?
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]
Юзер: 9
Бот: Здорово! Что вам особенно понравилось?
[Качество] [Скорость] [Сервис] [Цена] [Своё]
Юзер: Скорость
Бот: Хотите, мы опубликуем ваш отзыв в нашем канале?
[Да, опубликовать] [Только для вас]
Юзер: Да
Бот: Спасибо! Отзыв уже на модерации, опубликуем в течение часа.
Вся цепочка — 4 сообщения, 30 секунд времени юзера.
Реализация на aiogram FSM
from aiogram.fsm.state import StatesGroup, State
from aiogram.fsm.context import FSMContext
class Review(StatesGroup):
score = State()
reason = State()
publish = State()
@router.message(F.text == "/review")
async def start_review(message: Message, state: FSMContext):
await state.set_state(Review.score)
await message.answer(
"Оцените нас от 0 до 10",
reply_markup=score_kb(),
)
@router.callback_query(Review.score, F.data.startswith("score:"))
async def on_score(cb: CallbackQuery, state: FSMContext):
score = int(cb.data.split(":")[1])
await state.update_data(score=score)
if score >= 9:
await cb.message.answer("Что вам особенно понравилось?", reply_markup=tags_pos_kb())
elif score >= 7:
await cb.message.answer("Что можем улучшить?", reply_markup=tags_neutral_kb())
else:
await cb.message.answer("Что пошло не так? Опишите подробнее.")
await state.set_state(Review.reason)
return
await state.set_state(Review.reason)
NPS-логика: 9–10 — промоутер, 7–8 — нейтральный, 0–6 — детрактор. Каждой группе — свой следующий шаг.
Эскалация недовольных
Когда юзер ставит ≤6 — это критичный сигнал. Бот сразу:
- Приносит извинения.
- Просит детали (кнопки причин + свободный текст).
- Создаёт тикет в саппорт-чате с тегом
urgent. - Уведомляет руководителя в личку.
async def escalate(user, score, reason):
await bot.send_message(
SUPPORT_CHAT_ID,
f"⚠️ Низкий NPS\n"
f"Юзер: {user.full_name} (@{user.username})\n"
f"Оценка: {score}/10\n"
f"Причина: {reason}",
message_thread_id=URGENT_TOPIC_ID,
)
await bot.send_message(
MANAGER_ID,
f"Срочно перезвоните: @{user.username}",
)
Реакция в течение часа на негатив возвращает в продукт 40–60% детракторов.
Публикация положительных отзывов
Промоутеры (NPS 9–10), которые согласились публиковать, попадают в очередь модерации:
async def publish_review(review_id: int):
r = await reviews.get(review_id)
if r.status != "approved":
return
text = (
f"⭐ Оценка: {r.score}/10\n"
f"<b>{r.user_name}</b>\n\n"
f"{r.text}\n\n"
f"#отзыв #{r.tag}"
)
await bot.send_message(
REVIEWS_CHANNEL_ID,
text,
parse_mode="HTML",
)
await reviews.mark_published(review_id)
Поток отзывов в канале даёт постоянный «социальный пруф» для новых клиентов.
Антиспам
Главные проблемы:
- Конкуренты пишут негатив.
- Один клиент пишет 10 отзывов с разных аккаунтов.
- Бывшие сотрудники мстят.
Меры:
| Проблема | Решение |
|---|---|
| Чужие негативы | привязка отзыва к заказу (через QR в чеке или ссылку из CRM) |
| Multi-acc | проверка tg_id + телефона + email в CRM |
| Спам | rate-limit 1 отзыв на услугу на пользователя |
| Боты-фейки | проверка возраста аккаунта, наличие аватара |
Основной приём — deeplink-привязка: после оплаты CRM генерирует уникальный URL t.me/yourbot?start=review_<order_id>_<hash>. Только по нему можно оставить отзыв на этот заказ.
Интеграция с Яндекс/2GIS/Google Maps
Положительные отзывы хочется размножить на публичных площадках. Сценарий:
- После публикации в канале бот пишет юзеру: «Если вам не сложно, скопируйте отзыв на Яндекс.Карты — это поможет нам».
- Кнопка «Открыть на Я.Картах» с deeplink на карточку организации.
- Бот предлагает скопировать готовый текст в буфер обмена.
Полностью автоматизировать публикацию нельзя (нужен живой клик юзера на площадке), но конверсия в перенос отзыва — 30–50%, что отлично работает.
Метрики
| Метрика | Формула | Норма |
|---|---|---|
| Response rate | ответили / спросили | 30–50% |
| NPS | (% промоутеров − % детракторов) × 100 | от 30 для здорового сервиса |
| CSAT | средняя оценка | от 8.5 / 10 |
| Time-to-review | время между услугой и отзывом | менее 24 часов |
| Publish rate | опубликованных / промоутеров | 60–80% |
| Recovery rate | детракторы, ставшие нейтральными | 40–60% |
Топ-5 ошибок
- Просят отзыв через 7 дней после услуги — клиент уже забыл детали.
- Не сегментируют по NPS — публикуют негативы наравне с позитивами.
- Не привязывают отзыв к заказу — невозможно отличить настоящего клиента от подставного.
- Шлют один и тот же текст всем — отвечают 5%.
- Игнорируют негатив или отвечают шаблоном — клиент уходит ещё злее.
Итого
Сбор отзывов через Telegram-бота — самый быстрый путь от услуги до публичного социального доказательства. NPS-шкала + сегментация + автопубликация в канал + эскалация недовольных дают 30–50% response rate, NPS 40–60 в нормальном бизнесе и десятки органических отзывов в неделю на публичных площадках. Главное — спрашивать сразу после услуги и реагировать на негатив в течение часа.
Частые вопросы
Когда лучше всего просить отзыв?
Через 30 минут — 4 часа после оказания услуги, пока эмоции свежие. Для b2b — на следующий рабочий день после демо или внедрения. Через 7+ дней response rate падает в 3 раза. Сценарий триггерится по событию из CRM: «статус сделки = выполнено» → запуск отзыв-бота.
Что делать с откровенно матерными отзывами?
Не публиковать, отправить руководителю на ручной разбор. Никогда не отвечать клиенту в том же тоне — даже в личке бота. Если оскорбления переходят в угрозы — фиксируйте скриншоты на случай претензий через Роспотребнадзор.
Как мотивировать оставить отзыв?
Скидка 5–10% на следующую покупку, бесплатная доставка, баллы лояльности. Не давайте подарок «за положительный отзыв» — это нарушает закон о рекламе. Формулировка «бонус за участие в опросе, независимо от оценки» легальна и работает не хуже.
Сколько вопросов можно задавать в одном опросе?
Максимум 4–5. Каждый дополнительный вопрос снижает completion rate на 10–15%. Ядро — NPS, причина, согласие на публикацию. Остальное (демография, источник) — необязательное, в свободном поле.
Можно ли не показывать отзыв клиенту, если он плохой?
Внутренне — да, оставляйте на ручной модерации. Публично — нет, удаление негатива с площадок типа Яндекс.Карт нарушает их правила. На своём канале вы решаете сами, но если будете публиковать только хорошее, потеряете доверие — аудитория замечает «5 звёзд у всех».
Как считать NPS правильно?
NPS = (% промоутеров − % детракторов) × 100, где промоутеры — оценка 9–10, детракторы — 0–6. Нейтральные (7–8) не учитываются. Норма для retail/b2c — выше 30, для b2b SaaS — выше 40, для премиум-сервисов — выше 60. Считается на ежемесячной выборке от 100 ответов.
Как защититься от накруток конкурентами?
Привязка отзыва к подтверждённому заказу через deeplink с хешем. Дополнительно — проверка tg_id против таблицы клиентов CRM: если юзера нет в базе клиентов, отзыв принимается, но помечается как «непроверенный» и не публикуется автоматически. Так фейки видит только модератор.