Форма відгуку клієнта

Запитайте клієнтів, як усе пройшло: оцінка, що сподобалося і що виправити.

Сайт на Tilda? Вставте код у блок T123 (платний тариф) або підключіть вебхук без коду.

Для чого ця форма

Форми відгуку працюють, коли вони короткі й коли люди вірять, що їх хтось читає. Оцінка дає число, яке можна відстежувати. Два відкриті питання пояснюють, чому саме така оцінка.

Шаблон нікого не змушує називати ім'я. Поля для контактів з'являються лише тоді, коли клієнт погоджується, щоб з ним зв'язалися, тож люди можуть відповідати чесно, не боячись, що їм почнуть телефонувати.

Поля, які мають значення

Як ви оцінюєте свій досвід?
П'ять ступенів, від «Чудово» до «Дуже погано». Легко відповісти й легко порівнювати місяць за місяцем.
Що вам сподобалося?
Показує, що варто зберегти, і дає слова для вашого сайту.
Що нам варто покращити?
Найкорисніше поле форми. Залиште його необов'язковим, щоб відповіді були чесними.
Чи можемо ми зв'язатися з вами щодо відгуку?
Ім'я та email з'являються лише після відповіді «так», тож відгук може залишатися анонімним.

Перегляд

Відгук

Код форми

HTML
<!doctype html>
<html lang="uk">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Форма відгуку клієнта</title>
<style>
  body { font-family: "Segoe UI", sans-serif; color: #12263a; margin: 0; background: #fff; }
  main { max-width: 640px; margin: 0 auto; padding: 32px 20px 64px; }
  h1 { font-size: 28px; font-weight: 650; letter-spacing: -0.02em; line-height: 1.2; }
  h2 { font-size: 18px; margin: 18px 0 0; }
  p { line-height: 1.5; }
  form { display: grid; gap: 14px; position: relative; }
  .field { display: grid; gap: 6px; }
  label span, .check span { font-size: 14px; }
  input, select, textarea { font: inherit; color: inherit; padding: 10px 12px; border: 1px solid #b4bdce; border-radius: 8px; width: 100%; box-sizing: border-box; background: #fff; }
  textarea { min-height: 96px; }
  .check { display: flex; gap: 8px; align-items: flex-start; }
  .check input { width: auto; margin-top: 4px; }
  button { background: #3c4ad8; color: #fff; border: 0; border-radius: 8px; padding: 12px 18px; font: inherit; cursor: pointer; }
  .note { background: #fff6eb; padding: 12px 14px; border-radius: 8px; }
  form [data-show-if] { display: none; }
form:has(select[name="may_contact"] option[value="yes"]:checked) [data-show-if="may_contact"][data-show-equals="yes"] { display: grid; }
</style>
</head>
<body>
<main>
<h1 data-i18n="title">Форма відгуку клієнта</h1>
<p data-i18n="lede">Запитайте клієнтів, як усе пройшло: оцінка, що сподобалося і що виправити.</p>


<form id="fg-form" action="https://formgong.com/submit" method="POST" enctype="multipart/form-data" data-sitekey="" data-lang="uk">
<input type="hidden" name="access_key" value="fk_your_access_key">
<input type="hidden" name="_lang" value="uk">
<div aria-hidden="true" style="position:absolute;inset-inline-start:0;top:0;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)"><label>Leave this field empty<input name="botcheck" tabindex="-1" autocomplete="off"></label></div>
<section><h2 data-i18n="section.feedback">Feedback</h2>
<div class="field"><label for="fg-rating"><span data-i18n="rating">How would you rate your experience?</span></label><select id="fg-rating" name="rating" required><option value="">—</option><option value="5" data-i18n="rating.5">Excellent</option><option value="4" data-i18n="rating.4">Good</option><option value="3" data-i18n="rating.3">Okay</option><option value="2" data-i18n="rating.2">Poor</option><option value="1" data-i18n="rating.1">Very poor</option></select></div>
<div class="field"><label for="fg-liked"><span data-i18n="liked">What did you like?</span></label><textarea id="fg-liked" name="liked" maxlength="1000"></textarea></div>
<div class="field"><label for="fg-improve"><span data-i18n="improve">What should we improve?</span></label><textarea id="fg-improve" name="improve" maxlength="1000"></textarea></div>
<div class="field"><label for="fg-recommend"><span data-i18n="recommend">Would you recommend us to a friend?</span></label><select id="fg-recommend" name="recommend"><option value="">—</option><option value="yes" data-i18n="recommend.yes">Yes</option><option value="no" data-i18n="recommend.no">No</option><option value="not_sure" data-i18n="recommend.not_sure">Not sure</option></select></div>
<div class="field"><label for="fg-may_contact"><span data-i18n="may_contact">May we contact you about your feedback?</span></label><select id="fg-may_contact" name="may_contact"><option value="">—</option><option value="yes" data-i18n="may_contact.yes">Yes</option><option value="no" data-i18n="may_contact.no">No</option></select></div>
<div class="field" data-show-if="may_contact" data-show-equals="yes"><label for="fg-name"><span data-i18n="name">Name</span></label><input id="fg-name" name="name" type="text" maxlength="80" autocomplete="name"></div>
<div class="field" data-show-if="may_contact" data-show-equals="yes"><label for="fg-email"><span data-i18n="email">Email</span></label><input id="fg-email" name="email" type="email" maxlength="120" autocomplete="email"></div></section>
<!-- Set data-sitekey on this form to YOUR_TURNSTILE_SITE_KEY. Required for attachments. -->
<div data-turnstile></div>
<button type="submit" data-i18n="submit">Надіслати</button>
<p data-status role="status"></p>
</form>
</main>
<script type="application/json" id="fg-labels">{"uk":{"title":"Форма відгуку клієнта","lede":"Запитайте клієнтів, як усе пройшло: оцінка, що сподобалося і що виправити.","submit":"Надіслати","thanks":"Надіслано. Дякуємо.","file_too_big":"До 3 файлів, по 5 MiB, разом до 10 MiB.","error":"Не вдалося надіслати. Спробуйте ще раз.","section.feedback":"Відгук","rating":"Як ви оцінюєте свій досвід?","rating.5":"Чудово","rating.4":"Добре","rating.3":"Нормально","rating.2":"Погано","rating.1":"Дуже погано","liked":"Що вам сподобалося?","improve":"Що нам варто покращити?","recommend":"Ви порадили б нас другові?","recommend.yes":"Так","recommend.no":"Ні","recommend.not_sure":"Ще не знаю","may_contact":"Чи можемо ми зв’язатися з вами щодо відгуку?","may_contact.yes":"Так","may_contact.no":"Ні","name":"Ім'я","email":"Електронна пошта"},"en":{"title":"Customer feedback form","lede":"Ask customers how it went: a rating, what worked and what to fix.","submit":"Send","thanks":"Sent. Thank you.","file_too_big":"Up to 3 files, 5 MiB each and 10 MiB combined.","error":"Could not send. Please try again.","section.feedback":"Feedback","rating":"How would you rate your experience?","rating.5":"Excellent","rating.4":"Good","rating.3":"Okay","rating.2":"Poor","rating.1":"Very poor","liked":"What did you like?","improve":"What should we improve?","recommend":"Would you recommend us to a friend?","recommend.yes":"Yes","recommend.no":"No","recommend.not_sure":"Not sure","may_contact":"May we contact you about your feedback?","may_contact.yes":"Yes","may_contact.no":"No","name":"Name","email":"Email"},"pl":{"title":"Formularz opinii klienta","lede":"Zapytaj klientów, jak poszło: ocena, co się udało i co poprawić.","submit":"Wyślij","thanks":"Wysłano. Dziękujemy.","file_too_big":"Do 3 plików, po 5 MiB, łącznie 10 MiB.","error":"Nie udało się wysłać. Spróbuj ponownie.","section.feedback":"Opinia","rating":"Jak oceniasz swoje doświadczenie?","rating.5":"Świetnie","rating.4":"Dobrze","rating.3":"W porządku","rating.2":"Słabo","rating.1":"Bardzo słabo","liked":"Co Ci się podobało?","improve":"Co powinniśmy poprawić?","recommend":"Czy polecisz nas znajomemu?","recommend.yes":"Tak","recommend.no":"Nie","recommend.not_sure":"Nie wiem","may_contact":"Czy możemy się z Tobą skontaktować w sprawie opinii?","may_contact.yes":"Tak","may_contact.no":"Nie","name":"Imię","email":"E-mail"},"tr":{"title":"Müşteri geri bildirim formu","lede":"Müşterilere nasıl geçtiğini sorun: bir puan, neyin iyi gittiği ve neyin düzeltilmesi gerektiği.","submit":"Gönder","thanks":"Gönderildi. Teşekkürler.","file_too_big":"En fazla 3 dosya, dosya başına 5 MiB, toplam 10 MiB.","error":"Gönderilemedi. Lütfen tekrar deneyin.","section.feedback":"Geri bildirim","rating":"Deneyiminizi nasıl değerlendirirsiniz?","rating.5":"Mükemmel","rating.4":"İyi","rating.3":"Fena değil","rating.2":"Kötü","rating.1":"Çok kötü","liked":"Neyi beğendiniz?","improve":"Neyi geliştirmeliyiz?","recommend":"Bizi bir arkadaşınıza önerir misiniz?","recommend.yes":"Evet","recommend.no":"Hayır","recommend.not_sure":"Emin değilim","may_contact":"Geri bildiriminiz hakkında sizinle iletişime geçebilir miyiz?","may_contact.yes":"Evet","may_contact.no":"Hayır","name":"Ad","email":"E-posta"},"ar":{"title":"نموذج آراء العملاء","lede":"اسأل العملاء عن تجربتهم: تقييم، وما الذي نجح، وما الذي يجب إصلاحه.","submit":"إرسال","thanks":"تم الإرسال. شكرًا لك.","file_too_big":"حتى 3 ملفات، 5 MiB لكل ملف و10 MiB إجمالًا.","error":"تعذّر الإرسال. يُرجى المحاولة مرة أخرى.","section.feedback":"الرأي","rating":"كيف تقيّم تجربتك؟","rating.5":"ممتاز","rating.4":"جيد","rating.3":"مقبول","rating.2":"سيئ","rating.1":"سيئ جدًا","liked":"ما الذي أعجبك؟","improve":"ما الذي يجب أن نحسّنه؟","recommend":"هل توصي بنا لصديق؟","recommend.yes":"نعم","recommend.no":"لا","recommend.not_sure":"لست متأكدًا","may_contact":"هل يمكننا التواصل معك بشأن رأيك؟","may_contact.yes":"نعم","may_contact.no":"لا","name":"الاسم","email":"البريد الإلكتروني"},"he":{"title":"טופס משוב לקוחות","lede":"שאלו את הלקוחות איך היה: דירוג, מה עבד ומה צריך לתקן.","submit":"שליחה","thanks":"נשלח. תודה.","file_too_big":"עד 3 קבצים, 5 MiB לכל קובץ ו-10 MiB בסך הכול.","error":"השליחה נכשלה. נסו שוב.","section.feedback":"משוב","rating":"איך הייתם מדרגים את החוויה?","rating.5":"מצוין","rating.4":"טוב","rating.3":"סביר","rating.2":"גרוע","rating.1":"גרוע מאוד","liked":"מה אהבתם?","improve":"מה כדאי לנו לשפר?","recommend":"הייתם ממליצים עלינו לחבר?","recommend.yes":"כן","recommend.no":"לא","recommend.not_sure":"עוד לא יודע/ת","may_contact":"אפשר ליצור איתכם קשר לגבי המשוב?","may_contact.yes":"כן","may_contact.no":"לא","name":"שם","email":"אימייל"},"es":{"title":"Formulario de opinión de clientes","lede":"Pregunta a tus clientes cómo les fue: una valoración, qué funcionó y qué mejorar.","submit":"Enviar","thanks":"Enviado. Gracias.","file_too_big":"Hasta 3 archivos, 5 MiB cada uno y 10 MiB en total.","error":"No se pudo enviar. Inténtalo de nuevo.","section.feedback":"Opinión","rating":"¿Cómo valorarías tu experiencia?","rating.5":"Excelente","rating.4":"Buena","rating.3":"Normal","rating.2":"Mala","rating.1":"Muy mala","liked":"¿Qué te gustó?","improve":"¿Qué deberíamos mejorar?","recommend":"¿Nos recomendarías a un amigo?","recommend.yes":"Sí","recommend.no":"No","recommend.not_sure":"No lo sé","may_contact":"¿Podemos contactarte sobre tu opinión?","may_contact.yes":"Sí","may_contact.no":"No","name":"Nombre","email":"Correo electrónico"},"fr":{"title":"Formulaire d’avis client","lede":"Demandez à vos clients comment ça s’est passé : une note, ce qui a plu et ce qu’il faut corriger.","submit":"Envoyer","thanks":"Envoyé. Merci.","file_too_big":"Jusqu’à 3 fichiers, 5 Mio chacun et 10 Mio au total.","error":"Envoi impossible. Veuillez réessayer.","section.feedback":"Avis","rating":"Comment évaluez-vous votre expérience ?","rating.5":"Excellent","rating.4":"Bien","rating.3":"Correct","rating.2":"Médiocre","rating.1":"Très mauvais","liked":"Qu’avez-vous apprécié ?","improve":"Que devrions-nous améliorer ?","recommend":"Nous recommanderiez-vous à un ami ?","recommend.yes":"Oui","recommend.no":"Non","recommend.not_sure":"Je ne sais pas encore","may_contact":"Pouvons-nous vous contacter au sujet de votre avis ?","may_contact.yes":"Oui","may_contact.no":"Non","name":"Nom","email":"E-mail"},"pt":{"title":"Formulário de feedback de clientes","lede":"Pergunte aos clientes como correu: uma avaliação, o que funcionou e o que corrigir.","submit":"Enviar","thanks":"Enviado. Obrigado.","file_too_big":"Até 3 ficheiros, 5 MiB cada e 10 MiB no total.","error":"Não foi possível enviar. Tente novamente.","section.feedback":"Feedback","rating":"Como avalia a sua experiência?","rating.5":"Excelente","rating.4":"Boa","rating.3":"Razoável","rating.2":"Fraca","rating.1":"Muito fraca","liked":"O que gostou?","improve":"O que devemos melhorar?","recommend":"Recomendaria-nos a um amigo?","recommend.yes":"Sim","recommend.no":"Não","recommend.not_sure":"Ainda não sei","may_contact":"Podemos contactá-lo sobre o seu feedback?","may_contact.yes":"Sim","may_contact.no":"Não","name":"Nome","email":"Email"},"hi":{"title":"ग्राहक फ़ीडबैक फ़ॉर्म","lede":"ग्राहकों से पूछें कि अनुभव कैसा रहा: रेटिंग, क्या अच्छा लगा और क्या सुधारना है।","submit":"भेजें","thanks":"भेज दिया गया। धन्यवाद।","file_too_big":"अधिकतम 3 फ़ाइलें, हर फ़ाइल 5 MiB तक और कुल 10 MiB।","error":"भेजा नहीं जा सका। कृपया फिर से कोशिश करें।","section.feedback":"फ़ीडबैक","rating":"आप अपने अनुभव को कैसे रेट करेंगे?","rating.5":"बेहतरीन","rating.4":"अच्छा","rating.3":"ठीक-ठाक","rating.2":"ख़राब","rating.1":"बहुत ख़राब","liked":"आपको क्या अच्छा लगा?","improve":"हमें क्या सुधारना चाहिए?","recommend":"क्या आप हमें किसी दोस्त को सुझाएँगे?","recommend.yes":"हाँ","recommend.no":"नहीं","recommend.not_sure":"पता नहीं","may_contact":"क्या हम आपके फ़ीडबैक के बारे में आपसे संपर्क कर सकते हैं?","may_contact.yes":"हाँ","may_contact.no":"नहीं","name":"नाम","email":"ईमेल"},"ja":{"title":"お客様アンケート(感想)フォーム","lede":"お客様にご感想を伺います。評価、良かった点、改善点。","submit":"送信","thanks":"送信しました。ありがとうございます。","file_too_big":"ファイルは3つまで、1つ5 MiB、合計10 MiBまでです。","error":"送信できませんでした。もう一度お試しください。","section.feedback":"ご感想","rating":"全体の満足度はいかがでしたか?","rating.5":"とても良い","rating.4":"良い","rating.3":"普通","rating.2":"悪い","rating.1":"とても悪い","liked":"良かった点を教えてください","improve":"改善すべき点を教えてください","recommend":"ご友人に勧めたいと思いますか?","recommend.yes":"はい","recommend.no":"いいえ","recommend.not_sure":"未定","may_contact":"ご感想についてご連絡してもよろしいですか?","may_contact.yes":"はい","may_contact.no":"いいえ","name":"お名前","email":"メールアドレス"},"de":{"title":"Kundenfeedback-Formular","lede":"Fragen Sie Ihre Kunden, wie es war: eine Bewertung, was gut lief und was besser werden muss.","submit":"Senden","thanks":"Gesendet. Vielen Dank.","file_too_big":"Bis zu 3 Dateien, je 5 MiB und insgesamt 10 MiB.","error":"Senden fehlgeschlagen. Bitte versuchen Sie es erneut.","section.feedback":"Feedback","rating":"Wie bewerten Sie Ihre Erfahrung?","rating.5":"Ausgezeichnet","rating.4":"Gut","rating.3":"In Ordnung","rating.2":"Schlecht","rating.1":"Sehr schlecht","liked":"Was hat Ihnen gefallen?","improve":"Was sollten wir verbessern?","recommend":"Würden Sie uns einem Freund empfehlen?","recommend.yes":"Ja","recommend.no":"Nein","recommend.not_sure":"Noch unklar","may_contact":"Dürfen wir Sie zu Ihrem Feedback kontaktieren?","may_contact.yes":"Ja","may_contact.no":"Nein","name":"Name","email":"E-Mail"}}</script>
<script>
function mountCaptcha(node, siteKey) {
  if (!node || !siteKey) return () => {};
  let disposed = false;
  let widget;
  function render() {
    if (disposed || !window.turnstile) return;
    window.turnstile.ready(() => {
      if (disposed) return;
      widget = window.turnstile.render(node, { sitekey: siteKey, language: node.dataset.language || document.documentElement.lang || "auto" });
      node.dataset.widgetId = widget;
    });
  }
  if (window.turnstile) render();
  else {
    let script = document.querySelector('script[src^="https://challenges.cloudflare.com/turnstile/v0/api.js"]');
    if (!script) {
      script = document.createElement("script");
      script.src = "https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit";
      script.async = true;
      document.head.appendChild(script);
    }
    script.addEventListener("load", render, { once: true });
  }
  return () => { disposed = true; if (widget !== undefined) window.turnstile?.remove(widget); };
}
function resetCaptcha(form) {
  const widget = form.querySelector("[data-turnstile]")?.dataset.widgetId;
  if (widget !== undefined) window.turnstile?.reset(widget);
}
(function () {
  var MAX = 5242880;
  var form = document.getElementById("fg-form");
  var packNode = document.getElementById("fg-labels");
  if (!form || !packNode) return;
  var pack = JSON.parse(packNode.textContent);
  function code() {
    var q = new URLSearchParams(location.search).get("lang") || "";
    // ?lang= preview override, then the form language chosen when copying, then the page and browser.
    var raw = (q || form.getAttribute("data-lang") || document.documentElement.lang || (navigator.language || "en")).slice(0, 2).toLowerCase();
    return pack[raw] ? raw : "en";
  }
  function apply() {
    var dict = pack[code()];
    document.querySelectorAll("[data-i18n]").forEach(function (node) {
      var key = node.getAttribute("data-i18n");
      if (key && typeof dict[key] === "string") node.textContent = dict[key];
    });
  }
  apply();
  var status = form.querySelector("[data-status]");
  form.addEventListener("submit", function (event) {
    event.preventDefault();
    var dict = pack[code()];
    var body = new FormData(form);
    var files = Array.from(body.values()).filter(function (value) { return value instanceof File && value.size; });
    if (files.length > 3 || files.some(function (file) { return file.size > MAX; }) || files.reduce(function (sum,file) { return sum + file.size; },0) > 10 * 1024 * 1024) {
      if (status) status.textContent = dict.file_too_big;
      return;
    }
    var button = form.querySelector("button[type=submit]");
    if (button) button.disabled = true;
    fetch(form.action, { method: "POST", headers: { Accept: "application/json" }, body: body })
      .then(function (response) { return response.json(); }).then(function (result) {
        if (status) status.textContent = result && result.success ? dict.thanks : ((result && result.message) || dict.error);
      }).catch(function () { if (status) status.textContent = dict.error; })
      .finally(function () { if (button) button.disabled = false; resetCaptcha(form); });
  });
  mountCaptcha(form.querySelector("[data-turnstile]"), form.dataset.sitekey);

})();
</script>
</body>
</html>

Код для інших фреймворків

React
Vue
Svelte

Як отримувати більше заявок

  • Питайте одразу після послуги, поки враження свіжі.
  • Відповідайте протягом доби на кожну погану оцінку, де клієнт залишив email.
  • Розповідайте клієнтам, що ви змінили завдяки їхнім відгукам.

Відповідайте на кожну заявку

Надсилайте погані оцінки в Telegram, щоб реагувати того ж дня. Статуси показують, які відгуки вже хтось опрацював. З необов'язковим скриптом аналітики Formgong також рахує, скільки людей обрали кожну оцінку.

Питання та відповіді

Чи може відгук бути анонімним?

Так. Ім'я та email необов'язкові й з'являються лише тоді, коли клієнт погоджується, щоб з ним зв'язалися.

Чи можна показувати хороші відгуки на сайті?

Спочатку запитайте клієнта. Для публічних відгуків із зірковою оцінкою скористайтеся функцією відгуків: ви схвалюєте кожен відгук, перш ніж він з'явиться на сайті.

Де зберігаються відповіді?

У сховищі Formgong в ЄС, а також надходять вам на email і в Telegram. На безкоштовному тарифі вони зберігаються 30 днів.