SETTINGS
設定の書き方
設定に書いた内容は、そのまま判定の材料として読まれます。「うちはどんな会社で、何を受け取りたくて、何が要らないか」が伝わるほど、問い合わせと売り込みの分かれ方が安定します。何を書けばいいか迷ったときの手引きです。
1歓迎する問い合わせ(必須)#
いちばん効く欄です。受け取りたい用件を、名詞で並べてください。会社の紹介文ではなく「訪問者が何をしに来たら歓迎か」の一覧です。1 行 1 種類で 3〜6 行あれば十分です。
こう書く — 用件が名詞で並んでいる
こう書かない — 会社紹介になっていて、用件が分からない
- 迷いやすいものこそ書く
採用応募・取材・登壇依頼・既存のお客様からの連絡は、書いておかないと売り込みに見えることがあります。 - 「スパム以外」とは書かない
何が歓迎かの手がかりが無くなり、本文の雰囲気だけで判断することになります。 - 要らないものはここに書かない
断りたいものは次の「自然文のポリシー」に分けて書くと、両方がはっきりします。
2自然文のポリシー(任意)#
歓迎する問い合わせが「受け取りたいもの」なら、こちらは境界線です。売り込みに見えるが受け取りたいもの、逆に丁寧でも要らないものを、ふつうの文章で書いてください。
SES・常駐エンジニアの人材提案は不要。
開発パートナーとしての協業の打診は見たい。
既存のお客様からの不具合連絡は最優先で受け取りたい。ジャンルまるごとで決まっている話(「採用支援の売り込みは全部いらない」など)は、文章よりも「このジャンルは売り込みでも受け取る」のチェックボックスの方が確実です。ポリシーは文章として読まれるぶん、揺れることがあります。
3このジャンルは売り込みでも受け取る#
売り込みは次のジャンルに分類されます。チェックを付けたジャンルは、売り込みだと判定されても必ず問い合わせ一覧に入り、通知されます。「開発の協業の話だけは見たい」のように、例外を機械的に決めたいときに使ってください。
4サービス名と通知#
- サービス名
判定のときに「誰宛ての問い合わせか」として読まれます。正式名称に加えて、よく呼ばれる屋号や英語表記も入れておくと、本文中の呼びかけと結び付きやすくなります。 - Webhook URL
入れておくと、問い合わせ一覧に入ったものが設定した Webhook に送られます。未設定でも取りこぼしはありませんが、画面を見に行くまで気付けません(httpsの URL のみ)。Pro プランのみSlack への通知は Pro プランの機能です。汎用 Webhook は Free でも使えます。
Pro プランのみスプレッドシートへの追記は Pro プランの機能です。汎用 Webhook は Free でも使えます。
- 通知先のメールアドレス
問い合わせ一覧に入ったものがあると、「届きました」という知らせと管理画面へのリンクだけをメールで送ります。問い合わせの内容はメールに載せないので、中身は管理画面で確認してください。カンマ区切りで 5 件まで入れられます。Pro プランのみメール通知は Pro プランの機能です。汎用 Webhook は Free でも使えます。
- 署名シークレット
Webhook URL を保存すると自動で払い出されます。設定画面に表示されるので、受け取り側の環境変数(例:INQBOX_WEBHOOK_SECRET)に入れてください。通知にはX-Inqbox-TimestampとX-Inqbox-Signature(sha256=+HMAC-SHA256(シークレット, "タイムスタンプ.ボディ")の 16 進数)が付きます。漏れたときは設定画面で再生成できますが、古い値で検証している受け取り側は署名エラーになります。
// 受け取り側(Next.js の route handler の例)
import crypto from "node:crypto";
export async function POST(req) {
// 生のまま使う(JSON.parse して再シリアライズすると署名が合わなくなる)
const body = await req.text();
const timestamp = req.headers.get("X-Inqbox-Timestamp") ?? "";
const signature = req.headers.get("X-Inqbox-Signature") ?? "";
const secret = process.env.INQBOX_WEBHOOK_SECRET;
if (!secret) return new Response("misconfigured", { status: 500 });
// 古い通知の使い回し(リプレイ)を弾く
// Number.isFinite を先に見る(数字でないヘッダは NaN になり、比較が必ず false になる)
const sentAt = Number(timestamp);
if (!Number.isFinite(sentAt) || Math.abs(Date.now() / 1000 - sentAt) > 300) {
return new Response("stale timestamp", { status: 400 });
}
const expected =
"sha256=" +
crypto
.createHmac("sha256", secret)
.update(timestamp + "." + body)
.digest("hex");
// timingSafeEqual はバイト長が違うと throw するので、先に Buffer にして長さを比べる
// (文字数で比べると、同じ文字数でもバイト長が違う非 ASCII のヘッダで throw する)
const sent = Buffer.from(signature);
const want = Buffer.from(expected);
if (sent.length !== want.length || !crypto.timingSafeEqual(sent, want)) {
return new Response("invalid signature", { status: 401 });
}
// 重い処理は待たずに即 200 を返す(タイムアウトすると通知は失敗扱いになる)
// handleInquiry は受け取り側で用意する自前の処理(この例には含まれません)
void handleInquiry(JSON.parse(body));
return new Response(null, { status: 200 });
}検証は次の 4 点を守ってください。① 署名は await req.text() で取った生のボディに対して計算する(JSON にしてから作り直すと文字列が変わって一致しません)。② X-Inqbox-Timestamp も署名対象に含まれるので、現在時刻から ±300 秒を超えるものは古い通知の使い回しとして弾く。③ 比較は crypto.timingSafeEqual で行う(バイト長が違うと例外になるため、先に Buffer にしてバイト長を比べる)。④ 重い処理は待たずに即 200 を返す。
5どう振り分けられるか#
判定は 1 通ごとにその場で行われます。材料は次の 3 つだけで、過去の問い合わせも、他社の設定も参照しません。
- 設定
歓迎する問い合わせ・ポリシー・ジャンルの例外 - 問い合わせ
本文と、送信前に見ていたページ - フォームの使われ方
選択欄・件名・きっかけ・同じ回線からの連投
判定
- 問い合わせ一覧
- 確認待ち
- スパム一覧
振り分けを手で直した記録は、左の「設定」には戻りません(訂正しても学習はしません を参照)。
行き先は、上から順に当てはまったところで決まります。
| こういうとき | 行き先 | 補足 |
|---|---|---|
| チェックしたジャンルだと判定された | 問い合わせ一覧 | いちばん強い。ルールや売り込み度より優先されます |
| フォームの不審な使われ方に当たった | スパム一覧 | 選択欄を 1 つも触っていない、件名が異様に長い、きっかけを全部チェックしている |
| 売り込み度 80% 以上 | スパム一覧 | 売り込みだと言い切れる |
| 売り込み度 50% 〜 80% | 確認待ち | 迷ったもの。ここが多いなら設定を足す合図 |
| 売り込み度 50% 未満 | 問い合わせ一覧 | ふつうの問い合わせ |
| 判定そのものが失敗した | 問い合わせ一覧 | 取りこぼさない側に倒します(フォームのルールに当たっていたときだけスパム一覧) |
設定を直したあとの判定から反映されます。過去の問い合わせは振り分け直されません。
6うまく分かれないときは#
- 確認待ちが多い
迷われている証拠です。確認待ちに溜まったものを読んで、歓迎する問い合わせに足りない用件を書き足してください。 - 欲しい問い合わせがスパム一覧に入る
その用件を歓迎する問い合わせに 1 行足すのが先です。ジャンルでまとめて決められるなら、チェックを付ける方が確実です。 - 売り込みが問い合わせ一覧に入る
ポリシーに「◯◯の提案は不要」と 1 行足してください。あわせて、そのジャンルのチェックが付いたままになっていないか確認を。
7訂正しても学習はしません#
間違った振り分けは画面から直せますが、直した結果が次の判定に反映されることはありません。同じ文面がまた届けば、また同じところに入ります。判定を変えたいときに直すのは、訂正ではなく設定です。
- 訂正でできること
その 1 件の行き先を正すことと、ダッシュボードに「どれだけ直したか」を残すことです。訂正が増えている方向(問い合わせ↔スパム)が、設定のどこを足せばいいかの手がかりになります。 - 設定でできること
以後の判定が変わります。歓迎する問い合わせに 1 行足す、ポリシーに境界線を書く、ジャンルにチェックを付ける — 効き方が強い順にこの 3 つです。 - 過去の問い合わせは直りません
設定を変えても、すでに届いたものが振り分け直されることはありません。溜まった確認待ちは手で見てください。
学習しない代わりに、判定は毎回同じ材料だけを読みます。設定を戻せば判定も戻るので、書き換えて様子を見る、という試し方ができます。
設定は設定画面から変更できます。フォームの見た目については埋め込みフォームのカスタマイズをどうぞ。