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 へお書きください。
この二段の質問ではなく、長い業種別フォームが必要な場合は、ハブの業種別テンプレートを使ってください。
プレビュー
フォームのコード
<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 で送る
<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 は一つの送信を受け取ります。コメントへ進んでも送信は起きません。
メールが任意なのはなぜですか?
点数だけを共有し、アドレスを残さない人もいます。返信の経路が必要なら、ラベルにその旨を書き、欄を必須にしてください。