Реализация CSAT-опроса (Customer Satisfaction) на сайте

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Реализация CSAT-опроса (Customer Satisfaction) на сайте
Простая
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Реализация CSAT-опроса на сайте

CSAT (Customer Satisfaction Score) измеряет удовлетворённость конкретным взаимодействием: «Насколько вы довольны этим заказом/поддержкой/функцией?» Обычно шкала 1–5 со смайлами или звёздами. CSAT = (довольные / всего) × 100%.

Отличие от NPS

CSAT — точечная оценка транзакции. NPS — долгосрочная лояльность. Собирают CSAT сразу после события: закрытие тикета поддержки, доставка заказа, завершение онбординга.

API и модель

Schema::create('csat_responses', function (Blueprint $table) {
    $table->id();
    $table->foreignId('user_id')->nullable()->constrained()->nullOnDelete();
    $table->morphs('subject');  // Полиморфная связь: Order, SupportTicket, Feature
    $table->tinyInteger('score')->unsigned();  // 1-5
    $table->text('comment')->nullable();
    $table->timestamps();
});

// CsatController
public function store(Request $request): JsonResponse
{
    $request->validate([
        'score'        => 'required|integer|min:1|max:5',
        'subject_type' => 'required|string|in:order,ticket',
        'subject_id'   => 'required|integer',
        'comment'      => 'nullable|string|max:500',
    ]);

    CsatResponse::updateOrCreate(
        ['user_id' => auth()->id(), 'subject_type' => $request->subject_type, 'subject_id' => $request->subject_id],
        ['score' => $request->score, 'comment' => $request->comment]
    );

    return response()->json(['success' => true]);
}

Frontend: звёздный виджет

const STARS = [1, 2, 3, 4, 5];
const LABELS = ['Ужасно', 'Плохо', 'Нормально', 'Хорошо', 'Отлично'];

export function CsatWidget({ subjectType, subjectId }: CsatProps) {
  const [hover, setHover] = useState(0);
  const [score, setScore] = useState(0);
  const [submitted, setSubmitted] = useState(false);

  const submit = async (s: number) => {
    setScore(s);
    await fetch('/api/csat', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ score: s, subject_type: subjectType, subject_id: subjectId }),
    });
    setSubmitted(true);
  };

  if (submitted) return <p className="text-sm text-gray-500">Спасибо за оценку!</p>;

  return (
    <div className="flex items-center gap-1">
      <span className="text-sm text-gray-600 mr-2">Оцените качество:</span>
      {STARS.map(s => (
        <button key={s} title={LABELS[s - 1]}
          onMouseEnter={() => setHover(s)} onMouseLeave={() => setHover(0)}
          onClick={() => submit(s)}
          className={`text-2xl ${(hover || score) >= s ? 'text-yellow-400' : 'text-gray-300'}`}>
          ★
        </button>
      ))}
    </div>
  );
}

Триггер по email после закрытия тикета

// В Observer или Listener на SupportTicket closed event
public function handle(TicketClosed $event): void
{
    Mail::to($event->ticket->user->email)
        ->later(now()->addMinutes(10), new CsatRequestMail($event->ticket));
}

В письме — прямые ссылки с оценкой: https://site.com/csat?ticket=123&score=5&token=HMAC.

Сроки

CSAT-виджет с триггером по событию и API: 1–2 рабочих дня.