NPSアンケートフォーム

おすすめする可能性を 0 から 10 で聞き、任意でコメントを受けます。送信は1回。JavaScript があるときは2段階です。

Tilda をお使いですか?有料プランの T123 ブロックに貼るか、ノーコードの Webhookを使います。

コピーする内容

このスターターは、訪問者があなたを勧める可能性を 0 から 10 の尺度で尋ね、そのあと任意のコメントを受け付けます。

これは訪問者へのアンケートです。Formgong の評価ではなく、このサイトは製品の点数を公開していません。

JavaScript がある場合、コメントは二段目にあります。スクリプトは、点数が選ばれたあとだけその段を表示します。

JavaScript がない場合、noscript 内の小さなスタイルが両方の段を一度に表示します。訪問者は、それでも一つのフォームを送信できます。

POST は最後に一度だけです。最初の段は、途中の送信を送りません。

Telegram に表示されるフィールド

点数は score という名前のラジオグループです。Telegram は score を表示し、そのあと 0 から 10 の数字を表示します。

コメント欄の名前は comment です。メールは任意で、名前は email です。アドレスが残っていれば返信できます。

score という名前のグループを二つ置かないでください。同じ名前のラジオは一つの回答です。

ハニーポット botcheck は含まれており、空で、画面の外にあります。埋まったハニーポットはスパムであり、配信されません。

追加スニペットは、段のあと、同じ回答を JSON として fetch で送ります。フォーム内のアクセスキーは、それでも必要です。

Turnstile は、有効にすることを選び、サイトキーを貼るまでコメントの中に残ります。YOUR_TURNSTILE_SITE_KEY はプレースホルダであり、動くキーではありません。

このテンプレートが主張しないこと

テンプレートは推奨者指数も、グラフも、基準値も計算しません。数字は受信箱か Telegram で読んでください。

リードのスコアリングはせず、回答をモデルへ送りません。数字はただのフィールドです。

無料プランは送信を 30 日保持し、月 300 件を受け付けます。Telegram はすぐ届きます。無料プランでも送信ごとにメールが届きます。

保存先は EU です。運営者は Formgong です。製品については support@formgong.com へお書きください。

この二段の質問ではなく、長い業種別フォームが必要な場合は、ハブの業種別テンプレートを使ってください。

プレビュー

おすすめする可能性はどのくらいですか?

低い · 高い

フォームのコード

HTML
<form id="fg-nps" action="https://formgong.com/submit" method="POST" style="position:relative">
  <input type="hidden" name="access_key" value="fk_your_access_key">
  <input type="hidden" name="_lang" value="ja">
  <fieldset data-step="1">
    <legend>おすすめする可能性はどのくらいですか?</legend>
    <p><span>低い</span> <span>高い</span></p>
      <label><input type="radio" name="score" value="0" required> 0</label>
      <label><input type="radio" name="score" value="1" required> 1</label>
      <label><input type="radio" name="score" value="2" required> 2</label>
      <label><input type="radio" name="score" value="3" required> 3</label>
      <label><input type="radio" name="score" value="4" required> 4</label>
      <label><input type="radio" name="score" value="5" required> 5</label>
      <label><input type="radio" name="score" value="6" required> 6</label>
      <label><input type="radio" name="score" value="7" required> 7</label>
      <label><input type="radio" name="score" value="8" required> 8</label>
      <label><input type="radio" name="score" value="9" required> 9</label>
      <label><input type="radio" name="score" value="10" required> 10</label>
    <button type="button" data-next>次へ</button>
  </fieldset>
  <fieldset data-step="2" hidden>
    <label>伝えておきたいことはありますか? <textarea name="comment"></textarea></label>
    <label>メールアドレス <input type="email" name="email" autocomplete="email"></label>
    <button type="button" data-back>戻る</button>
    <button type="submit">送信</button>
  </fieldset>
  <div aria-hidden="true" style="position:absolute;inset-inline-start:0;top:0;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)">
  <label>この欄は空のままにしてください <input type="text" name="botcheck" tabindex="-1" autocomplete="off"></label>
</div>
  <!--
任意です。このフォームで Turnstile をオンにしてから、このコメント記号を外し、サイトキーを貼ってください。
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<div class="cf-turnstile" data-sitekey="YOUR_TURNSTILE_SITE_KEY" data-language="ja"></div>
-->
</form>
<noscript><style>[data-step]{display:block}</style></noscript>
<script>
(function () {
  var form = document.getElementById("fg-nps");
  if (!form) return;
  var steps = form.querySelectorAll("[data-step]");
  function show(index) {
    steps.forEach(function (step, i) { step.hidden = i !== index; });
  }
  var next = form.querySelector("[data-next]");
  var back = form.querySelector("[data-back]");
  if (next) next.addEventListener("click", function () {
    var picked = form.querySelector('input[name="score"]:checked');
    if (!picked) return;
    show(1);
  });
  if (back) back.addEventListener("click", function () { show(0); });
})();
</script>
同じ回答を1回の JSON fetch で送る
同じ回答を1回の JSON fetch で送る
<form id="fg-nps" action="https://formgong.com/submit" method="POST" style="position:relative">
  <input type="hidden" name="access_key" value="fk_your_access_key">
  <input type="hidden" name="_lang" value="ja">
  <fieldset data-step="1">
    <legend>おすすめする可能性はどのくらいですか?</legend>
    <p><span>低い</span> <span>高い</span></p>
      <label><input type="radio" name="score" value="0" required> 0</label>
      <label><input type="radio" name="score" value="1" required> 1</label>
      <label><input type="radio" name="score" value="2" required> 2</label>
      <label><input type="radio" name="score" value="3" required> 3</label>
      <label><input type="radio" name="score" value="4" required> 4</label>
      <label><input type="radio" name="score" value="5" required> 5</label>
      <label><input type="radio" name="score" value="6" required> 6</label>
      <label><input type="radio" name="score" value="7" required> 7</label>
      <label><input type="radio" name="score" value="8" required> 8</label>
      <label><input type="radio" name="score" value="9" required> 9</label>
      <label><input type="radio" name="score" value="10" required> 10</label>
    <button type="button" data-next>次へ</button>
  </fieldset>
  <fieldset data-step="2" hidden>
    <label>伝えておきたいことはありますか? <textarea name="comment"></textarea></label>
    <label>メールアドレス <input type="email" name="email" autocomplete="email"></label>
    <button type="button" data-back>戻る</button>
    <button type="submit">送信</button>
  </fieldset>
  <div aria-hidden="true" style="position:absolute;inset-inline-start:0;top:0;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)">
  <label>この欄は空のままにしてください <input type="text" name="botcheck" tabindex="-1" autocomplete="off"></label>
</div>
  <!--
任意です。このフォームで Turnstile をオンにしてから、このコメント記号を外し、サイトキーを貼ってください。
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<div class="cf-turnstile" data-sitekey="YOUR_TURNSTILE_SITE_KEY" data-language="ja"></div>
-->
</form>
<noscript><style>[data-step]{display:block}</style></noscript>
<script>
(function () {
  var form = document.getElementById("fg-nps");
  if (!form) return;
  var steps = form.querySelectorAll("[data-step]");
  function show(index) {
    steps.forEach(function (step, i) { step.hidden = i !== index; });
  }
  var next = form.querySelector("[data-next]");
  var back = form.querySelector("[data-back]");
  if (next) next.addEventListener("click", function () {
    var picked = form.querySelector('input[name="score"]:checked');
    if (!picked) return;
    show(1);
  });
  if (back) back.addEventListener("click", function () { show(0); });
})();
</script>
<script>
(function () {
  var form = document.getElementById("fg-nps");
  if (!form) return;
  var status = document.createElement("p");
  status.setAttribute("role", "status");
  form.appendChild(status);
  form.addEventListener("submit", function (event) {
    event.preventDefault();
    var data = Object.fromEntries(new FormData(form));
    fetch("https://formgong.com/submit", {
      method: "POST",
      headers: { "Content-Type": "application/json", Accept: "application/json" },
      body: JSON.stringify(data)
    }).then(function (res) { return res.json(); }).then(function (result) {
      status.textContent = result && result.success ? (result.message || "送信しました。ありがとうございます。") : ((result && result.message) || "送信できませんでした。もう一度お試しください。");
      if (result && result.success) form.reset();
    }).catch(function () {
      status.textContent = "送信できませんでした。もう一度お試しください。";
    });
  });
})();
</script>

よくある質問

0 は低い側ですか?

はい。ラジオは 0 から 10 まで並びます。ラベルが、どちらが低くどちらが高いかを示します。保存される値は数字です。

コメントを必須にできますか?

textarea に required 属性を追加できます。このスターターでは任意のままにしてあり、点数だけでも送れます。

最初の段は何かを保存しますか?

いいえ。フォームが送信されたとき、Formgong は一つの送信を受け取ります。コメントへ進んでも送信は起きません。

メールが任意なのはなぜですか?

点数だけを共有し、アドレスを残さない人もいます。返信の経路が必要なら、ラベルにその旨を書き、欄を必須にしてください。